diff --git a/front/home.css b/front/home.css index ac87691..15f8000 100644 --- a/front/home.css +++ b/front/home.css @@ -1,15 +1,63 @@ @import url("https://fonts.googleapis.com/css2?family=Recursive:wght@300;400;600;700&family=Unbounded:wght@400;600;800&display=swap"); :root { - color-scheme: light; - --cream: #f7f2e8; - --ink: #1b1b1f; - --tangerine: #ff8a3d; - --teal: #1d9aa3; - --berry: #f25287; - --sun: #ffd166; - --sky: #c7f0ff; - --shadow: rgba(12, 24, 38, 0.18); + color-scheme: light dark; + --ink: #0b1a2b; + --ink-soft: #6b7280; + --surface: #f7f7f9; + --surface-strong: #ffffff; + --surface-alt: #f6f8fa; + --accent: #1b8b75; + --accent-bright: #14b8a6; + --accent-weak: rgba(27, 139, 117, 0.12); + --accent-shadow: rgba(27, 139, 117, 0.3); + --neutral-weak: rgba(11, 26, 43, 0.08); + --warning-weak: rgba(245, 158, 11, 0.25); + --border: #d8dee5; + --shadow: rgba(11, 26, 43, 0.12); + --surface-glass: rgba(255, 255, 255, 0.8); + --brand-surface: #0b1a2b; + --brand-text: #f8fafc; + --brand-muted: #9fb3c8; + --tangerine: #1b8b75; + --teal: #14b8a6; + --berry: #1f334d; + --sun: #f59e0b; + --sky: #ecfdf9; + --map-glow-a: rgba(27, 139, 117, 0.35); + --map-glow-b: rgba(245, 158, 11, 0.35); + --pattern-opacity: 0.22; +} + +@media (prefers-color-scheme: dark) { + :root { + color-scheme: dark; + --ink: #f8fafc; + --ink-soft: #a7b4c5; + --surface: #0b0f14; + --surface-strong: #111922; + --surface-alt: #0f1620; + --accent: #1fbf98; + --accent-bright: #2dd4bf; + --accent-weak: rgba(45, 212, 191, 0.18); + --accent-shadow: rgba(45, 212, 191, 0.2); + --neutral-weak: rgba(226, 232, 240, 0.08); + --warning-weak: rgba(245, 158, 11, 0.3); + --border: #1f2a37; + --shadow: rgba(0, 0, 0, 0.35); + --surface-glass: rgba(17, 25, 34, 0.8); + --brand-surface: #101a27; + --brand-text: #f8fafc; + --brand-muted: #9fb3c8; + --tangerine: #1fbf98; + --teal: #2dd4bf; + --berry: #1b2b3f; + --sun: #f59e0b; + --sky: #0f2a24; + --map-glow-a: rgba(45, 212, 191, 0.35); + --map-glow-b: rgba(245, 158, 11, 0.35); + --pattern-opacity: 0.08; + } } * { @@ -19,7 +67,12 @@ body { margin: 0; min-height: 100vh; - background: radial-gradient(circle at top left, #fff5d6 0%, #f7f2e8 45%, #e8f6f8 100%); + background: radial-gradient( + circle at top left, + var(--surface-strong) 0%, + var(--surface) 45%, + var(--surface-alt) 100% + ); color: var(--ink); font-family: "Recursive", "Segoe UI", sans-serif; position: relative; @@ -31,7 +84,7 @@ body::before { position: fixed; inset: 0; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140' viewBox='0 0 140 140'%3E%3Crect width='140' height='140' fill='none'/%3E%3Ccircle cx='4' cy='4' r='1.2' fill='%23000000' opacity='0.08'/%3E%3Ccircle cx='74' cy='60' r='1.3' fill='%23000000' opacity='0.08'/%3E%3Ccircle cx='120' cy='96' r='1' fill='%23000000' opacity='0.06'/%3E%3C/svg%3E"); - opacity: 0.25; + opacity: var(--pattern-opacity); mix-blend-mode: multiply; pointer-events: none; z-index: 0; @@ -56,7 +109,12 @@ body::before { gap: 1.8rem; padding: 2.5rem; border-radius: 28px; - background: linear-gradient(130deg, #fff4dd 10%, #fff 45%, #e0fbff 100%); + background: linear-gradient( + 130deg, + var(--surface-strong) 10%, + var(--surface) 45%, + var(--surface-alt) 100% + ); box-shadow: 0 20px 50px var(--shadow); position: relative; overflow: hidden; @@ -84,8 +142,8 @@ body::before { font-size: 0.85rem; letter-spacing: 0.08em; text-transform: uppercase; - background: #fff; - box-shadow: 0 10px 20px rgba(0, 0, 0, 0.08); + background: var(--surface-strong); + box-shadow: 0 10px 20px var(--shadow); width: fit-content; } @@ -121,13 +179,13 @@ body::before { } .btn.primary { - background: var(--tangerine); + background: var(--accent); color: #fff; - box-shadow: 0 16px 30px rgba(255, 138, 61, 0.35); + box-shadow: 0 16px 30px var(--accent-shadow); } .btn.ghost { - background: rgba(0, 0, 0, 0.08); + background: var(--neutral-weak); color: var(--ink); } @@ -142,10 +200,10 @@ body::before { } .card { - background: #fff; + background: var(--surface-strong); border-radius: 20px; padding: 1.6rem; - box-shadow: 0 16px 40px rgba(14, 30, 40, 0.08); + box-shadow: 0 16px 40px var(--shadow); display: grid; gap: 0.6rem; } @@ -158,7 +216,7 @@ body::before { .card p { margin: 0; - color: rgba(20, 20, 20, 0.8); + color: var(--ink-soft); line-height: 1.5; } @@ -176,8 +234,8 @@ body::before { } .map__panel { - background: #111827; - color: #fff; + background: var(--brand-surface); + color: var(--brand-text); border-radius: 24px; padding: 2rem; position: relative; @@ -189,7 +247,7 @@ body::before { content: ""; position: absolute; inset: 0; - background: linear-gradient(120deg, rgba(29, 154, 163, 0.35), rgba(255, 138, 61, 0.35)); + background: linear-gradient(120deg, var(--map-glow-a), var(--map-glow-b)); opacity: 0.7; } @@ -206,7 +264,7 @@ body::before { .map__panel span { font-size: 0.95rem; - opacity: 0.8; + color: var(--brand-muted); } .map__legend { @@ -226,17 +284,17 @@ body::before { height: 12px; border-radius: 50%; background: var(--teal); - box-shadow: 0 0 0 4px rgba(29, 154, 163, 0.2); + box-shadow: 0 0 0 4px var(--accent-weak); } .legend-dot.orange { background: var(--tangerine); - box-shadow: 0 0 0 4px rgba(255, 138, 61, 0.2); + box-shadow: 0 0 0 4px var(--accent-weak); } .legend-dot.sun { background: var(--sun); - box-shadow: 0 0 0 4px rgba(255, 209, 102, 0.25); + box-shadow: 0 0 0 4px var(--warning-weak); } .footer { @@ -247,8 +305,8 @@ body::before { justify-content: space-between; padding: 2rem; border-radius: 24px; - background: rgba(255, 255, 255, 0.8); - box-shadow: 0 10px 25px rgba(12, 24, 38, 0.1); + background: var(--surface-glass); + box-shadow: 0 10px 25px var(--shadow); } .footer strong { diff --git a/front/play.css b/front/play.css index 23487f9..754e570 100644 --- a/front/play.css +++ b/front/play.css @@ -1,17 +1,81 @@ @import url("https://fonts.googleapis.com/css2?family=Fraunces:wght@500;600;700&family=Sora:wght@300;400;600;700&display=swap"); :root { - color-scheme: light; - --ink: #0c1824; - --ink-soft: rgba(12, 24, 36, 0.72); - --surface: #f7f5f0; - --surface-strong: #fff; - --accent: #2bb79a; + color-scheme: light dark; + --ink: #0b1a2b; + --ink-soft: #6b7280; + --surface: #f7f7f9; + --surface-strong: #ffffff; + --surface-alt: #f6f8fa; + --surface-soft: #f4faf8; + --accent: #1b8b75; --accent-dark: #1b8b75; - --gold: #f4b648; - --danger: #e84d4d; - --shadow: rgba(12, 24, 36, 0.15); - --border: rgba(12, 24, 36, 0.08); + --accent-bright: #14b8a6; + --accent-text: #042f2e; + --accent-weak: rgba(27, 139, 117, 0.12); + --accent-weak-2: rgba(27, 139, 117, 0.16); + --accent-weak-3: rgba(27, 139, 117, 0.08); + --accent-weak-4: rgba(27, 139, 117, 0.18); + --accent-border: rgba(27, 139, 117, 0.4); + --accent-shadow: rgba(27, 139, 117, 0.3); + --accent-shadow-soft: rgba(27, 139, 117, 0.2); + --gold: #f59e0b; + --warning-text: #b45309; + --warning-text-strong: #7c2d12; + --warning-weak: rgba(245, 158, 11, 0.2); + --warning-weak-2: rgba(245, 158, 11, 0.15); + --warning-weak-3: rgba(245, 158, 11, 0.25); + --danger: #b91c1c; + --shadow: rgba(11, 26, 43, 0.12); + --shadow-strong: rgba(11, 26, 43, 0.2); + --surface-glass: rgba(255, 255, 255, 0.7); + --border: #d8dee5; + --border-muted: #e2e8f0; + --neutral-weak: rgba(11, 26, 43, 0.08); + --neutral-weak-2: rgba(11, 26, 43, 0.04); + --neutral-weak-3: rgba(11, 26, 43, 0.12); + --neutral-weak-4: rgba(11, 26, 43, 0.1); + --blackout: rgba(11, 15, 20, 0.92); +} + +@media (prefers-color-scheme: dark) { + :root { + color-scheme: dark; + --ink: #f8fafc; + --ink-soft: #a7b4c5; + --surface: #0b0f14; + --surface-strong: #111922; + --surface-alt: #0f1620; + --surface-soft: #0f1620; + --accent: #1fbf98; + --accent-dark: #2dd4bf; + --accent-bright: #2dd4bf; + --accent-text: #04221b; + --accent-weak: rgba(45, 212, 191, 0.18); + --accent-weak-2: rgba(45, 212, 191, 0.22); + --accent-weak-3: rgba(45, 212, 191, 0.12); + --accent-weak-4: rgba(45, 212, 191, 0.28); + --accent-border: rgba(45, 212, 191, 0.35); + --accent-shadow: rgba(45, 212, 191, 0.2); + --accent-shadow-soft: rgba(45, 212, 191, 0.14); + --gold: #f59e0b; + --warning-text: #f59e0b; + --warning-text-strong: #fbbf24; + --warning-weak: rgba(245, 158, 11, 0.22); + --warning-weak-2: rgba(245, 158, 11, 0.18); + --warning-weak-3: rgba(245, 158, 11, 0.28); + --danger: #f87171; + --shadow: rgba(0, 0, 0, 0.35); + --shadow-strong: rgba(0, 0, 0, 0.45); + --surface-glass: rgba(17, 25, 34, 0.7); + --border: #1f2a37; + --border-muted: #243244; + --neutral-weak: rgba(226, 232, 240, 0.08); + --neutral-weak-2: rgba(226, 232, 240, 0.04); + --neutral-weak-3: rgba(226, 232, 240, 0.12); + --neutral-weak-4: rgba(226, 232, 240, 0.1); + --blackout: rgba(2, 6, 12, 0.94); + } } * { @@ -23,18 +87,23 @@ body { min-height: 100vh; font-family: "Sora", "Segoe UI", sans-serif; color: var(--ink); - background: radial-gradient(circle at top, #f8f7f2 0%, #eef4f3 50%, #e6edf1 100%); + background: radial-gradient( + circle at top, + var(--surface-strong) 0%, + var(--surface) 55%, + var(--surface-alt) 100% + ); } body::before { content: ""; position: fixed; inset: 0; - background-image: linear-gradient(120deg, rgba(43, 183, 154, 0.08), transparent), + background-image: linear-gradient(120deg, var(--accent-weak-3), transparent), repeating-linear-gradient( 90deg, - rgba(12, 24, 36, 0.05) 0, - rgba(12, 24, 36, 0.05) 1px, + var(--neutral-weak-2) 0, + var(--neutral-weak-2) 1px, transparent 1px, transparent 80px ); @@ -106,15 +175,15 @@ body::before { .pill { padding: 0.4rem 0.8rem; border-radius: 999px; - background: rgba(43, 183, 154, 0.12); + background: var(--accent-weak); color: var(--accent-dark); font-weight: 600; font-size: 0.8rem; } .pill.gold { - background: rgba(244, 182, 72, 0.2); - color: #9a6212; + background: var(--warning-weak); + color: var(--warning-text); } .layout { @@ -155,7 +224,7 @@ body::before { } .tabs-nav a.active { - background: rgba(43, 183, 154, 0.12); + background: var(--accent-weak); color: var(--accent-dark); } @@ -179,7 +248,7 @@ body::before { gap: 0.8rem; padding: 0.4rem; border-radius: 999px; - background: rgba(255, 255, 255, 0.7); + background: var(--surface-glass); border: 1px solid var(--border); box-shadow: 0 8px 20px var(--shadow); } @@ -197,7 +266,7 @@ body::before { } .tools-tab.active { - background: rgba(43, 183, 154, 0.16); + background: var(--accent-weak-2); color: var(--accent-dark); } @@ -220,15 +289,15 @@ body::before { padding: 0.7rem 0.9rem; border-radius: 14px; border: 1px solid transparent; - background: rgba(12, 24, 36, 0.04); + background: var(--neutral-weak-2); text-align: left; cursor: pointer; transition: border 0.2s ease, background 0.2s ease; } .player-roster-item.active { - border-color: rgba(43, 183, 154, 0.4); - background: rgba(43, 183, 154, 0.12); + border-color: var(--accent-border); + background: var(--accent-weak); } .player-roster-main { @@ -264,7 +333,7 @@ body::before { align-items: center; padding: 0.8rem 1rem; border-radius: 16px; - background: rgba(43, 183, 154, 0.08); + background: var(--accent-weak-3); margin-bottom: 0.8rem; } @@ -341,7 +410,8 @@ body::before { border: 1px solid var(--border); font-family: inherit; font-size: 0.95rem; - background: #fff; + background: var(--surface-strong); + color: var(--ink); } .form select[multiple] { @@ -380,7 +450,7 @@ body::before { padding: 0.5rem 0.7rem; border-radius: 12px; border: 1px solid var(--border); - background: rgba(255, 255, 255, 0.7); + background: var(--surface-glass); } .autosave-meta { @@ -397,12 +467,12 @@ body::before { cursor: pointer; background: var(--accent); color: #fff; - box-shadow: 0 12px 20px rgba(43, 183, 154, 0.3); + box-shadow: 0 12px 20px var(--accent-shadow); transition: transform 0.2s ease, box-shadow 0.2s ease; } .button.secondary { - background: rgba(12, 24, 36, 0.08); + background: var(--neutral-weak); color: var(--ink); box-shadow: none; } @@ -444,7 +514,7 @@ body::before { gap: 1rem; padding: 0.7rem 0.8rem; border-radius: 14px; - background: rgba(12, 24, 36, 0.04); + background: var(--neutral-weak-2); } .list-item strong { @@ -470,18 +540,18 @@ body::before { border-radius: 999px; font-size: 0.7rem; font-weight: 600; - background: rgba(43, 183, 154, 0.12); + background: var(--accent-weak); color: var(--accent-dark); } .badge.dummy { - background: rgba(244, 182, 72, 0.15); - color: #9a6212; + background: var(--warning-weak-2); + color: var(--warning-text); } .badge.offline { - background: rgba(12, 24, 36, 0.1); - color: #5b6470; + background: var(--neutral-weak-4); + color: var(--ink-soft); } .status { @@ -497,7 +567,7 @@ body::before { display: grid; place-items: center; padding: 1rem; - background: #fff; + background: var(--surface-strong); border-radius: 16px; border: 1px dashed var(--border); } @@ -535,7 +605,7 @@ body::before { align-items: center; gap: 1.2rem; padding: 1.2rem 1.6rem; - background: linear-gradient(135deg, #1d9d86, #2bb79a); + background: linear-gradient(135deg, var(--accent), var(--accent-bright)); color: #fff; } @@ -559,7 +629,7 @@ body::before { .chat-search { padding: 0.9rem 1.6rem; - background: #f4faf8; + background: var(--surface-soft); border-bottom: 1px solid var(--border); } @@ -569,7 +639,8 @@ body::before { border: 1px solid var(--border); padding: 0.6rem 1rem; font-family: inherit; - background: #fff; + background: var(--surface-strong); + color: var(--ink); } .chat-list { @@ -584,12 +655,12 @@ body::before { text-decoration: none; color: var(--ink); border-bottom: 1px solid var(--border); - background: #fff; + background: var(--surface-strong); transition: background 0.2s ease; } .chat-list-item:hover { - background: rgba(43, 183, 154, 0.08); + background: var(--accent-weak-3); } .chat-list-item.unread strong { @@ -607,17 +678,17 @@ body::before { display: grid; place-items: center; font-weight: 700; - color: #0b3c32; - background: rgba(43, 183, 154, 0.18); + color: var(--accent-text); + background: var(--accent-weak-4); } .chat-avatar--direct { - background: rgba(244, 182, 72, 0.2); - color: #9a6212; + background: var(--warning-weak); + color: var(--warning-text); } .chat-avatar--group { - background: rgba(12, 24, 36, 0.1); + background: var(--neutral-weak-4); color: var(--ink); } @@ -643,7 +714,7 @@ body::before { height: 10px; border-radius: 50%; background: var(--danger); - box-shadow: 0 0 0 2px #fff; + box-shadow: 0 0 0 2px var(--surface-strong); } .chat-list-top strong { @@ -677,22 +748,22 @@ body::before { text-transform: uppercase; letter-spacing: 0.08em; border-radius: 999px; - background: rgba(12, 24, 36, 0.08); + background: var(--neutral-weak); color: var(--ink-soft); } .chat-pill--direct { - background: rgba(244, 182, 72, 0.25); - color: #9a6212; + background: var(--warning-weak-3); + color: var(--warning-text); } .chat-pill--global { - background: rgba(43, 183, 154, 0.18); + background: var(--accent-weak-4); color: var(--accent-dark); } .chat-pill--group { - background: rgba(12, 24, 36, 0.12); + background: var(--neutral-weak-3); color: var(--ink); } @@ -709,7 +780,7 @@ body::before { display: grid; place-items: center; text-decoration: none; - box-shadow: 0 16px 24px rgba(27, 139, 117, 0.3); + box-shadow: 0 16px 24px var(--accent-shadow); } .chat-thread-header { @@ -718,7 +789,7 @@ body::before { justify-content: space-between; gap: 1.2rem; padding: 1.1rem 1.6rem; - background: linear-gradient(135deg, #1d9d86, #2bb79a); + background: linear-gradient(135deg, var(--accent), var(--accent-bright)); color: #fff; } @@ -751,7 +822,7 @@ body::before { .chat-thread { display: grid; grid-template-rows: 1fr auto; - background: #f4faf8; + background: var(--surface-soft); min-height: 60vh; } @@ -762,7 +833,7 @@ body::before { align-items: stretch; gap: 0.7rem; overflow-y: auto; - background: linear-gradient(180deg, rgba(43, 183, 154, 0.08), transparent 45%); + background: linear-gradient(180deg, var(--accent-weak-3), transparent 45%); } .chat-empty { @@ -788,14 +859,14 @@ body::before { max-width: 74%; padding: 0.6rem 0.85rem; border-radius: 16px 16px 16px 6px; - background: #fff; - box-shadow: 0 8px 18px rgba(12, 24, 36, 0.12); + background: var(--surface-strong); + box-shadow: 0 8px 18px var(--shadow); display: grid; gap: 0.2rem; } .chat-bubble.me { - background: rgba(43, 183, 154, 0.18); + background: var(--accent-weak-4); border-radius: 16px 16px 6px 16px; } @@ -821,7 +892,7 @@ body::before { grid-template-columns: 1fr auto; gap: 0.6rem; padding: 0.9rem 1.1rem 1.1rem; - background: #fff; + background: var(--surface-strong); border-top: 1px solid var(--border); } @@ -830,6 +901,8 @@ body::before { border: 1px solid var(--border); padding: 0.7rem 1rem; font-family: inherit; + background: var(--surface-strong); + color: var(--ink); } .chat-send { @@ -846,7 +919,7 @@ body::before { padding: 1.5rem 1.6rem 2rem; display: grid; gap: 1.4rem; - background: #f7fbfa; + background: var(--surface-alt); } .chat-toggle { @@ -855,7 +928,7 @@ body::before { border-radius: 999px; overflow: hidden; border: 1px solid var(--border); - background: #fff; + background: var(--surface-strong); } .chat-toggle button { @@ -883,7 +956,8 @@ body::before { border: 1px solid var(--border); padding: 0.7rem 0.9rem; font-family: inherit; - background: #fff; + background: var(--surface-strong); + color: var(--ink); } .chat-members h2 { @@ -904,13 +978,13 @@ body::before { padding: 0.7rem 0.8rem; border-radius: 14px; border: 1px solid var(--border); - background: #fff; + background: var(--surface-strong); cursor: pointer; } .chat-member.selected { border-color: var(--accent); - box-shadow: 0 8px 18px rgba(27, 139, 117, 0.2); + box-shadow: 0 8px 18px var(--accent-shadow-soft); } .chat-member input { @@ -935,7 +1009,7 @@ body::before { .blackout { position: fixed; inset: 0; - background: rgba(12, 24, 36, 0.88); + background: var(--blackout); color: #fff; display: grid; place-items: center;