:root { --bg: #07151f; --bg-soft: rgba(12, 31, 42, 0.84); --panel: rgba(10, 26, 37, 0.86); --panel-border: rgba(255, 255, 255, 0.08); --panel-highlight: rgba(255, 193, 124, 0.22); --text: #eef5f2; --muted: #97adb0; --warm: #ffb86c; --warm-strong: #ff8f3c; --cool: #5de2d8; --cool-strong: #23bdb0; --danger: #ff6b6b; --shadow: 0 24px 70px rgba(0, 0, 0, 0.35); --radius: 26px; } *, *::before, *::after { box-sizing: border-box; } html { scroll-behavior: smooth; } body { margin: 0; min-height: 100vh; font-family: "Avenir Next", "Segoe UI", sans-serif; color: var(--text); background: radial-gradient(circle at top left, rgba(255, 184, 108, 0.15), transparent 30%), radial-gradient(circle at bottom right, rgba(93, 226, 216, 0.16), transparent 26%), linear-gradient(160deg, #030c12 0%, #07151f 46%, #0a2331 100%); } body::before { content: ""; position: fixed; inset: 0; pointer-events: none; background-image: linear-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.03) 1px, transparent 1px); background-size: 42px 42px; mask-image: radial-gradient(circle at center, black 48%, transparent 100%); } .ambient { position: fixed; width: 28rem; height: 28rem; border-radius: 50%; filter: blur(70px); opacity: 0.22; pointer-events: none; } .ambient-left { top: -10rem; left: -8rem; background: var(--warm-strong); } .ambient-right { right: -10rem; bottom: -8rem; background: var(--cool-strong); } .layout { position: relative; width: min(1200px, calc(100% - 2rem)); margin: 0 auto; padding: 1.2rem 0 2.4rem; } .hero, .panel, .footer { animation: rise 0.7s ease both; } .hero { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(280px, 0.95fr); gap: 1.2rem; align-items: stretch; margin-bottom: 1.2rem; } .hero-copy, .hero-preview, .panel, .panel.inset { border: 1px solid var(--panel-border); border-radius: calc(var(--radius) + 4px); background: var(--panel); backdrop-filter: blur(18px); box-shadow: var(--shadow); } .hero-copy { padding: 2rem; } .hero-preview { padding: 1.4rem; display: grid; gap: 1rem; } .eyebrow, .micro-label { margin: 0 0 0.4rem; text-transform: uppercase; letter-spacing: 0.18em; color: var(--cool); font-size: 0.76rem; } .micro-label { color: var(--warm); } h1, h2, h3, strong { font-family: "Baskerville", "Georgia", serif; } h1 { margin: 0; font-size: clamp(2.8rem, 7vw, 4.8rem); line-height: 0.96; } h2, h3 { margin: 0; } .lead, .section-copy, .preview-banner p, .rule-card p, .preview-list, .footer p { color: var(--muted); } .hero-actions, .setup-actions, .action-grid, .result-grid, .capture-grid { display: flex; flex-wrap: wrap; gap: 0.75rem; } .hero-actions { margin: 1.6rem 0 1rem; } .hero-pills { display: flex; flex-wrap: wrap; gap: 0.65rem; } .hero-pills span, .mini-chip, .status-badge { display: inline-flex; align-items: center; gap: 0.4rem; padding: 0.5rem 0.85rem; border-radius: 999px; border: 1px solid rgba(255, 255, 255, 0.08); background: rgba(255, 255, 255, 0.04); color: var(--text); } .preview-card, .preview-banner, .notice-card, .double-card, .rule-card, .setup-summary, .timer-card, .player-card, .cube-results > div { padding: 1rem; border-radius: 22px; background: linear-gradient(160deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.02)); border: 1px solid rgba(255, 255, 255, 0.07); } .preview-list { margin: 0.8rem 0 0; padding-left: 1rem; } .preview-list li + li { margin-top: 0.45rem; } .workspace { display: grid; gap: 1.2rem; } .panel { padding: 1.4rem; } .panel.inset { padding: 1.15rem; } .section-heading { display: flex; justify-content: space-between; gap: 1rem; align-items: flex-start; margin-bottom: 1.2rem; } .setup-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; } .field { display: grid; gap: 0.45rem; } .span-2 { grid-column: 1 / -1; } legend, .field > span { font-weight: 600; } input, textarea { width: 100%; padding: 0.95rem 1rem; border-radius: 16px; border: 1px solid rgba(255, 255, 255, 0.08); background: rgba(0, 0, 0, 0.18); color: var(--text); font: inherit; } textarea { resize: vertical; min-height: 6rem; } input:focus, textarea:focus { outline: 2px solid rgba(93, 226, 216, 0.35); outline-offset: 1px; } fieldset { margin: 0; padding: 0; border: 0; } .option-grid { display: grid; gap: 0.85rem; } .mode-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .preset-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } .option-card { position: relative; display: grid; gap: 0.45rem; min-height: 9rem; padding: 1rem 1rem 1rem 3rem; border-radius: 22px; border: 1px solid rgba(255, 255, 255, 0.08); background: rgba(255, 255, 255, 0.03); cursor: pointer; transition: transform 180ms ease, border-color 180ms ease, background 180ms ease; } .option-card:hover { transform: translateY(-3px); border-color: rgba(255, 184, 108, 0.35); } .option-card input { position: absolute; top: 1.2rem; left: 1rem; width: 1.1rem; height: 1.1rem; } .option-card:has(input:checked) { background: linear-gradient(160deg, rgba(255, 184, 108, 0.18), rgba(93, 226, 216, 0.08)); border-color: rgba(255, 184, 108, 0.55); box-shadow: inset 0 0 0 1px rgba(255, 184, 108, 0.14); } .button { appearance: none; border: 0; border-radius: 16px; padding: 0.95rem 1.1rem; font: inherit; font-weight: 700; cursor: pointer; color: var(--text); transition: transform 160ms ease, filter 160ms ease, background 160ms ease; } .button:hover { transform: translateY(-2px); filter: brightness(1.04); } .button:disabled { opacity: 0.4; cursor: not-allowed; transform: none; } .button.primary { background: linear-gradient(135deg, var(--warm-strong), var(--warm)); color: #1d140a; } .button.secondary { background: linear-gradient(135deg, rgba(93, 226, 216, 0.18), rgba(93, 226, 216, 0.08)); border: 1px solid rgba(93, 226, 216, 0.25); } .button.ghost { background: rgba(255, 255, 255, 0.05); border: 1px solid rgba(255, 255, 255, 0.08); } .button.capture { flex: 1 1 12rem; background: linear-gradient(135deg, rgba(255, 184, 108, 0.16), rgba(255, 184, 108, 0.08)); border: 1px solid rgba(255, 184, 108, 0.25); } .button.danger { border-color: rgba(255, 107, 107, 0.25); color: #ffd7d7; } .button.small { padding: 0.7rem 0.95rem; } .setup-summary { display: grid; gap: 0.35rem; color: var(--muted); } .live-grid { display: grid; grid-template-columns: 1.2fr 0.95fr; gap: 1rem; } .live-grid > .panel.inset:nth-child(4), .live-grid > .panel.inset:nth-child(5) { grid-column: span 1; } .score-panel { grid-column: 1 / -1; } .score-head { display: flex; justify-content: space-between; gap: 1rem; align-items: flex-start; margin-bottom: 1rem; } .timer-grid, .player-grid, .cube-results, .rules-grid { display: grid; gap: 0.85rem; } .timer-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); margin-bottom: 0.85rem; } .timer-card strong, .cube-clock strong { display: block; margin: 0.4rem 0; font-size: clamp(2rem, 6vw, 3.6rem); line-height: 0.95; } .timer-card.emphasized { background: linear-gradient(160deg, rgba(255, 184, 108, 0.22), rgba(255, 255, 255, 0.03)); } .player-grid, .cube-results, .rules-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .player-card { position: relative; overflow: hidden; } .player-card::after { content: ""; position: absolute; inset: auto -10% -50% auto; width: 9rem; height: 9rem; border-radius: 50%; opacity: 0.18; } .white-seat::after { background: var(--warm); } .black-seat::after { background: var(--cool); } .player-card.active { border-color: var(--panel-highlight); box-shadow: 0 0 0 1px rgba(255, 184, 108, 0.2), inset 0 0 0 1px rgba(255, 184, 108, 0.14); animation: pulse 1.8s ease-in-out infinite; } .player-name-row { display: flex; justify-content: space-between; gap: 1rem; align-items: center; margin-bottom: 0.35rem; } .player-color { padding: 0.25rem 0.55rem; border-radius: 999px; font-size: 0.82rem; text-transform: uppercase; letter-spacing: 0.1em; background: rgba(255, 255, 255, 0.08); } .muted { color: var(--muted); } .notice-card, .double-card { margin-top: 1rem; color: var(--muted); } .double-card strong { display: block; margin-bottom: 0.35rem; color: var(--warm); } .cube-head { display: flex; justify-content: space-between; gap: 1rem; align-items: center; margin-bottom: 1rem; } .cube-clock { padding: 1rem; border-radius: 22px; background: linear-gradient(160deg, rgba(93, 226, 216, 0.18), rgba(255, 255, 255, 0.03)); border: 1px solid rgba(93, 226, 216, 0.18); margin-bottom: 1rem; } .cube-results { margin: 1rem 0; } .cube-results strong { font-size: 1.35rem; display: block; margin-top: 0.2rem; } .compact { margin-top: 0.8rem; } .history-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.75rem; max-height: 24rem; overflow: auto; } .history-list li { padding: 0.85rem 0.95rem; border-radius: 18px; background: rgba(255, 255, 255, 0.04); border: 1px solid rgba(255, 255, 255, 0.06); } .history-list small { display: block; margin-bottom: 0.25rem; color: var(--cool); } .footer { margin-top: 1rem; padding: 1rem 0 0; } .footer a { color: var(--warm); } .hidden { display: none; } @keyframes rise { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: translateY(0); } } @keyframes pulse { 0%, 100% { box-shadow: 0 0 0 1px rgba(255, 184, 108, 0.2), inset 0 0 0 1px rgba(255, 184, 108, 0.14); } 50% { box-shadow: 0 0 0 1px rgba(255, 184, 108, 0.32), 0 0 32px rgba(255, 184, 108, 0.16); } } @media (max-width: 960px) { .hero, .live-grid, .mode-grid, .preset-grid, .player-grid, .cube-results, .rules-grid, .timer-grid { grid-template-columns: 1fr; } .setup-form, .live-grid { grid-template-columns: 1fr; } .section-heading, .score-head, .cube-head { flex-direction: column; } } @media (max-width: 640px) { .layout { width: min(100% - 1rem, 100%); } .hero-copy, .hero-preview, .panel { padding: 1rem; border-radius: 22px; } h1 { font-size: 2.65rem; } .button { width: 100%; justify-content: center; } .hero-actions, .setup-actions, .action-grid, .result-grid, .capture-grid { display: grid; } }