From d6d3566f47131a744ca1904adf30afe017081b39 Mon Sep 17 00:00:00 2001 From: Frank Tovar Date: Wed, 4 Feb 2026 20:46:24 +0100 Subject: [PATCH] Split styles into modular CSS files --- wwwroot/css/admin.css | 31 ++ wwwroot/css/base.css | 178 ++++++++ wwwroot/css/components.css | 168 ++++++++ wwwroot/css/forms-and-auth.css | 17 + wwwroot/css/layout.css | 150 +++++++ wwwroot/css/modals.css | 78 ++++ wwwroot/css/results.css | 120 ++++++ wwwroot/styles.css | 713 +-------------------------------- 8 files changed, 749 insertions(+), 706 deletions(-) create mode 100644 wwwroot/css/admin.css create mode 100644 wwwroot/css/base.css create mode 100644 wwwroot/css/components.css create mode 100644 wwwroot/css/forms-and-auth.css create mode 100644 wwwroot/css/layout.css create mode 100644 wwwroot/css/modals.css create mode 100644 wwwroot/css/results.css diff --git a/wwwroot/css/admin.css b/wwwroot/css/admin.css new file mode 100644 index 0000000..982eb6d --- /dev/null +++ b/wwwroot/css/admin.css @@ -0,0 +1,31 @@ +.admin-toggle { + position: fixed; + bottom: 18px; + right: 18px; + width: 44px; + height: 44px; + border-radius: 50%; + border: 1px solid #e3d4bd; + background: rgba(255, 255, 255, 0.9); + color: #6c5a42; + font-weight: 700; + box-shadow: 0 8px 20px rgba(0, 0, 0, 0.18); + z-index: 30; +} + +.admin-panel { + position: fixed; + bottom: 70px; + right: 18px; + width: 320px; + z-index: 40; + display: flex; + flex-direction: column; + gap: 10px; +} + +.panel-header { + display: flex; + justify-content: space-between; + align-items: center; +} diff --git a/wwwroot/css/base.css b/wwwroot/css/base.css new file mode 100644 index 0000000..7cb1d02 --- /dev/null +++ b/wwwroot/css/base.css @@ -0,0 +1,178 @@ +:root { + font-family: + "Baloo 2", + "Nunito", + "Segoe UI", + system-ui, + -apple-system, + sans-serif; + color: #2c1c0d; +} + +html { + background: #f6e9d6; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +.split { + display: flex; + justify-content: space-between; + gap: 16px; + align-items: flex-start; + flex-wrap: wrap; +} + +.stack { + display: flex; + flex-direction: column; + gap: 8px; +} +.stack.horizontal { + flex-direction: row; + flex-wrap: wrap; +} + +input, +textarea, +select, +button { + font: inherit; + border-radius: 8px; + border: 1px solid #d5c7b5; + background: #fffaf3; + color: #2c1c0d; + padding: 10px 12px; + min-width: 0; +} + +textarea { + min-height: 80px; + resize: vertical; +} + +button { + cursor: pointer; + background: linear-gradient(-5deg, #30afea, #80e2ff); + border-color: #124b88; + font-weight: 700; + color: #2c1c0d; +} +button:hover { + background: linear-gradient(-5deg, #40e2ff, #e0f0ff); +} +button.danger { + background: #e0564f; + border-color: #c54740; + color: #fffaf3; +} +button.danger:hover { + background: #c9473f; + border-color: #a83a35; +} +button.ghost { + background: transparent; + border-color: #d5c7b5; + color: #2c1c0d; +} +button.ghost:hover { + background: linear-gradient(-5deg, #e7f5ff, #cbeaff); + border-color: #b4d9f3; + color: #1a3d64; +} + +.label { + color: #6c5a42; + font-size: 14px; +} +.label-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; +} +.char-counter { + color: #8c7a63; + font-size: 12px; + white-space: nowrap; +} +.hint { + color: #8c7a63; + font-size: 12px; + margin: 8px 0 12px 0; +} +.hint.warning { + color: #c26c1a; +} +.disabled-form { + opacity: 0.5; + pointer-events: none; +} + +.hidden { + display: none !important; +} + +p { + margin: 0; +} +h3 { + margin: 0; + font-size: 18px; +} +.muted { + color: #7a6a53; + margin: 0; +} +.link { + color: #30afea; + text-decoration: none; + font-weight: 700; +} +.link:hover { + text-decoration: underline; +} +.link.compact { + font-size: 14px; +} +.inline-link { + font-size: 14px; + margin-left: 5px; +} +.auth-toggle-link { + text-align: center; + display: inline-block; + margin-top: 10px; +} + +.toast { + position: fixed; + bottom: 16px; + right: 16px; + background: #1db4ac; + color: #0f2f2d; + padding: 10px 14px; + border-radius: 8px; + box-shadow: 0 10px 24px rgba(0, 0, 0, 0.2); + max-width: 320px; +} +.toast.error { + background: #e0564f; + color: #fffaf3; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} diff --git a/wwwroot/css/components.css b/wwwroot/css/components.css new file mode 100644 index 0000000..066ac0a --- /dev/null +++ b/wwwroot/css/components.css @@ -0,0 +1,168 @@ +.card { + background: rgba(255, 255, 255, 0.9); + border: 1px solid #e3d4bd; + border-radius: 14px; + padding: 16px; + box-shadow: 0 12px 32px rgba(0, 0, 0, 0.12); + margin-bottom: 16px; +} +.card h2 { + margin-top: 0; + margin-bottom: 8px; +} + +.card-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); + gap: 12px; + margin-top: 12px; + width: 100%; + max-width: 1280px; + margin-inline: auto; +} +.results-grid { + max-width: none; +} + +.game-card { + background: #fffaf3; + border: 1px solid #e5d6c2; + border-radius: 12px; + overflow: hidden; + display: flex; + flex-direction: column; + min-height: 220px; +} +.card-visual { + height: 200px; + background: linear-gradient(135deg, #f0d9b5, #f6b24f); + background-size: cover; + background-position: center; + background-repeat: no-repeat; + background-color: #f6b24f; + cursor: pointer; + border: none; + width: 100%; + display: block; + padding: 0; +} +.card-visual.hovering { + cursor: zoom-in; +} +.card-body { + padding: 12px; + display: flex; + flex-direction: column; + gap: 6px; + flex: 1; +} +.card-title-row { + display: flex; + justify-content: space-between; + align-items: center; + gap: 8px; + min-width: 0; +} +.card-title { + flex: 1; + min-width: 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.title-meta { + display: flex; + align-items: center; + gap: 8px; +} +.title-meta .chip { + max-width: 140px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.chip { + background: #c5dff1; + color: #2c1c0d; + padding: 4px 8px; + border-radius: 999px; + font-size: 12px; + border: 1px solid transparent; + cursor: pointer; +} +.chip.danger-chip { + background: #e0564f; + border: 1px solid #c54740; + color: #fffaf3; +} +.chip.danger-chip:hover { + background: #c9473f; + border-color: #a83a35; +} + +.vote-controls { + display: flex; + gap: 10px; + align-items: center; + margin-top: auto; + padding-top: 6px; +} +.score { + font-weight: 700; + min-width: 36px; + font-size: 24px; + text-align: center; +} +.score-emoji { + font-size: 24px; + text-align: center; +} + +.results-grid .game-card { + border-color: #f0c56b; +} + +.results-frame { + background: rgba(255, 255, 255, 0.92); + border: 1px solid #e3d4bd; + border-radius: 14px; + padding: 12px; + box-shadow: 0 10px 28px rgba(0, 0, 0, 0.12); +} + +/* Slider */ +input[type="range"].full-slider { + -webkit-appearance: none; + width: 100%; + height: 20px; + border-radius: 999px; + background: linear-gradient(90deg, #c52222, #d5c522, #22c55e); + outline: none; + box-shadow: + inset 0 0 0 1px #e3d4bd, + 0 4px 12px rgba(0, 0, 0, 0.18); +} +input[type="range"].full-slider::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 28px; + height: 28px; + border-radius: 50%; + background: #fffaf3; + border: 2px solid #d5c7b5; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.25); +} +input[type="range"].full-slider::-moz-range-thumb { + width: 28px; + height: 28px; + border-radius: 50%; + background: #fffaf3; + border: 2px solid #d5c7b5; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.25); +} +input[type="range"].full-slider::-moz-range-track { + height: 14px; + border-radius: 999px; + background: linear-gradient(90deg, #f28b3c, #f2c94c, #2ca25f); + border: 1px solid #e3d4bd; +} diff --git a/wwwroot/css/forms-and-auth.css b/wwwroot/css/forms-and-auth.css new file mode 100644 index 0000000..d025147 --- /dev/null +++ b/wwwroot/css/forms-and-auth.css @@ -0,0 +1,17 @@ +.auth-card .active { + font-weight: 700; +} +.auth-form { + margin-top: 8px; +} +.auth-logo { + display: flex; + justify-content: center; + margin-bottom: 12px; +} +.auth-logo img { + max-width: 200px; + width: 100%; + height: auto; + filter: drop-shadow(0 6px 16px rgba(0, 0, 0, 0.25)); +} diff --git a/wwwroot/css/layout.css b/wwwroot/css/layout.css new file mode 100644 index 0000000..eed8457 --- /dev/null +++ b/wwwroot/css/layout.css @@ -0,0 +1,150 @@ +.page { + margin: 0; + padding: 20px; + display: flex; + flex-direction: column; + align-items: center; + gap: 16px; + min-height: 100vh; + background-color: transparent; + position: relative; + overflow-x: hidden; + overflow-y: auto; + isolation: isolate; +} +.page::before { + content: ""; + position: fixed; + inset: 0; + background-image: url("../background.png"); + background-repeat: no-repeat; + background-size: cover; + background-position: center; + z-index: -1; + pointer-events: none; +} + +.lang-field { + margin-top: 8px; +} +.lang-switch { + position: relative; + display: inline-block; +} +.lang-button { + border: 1px solid #d5c7b5; + background: #fffaf3; + border-radius: 10px; + padding: 6px 10px; + font-size: 16px; + cursor: pointer; + min-width: 44px; + font-family: "Twemoji Country Flags", "Segoe UI Emoji", "Apple Color Emoji", "Noto Color Emoji", emoji, sans-serif; +} +.lang-menu { + position: absolute; + left: 0; + top: calc(100% + 6px); + background: #fffaf3; + border: 1px solid #e3d4bd; + border-radius: 10px; + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12); + padding: 6px; + display: flex; + flex-direction: column; + gap: 4px; + z-index: 50; +} +.lang-menu button { + border: 1px solid #d5c7b5; + background: #ffffff; + border-radius: 8px; + padding: 6px 10px; + text-align: left; + cursor: pointer; + font-family: "Segoe UI Emoji", "Apple Color Emoji", "Noto Color Emoji", "Twemoji Country Flags", emoji, sans-serif; +} + +.status-bar { + display: flex; + width: 100%; + justify-content: space-between; + gap: 30px; + background: rgba(255, 255, 255, 0.9); + border: 1px solid #e3d4bd; + border-radius: 12px; + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.12); + padding: 10px 14px; +} +.status-left, +.status-center, +.status-right { + display: flex; + align-items: center; + gap: 10px; +} +.logo-mark { + height: 65px; + margin: -10px; + width: auto; +} +.counts { + color: #5f513b; + font-size: 13px; +} + +.phase-bar { + display: none; +} + +.grid { + display: grid; + grid-template-columns: 1fr; + gap: 16px; + width: 100%; + max-width: 1280px; +} + +.suggest-grid { + display: grid; + grid-template-columns: 1.1fr 1fr; + gap: 16px; + align-items: start; +} +.suggest-grid .card-grid { + grid-template-columns: 1fr; +} + +.phase-header { + background: rgba(255, 255, 255, 0.9); + border: 1px solid #e3d4bd; + border-radius: 12px; + padding: 12px 16px; + box-shadow: 0 10px 24px rgba(0, 0, 0, 0.1); + margin-bottom: 12px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; +} +.phase-text { + display: flex; + flex-direction: column; + gap: 4px; +} +.phase-header h2 { + margin: 0; +} +.phase-header .hint { + margin: 0; +} + +@media (max-width: 1200px) { + .grid { + min-width: auto; + width: 100%; + } + .suggest-grid { + grid-template-columns: 1fr; + } +} diff --git a/wwwroot/css/modals.css b/wwwroot/css/modals.css new file mode 100644 index 0000000..da049d8 --- /dev/null +++ b/wwwroot/css/modals.css @@ -0,0 +1,78 @@ +.lightbox { + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.7); + display: flex; + align-items: center; + justify-content: center; + z-index: 100; +} +.lightbox-content { + position: relative; + max-width: 90vw; + max-height: 90vh; + background: #fffaf3; + padding: 12px; + border-radius: 12px; + box-shadow: 0 20px 50px rgba(0, 0, 0, 0.35); +} +.lightbox-content img { + max-width: 100%; + max-height: 80vh; + display: block; + border-radius: 8px; +} +.lightbox-close { + position: absolute; + top: 8px; + right: 8px; + background: #1db4ac; + color: #0f2f2d; + border: 1px solid #128b88; + border-radius: 999px; + width: 32px; + height: 32px; + font-size: 16px; + padding: 0; + cursor: pointer; +} + +.edit-modal { + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.55); + display: flex; + align-items: center; + justify-content: center; + z-index: 110; +} +.edit-modal .edit-panel { + background: #fffaf3; + border: 1px solid #e3d4bd; + border-radius: 12px; + width: min(960px, 94vw); + max-height: 92vh; + padding: 16px; + display: flex; + flex-direction: column; + gap: 12px; + box-shadow: 0 20px 48px rgba(0, 0, 0, 0.25); +} +.edit-modal .edit-header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; +} +.edit-modal .edit-body { + overflow: auto; + max-height: 70vh; +} +.edit-modal .delete-body { + display: flex; + flex-direction: column; + gap: 12px; +} +.preview-card { + pointer-events: none; +} diff --git a/wwwroot/css/results.css b/wwwroot/css/results.css new file mode 100644 index 0000000..d9b2c86 --- /dev/null +++ b/wwwroot/css/results.css @@ -0,0 +1,120 @@ +.results-table { + width: 100%; + border-collapse: collapse; + table-layout: fixed; +} +.results-table th, +.results-table td { + padding: 10px; +} +.results-table tr { + border-bottom: 1px solid #e3d4bd; +} +.results-table th { + text-align: left; + color: #7a6a53; + font-size: 12px; + letter-spacing: 0.3px; +} +.results-table .rank-cell { + width: 64px; + text-align: center; +} +.medal { + display: inline-flex; + align-items: center; + justify-content: center; + width: 44px; + height: 44px; + border-radius: 14px; + font-size: 28px; + font-weight: 800; + color: #2c1c0d; + background: #f1e5c7; + box-shadow: inset 0 0 0 2px #e3d4bd, 0 6px 16px rgba(0, 0, 0, 0.12); +} +.podium { + position: relative; + background: linear-gradient(135deg, rgba(255, 255, 255, 0.96), rgba(255, 255, 255, 0.85)); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18); +} +.podium td { + border-bottom: none; +} +.podium-1 { + background: linear-gradient(135deg, #ffecb3, #ffd861); +} +.podium-1 .medal { + background: linear-gradient(135deg, #ffd54f, #ffca28); + box-shadow: inset 0 0 0 2px #f1b000, 0 8px 18px rgba(0, 0, 0, 0.2); +} +.podium-2 { + background: linear-gradient(135deg, #d3d6ed, #bfc6e6); +} +.podium-2 .medal { + background: linear-gradient(135deg, #d7dbe5, #c2c7d2); + box-shadow: inset 0 0 0 2px #9ea3b1, 0 8px 18px rgba(0, 0, 0, 0.18); +} +.podium-3 { + background: linear-gradient(135deg, #f0d0b0, #e2a96a); +} +.podium-3 .medal { + background: linear-gradient(135deg, #f2b37a, #e08a4a); + box-shadow: inset 0 0 0 2px #c56d2c, 0 8px 18px rgba(0, 0, 0, 0.2); +} +.podium::after { + content: ""; + position: absolute; + inset: 0; + pointer-events: none; + box-shadow: inset 0 0 0 2px rgba(255, 255, 255, 0.35); +} +.podium .link { + color: #1a5075; +} +.results-table .game-cell { + display: flex; + gap: 10px; + align-items: center; + min-width: 0; +} +.results-table .thumb { + width: 72px; + height: 48px; + object-fit: cover; + border-radius: 6px; + border: 1px solid #e3d4bd; + cursor: pointer; +} +.results-table .game-meta { + display: flex; + flex-direction: column; + gap: 2px; + flex: 1; + min-width: 0; +} +.results-table .title-line { + font-weight: 700; + max-width: 600px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.results-table .author-cell { + max-width: 160px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.results-table .muted.small { + font-size: 12px; + color: #7a6a53; +} +.thumb-open { + background: #fffaf3; + border: 1px solid #e3d4bd; + color: #2c1c0d; + border-radius: 6px; + padding: 4px 8px; + cursor: pointer; +} diff --git a/wwwroot/styles.css b/wwwroot/styles.css index d79a346..a54a828 100644 --- a/wwwroot/styles.css +++ b/wwwroot/styles.css @@ -1,706 +1,7 @@ -:root { - font-family: - "Baloo 2", - "Nunito", - "Segoe UI", - system-ui, - -apple-system, - sans-serif; - color: #2c1c0d; -} - -html { - background: #f6e9d6; -} - -*, -*::before, -*::after { - box-sizing: border-box; -} - -.page { - margin: 0; - padding: 20px; - display: flex; - flex-direction: column; - align-items: center; - gap: 16px; - min-height: 100vh; - background-color: transparent; - position: relative; - overflow-x: hidden; - overflow-y: auto; - isolation: isolate; -} -.page::before { - content: ""; - position: fixed; - inset: 0; - background-image: url("background.png"); - background-repeat: no-repeat; - background-size: cover; - background-position: center; - z-index: -1; - pointer-events: none; -} - -.lang-field { - margin-top: 8px; -} -.lang-switch { - position: relative; - display: inline-block; -} -.lang-button { - border: 1px solid #d5c7b5; - background: #fffaf3; - border-radius: 10px; - padding: 6px 10px; - font-size: 16px; - cursor: pointer; - min-width: 44px; - font-family: "Segoe UI Emoji", "Apple Color Emoji", "Noto Color Emoji", "Twemoji Country Flags", emoji, sans-serif; -} -.lang-menu { - position: absolute; - left: 0; - top: calc(100% + 6px); - background: #fffaf3; - border: 1px solid #e3d4bd; - border-radius: 10px; - box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12); - padding: 6px; - display: flex; - flex-direction: column; - gap: 4px; - z-index: 50; -} -.lang-menu button { - border: 1px solid #d5c7b5; - background: #ffffff; - border-radius: 8px; - padding: 6px 10px; - text-align: left; - cursor: pointer; - font-family: "Segoe UI Emoji", "Apple Color Emoji", "Noto Color Emoji", "Twemoji Country Flags", emoji, sans-serif; -} - -.status-bar { - display: flex; - width: 100%; - justify-content: space-between; - gap: 30px; - background: rgba(255, 255, 255, 0.9); - border: 1px solid #e3d4bd; - border-radius: 12px; - box-shadow: 0 10px 30px rgba(0, 0, 0, 0.12); - padding: 10px 14px; -} -.status-left, -.status-center, -.status-right { - display: flex; - align-items: center; - gap: 10px; -} -.inline-link { - font-size: 14px; - margin-left: 5px; -} -.logo-mark { - height: 65px; - margin: -10px; - width: auto; -} - -.counts { - color: #5f513b; - font-size: 13px; -} - -.phase-bar { - display: none; -} - -.grid { - display: grid; - grid-template-columns: 1fr; - gap: 16px; - width: 100%; - max-width: 1280px; -} - -.suggest-grid { - display: grid; - grid-template-columns: 1.1fr 1fr; - gap: 16px; - align-items: start; -} -.suggest-grid .card-grid { - grid-template-columns: 1fr; -} - -.phase-header { - background: rgba(255, 255, 255, 0.9); - border: 1px solid #e3d4bd; - border-radius: 12px; - padding: 12px 16px; - box-shadow: 0 10px 24px rgba(0, 0, 0, 0.1); - margin-bottom: 12px; - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; -} -.phase-text { - display: flex; - flex-direction: column; - gap: 4px; -} -.phase-header h2 { - margin: 0; -} -.phase-header .hint { - margin: 0; -} - -.card { - background: rgba(255, 255, 255, 0.9); - border: 1px solid #e3d4bd; - border-radius: 14px; - padding: 16px; - box-shadow: 0 12px 32px rgba(0, 0, 0, 0.12); - margin-bottom: 16px; -} - -.card h2 { - margin-top: 0; - margin-bottom: 8px; -} - -.split { - display: flex; - justify-content: space-between; - gap: 16px; - align-items: flex-start; - flex-wrap: wrap; -} - -.stack { - display: flex; - flex-direction: column; - gap: 8px; -} -.stack.horizontal { - flex-direction: row; - flex-wrap: wrap; -} - -input, -textarea, -select, -button { - font: inherit; - border-radius: 8px; - border: 1px solid #d5c7b5; - background: #fffaf3; - color: #2c1c0d; - padding: 10px 12px; - min-width: 0; -} - -textarea { - min-height: 80px; - resize: vertical; -} - -button { - cursor: pointer; - background: linear-gradient(-5deg, #30afea, #80e2ff); - border-color: #124b88; - font-weight: 700; - color: #2c1c0d; -} - -button:hover { - background: linear-gradient(-5deg, #40e2ff, #e0f0ff); -} - -button.danger { - background: #e0564f; - border-color: #c54740; - color: #fffaf3; -} -button.danger:hover { - background: #c9473f; - border-color: #a83a35; -} - -button.ghost { - background: transparent; - border-color: #d5c7b5; - color: #2c1c0d; -} -button.ghost:hover { - background: linear-gradient(-5deg, #e7f5ff, #cbeaff); - border-color: #b4d9f3; - color: #1a3d64; -} - -.label { - color: #6c5a42; - font-size: 14px; -} -.label-row { - display: flex; - align-items: center; - justify-content: space-between; - gap: 8px; -} -.char-counter { - color: #8c7a63; - font-size: 12px; - white-space: nowrap; -} -.hint { - color: #8c7a63; - font-size: 12px; - margin: 8px 0 12px 0; -} -.hint.warning { - color: #c26c1a; -} -.disabled-form { - opacity: 0.5; - pointer-events: none; -} - -.card-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); - gap: 12px; - margin-top: 12px; - width: 100%; - max-width: 1280px; - margin-inline: auto; -} -.results-grid { - max-width: none; -} - -.game-card { - background: #fffaf3; - border: 1px solid #e5d6c2; - border-radius: 12px; - overflow: hidden; - display: flex; - flex-direction: column; - min-height: 220px; -} - -@media (max-width: 1200px) { - .grid { - min-width: auto; - width: 100%; - } - .suggest-grid { - grid-template-columns: 1fr; - } -} - -.card-visual { - height: 200px; - background: linear-gradient(135deg, #f0d9b5, #f6b24f); - background-size: cover; - background-position: center; - background-repeat: no-repeat; - background-color: #f6b24f; - cursor: pointer; - border: none; - width: 100%; - display: block; - padding: 0; -} -.card-visual.hovering { - cursor: zoom-in; -} - -.card-body { - padding: 12px; - display: flex; - flex-direction: column; - gap: 6px; - flex: 1; -} - -h3 { - margin: 0; - font-size: 18px; -} - -.card-title-row { - display: flex; - justify-content: space-between; - align-items: center; - gap: 8px; - min-width: 0; -} -.card-title { - flex: 1; - min-width: 0; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} -.title-meta { - display: flex; - align-items: center; - gap: 8px; -} -.title-meta .chip { - max-width: 140px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} -p { - margin: 0; -} -.muted { - color: #7a6a53; - margin: 0; -} -.link { - color: #30afea; - text-decoration: none; - font-weight: 700; -} -.link:hover { - text-decoration: underline; -} -.link.compact { - font-size: 14px; -} -.auth-toggle-link { - text-align: center; - display: inline-block; - margin-top: 10px; -} -.chip { - background: #c5dff1; - color: #2c1c0d; - padding: 4px 8px; - border-radius: 999px; - font-size: 12px; - border: 1px solid transparent; - cursor: pointer; -} -.chip.danger-chip { - background: #e0564f; - border: 1px solid #c54740; - color: #fffaf3; -} -.chip.danger-chip:hover { - background: #c9473f; - border-color: #a83a35; -} - -.vote-controls { - display: flex; - gap: 10px; - align-items: center; - margin-top: auto; - padding-top: 6px; -} -.score { - font-weight: 700; - min-width: 36px; - text-align: center; -} -.score-emoji { - font-size: 24px; - text-align: center; -} - -.results-grid .game-card { - border-color: #f0c56b; -} - -.results-frame { - background: rgba(255, 255, 255, 0.92); - border: 1px solid #e3d4bd; - border-radius: 14px; - padding: 12px; - box-shadow: 0 10px 28px rgba(0, 0, 0, 0.12); -} - -/* Slider */ -input[type="range"].full-slider { - -webkit-appearance: none; - width: 100%; - height: 20px; - border-radius: 999px; - background: linear-gradient(90deg, #c52222, #d5c522, #22c55e); - outline: none; - box-shadow: - inset 0 0 0 1px #e3d4bd, - 0 4px 12px rgba(0, 0, 0, 0.18); -} -input[type="range"].full-slider::-webkit-slider-thumb { - -webkit-appearance: none; - appearance: none; - width: 28px; - height: 28px; - border-radius: 50%; - background: #fffaf3; - border: 2px solid #d5c7b5; - box-shadow: 0 4px 10px rgba(0, 0, 0, 0.25); -} -input[type="range"].full-slider::-moz-range-thumb { - width: 28px; - height: 28px; - border-radius: 50%; - background: #fffaf3; - border: 2px solid #d5c7b5; - box-shadow: 0 4px 10px rgba(0, 0, 0, 0.25); -} -input[type="range"].full-slider::-moz-range-track { - height: 14px; - border-radius: 999px; - background: linear-gradient(90deg, #f28b3c, #f2c94c, #2ca25f); - border: 1px solid #e3d4bd; -} - -.score { - font-weight: 700; - min-width: 36px; - font-size: 24px; - text-align: center; -} - -.hidden { - display: none !important; -} - -.toast { - position: fixed; - bottom: 16px; - right: 16px; - background: #1db4ac; - color: #0f2f2d; - padding: 10px 14px; - border-radius: 8px; - box-shadow: 0 10px 24px rgba(0, 0, 0, 0.2); - max-width: 320px; -} -.toast.error { - background: #e0564f; - color: #fffaf3; -} - -.auth-card .active { - font-weight: 700; -} -.auth-form { - margin-top: 8px; -} -.auth-logo { - display: flex; - justify-content: center; - margin-bottom: 12px; -} -.auth-logo img { - max-width: 200px; - width: 100%; - height: auto; - filter: drop-shadow(0 6px 16px rgba(0, 0, 0, 0.25)); -} - -.admin-toggle { - position: fixed; - bottom: 18px; - right: 18px; - width: 44px; - height: 44px; - border-radius: 50%; - border: 1px solid #e3d4bd; - background: rgba(255, 255, 255, 0.9); - color: #6c5a42; - font-weight: 700; - box-shadow: 0 8px 20px rgba(0, 0, 0, 0.18); - z-index: 30; -} - -.admin-panel { - position: fixed; - bottom: 70px; - right: 18px; - width: 320px; - z-index: 40; - display: flex; - flex-direction: column; - gap: 10px; -} - -.lightbox { - position: fixed; - inset: 0; - background: rgba(0, 0, 0, 0.7); - display: flex; - align-items: center; - justify-content: center; - z-index: 100; -} -.lightbox-content { - position: relative; - max-width: 90vw; - max-height: 90vh; - background: #fffaf3; - padding: 12px; - border-radius: 12px; - box-shadow: 0 20px 50px rgba(0, 0, 0, 0.35); -} -.lightbox-content img { - max-width: 100%; - max-height: 80vh; - display: block; - border-radius: 8px; -} -.lightbox-close { - position: absolute; - top: 8px; - right: 8px; - background: #1db4ac; - color: #0f2f2d; - border: 1px solid #128b88; - border-radius: 999px; - width: 32px; - height: 32px; - font-size: 16px; - padding: 0; - cursor: pointer; -} - -.edit-modal { - position: fixed; - inset: 0; - background: rgba(0, 0, 0, 0.55); - display: flex; - align-items: center; - justify-content: center; - z-index: 110; -} -.edit-modal .edit-panel { - background: #fffaf3; - border: 1px solid #e3d4bd; - border-radius: 12px; - width: min(960px, 94vw); - max-height: 92vh; - padding: 16px; - display: flex; - flex-direction: column; - gap: 12px; - box-shadow: 0 20px 48px rgba(0, 0, 0, 0.25); -} -.edit-modal .edit-header { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; -} -.edit-modal .edit-body { - overflow: auto; - max-height: 70vh; -} -.edit-modal .delete-body { - display: flex; - flex-direction: column; - gap: 12px; -} -.preview-card { - pointer-events: none; -} - -.panel-header { - display: flex; - justify-content: space-between; - align-items: center; -} - -.results-table { - width: 100%; - border-collapse: collapse; -} -.results-table th, -.results-table td { - padding: 10px; -} -.results-table tr { - border-bottom: 1px solid #e3d4bd; -} -.results-table th { - text-align: left; - color: #7a6a53; - font-size: 12px; - letter-spacing: 0.3px; -} -.results-table .rank-cell { width: 64px; text-align: center; } -.medal { display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: 14px; font-size: 28px; font-weight: 800; color: #2c1c0d; background: #f1e5c7; box-shadow: inset 0 0 0 2px #e3d4bd, 0 6px 16px rgba(0,0,0,0.12); } -.podium { position: relative; background: linear-gradient(135deg, rgba(255,255,255,0.96), rgba(255,255,255,0.85)); box-shadow: 0 8px 24px rgba(0,0,0,0.18); } -.podium td { border-bottom: none; } -.podium-1 { background: linear-gradient(135deg, #ffecb3, #ffd861); } -.podium-1 .medal { background: linear-gradient(135deg, #ffd54f, #ffca28); box-shadow: inset 0 0 0 2px #f1b000, 0 8px 18px rgba(0,0,0,0.2); } -.podium-2 { background: linear-gradient(135deg, #d3d6ed, #bfc6e6); } -.podium-2 .medal { background: linear-gradient(135deg, #d7dbe5, #c2c7d2); box-shadow: inset 0 0 0 2px #9ea3b1, 0 8px 18px rgba(0,0,0,0.18); } -.podium-3 { background: linear-gradient(135deg, #f0d0b0, #e2a96a); } -.podium-3 .medal { background: linear-gradient(135deg, #f2b37a, #e08a4a); box-shadow: inset 0 0 0 2px #c56d2c, 0 8px 18px rgba(0,0,0,0.2); } -.podium::after { content: ""; position: absolute; inset: 0; pointer-events: none; box-shadow: inset 0 0 0 2px rgba(255,255,255,0.35); } -.podium .link { color: #1a5075; } -.results-table .game-cell { - display: flex; - gap: 10px; - align-items: center; - min-width: 0; -} -.results-table .thumb { - width: 72px; - height: 48px; - object-fit: cover; - border-radius: 6px; - border: 1px solid #e3d4bd; - cursor: pointer; -} -.results-table .game-meta { - display: flex; - flex-direction: column; - gap: 2px; - flex: 1; - min-width: 0; -} -.results-table .title-line { - font-weight: 700; - max-width: 600px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.results-table .author-cell { - max-width: 160px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} -.results-table .muted.small { - font-size: 12px; - color: #7a6a53; -} -.thumb-open { - background: #fffaf3; - border: 1px solid #e3d4bd; - color: #2c1c0d; - border-radius: 6px; - padding: 4px 8px; - cursor: pointer; -} +@import "./css/base.css"; +@import "./css/layout.css"; +@import "./css/components.css"; +@import "./css/forms-and-auth.css"; +@import "./css/admin.css"; +@import "./css/modals.css"; +@import "./css/results.css";