From bf01d9801deee0bb283d32f906961dca68379ec0 Mon Sep 17 00:00:00 2001 From: pavel444-byte Date: Thu, 8 Oct 2026 20:37:50 +0500 Subject: [PATCH] Add theme toggle and update MineGeo branding --- app/appearance.css | 457 ++++++++++++++++++++++++ app/icon.png | Bin 0 -> 6669 bytes app/layout.tsx | 7 +- assets/branding/minegeo-mark-source.png | Bin 0 -> 838384 bytes components/Brand.tsx | 12 +- components/Shell.tsx | 3 + components/ThemeToggle.tsx | 59 +++ docs/appearance.md | 32 ++ public/images/minegeo-mark.webp | Bin 0 -> 8098 bytes shared/locales/ru.json | 4 +- shared/theme.ts | 5 + 11 files changed, 574 insertions(+), 5 deletions(-) create mode 100644 app/appearance.css create mode 100644 app/icon.png create mode 100644 assets/branding/minegeo-mark-source.png create mode 100644 components/ThemeToggle.tsx create mode 100644 docs/appearance.md create mode 100644 public/images/minegeo-mark.webp create mode 100644 shared/theme.ts diff --git a/app/appearance.css b/app/appearance.css new file mode 100644 index 0000000..b052105 --- /dev/null +++ b/app/appearance.css @@ -0,0 +1,457 @@ +/* Site chrome only: map artwork, parchment, tiles and panoramas keep their colors. */ +.brand { + gap: 9px; +} +.brand .brand-mark { + display: block; + width: 42px; + height: 46px; + object-fit: contain; + flex-shrink: 0; +} +.brand > span.brand-wordmark { + color: var(--text); + font: + 850 25px/1 Arial, + Helvetica, + sans-serif; + letter-spacing: -1.3px; +} +.brand-wordmark > span { + color: var(--green); +} +.brand sup { + margin-left: 0; +} +.site-footer .brand .brand-mark { + width: 36px; + height: 40px; +} +.game-header .brand .brand-wordmark { + font-size: 22px; +} +.game-header .brand .brand-mark { + width: 32px; + height: 36px; +} +.theme-toggle { + display: inline-flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + width: 44px; + height: 44px; + border: 1px solid var(--line); + border-radius: var(--radius-control); + color: var(--text); + background: var(--panel); +} +.theme-toggle:hover { + background: var(--panel2); + border-color: var(--green); +} +.theme-moon, +html[data-theme="light"] .theme-sun { + display: none; +} +html[data-theme="light"] .theme-moon { + display: block; +} +html[data-theme="light"] { + --bg: #f4f6f1; + --panel: #ffffff; + --panel2: #e9eee5; + --line: #cad4c6; + --green: #397325; + --muted: #586654; + --text: #202c20; + --board-stone: #ffffff; + --board-edge: #cad4c6; + --board-gold: #866318; + color-scheme: light; +} +html[data-theme="light"] body { + background-image: radial-gradient( + ellipse at 80% 12%, + #dce8d180, + transparent 55% + ); +} +html[data-theme="light"] :is(h1, h2, h3) { + text-shadow: none; +} +html[data-theme="light"] .hero h1 span { + text-shadow: none; +} +html[data-theme="light"] :is(.site-header, .site-footer) { + background: var(--bg); + border-color: var(--line); +} +html[data-theme="light"] :is(nav, .brand sup) { + color: var(--muted); + border-color: var(--line); +} +html[data-theme="light"] .header-account { + background: #e0ecd7; + color: #2b4b21; + border-color: #a8bf9c; + border-bottom-color: #739565; +} +html[data-theme="light"] .header-account:hover { + background: #d1e3c5; +} +html[data-theme="light"] + :is(.button, .button.secondary, .icon-button):not(.map-actions .button) { + background: var(--panel2); + color: var(--text); + border-color: #aab9a3; + text-shadow: none; + box-shadow: + inset 0 1px #fff, + 0 3px 8px #243a1812; +} +html[data-theme="light"] + :is(.button, .icon-button):not(.map-actions .button):hover { + background: #dce7d4; +} +html[data-theme="light"] .button.primary:not(.map-actions .button) { + background: linear-gradient(#a6df80, #83c05d); + color: #18310d; + border-color: #74a554; +} +html[data-theme="light"] .button.primary:not(.map-actions .button):hover { + background: linear-gradient(#b7e994, #98ce75); +} +html[data-theme="light"] + :is( + .world-stats span:not(.live-dot), + .hero p, + .hero-mode-note, + .hero-notes, + .contribute-banner p, + .play-steps li > span, + .round-result p, + .round-result .score small, + .results-total small, + .card-body p, + .card-meta, + .first-map-panel p, + .play-steps p, + .mode-row p, + .mode-row h3 span, + .mode-footnote, + .site-footer p, + .site-footer > div:nth-child(2), + .leaderboard-preview-copy p, + .board-heading > span:last-child, + .board-footnote, + .leaderboard-table thead th, + .rank-number, + .score-unit, + .leaderboard-table .games-column, + .leaderboard-table .average-column, + .leaderboard-period, + .podium-label, + .podium-player p span, + .rankings-heading p, + .leaderboard-pagination, + .leaderboard-pagination nav, + .leaderboard-rules p, + .leaderboard-empty p, + .field + ) { + color: var(--muted); +} +html[data-theme="light"] + :is( + .eyebrow, + .status-label, + .text-link, + .leaderboard-preview-copy .text-link, + .leaderboard-rules .text-link, + .history-table th + ) { + color: var(--green); +} +html[data-theme="light"] + :is( + .world-stats, + .map-card, + .home-page .map-card, + .card-body, + .home-page .card-body, + .home-panel, + .home-panel + .home-panel, + .first-map-panel, + .empty-state, + .auth-layout .auth-card, + .settings-card, + .leaderboard-preview-board, + .rankings-board, + .tool-card, + .start-panel, + .auth-card, + .editor-panel, + .report-dialog, + .result-summary, + .round-result, + .draft-row, + .token-box + ) { + background: var(--panel); + border-color: var(--line); + box-shadow: 0 5px 18px #243a1810; +} +html[data-theme="light"] + :is( + .world-stats > div, + .card-meta, + .card-body, + .home-leaderboard, + .leaderboard-toolbar, + .leaderboard-rules, + .board-footnote, + .leaderboard-table td, + .leaderboard-table th, + .leaderboard-pagination, + .search-summary, + .history-table td, + .history-table th + ) { + border-color: var(--line); +} +html[data-theme="light"] + :is(.world-stats strong, .score-column strong, .podium-player p) { + color: var(--text); +} +html[data-theme="light"] + :is(.mode-row, .account-email, .auth-tabs, .leaderboard-table thead) { + background: var(--panel2); + border-color: var(--line); +} +html[data-theme="light"] .mode-row:hover { + background: #dce7d4; + border-color: #99b389; +} +html[data-theme="light"] :is(.contribute-banner, .badge) { + background: #e9f2e1; + color: #36552a; + border-color: #aac49b; +} +html[data-theme="light"] + :is( + .field input, + .field textarea, + .field select, + .search-field, + .leaderboard-search, + .preview-toolbar select, + .language-switcher select + ) { + background: var(--panel); + color: var(--text); + border-color: #b4c3ac; +} +html[data-theme="light"] :is(input, textarea)::placeholder { + color: #64735e; + opacity: 1; +} +html[data-theme="light"] + :is( + .tabs button.active, + .auth-tabs button[aria-pressed="true"], + .difficulty-options button.selected, + .leaderboard-filters a[aria-current="page"] + ) { + background: #dcebd1; + color: #2b5420; + border-color: #88aa75; +} +html[data-theme="light"] + :is(.difficulty-options button, .leaderboard-search button) { + background: var(--panel2); + color: var(--text); + border-color: var(--line); +} +html[data-theme="light"] + :is(.leaderboard-filters a:hover, .leaderboard-table tbody tr:hover) { + background: #eef3e9; + color: var(--text); +} +html[data-theme="light"] .your-row { + background: #e9f2e1; +} +html[data-theme="light"] + :is(.you-label, .leaderboard-skeleton, .leaderboard-skeleton > div) { + border-color: var(--line); +} +html[data-theme="light"] .leaderboard-skeleton span { + background: var(--panel2); +} +html[data-theme="light"] .page-number { + color: var(--text); +} +html[data-theme="light"] .rank-number.place-2 { + color: #52646f; +} +html[data-theme="light"] .rank-number.place-3 { + color: #866145; +} +html[data-theme="light"] + :is(.podium-block, .podium-1 .podium-block, .podium-3 .podium-block) { + background-color: var(--panel2); + border-color: #a8b99f; + box-shadow: + inset 5px 0 #ffffff80, + inset -5px 0 #243a1808, + 0 4px #cad4c6; +} +html[data-theme="light"] + :is(.podium-block > span, .podium-1 .podium-block > span) { + color: #506446; + text-shadow: none; +} +html[data-theme="light"] :is(pre, .token-box code) { + background: #e9eee5; + color: #33502a; + border-color: var(--line); +} +html[data-theme="light"] .error-message { + background: #fbeee8; + color: #953c25; +} +html[data-theme="light"] .success-message { + background: #e9f2e1; +} +html[data-theme="light"] .username-moderator { + color: #246494; +} +html[data-theme="light"] .username-bug-finder { + color: #866318; +} +html[data-theme="light"] .username-custom-prefix { + color: #7043a4; +} +html[data-theme="light"] .prefix-player-list button[aria-pressed="true"] { + border-color: #246494; +} +/* Keep freely chosen glow colors visible against a dark chip in light mode. */ +html[data-theme="light"] .username-glow { + background: #202c20; + border-radius: 5px; + padding-inline: 5px; +} +html[data-theme="light"] + :is( + .game-info, + .multiplayer-scoreboard, + .round-result, + .panorama-controls button, + .preview-viewport .panorama-controls button, + .preview-status, + .game-loading, + .look-help + ) { + background: #f4f6f1f2; + color: var(--text); + border-color: var(--line); +} +html[data-theme="light"] .game-info small { + color: var(--muted); +} +html[data-theme="light"] .game-info strong { + color: var(--text); +} +html[data-theme="light"] .game-info .urgent { + color: #a23924; +} +html[data-theme="light"] .game-header .brand { + background: #f4f6f1ed; + padding: 4px 9px; + border-radius: 9px; + filter: none; +} +html[data-theme="light"] .room-chat-mine strong { + color: var(--green); +} +html[data-theme="light"] .site-cursor-orbit { + border-color: #34532aa6; +} +html[data-theme="light"] .site-cursor-dot span { + background: #273b21; + box-shadow: 0 0 1px #fff; +} +@media (max-width: 1000px) { + .site-header { + height: auto; + } + .header-inner { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + padding-block: 14px; + gap: 14px; + } + .header-inner nav { + grid-column: 1 / -1; + grid-row: 2; + display: flex; + flex-wrap: wrap; + width: 100%; + border-top: 1px solid var(--line); + padding: 12px 0 2px; + } +} +@media (max-width: 500px) { + .header-inner { + grid-template-columns: minmax(0, 1fr) auto; + gap: 10px; + } + .header-actions { + grid-row: 1; + grid-column: 2; + justify-self: end; + } + .header-inner > .brand { + grid-row: 1; + grid-column: 1; + justify-self: start; + } + .header-inner .brand .brand-wordmark { + font-size: 21px; + } + .header-inner .brand .brand-mark { + width: 30px; + height: 36px; + } + .header-inner .brand { + gap: 5px; + } + .header-actions { + gap: 4px; + } + .game-header .brand .brand-wordmark { + font-size: 17px; + } +} +@media (max-width: 380px) { + .header-actions { + grid-row: 2; + grid-column: 1 / -1; + justify-self: start; + margin-left: 0; + } + .header-inner nav { + grid-row: 3; + } +} +@media (max-width: 500px) { + html[lang="ru"] .header-actions { + grid-row: 2; + grid-column: 1 / -1; + justify-self: start; + margin-left: 0; + } + html[lang="ru"] .header-inner nav { + grid-row: 3; + } +} diff --git a/app/icon.png b/app/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..79c3675cbad222d8a1073794e385bd242e4bb830 GIT binary patch literal 6669 zcmV+o8uI0dP)ZDAcgoGAq z2!tY*5J46Y1f>^UX%+-~7XeX35D^j4wXCj6X!czM!Md&rtD>2CpZU*s6a86!_niOV zjlX5zbH2IB$;{+F&-=XPE0^Pb9#eAjIpq((4dXI6j#F^|0jB5x+iq^1o|6p18Grjt z5~1L@)4+N3I?kiLK11S9Wcc{MDLnil&ZX~t#(RH*z+GqeR(gf`8HK`M6@|Jqm!kof ztA?^jm(K9+!U9iZsVLwh4v{X2eDL?}=5T!vB-Mksy!Aq4}Trv+!%wB+2Z)n6Adt-y|^Wp<>eaGbcGwom6=EbVi{r zrSS6WIY00CB_~QnhiBSv%FX)~62DDRD1h_uY0joe_O3Q1>u;B6$@?L!`aFhPK8axK zi5Q+f6_>}8e~)4JsW@Ir*I?%tF-*SGPrbtirihfnC#02y!dD6}zltkTX@8XLUqphF zR5s4b-=!=RzGXMf<)~A=stn2MYdtjo-72j7B8sKQLs)nuge%?);`hgcwEe3nJ@ah> zyT6HJ.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 XPn(-CtBLT100000NkvXXu0mjfJHOw` literal 0 HcmV?d00001 diff --git a/app/layout.tsx b/app/layout.tsx index 0a4a101..8f58744 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -16,6 +16,8 @@ import "./polish.css"; import "./mobile-game.css"; import "./multiplayer.css"; import "./support.css"; +import "./appearance.css"; +import { themeInitScript } from "@/shared/theme"; import { SiteSettingsProvider } from "@/components/SiteSettingsProvider"; import { initialSiteSettings } from "@/lib/site-settings"; import { user } from "@/lib/supabase"; @@ -40,7 +42,10 @@ export default async function RootLayout({ const [{ locale, preference, detectedLocale }, settings, account] = await Promise.all([getI18n(), initialSiteSettings(), user()]); return ( - + + +