/
romazherebtsov
/
tictactoe
Обзор
Документация
Войти
/
romazherebtsov
/
tictactoe
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
css/main.css
525 строк
11 KB
Мика
feat: добавлен переключатель темы (хакер / рай)
16 май 2026, 16:05
16 май 2026, 16:05
5896d32
Код
Авторство
О чём код?
:root, [data-theme="hacker"] { --bg-primary: #0a0a0a; --bg-secondary: #111827; --bg-tertiary: #1a2332; --accent-green: #00ff41; --accent-blue: #00d4ff; --accent-red: #ff4444; --text-primary: #e0e0e0; --text-dim: #4ade80; --text-muted: #4b5563; --border-color: #1e3a2f; --font-mono: 'Courier New', 'Consolas', 'Monaco', monospace; --font-display: 'Courier New', 'Consolas', 'Monaco', monospace; --cell-size: 110px; --board-gap: 6px; --glow-primary: rgba(0,255,65,0.5); --glow-soft: rgba(0,255,65,0.08); } /* ── Светлая «райская» тема ── */ [data-theme="heaven"] { --bg-primary: #fafbff; --bg-secondary: #ffffff; --bg-tertiary: #f1f4ff; --accent-green: #7aa7ff; --accent-blue: #b48cff; --accent-red: #ff8fa3; --text-primary: #2a2f45; --text-dim: #6b7aa6; --text-muted: #a8b1cf; --border-color: #e3e8fa; --font-mono: 'Georgia', 'Times New Roman', serif; --font-display: 'Georgia', 'Times New Roman', serif; --glow-primary: rgba(180, 200, 255, 0.6); --glow-soft: rgba(180, 200, 255, 0.18); } *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { font-size: 16px; } body { background: var(--bg-primary); color: var(--text-primary); font-family: var(--font-mono); min-height: 100vh; display: flex; align-items: flex-start; justify-content: center; padding: 2rem 1rem; transition: background 0.4s ease, color 0.4s ease; } [data-theme="heaven"] body { background: radial-gradient(circle at 20% 10%, #ffffff 0%, transparent 50%), radial-gradient(circle at 80% 90%, #eef1ff 0%, transparent 55%), linear-gradient(180deg, #fafbff 0%, #f4f6ff 100%); } .container { width: 100%; max-width: 520px; display: flex; flex-direction: column; gap: 1.5rem; } /* ── Header ── */ .header { text-align: center; border-bottom: 1px solid var(--border-color); padding-bottom: 1rem; } .title { font-size: 2rem; color: var(--accent-green); text-shadow: 0 0 12px var(--glow-primary); letter-spacing: 0.08em; line-height: 1.1; font-family: var(--font-display); } [data-theme="heaven"] .title { font-weight: 400; font-style: italic; letter-spacing: 0.04em; color: #6b7aa6; text-shadow: 0 0 18px rgba(180,200,255,0.7); } [data-theme="heaven"] .title .accent, [data-theme="heaven"] .title .blink { display: none; } .subtitle { color: var(--text-muted); font-size: 0.75rem; margin-top: 0.4rem; letter-spacing: 0.05em; } .accent { color: var(--accent-green); } .blink { display: inline-block; animation: blink-caret 1s step-end infinite; } @keyframes blink-caret { 50% { opacity: 0; } } /* ── Section labels ── */ .section-label { color: var(--text-dim); font-size: 0.7rem; margin-bottom: 0.5rem; letter-spacing: 0.06em; } /* ── Viewport nav ── */ .viewport-nav { display: flex; gap: 0.4rem; align-items: center; flex-wrap: wrap; } .nav-label { color: var(--text-muted); font-size: 0.65rem; flex-shrink: 0; margin-right: 0.2rem; } .viewport-btn { background: transparent; border: 1px solid var(--border-color); color: var(--text-muted); font-family: var(--font-mono); font-size: 0.65rem; padding: 0.3rem 0.55rem; cursor: pointer; transition: border-color 0.15s, color 0.15s, box-shadow 0.15s; letter-spacing: 0.04em; } .viewport-btn:hover, .viewport-btn.active { border-color: var(--accent-green); color: var(--accent-green); box-shadow: 0 0 6px rgba(0,255,65,0.25); } /* ── Difficulty ── */ .difficulty-buttons { display: flex; gap: 0.5rem; } .diff-btn { flex: 1; background: var(--bg-secondary); border: 1px solid var(--border-color); color: var(--text-muted); font-family: var(--font-mono); font-size: 0.72rem; padding: 0.5rem 0.25rem; cursor: pointer; transition: border-color 0.15s, color 0.15s, background 0.15s, box-shadow 0.15s; letter-spacing: 0.04em; } .diff-btn:hover:not(:disabled) { border-color: var(--accent-blue); color: var(--accent-blue); } .diff-btn.active { border-color: var(--accent-green); color: var(--accent-green); background: rgba(0,255,65,0.05); box-shadow: 0 0 8px rgba(0,255,65,0.2); } .diff-btn:disabled { cursor: not-allowed; opacity: 0.35; } /* ── Game area ── */ .game-area { display: flex; flex-direction: column; align-items: center; gap: 1rem; } .board { display: grid; grid-template-columns: repeat(3, var(--cell-size)); grid-template-rows: repeat(3, var(--cell-size)); gap: var(--board-gap); background: var(--border-color); border: 1px solid var(--border-color); padding: var(--board-gap); box-shadow: 0 0 24px var(--glow-soft); } [data-theme="heaven"] .board { background: transparent; border: none; padding: 0; gap: 14px; box-shadow: none; } .cell { width: var(--cell-size); height: var(--cell-size); background: var(--bg-secondary); border: 1px solid var(--bg-tertiary); color: var(--text-primary); font-family: var(--font-mono); font-size: 2.5rem; font-weight: bold; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: border-color 0.15s, box-shadow 0.15s; position: relative; overflow: hidden; } .cell:not(.occupied):not(.disabled):hover { border-color: var(--accent-green); box-shadow: 0 0 10px rgba(0,255,65,0.35), inset 0 0 8px rgba(0,255,65,0.06); } [data-theme="heaven"] .cell { background: #ffffff; border: 1px solid #e3e8fa; border-radius: 18px; box-shadow: 0 4px 16px rgba(180, 200, 255, 0.2), inset 0 0 0 1px rgba(255,255,255,0.8); } [data-theme="heaven"] .cell:not(.occupied):not(.disabled):hover { border-color: #c8d3ff; box-shadow: 0 6px 22px rgba(180, 200, 255, 0.45), inset 0 0 0 1px rgba(255,255,255,0.9); } .cell.occupied, .cell.disabled { cursor: not-allowed; } .cell.symbol-x { color: var(--accent-green); } .cell.symbol-o { color: var(--accent-blue); } .cell.win-line { background: rgba(0,255,65,0.07); border-color: var(--accent-green); } [data-theme="heaven"] .cell.symbol-x { color: #7aa7ff; } [data-theme="heaven"] .cell.symbol-o { color: #b48cff; } [data-theme="heaven"] .cell.win-line { background: linear-gradient(135deg, #ffffff, #eef3ff); border-color: #c8d3ff; box-shadow: 0 0 24px rgba(180, 200, 255, 0.6); } /* ── Result panel ── */ .result-panel { text-align: center; padding: 1.2rem 1rem; border: 1px solid var(--border-color); background: var(--bg-secondary); width: 100%; max-width: calc(3 * var(--cell-size) + 4 * var(--board-gap)); } .result-panel.hidden { display: none; } .result-message { font-size: 1.1rem; margin-bottom: 1rem; color: var(--accent-green); letter-spacing: 0.04em; min-height: 1.5em; } .result-message.defeat { color: var(--accent-red); } .result-message.draw { color: var(--accent-blue); } /* ── Buttons ── */ .btn-primary { background: transparent; border: 1px solid var(--accent-green); color: var(--accent-green); font-family: var(--font-mono); font-size: 0.82rem; padding: 0.5rem 1.5rem; cursor: pointer; letter-spacing: 0.08em; transition: background 0.15s, box-shadow 0.15s; } .btn-primary:hover { background: rgba(0,255,65,0.1); box-shadow: 0 0 10px rgba(0,255,65,0.35); } .btn-secondary { background: transparent; border: 1px solid var(--text-muted); color: var(--text-muted); font-family: var(--font-mono); font-size: 0.7rem; padding: 0.35rem 0.9rem; cursor: pointer; letter-spacing: 0.05em; transition: border-color 0.15s, color 0.15s; margin-top: 0.6rem; } .btn-secondary:hover { border-color: var(--accent-blue); color: var(--accent-blue); } /* ── Score ── */ .score-section { border-top: 1px solid var(--border-color); padding-top: 1rem; } .score-display { display: flex; gap: 0.5rem; justify-content: space-between; } .score-item { display: flex; flex-direction: column; align-items: center; gap: 0.2rem; flex: 1; padding: 0.5rem 0.25rem; border: 1px solid var(--border-color); background: var(--bg-secondary); } .score-label { font-size: 0.6rem; color: var(--text-muted); letter-spacing: 0.05em; } .score-value { font-size: 1.8rem; font-weight: bold; color: var(--text-primary); line-height: 1; } .score-value.accent { color: var(--accent-green); text-shadow: 0 0 8px rgba(0,255,65,0.4); } .score-value.red { color: var(--accent-red); } /* ── Footer ── */ .footer { border-top: 1px solid var(--border-color); padding-top: 0.5rem; font-size: 0.62rem; color: var(--text-muted); text-align: center; letter-spacing: 0.04em; } /* ── Theme switcher ── */ .theme-nav { display: flex; gap: 0.4rem; align-items: center; flex-wrap: wrap; } .theme-btn { background: transparent; border: 1px solid var(--border-color); color: var(--text-muted); font-family: var(--font-mono); font-size: 0.65rem; padding: 0.3rem 0.6rem; cursor: pointer; transition: border-color 0.15s, color 0.15s, box-shadow 0.15s, background 0.15s; letter-spacing: 0.04em; } .theme-btn:hover, .theme-btn.active { border-color: var(--accent-green); color: var(--accent-green); box-shadow: 0 0 6px var(--glow-soft); } [data-theme="heaven"] .theme-btn { border-radius: 999px; padding: 0.35rem 0.85rem; } [data-theme="heaven"] .theme-btn.active { background: #ffffff; border-color: #c8d3ff; color: #6b7aa6; box-shadow: 0 4px 14px rgba(180, 200, 255, 0.35); } /* ── Heaven-mode overrides for shared widgets ── */ [data-theme="heaven"] .subtitle::before, [data-theme="heaven"] .section-label, [data-theme="heaven"] .nav-label, [data-theme="heaven"] .footer p { /* в раю не пишут кодом — убираем визуальный «terminal»-привкус */ } [data-theme="heaven"] .header { border-bottom-color: #e3e8fa; } [data-theme="heaven"] .score-section, [data-theme="heaven"] .footer { border-top-color: #e3e8fa; } [data-theme="heaven"] .viewport-btn, [data-theme="heaven"] .diff-btn { border-radius: 999px; background: #ffffff; color: #6b7aa6; border-color: #e3e8fa; } [data-theme="heaven"] .viewport-btn:hover, [data-theme="heaven"] .viewport-btn.active, [data-theme="heaven"] .diff-btn:hover:not(:disabled), [data-theme="heaven"] .diff-btn.active { border-color: #c8d3ff; color: #5d6cad; background: linear-gradient(180deg, #ffffff, #f3f6ff); box-shadow: 0 4px 14px rgba(180, 200, 255, 0.35); } [data-theme="heaven"] .result-panel { background: #ffffff; border: 1px solid #e3e8fa; border-radius: 18px; box-shadow: 0 8px 28px rgba(180, 200, 255, 0.25); } [data-theme="heaven"] .result-message { color: #6b7aa6; } [data-theme="heaven"] .result-message.defeat { color: #c97c8c; } [data-theme="heaven"] .result-message.draw { color: #9a86d6; } [data-theme="heaven"] .btn-primary, [data-theme="heaven"] .btn-secondary { border-radius: 999px; background: #ffffff; border-color: #c8d3ff; color: #5d6cad; } [data-theme="heaven"] .btn-primary:hover, [data-theme="heaven"] .btn-secondary:hover { background: linear-gradient(180deg, #ffffff, #f3f6ff); box-shadow: 0 6px 20px rgba(180, 200, 255, 0.45); border-color: #b6c4ff; color: #4a5a9a; } [data-theme="heaven"] .score-item { background: #ffffff; border: 1px solid #e3e8fa; border-radius: 14px; box-shadow: 0 4px 14px rgba(180, 200, 255, 0.15); } [data-theme="heaven"] .score-value.accent { color: #7aa7ff; text-shadow: 0 0 8px rgba(180, 200, 255, 0.6); } [data-theme="heaven"] .score-value.red { color: #c97c8c; } [data-theme="heaven"] .score-value { color: #2a2f45; }