diff --git a/src/static/style.css b/src/static/style.css index a2282ef..7a980f7 100644 --- a/src/static/style.css +++ b/src/static/style.css @@ -1,96 +1,135 @@ -/* other styles are in magic.css */ -/* ========== GRID LAYOUT ========== */ +/* Modern UI refresh */ + +:root { + --bg: #0b1020; + --bg-soft: #0f172a; + --surface: #111827; + --surface-2: #0f172a; + --text: #e5e7eb; + --muted: #9ca3af; + --ring: #60a5fa; + --primary: #6366f1; + --primary-600: #4f46e5; + --success: #10b981; + --danger: #ef4444; + --warning: #f59e0b; +} + +* { box-sizing: border-box; } + +html, body { + margin: 0; + padding: 0; + background: linear-gradient(180deg, var(--bg), var(--bg-soft)); + color: var(--text); + font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, Helvetica Neue, Arial, "Apple Color Emoji", "Segoe UI Emoji"; +} + +body { + max-width: 1200px; + margin: 0 auto; + padding: 24px 16px 64px; +} + +h1 { + font-size: 1.75rem; + line-height: 2rem; + margin: 0 0 16px 0; + font-weight: 700; +} + +/* Layout */ .results { display: grid; - grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); - gap: 1em; - margin-top: 20px; + grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); + gap: 16px; + margin-top: 16px; } -/* Responsive: show 1 per row on small screens */ -@media screen and (max-width: 768px) { - .results { - grid-template-columns: 1fr; - } +@media (max-width: 768px) { + .results { grid-template-columns: 1fr; } } -/* ========== CARD STYLING ========== */ +/* Cards */ .card { position: relative; padding: 10px; - border: 1px solid #ccc; - background: #fafafa; + border: 1px solid rgba(255,255,255,0.06); + background: linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0.02)); + backdrop-filter: blur(6px); text-align: center; - transition: box-shadow 0.2s transform 0.2s; - border-radius: 10px; + transition: box-shadow 0.2s ease, transform 0.2s ease, border-color 0.2s ease; + border-radius: 14px; + box-shadow: + 0 1px 1px rgba(0,0,0,0.08), + 0 10px 20px rgba(0,0,0,0.15); } .card:hover { - box-shadow: 0 0 10px #aaa; - transform: scale(1.1); - /* pop out by 10% */ - z-index: 2; - /* ensure it appears above others */ + box-shadow: + 0 1px 1px rgba(0,0,0,0.08), + 0 16px 32px rgba(0,0,0,0.25); + transform: translateY(-2px) scale(1.02); + z-index: 2; } -.card img { - width: 100%; - height: auto; -} +.card img { width: 100%; height: auto; border-radius: 8px; } /* ========== ACTION BUTTONS ========== */ .actions { margin-top: 10px; display: flex; - justify-content: space-around; + justify-content: space-between; + gap: 8px; } -.actions .info { - background-color: #007bff; - color: white; - border: none; - padding: 0.5em 1em; +button, .button { + appearance: none; + border: 1px solid rgba(255,255,255,0.1); + background: linear-gradient(180deg, rgba(255,255,255,0.06), rgba(255,255,255,0.04)); + color: var(--text); + padding: 8px 12px; + border-radius: 10px; cursor: pointer; - border-radius: 5px; - margin-right: 0.5em; + transition: transform 0.15s ease, box-shadow 0.2s ease, border-color 0.2s ease; } - -.actions .info:hover { - background-color: #0056b3; +button:hover, .button:hover { + transform: translateY(-1px); + border-color: rgba(255,255,255,0.2); + box-shadow: 0 8px 16px rgba(0,0,0,0.25); } -.actions .request { - background-color: #28a745; - color: white; - border: none; - padding: 0.5em 1em; - cursor: pointer; - border-radius: 5px; -} +.actions .info, .refresh, .index, .request-page { border-color: rgba(99,102,241,0.4); } +.actions .info { background: linear-gradient(180deg, rgba(99,102,241,0.35), rgba(99,102,241,0.2)); } +.actions .request { border-color: rgba(16,185,129,0.4); background: linear-gradient(180deg, rgba(16,185,129,0.35), rgba(16,185,129,0.2)); } +.delete-button { border-color: rgba(239,68,68,0.4); background: linear-gradient(180deg, rgba(239,68,68,0.35), rgba(239,68,68,0.2)); } +.reset { border-color: rgba(239,68,68,0.4); background: linear-gradient(180deg, rgba(239,68,68,0.35), rgba(239,68,68,0.2)); color: #fff; } -.actions .request:hover { - background-color: #1e7e34; -} +/* Page actions */ +.refresh, .index, .request-page { padding: 10px 14px; } /* ========== MODAL ========== */ .modal { position: fixed; - z-index: 1; - left: 0; - top: 0; - width: 100%; - height: 100%; - overflow: auto; - background-color: rgba(0, 0, 0, 0.4); + z-index: 50; + inset: 0; + display: none; + background: rgba(2,6,23,0.7); + -webkit-backdrop-filter: blur(4px); + backdrop-filter: blur(4px); } +.modal[style*="display: block"] { display: block; } + .modal-content { - background-color: #fefefe; + background: linear-gradient(180deg, rgba(255,255,255,0.06), rgba(255,255,255,0.03)); + border: 1px solid rgba(255,255,255,0.1); margin: 5% auto; padding: 20px; - border: 1px solid #888; - width: 50%; - border-radius: 10px; + width: min(720px, 92%); + border-radius: 16px; + color: var(--text); + box-shadow: 0 20px 40px rgba(0,0,0,0.4); } .close { @@ -98,6 +137,8 @@ font-size: 28px; font-weight: bold; cursor: pointer; + padding: 2px 8px; + border-radius: 8px; } /* ========== IMAGE CONTAINER ========== */ @@ -144,48 +185,72 @@ body.nsfw-disabled .image-container.nsfw:hover img { pointer-events: none; } +.download-badge { + position: absolute; + top: 8px; + right: 8px; + background-color: rgba(99,102,241,0.9); + color: white; + padding: 4px 8px; + font-size: 12px; + font-weight: 700; + border-radius: 6px; + z-index: 2; +} + .search-bar { display: flex; flex-direction: column; - gap: 10px; + gap: 12px; margin-bottom: 20px; + padding: 16px; + border-radius: 16px; + background: linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0.02)); + border: 1px solid rgba(255,255,255,0.08); + box-shadow: 0 10px 20px rgba(0,0,0,0.25); } -.search-bar select { - padding: 5px; - border: 1px solid #ccc; - border-radius: 4px; +.search-bar input[type="text"], .search-bar select { + padding: 10px 12px; + border-radius: 10px; + border: 1px solid rgba(255,255,255,0.15); + background: rgba(255,255,255,0.04); + color: var(--text); + outline: none; + transition: border-color 0.2s ease, box-shadow 0.2s ease; +} + +.search-bar input[type="text"]:focus, .search-bar select:focus { + border-color: var(--ring); + box-shadow: 0 0 0 3px rgba(96,165,250,0.2); } .dropdown-content { display: none; position: absolute; - background-color: #f9f9f9; - min-width: 160px; - box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); - z-index: 1; + background-color: var(--surface); + color: var(--text); + min-width: 200px; + box-shadow: 0 12px 28px rgba(0,0,0,0.35); + border: 1px solid rgba(255,255,255,0.08); + border-radius: 10px; + z-index: 5; } .dropdown-content .dropdown-item { - padding: 8px 16px; + padding: 10px 14px; cursor: pointer; } .dropdown-content .dropdown-item:hover { - background-color: #f1f1f1; + background-color: rgba(255,255,255,0.06); } .dropdown-content.show { display: block; } -.reset { - /* Implement design here */ - background-color: #f44336; - /* round the edges of the button */ - border-radius: 9px; - - } +.reset { border-radius: 10px; } .selectors { display: flex; @@ -200,23 +265,38 @@ body.nsfw-disabled .image-container.nsfw:hover img { /* ========== KOMGA SPECIFIC STYLES ========== */ -.card.komga { - border: 3px solid green; - box-sizing: border-box; - /* disable the request button for entries in Komga */ - /* only allow the info button to be clicked */ - opacity: 0.3; +.card.komga::after { + content: 'In Komga'; + position: absolute; + top: 10px; + left: 10px; + background: rgba(16,185,129,0.9); + color: white; + font-size: 12px; + font-weight: 700; + padding: 4px 8px; + border-radius: 6px; + z-index: 3; } -.card.requested { - border: 3px solid orange; - box-sizing: border-box; - /* disable the request button for entries in Komga */ - /* only allow the info button to be clicked */ - opacity: 0.3; +.card.requested::after { + content: 'Requested'; + position: absolute; + top: 10px; + left: 10px; + background: rgba(245,158,11,0.9); + color: #111827; + font-size: 12px; + font-weight: 700; + padding: 4px 8px; + border-radius: 6px; + z-index: 3; } +.card.komga { opacity: 0.6; } +.card.requested { opacity: 0.8; } + .card.manga.requested .request { pointer-events: none; opacity: 0.5; @@ -236,9 +316,8 @@ body.nsfw-disabled .image-container.nsfw:hover img { position: absolute; top: 5px; right: 5px; - background-color: #dc3545; color: white; - border: none; + border: 1px solid rgba(255,255,255,0.15); padding: 0.5em; cursor: pointer; border-radius: 50%;