Engine: the facade re-exports the board in one block; describe() and the dead letters preference, void ply, the King-taken line, the identity maps and the unused imports are gone; SIDE_NAMES is the one spelling of a side; the drake's hunter comment no longer claims only four kinds reach the air. Prose: no shatranj and no sitting duck, which Gygax never wrote; the Thief statistic and the Basilisk's "one trick" are gone; lessons say what the board shows instead of repeating the panel; a Thief's leap counts four. Browser: one keyboard walk, in BoardArtwork; the lesson board and page share one game and one inspected piece; the chronicle's possessive is told, not patched by a regex; the chronicle colours and the reading layout are global rules instead of three copies; the guide and the about panel say what the code and the article actually do. Server and docs: the room server states that it is the kit's, kept whole; the skills, the deploy README and the share card name files that exist. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CCLa2PaEeCj8njQZSWGqHx
243 lines
3.8 KiB
CSS
243 lines
3.8 KiB
CSS
/* 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;
|
||
}
|
||
}
|