/* Design tokens. Every game picks its own palette and typeface here; the components only ever name these tokens, so a new look is this block. */ :root { --slate: #1c2830; --slate-deep: #121a20; --bone: #e9e2d2; --bone-dim: #98a4ab; --bone-faint: #5d6b73; --ember: #f0a53a; --frost: #8cc8e0; --blood: #e0655c; --rule: rgba(233, 226, 210, 0.14); --rule-strong: rgba(233, 226, 210, 0.32); --font: 'Iowan Old Style', Georgia, serif; --gutter: clamp(16px, 3vw, 40px); } * { box-sizing: border-box; } html { background: var(--slate-deep); } body { margin: 0; background: var(--slate-deep); color: var(--bone); font-family: var(--font); font-size: 17px; line-height: 1.55; -webkit-font-smoothing: antialiased; } h1, h2, h3 { font-weight: 500; line-height: 1.15; margin: 0; } p { margin: 0; } button, select, input, textarea { font: inherit; color: inherit; } button { cursor: pointer; } button:focus-visible, select:focus-visible, input:focus-visible, textarea:focus-visible, summary:focus-visible { outline: 2px solid var(--frost); outline-offset: 2px; } select, input[type='text'], textarea { background: var(--slate-deep); border: 1px solid var(--rule-strong); border-radius: 4px; padding: 0.3rem 0.6rem; max-width: 100%; color: var(--bone); } button:disabled { opacity: 0.35; cursor: not-allowed; } /* An action written as a word in running text. */ .link { background: none; border: 0; padding: 0; font-size: inherit; color: var(--frost); text-decoration: underline; } /* The one button that commits a move. */ .commit { background: var(--bone); color: var(--slate-deep); border: 0; border-radius: 4px; padding: 0.6rem 1.4rem; font-size: 1.05rem; font-weight: 500; } .commit:hover:not(:disabled) { background: #fff; } .commit.small { padding: 0.4rem 0.9rem; font-size: 1rem; } /* A bordered, unemphatic button: navigation, secondary actions. */ .quiet { background: none; border: 1px solid var(--rule-strong); border-radius: 4px; padding: 0.4rem 0.9rem; white-space: nowrap; color: var(--bone); text-decoration: none; line-height: 1.55; } .quiet:hover:not(:disabled) { border-color: var(--bone); } .muted { color: var(--bone-dim); } .small { font-size: 0.85rem; } .warning { color: var(--blood); } .eyebrow { font-size: 0.85rem; letter-spacing: 0.12em; color: var(--bone-faint); margin-bottom: 0.2rem; } .visually-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; } /* The × that sends a bot away or forgets a game. */ .dismiss { background: none; border: 0; color: var(--bone-faint); font-size: 1.1rem; padding: 0 0.4rem; line-height: 1; } .dismiss:hover { color: var(--blood); } /* A page of reading beside the game: the rules, the guide. */ .reading { max-width: 46rem; margin: 0 auto; padding: 1.5rem var(--gutter) 4rem; } .reading a { color: var(--frost); } .reading .back { font-size: 0.95rem; } .reading h1 { font-size: 2.4rem; font-weight: 300; margin: 0.5rem 0 0.3rem; } .reading .lede { color: var(--bone-dim); max-width: 40em; } /* A lesson: the boards beside the words. */ .reading.wide { max-width: 1280px; } /* The chronicle's lines, coloured by what they tell, at the table and in a lesson. */ .telling li.capture { color: var(--ember); } .telling li.check, .telling li.freeze, .telling li.promotion { color: var(--frost); } .telling li.note { color: var(--bone-dim); font-style: italic; } .telling li.end { color: var(--blood); } .reading section { padding: 1.25rem 0 0.5rem; border-top: 1px solid var(--rule); margin-top: 1rem; } .reading h2 { font-size: 1.5rem; margin-bottom: 0.7rem; } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation: none !important; transition: none !important; } }