A code redeemed on its last server sweeps in the game's colour and greys in place for 0.8 s, then lands in Redeemed or expired. A completed event greys and shines while its Moved to Archive notice holds, now 0.9 s rather than 1.5 s, which read as unresponsive; an ignored one only greys. Settings → Appearance gains Motion & celebrations as three What to track cards: Reduce motion (stops every animation and the fireworks, adding to the device's own setting), Fireworks, and Shine. Reduce motion locks the other two off without forgetting them. Co-Authored-By: Claude Opus 5.5 <[email protected]>
5677 lines
119 KiB
CSS
5677 lines
119 KiB
CSS
/* The approved Round 6 B structure; Round 7 changes only its documented surfaces and rhythm. */
|
|
:root {
|
|
--font-body: "Barlow", system-ui, sans-serif;
|
|
--font-display: "Barlow Condensed", system-ui, sans-serif;
|
|
--color-ground: #0e1117;
|
|
--color-surface: #141923;
|
|
--color-raised: #1c2230;
|
|
--color-hairline: #232a38;
|
|
--color-ink: #e4e7ef;
|
|
--color-muted: #afb8c7;
|
|
--color-faint: #9ca7b7;
|
|
--color-near: #5b8def;
|
|
--color-soon: #e8b33c;
|
|
--color-critical: #ff4d6a;
|
|
--color-calm: #afb8c7;
|
|
--panel-radius: 0px;
|
|
--panel-padding: 24px;
|
|
--page-gap: 0px;
|
|
}
|
|
:root[data-theme="light"] {
|
|
--color-ground: #eef0f5;
|
|
--color-surface: #fff;
|
|
--color-ink: #151824;
|
|
--color-muted: #485365;
|
|
--color-faint: #596271;
|
|
--color-hairline: #d3d8e3;
|
|
--color-raised: #e2e6ef;
|
|
--color-near: #2b62c6;
|
|
--color-soon: #8a6008;
|
|
--color-critical: #c81e3c;
|
|
}
|
|
:root[data-interface="relaxed"] {
|
|
--font-body: "Figtree", system-ui, sans-serif;
|
|
--font-display: "Bricolage Grotesque", system-ui, sans-serif;
|
|
--panel-radius: 18px;
|
|
--panel-padding: 28px;
|
|
--page-gap: 28px;
|
|
}
|
|
body {
|
|
font: 400 14px/1.5 var(--font-body);
|
|
background: var(--color-ground);
|
|
color: var(--color-ink);
|
|
font-variant-numeric: tabular-nums;
|
|
-webkit-font-smoothing: antialiased;
|
|
}
|
|
.reader-ui {
|
|
/* Wide enough to fill a 1920px screen; the page used to sit in 220px empty
|
|
bands there. */
|
|
max-width: 1920px;
|
|
margin: 0 auto;
|
|
min-height: 100vh;
|
|
padding: 0;
|
|
border-inline: 1px solid var(--color-hairline);
|
|
}
|
|
/* The logo and the tab labels share one text baseline, so the bigger logo
|
|
does not sit visibly higher than the tabs beside it. */
|
|
.reader-ui .top {
|
|
display: flex;
|
|
align-items: baseline;
|
|
gap: 28px;
|
|
padding: 18px 24px 0;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
.mark {
|
|
font: 700 20px/1 var(--font-display);
|
|
letter-spacing: 0.04em;
|
|
padding-bottom: 0;
|
|
/* Optical centring: its capitals are 15px to the tabs' 11px, so sharing a
|
|
baseline still leaves them riding 2px high. Half the difference (0.1em)
|
|
puts both sets of capitals on one centre line. */
|
|
position: relative;
|
|
top: 0.1em;
|
|
text-transform: uppercase;
|
|
white-space: nowrap;
|
|
}
|
|
.mark span {
|
|
color: var(--color-near);
|
|
}
|
|
.app-navigation {
|
|
display: flex;
|
|
gap: 2px;
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
.app-navigation button {
|
|
padding: 10px 14px 12px;
|
|
font: 600 15px/1 var(--font-display);
|
|
letter-spacing: 0.03em;
|
|
color: var(--color-faint);
|
|
border-bottom: 2px solid transparent;
|
|
margin-bottom: -1px;
|
|
display: flex;
|
|
gap: 6px;
|
|
align-items: baseline;
|
|
white-space: nowrap;
|
|
}
|
|
.app-navigation button[aria-current="page"] {
|
|
color: var(--color-ink);
|
|
border-color: var(--color-ink);
|
|
}
|
|
.app-navigation .n {
|
|
font: 500 12px var(--font-body);
|
|
color: var(--color-faint);
|
|
}
|
|
.app-navigation .gear {
|
|
margin-left: auto;
|
|
}
|
|
.checklist-layout {
|
|
display: grid;
|
|
grid-template-columns: 360px minmax(0, 1fr);
|
|
gap: var(--page-gap);
|
|
align-items: start;
|
|
min-height: calc(100vh - 130px);
|
|
}
|
|
.checklist-rail {
|
|
min-width: 0;
|
|
border-right: 1px solid var(--color-hairline);
|
|
}
|
|
.rail {
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-width: 0;
|
|
}
|
|
.rail > * {
|
|
flex-shrink: 0;
|
|
}
|
|
.checklist-main {
|
|
min-width: 0;
|
|
}
|
|
.head {
|
|
padding: 22px 24px 20px;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
.head .legend {
|
|
font: 400 12px/1.5 var(--font-body);
|
|
color: var(--color-muted);
|
|
margin: 0 0 6px;
|
|
}
|
|
.head h2 {
|
|
font: 600 30px/1.05 var(--font-display);
|
|
letter-spacing: 0.005em;
|
|
margin: 0 0 6px;
|
|
}
|
|
.headline-event {
|
|
width: 100%;
|
|
text-align: left;
|
|
}
|
|
.head .game {
|
|
font-size: 14px;
|
|
font-weight: 500;
|
|
}
|
|
.head .big {
|
|
font: 700 64px/1 var(--font-display);
|
|
margin: 16px 0 4px;
|
|
letter-spacing: -0.01em;
|
|
}
|
|
.head .big small {
|
|
font-size: 18px;
|
|
font-weight: 600;
|
|
letter-spacing: 0;
|
|
color: var(--color-muted);
|
|
margin-left: 6px;
|
|
}
|
|
.then {
|
|
list-style: none;
|
|
margin: 16px 0 0;
|
|
padding: 12px 0 0;
|
|
border-top: 1px solid var(--color-hairline);
|
|
}
|
|
.then button {
|
|
display: flex;
|
|
gap: 8px;
|
|
align-items: baseline;
|
|
width: 100%;
|
|
text-align: left;
|
|
font-size: 13px;
|
|
padding: 3px 0;
|
|
color: var(--color-muted);
|
|
}
|
|
.then button:hover {
|
|
color: var(--color-ink);
|
|
}
|
|
.then .dot {
|
|
width: 7px;
|
|
height: 7px;
|
|
border-radius: 50%;
|
|
background: var(--g);
|
|
flex: none;
|
|
transform: translateY(-1px);
|
|
}
|
|
.then .t {
|
|
flex: 1;
|
|
}
|
|
.then .r {
|
|
font: 600 14px var(--font-display);
|
|
}
|
|
.head .exact {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
margin-bottom: 12px;
|
|
}
|
|
.reader-ui .meter {
|
|
display: flex;
|
|
gap: 2px;
|
|
height: 9px;
|
|
}
|
|
.reader-ui .meter-tick {
|
|
flex: 1;
|
|
min-width: 0;
|
|
height: 100%;
|
|
background: var(--color-hairline);
|
|
border-radius: 1px;
|
|
animation: none;
|
|
}
|
|
.reader-ui .meter-tick[data-live="true"] {
|
|
background: var(--tick);
|
|
}
|
|
.reader-ui .meter-tick[data-unknown="true"] {
|
|
background: repeating-linear-gradient(
|
|
135deg,
|
|
var(--color-hairline) 0 2px,
|
|
transparent 2px 4px
|
|
);
|
|
}
|
|
.game-focus {
|
|
padding: 20px;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
.focus-heading {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 12px;
|
|
margin-bottom: 8px;
|
|
}
|
|
.focus-heading h2 {
|
|
font: 500 13px/1.5 var(--font-body);
|
|
margin: 0;
|
|
color: var(--color-muted);
|
|
}
|
|
.focus-heading button {
|
|
font-size: 11px;
|
|
min-height: 28px;
|
|
color: var(--color-muted);
|
|
}
|
|
/* The live focus chips' feel (GameFocus.tsx, `.hue-chip`): roomier, a softer
|
|
border in the game's hue, eased state changes, a one-pixel lift with a ring
|
|
under the cursor, a small press, and games with nothing left dimmed. */
|
|
.focus-pills {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 6px;
|
|
}
|
|
.focus-pill {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
padding: 6px 12px;
|
|
border-radius: 999px;
|
|
border: 1px solid color-mix(in srgb, var(--hue) 30%, transparent);
|
|
background: transparent;
|
|
font: 500 12px/1.2 var(--font-body);
|
|
color: var(--color-muted);
|
|
min-height: 30px;
|
|
transition:
|
|
border-color 130ms ease-out,
|
|
background-color 130ms ease-out,
|
|
color 130ms ease-out,
|
|
box-shadow 130ms ease-out,
|
|
opacity 130ms ease-out,
|
|
transform 120ms cubic-bezier(0.2, 0.7, 0.3, 1);
|
|
}
|
|
.focus-pill[aria-pressed="true"] {
|
|
color: var(--hue);
|
|
border-color: var(--hue);
|
|
background: color-mix(in srgb, var(--hue) 14%, transparent);
|
|
}
|
|
.focus-pill[data-empty]:not([aria-pressed="true"]) {
|
|
opacity: 0.5;
|
|
}
|
|
.focus-pill .n {
|
|
font-size: 10px;
|
|
font-variant-numeric: tabular-nums;
|
|
opacity: 0.7;
|
|
}
|
|
@media (prefers-reduced-motion: no-preference) {
|
|
.focus-pill:active {
|
|
transform: scale(0.96);
|
|
transition-duration: 60ms;
|
|
}
|
|
}
|
|
@media (prefers-reduced-motion: no-preference) and (hover: hover) {
|
|
.focus-pill:hover:not(:active) {
|
|
transform: translateY(-1px);
|
|
}
|
|
}
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.focus-pill {
|
|
transition: none;
|
|
}
|
|
}
|
|
.list-heading {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: baseline;
|
|
padding: 30px 24px 8px;
|
|
gap: 20px;
|
|
flex-wrap: wrap;
|
|
}
|
|
.list-heading h1 {
|
|
font: 600 28px/1.2 var(--font-display);
|
|
margin: 0;
|
|
}
|
|
.list-heading .sub {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
margin-top: 7px;
|
|
}
|
|
.list-tools {
|
|
display: flex;
|
|
gap: 12px;
|
|
align-items: center;
|
|
flex-wrap: wrap;
|
|
flex-direction: row-reverse;
|
|
}
|
|
.segmented {
|
|
display: inline-flex;
|
|
border: 1px solid var(--color-hairline);
|
|
border-radius: 3px;
|
|
flex: none;
|
|
max-width: 100%;
|
|
flex-wrap: wrap;
|
|
}
|
|
.segmented button {
|
|
padding: 5px 10px;
|
|
min-height: 36px;
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
white-space: nowrap;
|
|
}
|
|
.segmented button[aria-pressed="true"] {
|
|
background: var(--color-raised);
|
|
color: var(--color-ink);
|
|
}
|
|
.event-list {
|
|
padding: 0 24px;
|
|
margin: 0;
|
|
list-style: none;
|
|
}
|
|
.event-entry {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1fr) 130px 16px;
|
|
align-items: center;
|
|
gap: 24px;
|
|
text-align: left;
|
|
width: 100%;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
padding: 24px 0;
|
|
}
|
|
.event-entry .identity {
|
|
font-size: 12px;
|
|
color: var(--g);
|
|
display: block;
|
|
margin-bottom: 7px;
|
|
}
|
|
.event-entry .event-title {
|
|
display: block;
|
|
font: 500 18px/1.4 var(--font-body);
|
|
text-wrap: pretty;
|
|
overflow-wrap: anywhere;
|
|
}
|
|
.event-entry .event-description {
|
|
display: block;
|
|
color: var(--color-muted);
|
|
font-size: 13px;
|
|
margin-top: 7px;
|
|
line-height: 1.6;
|
|
max-width: 65ch;
|
|
}
|
|
.event-entry .deadline {
|
|
text-align: right;
|
|
font: 600 22px/1.3 var(--font-display);
|
|
}
|
|
.event-entry .deadline small {
|
|
display: block;
|
|
font: 400 12px/1.5 var(--font-body);
|
|
color: var(--color-muted);
|
|
margin-top: 5px;
|
|
}
|
|
.event-entry .meter {
|
|
margin-top: 12px;
|
|
}
|
|
.event-entry > svg {
|
|
width: 16px;
|
|
height: 16px;
|
|
color: var(--color-muted);
|
|
}
|
|
.event-entry.no-description {
|
|
padding-block: 14px;
|
|
}
|
|
.list-foot {
|
|
padding: 16px 24px;
|
|
color: var(--color-muted);
|
|
font-size: 13px;
|
|
}
|
|
.list-foot button {
|
|
color: var(--color-near);
|
|
}
|
|
.updates-panel,
|
|
.release-update {
|
|
padding: 12px 32px;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
background: var(--color-surface);
|
|
}
|
|
.update-row {
|
|
display: flex;
|
|
align-items: baseline;
|
|
gap: 8px 14px;
|
|
flex-wrap: wrap;
|
|
padding: 4px 0;
|
|
color: var(--color-muted);
|
|
font-size: 12px;
|
|
line-height: 1.6;
|
|
}
|
|
.update-row strong {
|
|
font-weight: 500;
|
|
}
|
|
.update-row .snooze {
|
|
display: inline-flex;
|
|
align-items: baseline;
|
|
gap: 10px;
|
|
margin-left: auto;
|
|
color: var(--color-faint);
|
|
}
|
|
.update-row button,
|
|
.release-update button {
|
|
color: var(--color-near);
|
|
text-decoration: underline;
|
|
text-underline-offset: 3px;
|
|
min-height: 28px;
|
|
}
|
|
.daily-panel {
|
|
padding: 20px;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
.daily-heading,
|
|
.pinned-heading {
|
|
display: flex;
|
|
align-items: baseline;
|
|
justify-content: space-between;
|
|
gap: 12px;
|
|
margin-bottom: 10px;
|
|
}
|
|
.daily-heading h2,
|
|
.pinned-heading h2 {
|
|
font: 600 16px/1.3 var(--font-display);
|
|
margin: 0;
|
|
}
|
|
.daily-heading button,
|
|
.pinned-heading button {
|
|
color: var(--color-near);
|
|
font-size: 12px;
|
|
}
|
|
.daily-row {
|
|
display: flex;
|
|
gap: 12px;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
padding: 10px 0;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
.daily-row:last-child {
|
|
border: 0;
|
|
}
|
|
.daily-row strong {
|
|
font-size: 13px;
|
|
font-weight: 500;
|
|
color: var(--g);
|
|
}
|
|
.daily-row small {
|
|
display: block;
|
|
font-size: 11px;
|
|
color: var(--color-muted);
|
|
line-height: 1.5;
|
|
margin-top: 5px;
|
|
}
|
|
.daily-tick {
|
|
width: 44px;
|
|
height: 44px;
|
|
flex: none;
|
|
padding: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.daily-tick[aria-pressed="true"] {
|
|
color: var(--g, var(--color-near));
|
|
}
|
|
.daily-tick svg {
|
|
width: 20px;
|
|
height: 20px;
|
|
}
|
|
.daily-tick[aria-pressed="true"] rect {
|
|
fill: currentColor;
|
|
}
|
|
.daily-tick[aria-pressed="true"] path {
|
|
stroke: var(--color-ground);
|
|
}
|
|
.pinned-routines {
|
|
padding: 18px 0 8px;
|
|
}
|
|
.pinned-heading {
|
|
padding: 0 24px;
|
|
}
|
|
.pinned-heading .sub {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
margin: 2px 0 0;
|
|
}
|
|
.pinned-routines > .quiet {
|
|
margin: 16px 24px;
|
|
}
|
|
.routine-group {
|
|
border-top: 1px solid var(--color-hairline);
|
|
}
|
|
.routine-group summary,
|
|
.routine-group h3 {
|
|
padding: 12px 24px;
|
|
margin: 0;
|
|
font: 600 15px/1.3 var(--font-display);
|
|
cursor: pointer;
|
|
}
|
|
.routine-group small {
|
|
display: block;
|
|
color: var(--color-muted);
|
|
font: 400 12px/1.5 var(--font-body);
|
|
margin-top: 4px;
|
|
}
|
|
.routine-group > .routine-control {
|
|
margin: 0 24px;
|
|
color: var(--color-ink);
|
|
}
|
|
.routine-control {
|
|
position: relative;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 12px;
|
|
padding: 10px 0;
|
|
min-width: 0;
|
|
}
|
|
.routine-control strong {
|
|
display: block;
|
|
font-size: 13px;
|
|
font-weight: 500;
|
|
}
|
|
.routine-control small {
|
|
display: block;
|
|
font-size: 11px;
|
|
color: var(--color-muted);
|
|
margin-top: 4px;
|
|
}
|
|
.numeric-routine input {
|
|
width: 86px !important;
|
|
padding: 3px 6px !important;
|
|
}
|
|
.reader-ui h1 {
|
|
font-family: var(--font-display);
|
|
}
|
|
.reader-ui h2 {
|
|
font-family: var(--font-display);
|
|
}
|
|
.help {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
line-height: 1.6;
|
|
}
|
|
.reader-ui button,
|
|
.reader-ui a,
|
|
.reader-ui summary,
|
|
.reader-ui input,
|
|
.reader-ui select {
|
|
touch-action: manipulation;
|
|
}
|
|
.reader-ui :focus-visible {
|
|
outline: 2px solid var(--color-near);
|
|
outline-offset: 3px;
|
|
}
|
|
.reader-ui input,
|
|
.reader-ui select,
|
|
.reader-ui textarea {
|
|
font: inherit;
|
|
color: var(--color-ink);
|
|
background: var(--color-ground);
|
|
border: 1px solid var(--color-hairline);
|
|
border-radius: 3px;
|
|
padding: 6px 8px;
|
|
min-width: 0;
|
|
max-width: 100%;
|
|
}
|
|
.reader-ui input[type="checkbox"] {
|
|
width: 18px;
|
|
height: 18px;
|
|
accent-color: var(--g, var(--color-near));
|
|
}
|
|
.reader-ui input[type="number"] {
|
|
appearance: auto;
|
|
}
|
|
.reader-ui input[type="number"]::-webkit-inner-spin-button {
|
|
opacity: 1;
|
|
}
|
|
::selection {
|
|
background: var(--color-near);
|
|
color: var(--color-ground);
|
|
}
|
|
input,
|
|
textarea {
|
|
caret-color: var(--color-near);
|
|
}
|
|
* {
|
|
scrollbar-color: var(--color-hairline) var(--color-ground);
|
|
scrollbar-width: thin;
|
|
}
|
|
.commit,
|
|
.reader-ui .btn {
|
|
padding: 7px 12px;
|
|
border: 1px solid var(--color-hairline);
|
|
border-radius: 3px;
|
|
font-size: 13px;
|
|
}
|
|
.commit {
|
|
background: var(--color-ink);
|
|
color: var(--color-ground);
|
|
}
|
|
.quiet {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
text-decoration: underline;
|
|
text-underline-offset: 3px;
|
|
}
|
|
.settings-layout {
|
|
display: grid;
|
|
grid-template-columns: 280px minmax(0, 1fr);
|
|
min-height: 70vh;
|
|
}
|
|
.settings-layout > nav {
|
|
border-right: 1px solid var(--color-hairline);
|
|
padding: 20px 0;
|
|
align-self: start;
|
|
}
|
|
.settings-layout > nav h2 {
|
|
font: 600 24px var(--font-display);
|
|
padding: 0 24px;
|
|
margin: 0 0 18px;
|
|
}
|
|
.settings-layout > nav button {
|
|
display: block;
|
|
width: 100%;
|
|
text-align: left;
|
|
padding: 12px 24px;
|
|
font-size: 14px;
|
|
}
|
|
.settings-layout > nav button[aria-current="page"] {
|
|
background: var(--color-raised);
|
|
color: var(--color-ink);
|
|
}
|
|
.settings-layout > nav small {
|
|
display: block;
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
margin-top: 3px;
|
|
}
|
|
.settings-layout > nav .settings-games-label {
|
|
padding: 20px 24px 6px;
|
|
color: var(--color-muted);
|
|
font-size: 12px;
|
|
}
|
|
.settings-content {
|
|
padding: 32px 36px;
|
|
min-width: 0;
|
|
}
|
|
/* The Round 6 B `.ptitle`: every settings page's title sits on a rule. */
|
|
.settings-content h1 {
|
|
font: 700 34px/1 var(--font-display);
|
|
letter-spacing: 0.01em;
|
|
margin: 0 0 18px;
|
|
padding-bottom: 14px;
|
|
border-bottom: 1px solid
|
|
color-mix(in srgb, var(--color-ink) 22%, var(--color-surface));
|
|
}
|
|
.settings-content h2 {
|
|
font: 600 24px/1.3 var(--font-display);
|
|
margin: 28px 0 12px;
|
|
}
|
|
.settings-content h3 {
|
|
font: 600 19px/1.3 var(--font-display);
|
|
margin: 20px 0 8px;
|
|
}
|
|
.settings-content label {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
margin: 18px 0;
|
|
max-width: 38rem;
|
|
}
|
|
.settings-content label:has(input[type="checkbox"]) {
|
|
flex-direction: row;
|
|
align-items: center;
|
|
}
|
|
.settings-content p {
|
|
max-width: 75ch;
|
|
line-height: 1.65;
|
|
}
|
|
.subtabs {
|
|
display: flex;
|
|
gap: 24px;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
margin: 20px 0 28px;
|
|
}
|
|
.subtabs button {
|
|
padding: 12px 0;
|
|
border-bottom: 2px solid transparent;
|
|
color: var(--color-muted);
|
|
}
|
|
.subtabs button[aria-pressed="true"] {
|
|
color: var(--color-ink);
|
|
border-color: var(--color-ink);
|
|
}
|
|
.rt-top {
|
|
display: flex;
|
|
align-items: flex-end;
|
|
gap: 16px;
|
|
padding: 22px 24px 16px;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
flex-wrap: wrap;
|
|
}
|
|
.rt-top h1 {
|
|
font: 700 34px/1 var(--font-display);
|
|
margin: 0;
|
|
}
|
|
.rt-top .sum {
|
|
font-size: 13px;
|
|
color: var(--color-muted);
|
|
flex: 1;
|
|
}
|
|
.checklist-display {
|
|
padding: 16px 24px;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
display: flex;
|
|
gap: 18px 28px;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
background: var(--color-surface);
|
|
}
|
|
.checklist-display legend {
|
|
float: left;
|
|
margin-right: 18px;
|
|
font-size: 13px;
|
|
font-weight: 500;
|
|
}
|
|
.checklist-display label {
|
|
display: flex;
|
|
gap: 10px;
|
|
align-items: center;
|
|
color: var(--color-muted);
|
|
font-size: 13px;
|
|
}
|
|
.band {
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
.band-h {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: end;
|
|
padding: 22px 24px 10px;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
.band-h h2 {
|
|
font: 700 26px/1 var(--font-display);
|
|
margin: 0;
|
|
color: var(--g);
|
|
}
|
|
.band-h .meta {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
margin-top: 6px;
|
|
}
|
|
.routine-menu {
|
|
position: relative;
|
|
}
|
|
.routine-menu[open] > div {
|
|
position: absolute;
|
|
right: 0;
|
|
z-index: 8;
|
|
width: 200px;
|
|
padding: 8px;
|
|
background: var(--color-surface);
|
|
border: 1px solid var(--color-hairline);
|
|
box-shadow: 0 8px 24px var(--color-scrim);
|
|
}
|
|
.routine-menu button,
|
|
.routine-menu a {
|
|
display: block;
|
|
padding: 7px 10px;
|
|
text-align: left;
|
|
font-size: 13px;
|
|
width: 100%;
|
|
}
|
|
.routine-library-heading {
|
|
padding: 24px;
|
|
display: flex;
|
|
gap: 20px;
|
|
align-items: center;
|
|
}
|
|
.routine-library-heading h2 {
|
|
font: 600 26px var(--font-display);
|
|
}
|
|
.routines-page .routine-history {
|
|
margin: 16px 24px;
|
|
}
|
|
@media (hover: hover) {
|
|
.event-entry:hover {
|
|
background: var(--color-surface);
|
|
}
|
|
.reader-ui button:hover {
|
|
color: var(--color-ink);
|
|
}
|
|
.commit:hover {
|
|
color: var(--color-ground);
|
|
}
|
|
.focus-pill:hover {
|
|
box-shadow: 0 0 0 1px color-mix(in srgb, var(--hue) 45%, transparent);
|
|
}
|
|
.focus-pill[aria-pressed="false"]:hover {
|
|
color: var(--color-ink);
|
|
}
|
|
}
|
|
@media (min-width: 1100px) {
|
|
.checklist-rail {
|
|
position: sticky;
|
|
top: 0;
|
|
max-height: 100vh;
|
|
overflow: auto;
|
|
}
|
|
}
|
|
@media (max-width: 1050px) {
|
|
.checklist-layout {
|
|
grid-template-columns: 280px minmax(0, 1fr);
|
|
}
|
|
.list-heading {
|
|
padding: 24px;
|
|
}
|
|
.event-list {
|
|
padding: 0 24px;
|
|
}
|
|
.event-entry {
|
|
gap: 16px;
|
|
grid-template-columns: minmax(0, 1fr) 105px 14px;
|
|
}
|
|
.event-entry .event-title {
|
|
font-size: 17px;
|
|
}
|
|
}
|
|
@media (max-width: 700px) {
|
|
.reader-ui .top {
|
|
padding: 18px 16px 0;
|
|
gap: 18px;
|
|
flex-wrap: wrap;
|
|
}
|
|
.mark {
|
|
padding: 0;
|
|
top: 0;
|
|
}
|
|
.app-navigation {
|
|
flex-basis: 100%;
|
|
overflow: auto;
|
|
}
|
|
.app-navigation button {
|
|
padding: 10px 9px 12px;
|
|
font-size: 14px;
|
|
}
|
|
.app-navigation .n {
|
|
font-size: 10px;
|
|
}
|
|
.checklist-layout {
|
|
display: block;
|
|
}
|
|
.checklist-rail {
|
|
border-right: 0;
|
|
}
|
|
.rail .head h2 {
|
|
font-size: 21px;
|
|
}
|
|
.rail .big {
|
|
font-size: 32px;
|
|
}
|
|
.list-heading {
|
|
padding: 24px 20px 16px;
|
|
}
|
|
.event-list {
|
|
padding: 0 20px;
|
|
}
|
|
.event-entry {
|
|
grid-template-columns: minmax(0, 1fr) 90px;
|
|
gap: 16px;
|
|
padding: 22px 0;
|
|
}
|
|
.event-entry > svg,
|
|
.event-entry .meter {
|
|
display: none;
|
|
}
|
|
.event-entry .event-title {
|
|
font-size: 16px;
|
|
}
|
|
.event-entry .deadline {
|
|
font-size: 20px;
|
|
}
|
|
.event-entry .event-description {
|
|
font-size: 12px;
|
|
}
|
|
.event-entry.no-description {
|
|
padding-block: 12px;
|
|
}
|
|
.updates-panel,
|
|
.release-update {
|
|
padding: 12px 20px;
|
|
}
|
|
.settings-layout {
|
|
display: block;
|
|
}
|
|
.settings-layout > nav {
|
|
display: flex;
|
|
overflow: auto;
|
|
padding: 10px;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
border-right: 0;
|
|
gap: 6px;
|
|
}
|
|
.settings-layout > nav button {
|
|
width: auto;
|
|
flex: none;
|
|
padding: 8px 12px;
|
|
}
|
|
.settings-layout > nav h2,
|
|
.settings-layout > nav small,
|
|
.settings-games-label {
|
|
display: none;
|
|
}
|
|
.settings-content {
|
|
padding: 24px 20px;
|
|
}
|
|
.rt-top {
|
|
padding: 24px 20px 16px;
|
|
}
|
|
.checklist-display {
|
|
padding: 16px 20px;
|
|
}
|
|
.checklist-display label {
|
|
flex-direction: column;
|
|
align-items: start;
|
|
}
|
|
.band-h {
|
|
padding-inline: 20px;
|
|
}
|
|
}
|
|
@media (prefers-reduced-motion: reduce) {
|
|
*,
|
|
*::before,
|
|
*::after {
|
|
scroll-behavior: auto !important;
|
|
animation-duration: 0.001ms !important;
|
|
transition-duration: 0.001ms !important;
|
|
}
|
|
}
|
|
|
|
.account-setup,
|
|
.another-server {
|
|
border-top: 1px solid var(--color-hairline);
|
|
margin-top: 24px;
|
|
padding-top: 8px;
|
|
}
|
|
.account-setup > button,
|
|
.another-server > button {
|
|
margin: 10px 14px 10px 0;
|
|
color: var(--color-near);
|
|
text-decoration: underline;
|
|
text-underline-offset: 3px;
|
|
}
|
|
.reset-inputs {
|
|
display: flex;
|
|
gap: 16px;
|
|
}
|
|
.reset-inputs input {
|
|
width: 100px;
|
|
}
|
|
.feed-footer {
|
|
display: flex;
|
|
align-items: baseline;
|
|
flex-wrap: wrap;
|
|
gap: 8px 16px;
|
|
padding: 24px 0;
|
|
margin-top: 28px;
|
|
border-top: 1px solid var(--color-hairline);
|
|
color: var(--color-muted);
|
|
font-size: 11px;
|
|
}
|
|
.feed-footer button {
|
|
text-decoration: underline;
|
|
text-underline-offset: 3px;
|
|
}
|
|
.archive-toast {
|
|
position: fixed;
|
|
bottom: 24px;
|
|
left: 50%;
|
|
transform: translateX(-50%);
|
|
width: max-content;
|
|
max-width: calc(100vw - 32px);
|
|
z-index: 70;
|
|
padding: 14px 20px;
|
|
border-radius: 12px;
|
|
background: var(--color-raised);
|
|
color: var(--color-ink);
|
|
font-size: 13px;
|
|
box-shadow: 0 8px 30px #0003;
|
|
}
|
|
.archive-toast button {
|
|
color: var(--color-near);
|
|
margin-left: 14px;
|
|
text-decoration: underline;
|
|
}
|
|
.archive-confirm {
|
|
padding: 8px 20px;
|
|
font-size: 12px;
|
|
color: var(--color-near);
|
|
}
|
|
.archive-fading {
|
|
opacity: 0;
|
|
max-height: 0;
|
|
overflow: hidden;
|
|
transition:
|
|
opacity 0.2s,
|
|
max-height 0.25s;
|
|
}
|
|
.archive-record {
|
|
display: flex;
|
|
gap: 20px;
|
|
justify-content: space-between;
|
|
border-top: 1px solid var(--color-hairline);
|
|
padding: 18px 0;
|
|
}
|
|
.archive-record small {
|
|
display: block;
|
|
color: var(--color-muted);
|
|
margin-top: 6px;
|
|
}
|
|
.archive-record p {
|
|
font-size: 13px;
|
|
color: var(--color-muted);
|
|
margin-top: 8px;
|
|
}
|
|
.archive-record button {
|
|
text-align: left;
|
|
}
|
|
.archive-record > button {
|
|
color: var(--color-near);
|
|
}
|
|
.history-record {
|
|
padding-left: 20px;
|
|
border-left: 1px solid var(--color-hairline);
|
|
}
|
|
.story-stats {
|
|
display: grid;
|
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
gap: 20px;
|
|
margin: 20px 0;
|
|
}
|
|
.story-stats strong {
|
|
display: block;
|
|
font: 600 30px var(--font-display);
|
|
}
|
|
.story-stats span,
|
|
.story-stats small {
|
|
display: block;
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.story-stats small {
|
|
margin-top: 5px;
|
|
font-size: 11px;
|
|
}
|
|
.reader-timeline {
|
|
background: var(--color-surface);
|
|
border-radius: 18px;
|
|
padding: 20px;
|
|
}
|
|
.timeline-account {
|
|
margin-top: 20px;
|
|
}
|
|
.reset-strip {
|
|
padding: 10px 16px;
|
|
background: var(--color-raised);
|
|
font-size: 12px;
|
|
}
|
|
.routine-timeline-row {
|
|
padding: 0 16px;
|
|
border-top: 1px solid var(--color-hairline);
|
|
}
|
|
.interface-choices {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 18px;
|
|
}
|
|
.interface-choices > button {
|
|
padding: 16px;
|
|
border: 1px solid var(--color-hairline);
|
|
border-radius: 12px;
|
|
text-align: left;
|
|
}
|
|
.interface-choices > button[aria-pressed="true"] {
|
|
border-color: var(--color-near);
|
|
}
|
|
.interface-choices small,
|
|
.interface-choices strong {
|
|
display: block;
|
|
margin-top: 8px;
|
|
}
|
|
.interface-choices small {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.interface-preview {
|
|
display: grid;
|
|
grid-template-columns: 1fr 2fr;
|
|
gap: 8px;
|
|
height: 80px;
|
|
padding: 10px;
|
|
background: var(--color-ground);
|
|
}
|
|
.interface-preview i {
|
|
border-radius: 6px;
|
|
background: var(--color-raised);
|
|
}
|
|
.interface-preview i:nth-child(2) {
|
|
grid-row: span 2;
|
|
}
|
|
.interface-preview.structured {
|
|
gap: 1px;
|
|
}
|
|
.interface-preview.structured i {
|
|
border-radius: 0;
|
|
}
|
|
.custom-palettes {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 24px;
|
|
}
|
|
.custom-palettes fieldset {
|
|
flex: 1;
|
|
}
|
|
.custom-palettes label {
|
|
flex-direction: row;
|
|
align-items: center;
|
|
}
|
|
.empty-state {
|
|
padding: 32px 28px;
|
|
color: var(--color-muted);
|
|
}
|
|
.save-error {
|
|
padding: 16px;
|
|
color: var(--color-critical);
|
|
border: 1px solid currentColor;
|
|
border-radius: 12px;
|
|
margin-bottom: 20px;
|
|
}
|
|
@media (max-width: 640px) {
|
|
.story-stats {
|
|
grid-template-columns: 1fr 1fr;
|
|
}
|
|
.routines-page,
|
|
.archive-page {
|
|
padding: 20px;
|
|
}
|
|
.interface-choices {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
.list-heading {
|
|
padding: 20px;
|
|
}
|
|
.updates-panel {
|
|
padding: 16px 20px;
|
|
}
|
|
.list-heading select {
|
|
width: 100%;
|
|
}
|
|
.archive-record {
|
|
flex-wrap: wrap;
|
|
}
|
|
.reader-timeline {
|
|
padding: 12px;
|
|
}
|
|
}
|
|
@media (min-width: 1024px) {
|
|
.checklist-layout aside > .scroll-pane {
|
|
position: sticky;
|
|
overflow-y: auto;
|
|
}
|
|
.checklist-layout aside > .scroll-pane > * {
|
|
flex-shrink: 0;
|
|
}
|
|
}
|
|
.routine-history {
|
|
margin: 20px 0;
|
|
border-top: 1px solid var(--color-hairline);
|
|
padding-top: 16px;
|
|
}
|
|
.routine-history summary {
|
|
cursor: pointer;
|
|
color: var(--color-muted);
|
|
font-size: 13px;
|
|
}
|
|
.history-days {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 6px;
|
|
margin: 12px 0;
|
|
}
|
|
.history-days button {
|
|
padding: 6px 9px;
|
|
font-size: 11px;
|
|
border: 1px solid var(--color-hairline);
|
|
border-radius: 6px;
|
|
}
|
|
.history-days button[aria-pressed="true"] {
|
|
color: var(--color-near);
|
|
border-color: var(--color-near);
|
|
}
|
|
.code-row {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 16px;
|
|
justify-content: space-between;
|
|
padding: 20px 0;
|
|
border-top: 1px solid var(--color-hairline);
|
|
}
|
|
.code-row code {
|
|
font: 600 16px var(--font-body);
|
|
user-select: all;
|
|
}
|
|
.code-row button {
|
|
color: var(--color-near);
|
|
margin-left: 14px;
|
|
}
|
|
.code-row p {
|
|
font-size: 13px;
|
|
color: var(--color-muted);
|
|
margin-top: 8px;
|
|
}
|
|
.code-row small {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.code-row label {
|
|
font-size: 12px;
|
|
}
|
|
.game-order-row {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
}
|
|
.game-order-row label {
|
|
flex: 1;
|
|
}
|
|
.game-order-row button {
|
|
padding: 8px;
|
|
}
|
|
.game-order {
|
|
margin: 20px 0;
|
|
}
|
|
.game-order summary {
|
|
cursor: pointer;
|
|
}
|
|
.event-list > li {
|
|
list-style: none;
|
|
max-height: 600px;
|
|
transition:
|
|
opacity 0.2s,
|
|
max-height 0.25s;
|
|
}
|
|
.event-list > li.archive-fading {
|
|
max-height: 0;
|
|
opacity: 0;
|
|
overflow: hidden;
|
|
}
|
|
.daily-row > .routine-control > div:first-child {
|
|
display: none;
|
|
}
|
|
.daily-row > .routine-control {
|
|
padding: 0;
|
|
}
|
|
/* Round 7: the same content in separated, airier panels. */
|
|
:root[data-interface="relaxed"] body {
|
|
font-size: 15px;
|
|
line-height: 1.6;
|
|
}
|
|
:root[data-interface="relaxed"] .reader-ui {
|
|
max-width: 1840px;
|
|
padding: 0 20px 32px;
|
|
border: 0;
|
|
}
|
|
:root[data-interface="relaxed"] .top {
|
|
align-items: center;
|
|
padding: 26px 0 22px;
|
|
border: 0;
|
|
gap: 26px;
|
|
}
|
|
:root[data-interface="relaxed"] .mark {
|
|
font: 700 22px/1 var(--font-display);
|
|
letter-spacing: -0.025em;
|
|
text-transform: none;
|
|
padding: 0;
|
|
top: 0;
|
|
}
|
|
:root[data-interface="relaxed"] .app-navigation {
|
|
gap: 6px;
|
|
align-items: center;
|
|
}
|
|
:root[data-interface="relaxed"] .app-navigation button {
|
|
border-radius: 10px;
|
|
padding: 9px 13px;
|
|
font: 500 14px var(--font-body);
|
|
border: 0;
|
|
min-height: 40px;
|
|
}
|
|
:root[data-interface="relaxed"] .app-navigation button[aria-current="page"] {
|
|
background: var(--color-raised);
|
|
}
|
|
:root[data-interface="relaxed"] .checklist-layout {
|
|
grid-template-columns: 380px minmax(0, 1fr);
|
|
}
|
|
:root[data-interface="relaxed"] .checklist-rail {
|
|
border: 0;
|
|
}
|
|
:root[data-interface="relaxed"] .rail {
|
|
gap: 20px;
|
|
}
|
|
:root[data-interface="relaxed"] .rail > * {
|
|
background: var(--color-surface);
|
|
border: 0;
|
|
border-radius: 18px;
|
|
}
|
|
:root[data-interface="relaxed"] .head {
|
|
padding: 24px;
|
|
}
|
|
:root[data-interface="relaxed"] .head h2 {
|
|
font: 600 26px/1.2 var(--font-display);
|
|
letter-spacing: -0.015em;
|
|
margin-top: 8px;
|
|
}
|
|
:root[data-interface="relaxed"] .head .big {
|
|
font: 600 42px/1.1 var(--font-display);
|
|
letter-spacing: -0.025em;
|
|
margin: 20px 0 8px;
|
|
}
|
|
:root[data-interface="relaxed"] .head .game {
|
|
font-size: 13px;
|
|
}
|
|
:root[data-interface="relaxed"] .head .meter {
|
|
height: 5px;
|
|
margin-top: 18px;
|
|
}
|
|
:root[data-interface="relaxed"] .checklist-main {
|
|
background: var(--color-surface);
|
|
border-radius: 18px;
|
|
overflow: hidden;
|
|
}
|
|
:root[data-interface="relaxed"] .list-heading {
|
|
padding: 26px 28px 8px;
|
|
gap: 18px;
|
|
align-items: flex-start;
|
|
}
|
|
:root[data-interface="relaxed"] .list-heading h1 {
|
|
font: 600 25px/1.2 var(--font-display);
|
|
letter-spacing: -0.015em;
|
|
}
|
|
:root[data-interface="relaxed"] .segmented {
|
|
border-radius: 10px;
|
|
padding: 3px;
|
|
background: var(--color-ground);
|
|
border: 0;
|
|
gap: 2px;
|
|
}
|
|
:root[data-interface="relaxed"] .segmented button {
|
|
padding: 6px 10px;
|
|
border-radius: 7px;
|
|
min-height: 32px;
|
|
}
|
|
:root[data-interface="relaxed"] .event-list {
|
|
padding: 0 28px;
|
|
}
|
|
:root[data-interface="relaxed"] .event-entry {
|
|
padding: 21px 0;
|
|
gap: 22px;
|
|
}
|
|
:root[data-interface="relaxed"] .event-entry .identity {
|
|
margin-bottom: 8px;
|
|
font-weight: 500;
|
|
}
|
|
:root[data-interface="relaxed"] .event-entry .event-title {
|
|
font-size: 17px;
|
|
}
|
|
:root[data-interface="relaxed"] .event-entry .event-description {
|
|
line-height: 1.65;
|
|
max-width: 60ch;
|
|
}
|
|
:root[data-interface="relaxed"] .event-entry .deadline {
|
|
font: 600 21px/1.3 var(--font-body);
|
|
}
|
|
:root[data-interface="relaxed"] .event-entry .meter {
|
|
height: 4px;
|
|
}
|
|
:root[data-interface="relaxed"] .meter-tick {
|
|
border-radius: 2px;
|
|
}
|
|
:root[data-interface="relaxed"] .event-entry.no-description {
|
|
padding-block: 15px;
|
|
}
|
|
:root[data-interface="relaxed"] .game-focus,
|
|
:root[data-interface="relaxed"] .daily-panel {
|
|
padding: 20px 22px;
|
|
}
|
|
:root[data-interface="relaxed"] .settings-layout {
|
|
gap: 28px;
|
|
grid-template-columns: 280px minmax(0, 1fr);
|
|
}
|
|
:root[data-interface="relaxed"] .settings-layout > nav {
|
|
border: 0;
|
|
}
|
|
:root[data-interface="relaxed"] .settings-layout > nav button {
|
|
border-radius: 10px;
|
|
}
|
|
:root[data-interface="relaxed"] .settings-content {
|
|
background: var(--color-surface);
|
|
border-radius: 18px;
|
|
padding: 30px;
|
|
}
|
|
:root[data-interface="relaxed"] .band {
|
|
background: var(--color-surface);
|
|
border-radius: 18px;
|
|
border: 0;
|
|
margin: 24px 0;
|
|
overflow: visible;
|
|
}
|
|
:root[data-interface="relaxed"] .band-h {
|
|
padding: 22px 28px 16px;
|
|
}
|
|
:root[data-interface="relaxed"] .rt-top {
|
|
padding: 28px 0 20px;
|
|
border: 0;
|
|
}
|
|
:root[data-interface="relaxed"] .rt-top h1 {
|
|
font: 600 30px var(--font-display);
|
|
}
|
|
:root[data-interface="relaxed"] .checklist-display {
|
|
border: 0;
|
|
border-radius: 18px;
|
|
}
|
|
@media (max-width: 1100px) {
|
|
:root[data-interface="relaxed"] .checklist-layout {
|
|
grid-template-columns: 300px minmax(0, 1fr);
|
|
gap: 22px;
|
|
}
|
|
}
|
|
@media (max-width: 700px) {
|
|
:root[data-interface="relaxed"] .reader-ui {
|
|
padding: 0 16px 24px;
|
|
}
|
|
:root[data-interface="relaxed"] .top {
|
|
padding: 22px 0 18px;
|
|
gap: 18px;
|
|
}
|
|
:root[data-interface="relaxed"] .app-navigation {
|
|
gap: 4px;
|
|
}
|
|
:root[data-interface="relaxed"] .app-navigation button {
|
|
padding: 8px 10px;
|
|
font-size: 13px;
|
|
}
|
|
:root[data-interface="relaxed"] .checklist-layout {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 20px;
|
|
}
|
|
:root[data-interface="relaxed"] .checklist-layout > * {
|
|
width: 100%;
|
|
}
|
|
:root[data-interface="relaxed"] .rail {
|
|
gap: 16px;
|
|
}
|
|
:root[data-interface="relaxed"] .list-heading {
|
|
padding: 24px 20px 16px;
|
|
}
|
|
:root[data-interface="relaxed"] .event-list {
|
|
padding: 0 20px;
|
|
}
|
|
:root[data-interface="relaxed"] .event-entry {
|
|
padding: 19px 0;
|
|
gap: 14px;
|
|
}
|
|
:root[data-interface="relaxed"] .event-entry .event-title {
|
|
font-size: 16px;
|
|
}
|
|
:root[data-interface="relaxed"] .event-entry .deadline {
|
|
font-size: 19px;
|
|
}
|
|
:root[data-interface="relaxed"] .settings-layout {
|
|
display: block;
|
|
}
|
|
:root[data-interface="relaxed"] .settings-content {
|
|
padding: 22px 20px;
|
|
}
|
|
}
|
|
/* Shared-axis timetable, matching the reference's pinned names and period bars. */
|
|
.reader-timeline {
|
|
padding: 0;
|
|
background: none;
|
|
border-radius: 0;
|
|
}
|
|
.timeline-scroller {
|
|
overflow: auto;
|
|
max-height: 100dvh;
|
|
border-block: 1px solid var(--color-hairline);
|
|
position: relative;
|
|
}
|
|
.timeline-board {
|
|
position: relative;
|
|
isolation: isolate;
|
|
--name-width: 250px;
|
|
width: calc(var(--name-width) + var(--track-width));
|
|
}
|
|
.time-axis,
|
|
.timeline-entry,
|
|
.game-separator {
|
|
display: grid;
|
|
grid-template-columns: var(--name-width) var(--track-width);
|
|
}
|
|
.time-axis {
|
|
position: sticky;
|
|
top: 0;
|
|
z-index: 8;
|
|
background: var(--color-ground);
|
|
height: 42px;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
.time-axis > strong {
|
|
padding: 12px 20px;
|
|
position: sticky;
|
|
left: 0;
|
|
background: var(--color-ground);
|
|
z-index: 9;
|
|
font-size: 12px;
|
|
}
|
|
.ticks {
|
|
position: relative;
|
|
color: var(--color-muted);
|
|
font-size: 12px;
|
|
}
|
|
.ticks span {
|
|
position: absolute;
|
|
top: 12px;
|
|
white-space: nowrap;
|
|
}
|
|
.timeline-entry {
|
|
height: 56px;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
position: relative;
|
|
}
|
|
.timeline-name {
|
|
position: sticky;
|
|
left: 0;
|
|
z-index: 4;
|
|
padding: 9px 16px;
|
|
background: var(--color-ground);
|
|
font-size: 13px;
|
|
line-height: 1.4;
|
|
display: block;
|
|
text-align: left;
|
|
border-right: 1px solid var(--color-hairline);
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
.timeline-name small {
|
|
display: block;
|
|
color: var(--color-muted);
|
|
font-size: 11px;
|
|
}
|
|
.time-track {
|
|
position: relative;
|
|
background-image: linear-gradient(
|
|
to right,
|
|
var(--color-hairline) 1px,
|
|
transparent 1px
|
|
);
|
|
background-size: var(--day-width) 100%;
|
|
}
|
|
.period-block {
|
|
position: absolute;
|
|
top: 12px;
|
|
height: 30px;
|
|
background: color-mix(in srgb, var(--g) 20%, var(--color-ground));
|
|
border: 1px solid color-mix(in srgb, var(--g) 65%, var(--color-hairline));
|
|
text-align: left;
|
|
padding: 5px 8px;
|
|
overflow: clip;
|
|
white-space: nowrap;
|
|
font-size: 12px;
|
|
max-width: 100%;
|
|
}
|
|
.period-block.routine {
|
|
border-style: dashed;
|
|
background: var(--color-surface);
|
|
}
|
|
.period-block .fill {
|
|
position: absolute;
|
|
inset: 0 auto 0 0;
|
|
background: color-mix(in srgb, var(--g) 20%, transparent);
|
|
pointer-events: none;
|
|
}
|
|
.period-block span {
|
|
position: sticky;
|
|
left: calc(var(--name-width) + 8px);
|
|
display: block;
|
|
width: max-content;
|
|
max-width: 100%;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
.period-block.unknown-end {
|
|
border-right: 3px dotted var(--g);
|
|
}
|
|
.period-block.future {
|
|
border-left-style: dashed;
|
|
background: color-mix(in srgb, var(--g) 10%, var(--color-ground));
|
|
}
|
|
.reset-mark {
|
|
position: absolute;
|
|
top: 9px;
|
|
bottom: 9px;
|
|
border-right: 2px solid var(--g);
|
|
pointer-events: none;
|
|
}
|
|
.game-separator {
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
background: var(--color-surface);
|
|
height: 38px;
|
|
font-size: 13px;
|
|
}
|
|
.game-separator strong {
|
|
position: sticky;
|
|
left: 0;
|
|
padding: 9px 16px;
|
|
background: var(--color-surface);
|
|
z-index: 5;
|
|
color: var(--g);
|
|
}
|
|
.game-separator span {
|
|
padding: 9px 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.reader-timeline .reset-strip {
|
|
padding: 0;
|
|
background: none;
|
|
}
|
|
.reset-strip .timeline-entry {
|
|
height: 48px;
|
|
}
|
|
.routine-timeline-row {
|
|
padding: 0;
|
|
border: 0;
|
|
}
|
|
.today-line {
|
|
position: absolute;
|
|
top: 0;
|
|
bottom: 0;
|
|
border-left: 1px solid var(--color-near);
|
|
pointer-events: none;
|
|
z-index: 3;
|
|
}
|
|
.timeline-help {
|
|
padding: 16px 24px;
|
|
color: var(--color-muted);
|
|
font-size: 12px;
|
|
}
|
|
.timeline-routine-detail {
|
|
padding: 20px 24px;
|
|
background: var(--color-surface);
|
|
}
|
|
.archive-page {
|
|
padding: 0;
|
|
background: none;
|
|
border-radius: 0;
|
|
}
|
|
.archive-story {
|
|
margin: 24px 32px;
|
|
border-block: 1px solid var(--color-hairline);
|
|
padding: 24px 0;
|
|
}
|
|
.archive-story h2 {
|
|
font: 600 24px var(--font-display);
|
|
margin: 0 0 8px;
|
|
}
|
|
.archive-story > p {
|
|
color: var(--color-muted);
|
|
max-width: 70ch;
|
|
line-height: 1.65;
|
|
}
|
|
.story-stats {
|
|
gap: 28px;
|
|
margin: 24px 0;
|
|
}
|
|
.story-stats strong {
|
|
font: 600 36px var(--font-display);
|
|
}
|
|
.story-stats span {
|
|
font-size: 13px;
|
|
margin: 4px 0;
|
|
color: var(--color-ink);
|
|
}
|
|
.story-stats small {
|
|
font-size: 12px;
|
|
line-height: 1.5;
|
|
}
|
|
.stats-game {
|
|
display: grid;
|
|
grid-template-columns: 140px 1fr 200px;
|
|
gap: 16px;
|
|
align-items: center;
|
|
width: 100%;
|
|
padding: 9px 0;
|
|
text-align: left;
|
|
font-size: 12px;
|
|
}
|
|
.stats-game .name {
|
|
color: var(--g);
|
|
}
|
|
.stats-game .counts {
|
|
color: var(--color-muted);
|
|
text-align: right;
|
|
}
|
|
.stats-game[aria-pressed="true"] {
|
|
background: var(--color-raised);
|
|
}
|
|
.outcome-stack {
|
|
display: flex;
|
|
height: 10px;
|
|
gap: 2px;
|
|
}
|
|
.outcome-stack .done {
|
|
background: var(--color-near);
|
|
}
|
|
.outcome-stack .unfinished {
|
|
border: 1px solid var(--color-muted);
|
|
}
|
|
.outcome-stack .ignored {
|
|
background: var(--color-hairline);
|
|
}
|
|
.archive-tools {
|
|
display: flex;
|
|
gap: 16px;
|
|
align-items: center;
|
|
flex-wrap: wrap;
|
|
padding: 0 32px 20px;
|
|
}
|
|
.archive-game {
|
|
margin: 0 32px 24px;
|
|
}
|
|
.archive-game h2 {
|
|
font: 600 26px var(--font-display);
|
|
margin: 24px 0 12px;
|
|
}
|
|
.archive-record {
|
|
padding: 16px 0;
|
|
}
|
|
.archive-record .event-link {
|
|
font-weight: 500;
|
|
font-size: 16px;
|
|
}
|
|
.archive-record small {
|
|
font-size: 12px;
|
|
}
|
|
.archive-record p {
|
|
max-width: 65ch;
|
|
}
|
|
.feed-footer {
|
|
margin-top: 0;
|
|
padding: 16px 24px;
|
|
font-size: 12px;
|
|
}
|
|
:root[data-interface="relaxed"] .archive-story {
|
|
margin: 12px 0 28px;
|
|
padding: 24px;
|
|
background: var(--color-surface);
|
|
border: 0;
|
|
border-radius: 18px;
|
|
}
|
|
:root[data-interface="relaxed"] .archive-game {
|
|
margin: 0 0 24px;
|
|
padding: 24px;
|
|
background: var(--color-surface);
|
|
border-radius: 18px;
|
|
}
|
|
:root[data-interface="relaxed"] .archive-tools {
|
|
padding-inline: 0;
|
|
}
|
|
:root[data-interface="relaxed"] .timeline-scroller {
|
|
border-radius: 14px;
|
|
background: var(--color-surface);
|
|
}
|
|
:root[data-interface="relaxed"] .feed-footer {
|
|
margin-top: 28px;
|
|
}
|
|
@media (max-width: 700px) {
|
|
.timeline-board {
|
|
--name-width: 170px;
|
|
}
|
|
.timeline-name {
|
|
font-size: 12px;
|
|
}
|
|
.archive-story {
|
|
margin: 20px;
|
|
}
|
|
.stats-game {
|
|
grid-template-columns: 90px 1fr;
|
|
gap: 10px;
|
|
}
|
|
.stats-game .counts {
|
|
grid-column: 2;
|
|
text-align: left;
|
|
}
|
|
.archive-game {
|
|
margin-inline: 20px;
|
|
}
|
|
.archive-tools {
|
|
padding-inline: 20px;
|
|
}
|
|
.archive-page {
|
|
padding: 0;
|
|
}
|
|
.story-stats {
|
|
grid-template-columns: 1fr 1fr;
|
|
}
|
|
.reader-timeline {
|
|
padding: 0;
|
|
}
|
|
}
|
|
.reader-ui .meter-tick {
|
|
box-shadow: none !important;
|
|
filter: none !important;
|
|
}
|
|
.release-update.update-row {
|
|
padding: 12px 32px;
|
|
}
|
|
.settings-layout > nav {
|
|
padding: 10px 0 30px;
|
|
}
|
|
.settings-layout > nav button {
|
|
padding: 9px 24px;
|
|
line-height: 1.3;
|
|
}
|
|
.settings-layout > nav h2 {
|
|
font: 600 13px var(--font-display);
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.08em;
|
|
color: var(--color-muted);
|
|
margin: 18px 0 6px;
|
|
}
|
|
.settings-content {
|
|
max-width: 900px;
|
|
padding: 22px 32px 64px;
|
|
}
|
|
:root[data-interface="relaxed"] .settings-layout > nav {
|
|
background: var(--color-surface);
|
|
border-radius: 18px;
|
|
}
|
|
.settings-group {
|
|
margin-top: 30px;
|
|
}
|
|
.settings-group h2,
|
|
.sources-page .sources-heading {
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
padding-bottom: 6px;
|
|
margin-bottom: 14px;
|
|
font-size: 20px;
|
|
}
|
|
.scheme-choices {
|
|
display: flex;
|
|
gap: 12px;
|
|
flex-wrap: wrap;
|
|
margin-top: 16px;
|
|
}
|
|
/* Pills under an explanation get the scheme choices' breathing room; flush
|
|
against the text they read as part of the sentence. */
|
|
.settings-group .help + .segmented {
|
|
margin-top: 16px;
|
|
}
|
|
/* In Settings the pills sit beside outlined buttons and selects, so they take
|
|
those controls' type and height, and in Relaxed a hairline tray rather than
|
|
the dark well the Checklist's sort pills use: a well among outlines reads as
|
|
text floating in a hole. */
|
|
.settings-group .segmented button {
|
|
font-size: 13px;
|
|
line-height: 1.6;
|
|
padding: 7px 12px;
|
|
min-height: 0;
|
|
}
|
|
:root[data-interface="relaxed"] .settings-group .segmented {
|
|
background: transparent;
|
|
border: 1px solid var(--color-hairline);
|
|
border-radius: 8px;
|
|
}
|
|
:root[data-interface="relaxed"] .settings-group .segmented button {
|
|
padding: 4px 12px;
|
|
min-height: 0;
|
|
border-radius: 5px;
|
|
}
|
|
.scheme-option {
|
|
border: 1px solid var(--color-hairline);
|
|
padding: 10px 14px;
|
|
border-radius: 4px;
|
|
min-width: 110px;
|
|
text-align: left;
|
|
font-size: 13px;
|
|
}
|
|
.scheme-option[aria-pressed="true"] {
|
|
outline: 2px solid var(--color-near);
|
|
outline-offset: 2px;
|
|
}
|
|
.scheme-swatch {
|
|
display: flex;
|
|
margin-bottom: 10px;
|
|
width: 72px;
|
|
height: 22px;
|
|
}
|
|
.scheme-swatch i {
|
|
flex: 1;
|
|
background: var(--color-ground);
|
|
}
|
|
.scheme-swatch i:nth-child(2) {
|
|
background: var(--color-surface);
|
|
}
|
|
.scheme-swatch i:nth-child(3) {
|
|
background: var(--color-near);
|
|
}
|
|
.scheme-warm {
|
|
--color-ground: #24201c;
|
|
--color-surface: #302a24;
|
|
}
|
|
.scheme-plum {
|
|
--color-ground: #211c29;
|
|
--color-surface: #2c2536;
|
|
}
|
|
.account-setup {
|
|
padding: 20px 0;
|
|
}
|
|
.account-setup > label {
|
|
display: flex;
|
|
flex-direction: row;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
font-size: 13px;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
padding-bottom: 14px;
|
|
}
|
|
.account-setup h2 {
|
|
margin: 0 0 16px;
|
|
}
|
|
.event-detail-sheet {
|
|
position: absolute;
|
|
left: 50%;
|
|
top: 50%;
|
|
transform: translate(-50%, -50%);
|
|
width: min(480px, calc(100vw - 32px));
|
|
max-height: calc(100dvh - 48px);
|
|
overflow: auto;
|
|
background: var(--color-surface);
|
|
border: 1px solid var(--color-hairline);
|
|
border-radius: 6px;
|
|
padding: 22px 24px;
|
|
}
|
|
.detail-game {
|
|
font-size: 13px;
|
|
font-weight: 500;
|
|
}
|
|
.detail-title {
|
|
font: 600 28px/1.2 var(--font-display);
|
|
margin: 8px 0 16px;
|
|
}
|
|
.detail-facts {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 16px;
|
|
margin: 24px 0;
|
|
font-size: 13px;
|
|
}
|
|
.detail-facts .eyebrow {
|
|
font: 400 12px var(--font-body);
|
|
text-transform: none;
|
|
letter-spacing: 0;
|
|
color: var(--color-muted);
|
|
}
|
|
.drawer-head {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 16px;
|
|
margin-bottom: 16px;
|
|
}
|
|
.drawer-head h2 {
|
|
font: 600 28px var(--font-display);
|
|
margin: 0;
|
|
}
|
|
.drawer-head button {
|
|
color: var(--color-muted);
|
|
font-size: 13px;
|
|
}
|
|
:root[data-interface="relaxed"] .event-detail-sheet {
|
|
border-radius: 14px;
|
|
}
|
|
@media (max-width: 700px) {
|
|
.app-navigation button {
|
|
padding-inline: 7px;
|
|
letter-spacing: 0;
|
|
}
|
|
.app-navigation .n {
|
|
display: none;
|
|
}
|
|
.app-navigation .gear {
|
|
margin-left: 0;
|
|
}
|
|
.app-navigation {
|
|
justify-content: space-between;
|
|
}
|
|
.settings-content {
|
|
padding: 22px 20px;
|
|
}
|
|
.settings-layout > nav {
|
|
padding: 8px;
|
|
}
|
|
.settings-layout > nav button {
|
|
padding: 8px 12px;
|
|
}
|
|
.release-update.update-row {
|
|
padding: 12px 20px;
|
|
}
|
|
.checklist-display {
|
|
gap: 16px;
|
|
}
|
|
.checklist-display legend {
|
|
float: none;
|
|
margin-bottom: 12px;
|
|
}
|
|
.event-detail-sheet {
|
|
padding: 22px 20px;
|
|
}
|
|
}
|
|
.bulk-pins {
|
|
display: flex;
|
|
gap: 6px;
|
|
margin-top: 8px;
|
|
}
|
|
.bulk-pins .btn {
|
|
font-size: 12px;
|
|
padding: 2px 8px;
|
|
}
|
|
.band-reset {
|
|
text-align: right;
|
|
}
|
|
.band-reset small {
|
|
display: block;
|
|
color: var(--color-muted);
|
|
font-size: 12px;
|
|
}
|
|
.band-reset strong {
|
|
display: block;
|
|
font: 700 34px/1 var(--font-display);
|
|
}
|
|
.routine-histories {
|
|
padding: 20px 24px;
|
|
font-size: 13px;
|
|
color: var(--color-muted);
|
|
}
|
|
.archive-view {
|
|
padding: 24px 32px 0;
|
|
display: flex;
|
|
gap: 16px;
|
|
align-items: center;
|
|
flex-wrap: wrap;
|
|
}
|
|
.archive-body {
|
|
display: grid;
|
|
grid-template-columns: 260px minmax(0, 1fr);
|
|
}
|
|
.archive-sidebar {
|
|
border-right: 1px solid var(--color-hairline);
|
|
padding: 10px 0;
|
|
align-self: start;
|
|
}
|
|
.archive-sidebar button {
|
|
display: block;
|
|
padding: 12px 24px;
|
|
text-align: left;
|
|
width: 100%;
|
|
font-size: 13px;
|
|
}
|
|
.archive-sidebar button[aria-pressed="true"] {
|
|
background: var(--color-raised);
|
|
}
|
|
.archive-sidebar strong {
|
|
color: var(--g);
|
|
font-weight: 500;
|
|
}
|
|
.archive-sidebar small {
|
|
display: block;
|
|
color: var(--color-muted);
|
|
font-size: 11px;
|
|
margin: 4px 0;
|
|
}
|
|
.archive-main {
|
|
padding: 0 24px 24px;
|
|
min-width: 0;
|
|
}
|
|
.archive-game {
|
|
margin: 24px 0;
|
|
}
|
|
.archive-game h2 {
|
|
color: var(--g);
|
|
font: 600 24px var(--font-display);
|
|
margin: 0 0 12px;
|
|
}
|
|
.archive-saved {
|
|
border: 1px solid var(--color-hairline);
|
|
border-radius: 4px;
|
|
}
|
|
.archive-saved-heading {
|
|
padding: 12px 16px;
|
|
display: flex;
|
|
gap: 10px;
|
|
align-items: baseline;
|
|
flex-wrap: wrap;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
.archive-saved-heading h3 {
|
|
color: var(--g);
|
|
font: 600 20px var(--font-display);
|
|
margin: 0;
|
|
}
|
|
.archive-saved-heading small {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.archive-outcome-bar {
|
|
display: flex;
|
|
gap: 3px;
|
|
height: 7px;
|
|
width: 100%;
|
|
margin-top: 6px;
|
|
}
|
|
.archive-outcome-bar i {
|
|
flex: 1;
|
|
max-width: 42px;
|
|
background: var(--g, var(--color-near));
|
|
}
|
|
.archive-outcome-bar .unfinished {
|
|
background: transparent;
|
|
border: 1px solid var(--color-critical);
|
|
}
|
|
.archive-outcome-bar .ignored {
|
|
background: var(--color-hairline);
|
|
}
|
|
.archive-record {
|
|
display: flex;
|
|
padding: 0;
|
|
gap: 10px;
|
|
border-top: 0;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
align-items: center;
|
|
}
|
|
.archive-record:last-child {
|
|
border-bottom: 0;
|
|
}
|
|
.archive-open {
|
|
display: flex;
|
|
gap: 12px;
|
|
align-items: center;
|
|
flex: 1;
|
|
min-width: 0;
|
|
padding: 12px 16px;
|
|
text-align: left;
|
|
}
|
|
.archive-open .event-link {
|
|
font-size: 14px;
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
.archive-open small {
|
|
font-size: 11px;
|
|
margin-top: 2px;
|
|
}
|
|
.archive-when {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.outcome-symbol {
|
|
display: inline-grid;
|
|
place-items: center;
|
|
width: 20px;
|
|
height: 20px;
|
|
border-radius: 50%;
|
|
border: 1px solid var(--g);
|
|
flex: none;
|
|
font-size: 12px;
|
|
color: var(--g);
|
|
}
|
|
.outcome-symbol.done {
|
|
background: var(--g);
|
|
color: var(--color-ground);
|
|
}
|
|
.outcome-symbol.unfinished {
|
|
color: var(--color-critical);
|
|
border-color: var(--color-critical);
|
|
}
|
|
.outcome-symbol.ignored {
|
|
color: var(--color-muted);
|
|
border-color: var(--color-muted);
|
|
border-style: dashed;
|
|
}
|
|
.archive-restore {
|
|
font-size: 12px;
|
|
padding: 12px;
|
|
color: var(--color-near);
|
|
}
|
|
.archive-history-note {
|
|
margin: 24px 0;
|
|
}
|
|
.archive-timeline {
|
|
margin: 24px 0;
|
|
}
|
|
.archive-period.ignored {
|
|
opacity: 0.55;
|
|
}
|
|
.archive-period.unfinished {
|
|
border-color: var(--color-critical);
|
|
}
|
|
:root[data-interface="relaxed"] .archive-body {
|
|
gap: 24px;
|
|
}
|
|
:root[data-interface="relaxed"] .archive-sidebar {
|
|
background: var(--color-surface);
|
|
border-radius: 18px;
|
|
border: 0;
|
|
}
|
|
:root[data-interface="relaxed"] .archive-game {
|
|
margin: 24px 0;
|
|
}
|
|
:root[data-interface="relaxed"] .archive-view {
|
|
padding-inline: 0;
|
|
}
|
|
@media (max-width: 700px) {
|
|
.band-reset strong {
|
|
font-size: 26px;
|
|
}
|
|
.archive-body {
|
|
display: block;
|
|
}
|
|
.archive-sidebar {
|
|
display: flex;
|
|
overflow: auto;
|
|
border: 0;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
.archive-sidebar button {
|
|
flex: none;
|
|
width: auto;
|
|
padding: 10px 16px;
|
|
max-width: 180px;
|
|
}
|
|
.archive-main {
|
|
padding: 0 20px 20px;
|
|
}
|
|
.archive-when {
|
|
display: none;
|
|
}
|
|
.archive-open {
|
|
padding: 12px 10px;
|
|
gap: 8px;
|
|
}
|
|
.archive-record {
|
|
flex-wrap: nowrap;
|
|
}
|
|
.archive-view {
|
|
padding: 20px 20px 0;
|
|
}
|
|
:root[data-interface="relaxed"] .archive-game {
|
|
padding: 16px;
|
|
}
|
|
.archive-restore {
|
|
padding: 10px 6px;
|
|
}
|
|
}
|
|
|
|
/* Native archive sheet retains the saved record rather than opening a live editor. */
|
|
dialog.archive-detail {
|
|
position: fixed;
|
|
inset: 0;
|
|
margin: auto;
|
|
transform: none;
|
|
height: fit-content;
|
|
color: var(--color-ink);
|
|
}
|
|
.archive-detail::backdrop {
|
|
background: rgb(0 0 0 / 65%);
|
|
}
|
|
.archive-detail > p,
|
|
.archive-detail > details,
|
|
.archive-detail > section {
|
|
margin-block: 18px;
|
|
}
|
|
.archive-facts {
|
|
display: grid;
|
|
gap: 18px;
|
|
margin-block: 24px;
|
|
}
|
|
.archive-facts dt {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.archive-facts dd {
|
|
margin: 5px 0 0;
|
|
font-size: 14px;
|
|
}
|
|
.archive-note {
|
|
white-space: pre-wrap;
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
.checklist-display > .help {
|
|
flex-basis: 100%;
|
|
margin: 2px 0 0;
|
|
}
|
|
.settings-layout nav button.settings-row {
|
|
display: flex;
|
|
gap: 10px;
|
|
align-items: center;
|
|
text-align: left;
|
|
}
|
|
.settings-copy {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
.settings-copy > span {
|
|
display: block;
|
|
}
|
|
.settings-marker {
|
|
flex: none;
|
|
width: 3px;
|
|
height: 28px;
|
|
background: var(--g, var(--color-hairline));
|
|
border-radius: 2px;
|
|
}
|
|
.settings-chevron {
|
|
flex: none;
|
|
color: var(--color-muted);
|
|
}
|
|
.settings-manage {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.game-settings .account-setup {
|
|
padding: 0;
|
|
margin: 0;
|
|
border: 0;
|
|
background: none;
|
|
}
|
|
.tracking-account-choice {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 14px;
|
|
margin-bottom: 18px;
|
|
font-size: 13px;
|
|
}
|
|
.server-add-toggle {
|
|
color: var(--color-near);
|
|
margin-top: 16px;
|
|
font-size: 13px;
|
|
}
|
|
.game-settings .another-server {
|
|
border: 0;
|
|
padding: 16px 0 0;
|
|
margin: 0;
|
|
}
|
|
@media (max-width: 700px) {
|
|
.tracking-account-choice {
|
|
flex-wrap: wrap;
|
|
}
|
|
}
|
|
/* New-user setup: a translation of the Round 6 B onboarding (`.ob`, `.gpick`, `.mtx`, `.vcard`). */
|
|
.reader-ui:has(.setup-wizard) .top {
|
|
border-bottom: 0;
|
|
}
|
|
.setup-wizard {
|
|
--rule-strong: color-mix(in srgb, var(--color-ink) 22%, var(--color-surface));
|
|
max-width: 820px;
|
|
margin: 0 auto;
|
|
padding: 40px 24px 80px;
|
|
}
|
|
:root[data-interface="relaxed"] .setup-wizard {
|
|
padding-block: 36px 48px;
|
|
}
|
|
.setup-wizard .step {
|
|
font-size: 12px;
|
|
color: var(--color-faint);
|
|
margin-bottom: 8px;
|
|
}
|
|
.setup-wizard h1 {
|
|
font: 700 44px/1.02 var(--font-display);
|
|
margin: 0 0 10px;
|
|
}
|
|
.setup-wizard .lede {
|
|
color: var(--color-muted);
|
|
max-width: 58ch;
|
|
margin: 0 0 24px;
|
|
}
|
|
.setup-wizard select {
|
|
border-color: var(--rule-strong);
|
|
}
|
|
.setup-wizard .btn {
|
|
padding: 7px 12px;
|
|
border: 1px solid var(--rule-strong);
|
|
border-radius: 3px;
|
|
font-weight: 500;
|
|
font-size: 13px;
|
|
color: var(--color-muted);
|
|
white-space: nowrap;
|
|
}
|
|
.setup-wizard .btn:hover {
|
|
color: var(--color-ink);
|
|
border-color: var(--color-muted);
|
|
}
|
|
.setup-wizard .btn.solid {
|
|
background: var(--color-ink);
|
|
color: var(--color-ground);
|
|
border-color: var(--color-ink);
|
|
}
|
|
.setup-wizard .btn.link {
|
|
border: 0;
|
|
padding: 7px 4px;
|
|
color: var(--color-near);
|
|
}
|
|
.setup-wizard .btn[disabled] {
|
|
opacity: 0.4;
|
|
cursor: default;
|
|
}
|
|
.setup-wizard .preference-grid {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 24px;
|
|
margin: 28px 0;
|
|
}
|
|
.setup-wizard .preference-grid label {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
font-weight: 500;
|
|
}
|
|
.setup-wizard .preference-grid small {
|
|
font-weight: 400;
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
line-height: 1.6;
|
|
}
|
|
.setup-wizard .preference-grid select {
|
|
min-height: 42px;
|
|
width: 100%;
|
|
}
|
|
.setup-wizard .gpick {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
border-top: 1px solid var(--color-hairline);
|
|
}
|
|
.setup-wizard .gpick button {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
padding: 11px 12px;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
text-align: left;
|
|
color: var(--color-muted);
|
|
}
|
|
.setup-wizard .gpick button:nth-child(odd) {
|
|
border-right: 1px solid var(--color-hairline);
|
|
}
|
|
.setup-wizard .gpick .sw2 {
|
|
width: 12px;
|
|
height: 12px;
|
|
border-radius: 2px;
|
|
border: 1px solid var(--g);
|
|
flex: none;
|
|
}
|
|
.setup-wizard .gpick button[aria-pressed="true"] {
|
|
color: var(--color-ink);
|
|
background: color-mix(in srgb, var(--g) 9%, transparent);
|
|
}
|
|
.setup-wizard .gpick button[aria-pressed="true"] .sw2 {
|
|
background: var(--g);
|
|
}
|
|
.setup-wizard .gpick button:hover {
|
|
color: var(--color-ink);
|
|
}
|
|
.setup-wizard .ob-foot {
|
|
display: flex;
|
|
gap: 12px;
|
|
align-items: center;
|
|
margin-top: 28px;
|
|
flex-wrap: wrap;
|
|
}
|
|
.setup-wizard .ob-foot .cnt {
|
|
color: var(--color-faint);
|
|
font-size: 13px;
|
|
flex: 1;
|
|
}
|
|
.setup-wizard .type-guide {
|
|
margin: 24px 0;
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 18px 28px;
|
|
}
|
|
.setup-wizard .type-guide dt {
|
|
font-weight: 600;
|
|
margin-bottom: 3px;
|
|
}
|
|
.setup-wizard .type-guide dd {
|
|
margin: 0;
|
|
color: var(--color-muted);
|
|
font-size: 13px;
|
|
line-height: 1.6;
|
|
}
|
|
.setup-wizard .availability {
|
|
margin: 16px 0 24px;
|
|
padding: 14px 0;
|
|
border-block: 1px solid var(--color-hairline);
|
|
font-size: 13px;
|
|
color: var(--color-muted);
|
|
line-height: 1.65;
|
|
}
|
|
.setup-wizard .availability p {
|
|
margin: 6px 0;
|
|
}
|
|
.setup-wizard .matrix-scroll {
|
|
overflow-x: auto;
|
|
}
|
|
.setup-wizard .mtx {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
margin-top: 6px;
|
|
}
|
|
.setup-wizard .mtx thead th {
|
|
font: 600 13px var(--font-display);
|
|
letter-spacing: 0.06em;
|
|
text-transform: uppercase;
|
|
color: var(--color-faint);
|
|
text-align: center;
|
|
padding: 6px 4px;
|
|
border-bottom: 1px solid var(--rule-strong);
|
|
}
|
|
.setup-wizard .mtx thead th:first-child {
|
|
text-align: left;
|
|
}
|
|
.setup-wizard .mtx td,
|
|
.setup-wizard .mtx tbody th {
|
|
padding: 8px 4px;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
text-align: center;
|
|
}
|
|
.setup-wizard .mtx tbody th {
|
|
text-align: left;
|
|
font: 600 15px var(--font-display);
|
|
letter-spacing: 0.02em;
|
|
color: var(--g);
|
|
}
|
|
.setup-wizard .mtx tr.all > * {
|
|
background: var(--color-surface);
|
|
}
|
|
.setup-wizard .mtx tr.all th {
|
|
color: var(--color-ink);
|
|
padding-left: 8px;
|
|
}
|
|
.setup-wizard .mtx th small {
|
|
display: block;
|
|
font: 400 11.5px var(--font-body);
|
|
color: var(--color-faint);
|
|
letter-spacing: 0;
|
|
}
|
|
.setup-wizard .tg {
|
|
width: 30px;
|
|
height: 30px;
|
|
border-radius: 3px;
|
|
border: 1px solid var(--rule-strong);
|
|
display: inline-grid;
|
|
place-items: center;
|
|
}
|
|
.setup-wizard .tg svg {
|
|
width: 14px;
|
|
height: 14px;
|
|
stroke: var(--color-ground);
|
|
stroke-width: 3;
|
|
fill: none;
|
|
opacity: 0;
|
|
}
|
|
.setup-wizard .tg[aria-pressed="true"] {
|
|
background: var(--g, var(--color-near));
|
|
border-color: var(--g, var(--color-near));
|
|
}
|
|
.setup-wizard .tg[aria-pressed="true"] svg {
|
|
opacity: 1;
|
|
}
|
|
.setup-wizard .tg[data-mixed="true"] {
|
|
border-style: dashed;
|
|
border-color: var(--color-muted);
|
|
}
|
|
.setup-wizard .upcoming-choice {
|
|
margin: 20px 0;
|
|
padding: 18px 0;
|
|
border-block: 1px solid var(--color-hairline);
|
|
}
|
|
.setup-wizard .chk {
|
|
display: flex;
|
|
gap: 8px;
|
|
align-items: center;
|
|
cursor: pointer;
|
|
color: var(--color-muted);
|
|
font-size: 13px;
|
|
}
|
|
.setup-wizard .chk small {
|
|
display: block;
|
|
color: var(--color-faint);
|
|
font-size: 12px;
|
|
}
|
|
.setup-wizard .upcoming-choice .chk {
|
|
padding-left: 4px;
|
|
}
|
|
.viewpick {
|
|
--rule-strong: color-mix(in srgb, var(--color-ink) 22%, var(--color-surface));
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 12px;
|
|
margin-top: 14px;
|
|
}
|
|
.vcard {
|
|
border: 1px solid var(--rule-strong);
|
|
border-radius: 4px;
|
|
padding: 14px;
|
|
text-align: left;
|
|
}
|
|
.vcard:hover {
|
|
border-color: var(--color-muted);
|
|
}
|
|
.vcard[aria-pressed="true"] {
|
|
border-color: var(--color-near);
|
|
background: color-mix(in srgb, var(--color-near) 8%, transparent);
|
|
}
|
|
.vcard b {
|
|
display: block;
|
|
font: 700 20px var(--font-display);
|
|
letter-spacing: 0.02em;
|
|
margin-top: 10px;
|
|
}
|
|
.vcard small {
|
|
color: var(--color-faint);
|
|
font-size: 12px;
|
|
}
|
|
.vprev {
|
|
height: 62px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
justify-content: center;
|
|
}
|
|
.vprev.list i {
|
|
display: block;
|
|
height: 7px;
|
|
border-radius: 1px;
|
|
background: linear-gradient(
|
|
90deg,
|
|
var(--color-soon) 0 18%,
|
|
var(--color-hairline) 18%
|
|
);
|
|
}
|
|
.vprev.list i:nth-child(2) {
|
|
background: linear-gradient(
|
|
90deg,
|
|
var(--color-near) 0 46%,
|
|
var(--color-hairline) 46%
|
|
);
|
|
width: 86%;
|
|
}
|
|
.vprev.list i:nth-child(3) {
|
|
background: linear-gradient(
|
|
90deg,
|
|
var(--color-calm) 0 70%,
|
|
var(--color-hairline) 70%
|
|
);
|
|
width: 72%;
|
|
}
|
|
.vprev.tl {
|
|
position: relative;
|
|
}
|
|
.vprev.tl i {
|
|
position: absolute;
|
|
height: 12px;
|
|
border-radius: 2px;
|
|
border-left: 3px solid var(--g);
|
|
background: color-mix(in srgb, var(--g) 30%, transparent);
|
|
}
|
|
.vprev.tl em {
|
|
position: absolute;
|
|
top: 0;
|
|
bottom: 0;
|
|
left: 46%;
|
|
width: 1px;
|
|
background: var(--color-critical);
|
|
}
|
|
@media (max-width: 860px) {
|
|
.setup-wizard .gpick,
|
|
.viewpick {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
.setup-wizard .gpick button:nth-child(odd) {
|
|
border-right: 0;
|
|
}
|
|
.setup-wizard h1 {
|
|
font-size: 34px;
|
|
}
|
|
.setup-wizard .mtx thead th {
|
|
font-size: 11px;
|
|
}
|
|
}
|
|
@media (max-width: 700px) {
|
|
.setup-wizard .preference-grid,
|
|
.setup-wizard .type-guide {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
.setup-wizard .preference-grid {
|
|
gap: 22px;
|
|
}
|
|
.setup-wizard .type-guide {
|
|
gap: 14px;
|
|
}
|
|
}
|
|
/* Compact: the Round 6 B ledger (`table.led`), drawn as a grid over the list rows. */
|
|
.event-list:has(> li > .ledger-row),
|
|
:root[data-interface="relaxed"] .event-list:has(> li > .ledger-row) {
|
|
padding: 0;
|
|
}
|
|
:root[data-interface="relaxed"] .ledger-row:hover {
|
|
background: var(--color-raised);
|
|
}
|
|
.ledger-columns,
|
|
.ledger-row {
|
|
display: grid;
|
|
grid-template-columns: 126px minmax(0, 1fr) minmax(120px, 34%) 92px;
|
|
column-gap: 24px;
|
|
align-items: center;
|
|
padding-inline: 24px;
|
|
}
|
|
.ledger-columns {
|
|
margin-top: 14px;
|
|
padding-block: 6px;
|
|
font: 500 12px var(--font-body);
|
|
color: var(--color-faint);
|
|
white-space: nowrap;
|
|
border-bottom: 1px solid
|
|
color-mix(in srgb, var(--color-ink) 22%, var(--color-surface));
|
|
}
|
|
.ledger-columns > :last-child {
|
|
text-align: right;
|
|
}
|
|
.ledger-row {
|
|
width: 100%;
|
|
min-height: 51px;
|
|
padding-block: 12px;
|
|
text-align: left;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
.ledger-row:hover {
|
|
background: var(--color-surface);
|
|
}
|
|
.ledger-row .gcell {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
white-space: nowrap;
|
|
font-weight: 600;
|
|
font-size: 13px;
|
|
color: var(--g);
|
|
}
|
|
.ledger-row .gcell::before {
|
|
content: "";
|
|
width: 3px;
|
|
height: 26px;
|
|
border-radius: 2px;
|
|
background: var(--g);
|
|
flex: none;
|
|
}
|
|
.ledger-row .gcell small {
|
|
display: block;
|
|
color: var(--color-muted);
|
|
font-weight: 500;
|
|
font-size: 11.5px;
|
|
line-height: 1;
|
|
}
|
|
.ledger-row .tcell {
|
|
font-weight: 500;
|
|
font-size: 15px;
|
|
overflow-wrap: anywhere;
|
|
}
|
|
.ledger-row .gsm {
|
|
display: none;
|
|
}
|
|
.ledger-row .tag {
|
|
font-size: 11px;
|
|
color: var(--color-faint);
|
|
border: 1px solid
|
|
color-mix(in srgb, var(--color-ink) 22%, var(--color-surface));
|
|
border-radius: 2px;
|
|
padding: 0 5px;
|
|
margin-left: 8px;
|
|
font-weight: 500;
|
|
vertical-align: 2px;
|
|
white-space: nowrap;
|
|
}
|
|
.ledger-row .tag.own {
|
|
color: var(--g);
|
|
border-color: color-mix(in srgb, var(--g) 45%, transparent);
|
|
}
|
|
.ledger-row .cd {
|
|
font: 600 20px var(--font-display);
|
|
text-align: right;
|
|
white-space: nowrap;
|
|
}
|
|
:root[data-interface="relaxed"] .ledger-row .gcell::before {
|
|
border-radius: 3px;
|
|
}
|
|
@media (max-width: 860px) {
|
|
.ledger-columns,
|
|
.ledger-row {
|
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
row-gap: 8px;
|
|
padding-inline: 20px;
|
|
}
|
|
.ledger-columns > :first-child,
|
|
.ledger-columns > .h-meter,
|
|
.ledger-row .gcell {
|
|
display: none;
|
|
}
|
|
.ledger-row .gsm {
|
|
display: block;
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
color: var(--g);
|
|
}
|
|
.ledger-row .mcell {
|
|
grid-column: 1 / -1;
|
|
}
|
|
.ledger-row .cd {
|
|
grid-area: 1 / 2;
|
|
}
|
|
.ledger-row .mcell .meter {
|
|
height: 5px;
|
|
}
|
|
}
|
|
@media (max-width: 1050px) {
|
|
.head .big {
|
|
font-size: 52px;
|
|
}
|
|
}
|
|
@media (max-width: 700px) {
|
|
.rail .then {
|
|
display: none;
|
|
}
|
|
.head .big {
|
|
font-size: 32px;
|
|
}
|
|
}
|
|
/* Timeline: where a game's routines begin when they have their own section. */
|
|
.reader-timeline .routine-divider {
|
|
width: calc(var(--name-width) + var(--track-width));
|
|
border-top: 1px dashed
|
|
color-mix(in srgb, var(--color-ink) 28%, var(--color-surface));
|
|
background: color-mix(in srgb, var(--color-surface) 55%, transparent);
|
|
height: 28px;
|
|
}
|
|
.reader-timeline .routine-divider span {
|
|
position: sticky;
|
|
left: 0;
|
|
display: inline-block;
|
|
padding: 6px 16px;
|
|
font: 600 11px/16px var(--font-display);
|
|
letter-spacing: 0.08em;
|
|
text-transform: uppercase;
|
|
color: var(--color-muted);
|
|
}
|
|
.classic-timeline {
|
|
border-top: 1px solid var(--color-hairline);
|
|
}
|
|
/* Setup: the two Timeline designs, drawn. */
|
|
.setup-wizard .look-choice {
|
|
margin-top: 28px;
|
|
padding-top: 22px;
|
|
border-top: 1px solid var(--color-hairline);
|
|
}
|
|
.setup-wizard .look-choice h2 {
|
|
font: 700 24px/1.1 var(--font-display);
|
|
margin: 0 0 6px;
|
|
}
|
|
.setup-wizard .look-choice .lede {
|
|
margin-bottom: 6px;
|
|
}
|
|
.vprev.tl-new span {
|
|
display: grid;
|
|
grid-template-columns: 26% 1fr;
|
|
gap: 8px;
|
|
align-items: center;
|
|
position: relative;
|
|
}
|
|
.vprev.tl-new .name {
|
|
height: 5px;
|
|
border-radius: 1px;
|
|
background: var(--color-hairline);
|
|
}
|
|
.vprev.tl-new span > .bar {
|
|
position: relative;
|
|
display: block;
|
|
height: 10px;
|
|
margin-left: var(--l, 0);
|
|
border-radius: 2px;
|
|
border-left: 3px solid var(--g);
|
|
background: color-mix(in srgb, var(--g) 30%, transparent);
|
|
}
|
|
.vprev.tl-new {
|
|
background: repeating-linear-gradient(
|
|
90deg,
|
|
transparent 0 18px,
|
|
color-mix(in srgb, var(--color-hairline) 60%, transparent) 18px 19px
|
|
)
|
|
26% 0 / 74% 100% no-repeat;
|
|
}
|
|
.vprev.tl-classic {
|
|
position: relative;
|
|
}
|
|
.vprev.tl-classic .lane {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
width: 22%;
|
|
height: 4px;
|
|
border-radius: 1px;
|
|
background: var(--g);
|
|
}
|
|
.vprev.tl-classic i {
|
|
position: absolute;
|
|
height: 13px;
|
|
border-radius: 3px;
|
|
border-left: 3px solid var(--g);
|
|
background: color-mix(in srgb, var(--g) 26%, var(--color-surface));
|
|
display: flex;
|
|
align-items: center;
|
|
padding-left: 5px;
|
|
}
|
|
.vprev.tl-classic i:nth-of-type(1) {
|
|
top: 10px;
|
|
}
|
|
.vprev.tl-classic i:nth-of-type(2) {
|
|
top: 27px;
|
|
}
|
|
.vprev.tl-classic i:nth-of-type(3) {
|
|
top: 46px;
|
|
}
|
|
.vprev.tl-classic i span {
|
|
display: block;
|
|
width: 46%;
|
|
height: 3px;
|
|
border-radius: 1px;
|
|
background: color-mix(in srgb, var(--color-ink) 70%, transparent);
|
|
}
|
|
/* Timeline: the focus bar as one row under the board header, without its label. */
|
|
.timeline-focus .game-focus {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px 16px;
|
|
padding: 8px 16px;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
.timeline-focus .focus-heading {
|
|
order: 2;
|
|
margin: 0 0 0 auto;
|
|
}
|
|
.timeline-focus .focus-heading h2 {
|
|
display: none;
|
|
}
|
|
.timeline-focus .focus-pills {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
@media (max-width: 700px) {
|
|
.timeline-focus .game-focus {
|
|
flex-wrap: wrap;
|
|
}
|
|
}
|
|
.routine-detail .routine-control {
|
|
margin-top: 16px;
|
|
}
|
|
/* Routines table: the Round 6 B `table.rt`, with its `.tick`, `.amt` and `.pin`. */
|
|
.rt {
|
|
--rule-strong: color-mix(in srgb, var(--color-ink) 22%, var(--color-surface));
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
table-layout: fixed;
|
|
}
|
|
.rt th {
|
|
font: 500 11px var(--font-body);
|
|
color: var(--color-faint);
|
|
text-align: left;
|
|
padding: 6px 12px 4px;
|
|
letter-spacing: 0.02em;
|
|
}
|
|
.rt td {
|
|
padding: 10px 12px;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
vertical-align: middle;
|
|
}
|
|
.rt td:first-child,
|
|
.rt th:first-child {
|
|
padding-left: 24px;
|
|
width: 140px;
|
|
}
|
|
.rt .c-pin {
|
|
width: 78px;
|
|
text-align: center;
|
|
}
|
|
.rt .c-k {
|
|
width: 52px;
|
|
text-align: right;
|
|
padding-right: 24px;
|
|
}
|
|
.rt tr:last-child td {
|
|
border-bottom: 0;
|
|
}
|
|
.rt .gcell {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
white-space: nowrap;
|
|
font-weight: 600;
|
|
font-size: 13px;
|
|
color: var(--g);
|
|
}
|
|
.rt .gcell::before {
|
|
content: "";
|
|
width: 3px;
|
|
height: 26px;
|
|
border-radius: 2px;
|
|
background: var(--g);
|
|
flex: none;
|
|
}
|
|
.rt .gcell small {
|
|
display: block;
|
|
color: var(--color-muted);
|
|
font-weight: 500;
|
|
font-size: 11.5px;
|
|
line-height: 1;
|
|
}
|
|
.rt .rtitle {
|
|
font-weight: 500;
|
|
font-size: 15px;
|
|
}
|
|
.rt tr.met .rtitle {
|
|
color: var(--color-muted);
|
|
}
|
|
.rt .gsm {
|
|
display: none;
|
|
}
|
|
.rt .routine-cadence {
|
|
display: block;
|
|
font-size: 12px;
|
|
font-weight: 400;
|
|
color: var(--color-muted);
|
|
}
|
|
.rt .prog {
|
|
width: 30%;
|
|
}
|
|
.rt .amt {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
width: 100%;
|
|
text-align: left;
|
|
}
|
|
.rt .amt .bar {
|
|
flex: 1;
|
|
height: 6px;
|
|
background: var(--color-hairline);
|
|
position: relative;
|
|
border-radius: 1px;
|
|
overflow: hidden;
|
|
}
|
|
.rt .amt .bar i {
|
|
position: absolute;
|
|
inset: 0 auto 0 0;
|
|
background: color-mix(in srgb, var(--color-ink) 78%, var(--color-surface));
|
|
}
|
|
.rt .amt .bar.full i {
|
|
background: var(--g);
|
|
}
|
|
.rt .amt .num {
|
|
font: 600 15px var(--font-display);
|
|
min-width: 110px;
|
|
text-align: right;
|
|
color: var(--color-muted);
|
|
white-space: nowrap;
|
|
}
|
|
.rt .amt .num b {
|
|
color: var(--color-ink);
|
|
font-weight: 600;
|
|
}
|
|
/* Editable: a pencil that brightens, and the number underlined, on hover or focus. */
|
|
.rt .amt .edit {
|
|
width: 13px;
|
|
height: 13px;
|
|
flex: none;
|
|
fill: none;
|
|
stroke: currentColor;
|
|
stroke-width: 1.4;
|
|
stroke-linejoin: round;
|
|
color: var(--color-faint);
|
|
opacity: 0.7;
|
|
}
|
|
.rt button.amt:hover .edit,
|
|
.rt button.amt:focus-visible .edit {
|
|
color: var(--color-near);
|
|
opacity: 1;
|
|
}
|
|
.rt button.amt:hover .num b,
|
|
.rt button.amt:focus-visible .num b {
|
|
text-decoration: underline dashed;
|
|
text-underline-offset: 3px;
|
|
}
|
|
.rt .amt.editing input {
|
|
width: 96px;
|
|
padding: 3px 6px;
|
|
font: 600 15px var(--font-display);
|
|
}
|
|
.rt .amt.editing .num {
|
|
min-width: 0;
|
|
flex: 1;
|
|
text-align: left;
|
|
}
|
|
.rt .btn.sm {
|
|
padding: 3px 8px;
|
|
font-size: 12px;
|
|
border: 1px solid var(--rule-strong);
|
|
border-radius: 3px;
|
|
color: var(--color-ink);
|
|
}
|
|
.rt .tick {
|
|
white-space: nowrap;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
font-size: 13px;
|
|
color: var(--color-muted);
|
|
}
|
|
.rt .tick .box {
|
|
width: 18px;
|
|
height: 18px;
|
|
border: 1px solid var(--rule-strong);
|
|
border-radius: 3px;
|
|
display: grid;
|
|
place-items: center;
|
|
flex: none;
|
|
}
|
|
.rt .tick[aria-pressed="true"] {
|
|
color: var(--color-ink);
|
|
}
|
|
.rt .tick[aria-pressed="true"] .box {
|
|
background: var(--g);
|
|
border-color: var(--g);
|
|
}
|
|
.rt .tick svg {
|
|
width: 12px;
|
|
height: 12px;
|
|
stroke: var(--color-ground);
|
|
stroke-width: 3;
|
|
fill: none;
|
|
opacity: 0;
|
|
}
|
|
.rt .tick[aria-pressed="true"] svg {
|
|
opacity: 1;
|
|
}
|
|
.rt .pin {
|
|
width: 34px;
|
|
height: 28px;
|
|
border-radius: 3px;
|
|
display: inline-grid;
|
|
place-items: center;
|
|
color: var(--color-faint);
|
|
border: 1px solid transparent;
|
|
}
|
|
.rt .pin svg {
|
|
width: 16px;
|
|
height: 16px;
|
|
}
|
|
.rt .pin:hover {
|
|
color: var(--color-ink);
|
|
border-color: var(--rule-strong);
|
|
}
|
|
.rt .pin[aria-pressed="true"] {
|
|
color: var(--color-near);
|
|
background: color-mix(in srgb, var(--color-near) 15%, transparent);
|
|
border-color: color-mix(in srgb, var(--color-near) 45%, transparent);
|
|
}
|
|
/* On a pinned button, hover previews turning it off: the tint thins and the
|
|
outline breaks, so the click reads as "unpin" rather than "pin again". */
|
|
.rt .pin[aria-pressed="true"]:hover {
|
|
color: color-mix(in srgb, var(--color-near) 70%, var(--color-muted));
|
|
background: color-mix(in srgb, var(--color-near) 6%, transparent);
|
|
border-color: color-mix(in srgb, var(--color-near) 60%, transparent);
|
|
border-style: dashed;
|
|
}
|
|
@media (prefers-reduced-motion: no-preference) {
|
|
.rt .pin {
|
|
transition:
|
|
color 150ms ease,
|
|
background-color 150ms ease,
|
|
border-color 150ms ease;
|
|
}
|
|
}
|
|
.rt .pinlbl {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
}
|
|
.rt .pinlbl svg {
|
|
width: 12px;
|
|
height: 12px;
|
|
}
|
|
.rt .no-pin {
|
|
color: var(--color-faint);
|
|
}
|
|
.rt .kebab {
|
|
width: 28px;
|
|
height: 28px;
|
|
border-radius: 3px;
|
|
display: inline-grid;
|
|
place-items: center;
|
|
color: var(--color-faint);
|
|
cursor: pointer;
|
|
list-style: none;
|
|
}
|
|
.rt .kebab::-webkit-details-marker {
|
|
display: none;
|
|
}
|
|
.rt .kebab svg {
|
|
width: 16px;
|
|
height: 16px;
|
|
fill: currentColor;
|
|
}
|
|
.rt .kebab:hover,
|
|
.rt .routine-menu[open] .kebab {
|
|
background: var(--color-raised);
|
|
color: var(--color-ink);
|
|
}
|
|
@media (max-width: 860px) {
|
|
.rt {
|
|
table-layout: auto;
|
|
}
|
|
.rt td:first-child,
|
|
.rt th:first-child {
|
|
display: none;
|
|
}
|
|
/* Kept as empty cells so the pin headings stay over their columns. */
|
|
.rt .h-prog,
|
|
.rt .h-t {
|
|
visibility: hidden;
|
|
}
|
|
.rt td:nth-child(2) {
|
|
padding-left: 16px;
|
|
}
|
|
.rt .gsm {
|
|
display: block;
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
color: var(--g);
|
|
}
|
|
.rt .c-pin {
|
|
width: auto;
|
|
padding: 10px 2px;
|
|
}
|
|
.rt .c-k {
|
|
padding-right: 12px;
|
|
}
|
|
.rt .pinlbl span {
|
|
display: none;
|
|
}
|
|
.rt .prog {
|
|
width: auto;
|
|
}
|
|
.rt .amt .bar {
|
|
display: none;
|
|
}
|
|
.rt .amt .num {
|
|
min-width: 0;
|
|
font-size: 14px;
|
|
}
|
|
}
|
|
/* Routines drawer: the Round 6 B library and create shelves (`.drawer`). */
|
|
.routine-drawer {
|
|
--rule-strong: color-mix(in srgb, var(--color-ink) 22%, var(--color-surface));
|
|
position: fixed;
|
|
inset: 0 0 0 auto;
|
|
margin: 0;
|
|
width: min(580px, 100vw);
|
|
max-width: 100vw;
|
|
height: 100dvh;
|
|
max-height: 100dvh;
|
|
padding: 0;
|
|
background: var(--color-surface);
|
|
color: var(--color-ink);
|
|
border: 0;
|
|
border-left: 1px solid var(--rule-strong);
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
}
|
|
.routine-drawer:not([open]) {
|
|
display: none;
|
|
}
|
|
.routine-drawer::backdrop {
|
|
background: rgb(8 10 14 / 0.6);
|
|
}
|
|
@media (prefers-reduced-motion: no-preference) {
|
|
.routine-drawer[open] {
|
|
animation: drawer-in 0.18s ease-out;
|
|
}
|
|
@keyframes drawer-in {
|
|
from {
|
|
transform: translateX(24px);
|
|
opacity: 0.6;
|
|
}
|
|
}
|
|
}
|
|
.routine-drawer .drawer-h {
|
|
padding: 20px 24px 14px;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
.routine-drawer .r1 {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
gap: 12px;
|
|
}
|
|
.routine-drawer .drawer-h h2 {
|
|
font: 700 28px/1 var(--font-display);
|
|
margin: 0;
|
|
}
|
|
.routine-drawer .drawer-h .create-title {
|
|
margin-top: 10px;
|
|
}
|
|
.routine-drawer .drawer-h p {
|
|
margin: 6px 0 12px;
|
|
font-size: 13px;
|
|
color: var(--color-muted);
|
|
}
|
|
.routine-drawer .drawer-h input[type="search"] {
|
|
width: 100%;
|
|
min-height: 34px;
|
|
border-color: var(--rule-strong);
|
|
}
|
|
.routine-drawer .close {
|
|
width: 28px;
|
|
height: 28px;
|
|
display: grid;
|
|
place-items: center;
|
|
border-radius: 3px;
|
|
color: var(--color-muted);
|
|
}
|
|
.routine-drawer .close:hover {
|
|
color: var(--color-ink);
|
|
background: var(--color-raised);
|
|
}
|
|
.routine-drawer .close svg,
|
|
.routine-drawer .back svg,
|
|
.routine-drawer .mkown svg {
|
|
width: 16px;
|
|
height: 16px;
|
|
fill: none;
|
|
stroke: currentColor;
|
|
stroke-width: 2;
|
|
stroke-linecap: round;
|
|
}
|
|
.routine-drawer .back {
|
|
font-size: 13px;
|
|
color: var(--color-muted);
|
|
display: inline-flex;
|
|
gap: 4px;
|
|
align-items: center;
|
|
}
|
|
.routine-drawer .back:hover {
|
|
color: var(--color-ink);
|
|
}
|
|
.routine-drawer .newpin {
|
|
display: flex;
|
|
gap: 14px;
|
|
align-items: center;
|
|
font-size: 12px;
|
|
color: var(--color-faint);
|
|
margin-top: 10px;
|
|
flex-wrap: wrap;
|
|
}
|
|
.routine-drawer .newpin label {
|
|
display: flex;
|
|
gap: 6px;
|
|
align-items: center;
|
|
color: var(--color-muted);
|
|
}
|
|
.routine-drawer input[type="checkbox"],
|
|
.routine-drawer input[type="radio"] {
|
|
accent-color: var(--color-near);
|
|
width: 14px;
|
|
height: 14px;
|
|
}
|
|
.routine-drawer .drawer-b {
|
|
overflow: auto;
|
|
flex: 1;
|
|
}
|
|
.routine-drawer .mkown {
|
|
display: grid;
|
|
grid-template-columns: auto 1fr auto;
|
|
gap: 14px;
|
|
align-items: center;
|
|
width: 100%;
|
|
text-align: left;
|
|
margin: 14px 0 0;
|
|
padding: 14px 16px;
|
|
border: 1px dashed color-mix(in srgb, var(--color-near) 60%, transparent);
|
|
border-radius: 4px;
|
|
background: color-mix(in srgb, var(--color-near) 7%, transparent);
|
|
}
|
|
.routine-drawer .mkown:hover {
|
|
background: color-mix(in srgb, var(--color-near) 13%, transparent);
|
|
border-style: solid;
|
|
}
|
|
.routine-drawer .mkown .plus {
|
|
width: 30px;
|
|
height: 30px;
|
|
border-radius: 50%;
|
|
display: grid;
|
|
place-items: center;
|
|
background: var(--color-near);
|
|
color: var(--color-ground);
|
|
}
|
|
.routine-drawer .mkown b {
|
|
display: block;
|
|
font: 700 18px/1.1 var(--font-display);
|
|
letter-spacing: 0.02em;
|
|
}
|
|
.routine-drawer .mkown small {
|
|
display: block;
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.routine-drawer .mkown .go {
|
|
color: var(--color-near);
|
|
}
|
|
.routine-drawer .lg {
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
.routine-drawer .lg-h {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
padding: 16px 24px 8px;
|
|
flex-wrap: wrap;
|
|
}
|
|
.routine-drawer .lg-h .nm {
|
|
font: 700 18px var(--font-display);
|
|
color: var(--g);
|
|
letter-spacing: 0.02em;
|
|
flex: 1;
|
|
}
|
|
.routine-drawer .lg-h .cnt {
|
|
font-size: 12px;
|
|
color: var(--color-faint);
|
|
}
|
|
.routine-drawer .bulk {
|
|
display: flex;
|
|
gap: 6px;
|
|
padding: 0 24px 10px;
|
|
flex-wrap: wrap;
|
|
}
|
|
.routine-drawer .bulk button {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
border: 1px solid var(--rule-strong);
|
|
border-radius: 2px;
|
|
padding: 3px 8px;
|
|
}
|
|
.routine-drawer .bulk button:hover {
|
|
color: var(--color-ink);
|
|
border-color: var(--color-muted);
|
|
}
|
|
.routine-drawer .li {
|
|
display: grid;
|
|
grid-template-columns: 1fr auto;
|
|
gap: 12px;
|
|
padding: 9px 24px;
|
|
border-top: 1px solid var(--color-hairline);
|
|
align-items: center;
|
|
}
|
|
.routine-drawer .li .t {
|
|
font-weight: 500;
|
|
}
|
|
.routine-drawer .li .d {
|
|
font-size: 12px;
|
|
color: var(--color-faint);
|
|
}
|
|
.routine-drawer .fols {
|
|
display: flex;
|
|
gap: 4px;
|
|
}
|
|
.routine-drawer .fol {
|
|
font-size: 12px;
|
|
font-weight: 600;
|
|
padding: 5px 10px;
|
|
border-radius: 3px;
|
|
border: 1px solid var(--rule-strong);
|
|
color: var(--color-muted);
|
|
min-width: 92px;
|
|
white-space: nowrap;
|
|
}
|
|
.routine-drawer .fols .fol {
|
|
min-width: 0;
|
|
}
|
|
.routine-drawer .fol:hover {
|
|
color: var(--color-ink);
|
|
border-color: var(--color-muted);
|
|
}
|
|
.routine-drawer .fol[aria-pressed="true"] {
|
|
background: color-mix(in srgb, var(--g) 16%, transparent);
|
|
border-color: color-mix(in srgb, var(--g) 60%, transparent);
|
|
color: var(--color-ink);
|
|
}
|
|
@media (prefers-reduced-motion: no-preference) {
|
|
.routine-drawer .fol {
|
|
transition:
|
|
color 150ms ease,
|
|
background-color 150ms ease,
|
|
border-color 150ms ease;
|
|
}
|
|
}
|
|
.routine-drawer .cf {
|
|
padding: 18px 24px 32px;
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 16px 14px;
|
|
}
|
|
.routine-drawer .cf .full {
|
|
grid-column: 1 / -1;
|
|
}
|
|
.routine-drawer .cf .fld {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
font-size: 12px;
|
|
color: var(--color-faint);
|
|
min-width: 0;
|
|
margin: 0;
|
|
max-width: none;
|
|
}
|
|
.routine-drawer .cf .fld > span:first-child {
|
|
font: 600 13px var(--font-display);
|
|
letter-spacing: 0.08em;
|
|
text-transform: uppercase;
|
|
color: var(--color-muted);
|
|
}
|
|
.routine-drawer .cf .opt {
|
|
text-transform: none;
|
|
letter-spacing: 0;
|
|
font: 400 12px var(--font-body);
|
|
color: var(--color-faint);
|
|
}
|
|
.routine-drawer .cf input:not([type="checkbox"]):not([type="radio"]),
|
|
.routine-drawer .cf select,
|
|
.routine-drawer .cf textarea {
|
|
min-height: 34px;
|
|
border-color: var(--rule-strong);
|
|
}
|
|
.routine-drawer .cf .row {
|
|
display: flex;
|
|
gap: 8px;
|
|
align-items: center;
|
|
flex-wrap: wrap;
|
|
color: var(--color-muted);
|
|
font-size: 13px;
|
|
margin-top: 2px;
|
|
}
|
|
.routine-drawer .cf .row input[type="number"] {
|
|
width: 84px;
|
|
}
|
|
.routine-drawer .cf .row input[type="date"] {
|
|
width: 150px;
|
|
}
|
|
.routine-drawer .cf .row input.unit {
|
|
width: 120px;
|
|
}
|
|
.routine-drawer .cf textarea {
|
|
min-height: 60px;
|
|
resize: vertical;
|
|
}
|
|
.routine-drawer .cf .help {
|
|
font-size: 12px;
|
|
color: var(--color-faint);
|
|
}
|
|
.routine-drawer .cf .server-note {
|
|
padding-top: 6px;
|
|
}
|
|
.routine-drawer .cf .chk {
|
|
display: inline-flex;
|
|
gap: 6px;
|
|
align-items: center;
|
|
font-size: 13px;
|
|
color: var(--color-muted);
|
|
}
|
|
.routine-drawer .pills {
|
|
display: flex;
|
|
gap: 4px;
|
|
flex-wrap: wrap;
|
|
}
|
|
.routine-drawer .pills button {
|
|
font-size: 12px;
|
|
padding: 5px 9px;
|
|
border: 1px solid var(--rule-strong);
|
|
border-radius: 2px;
|
|
color: var(--color-muted);
|
|
}
|
|
.routine-drawer .pills button:hover {
|
|
color: var(--color-ink);
|
|
}
|
|
.routine-drawer .pills button[aria-pressed="true"] {
|
|
border-color: var(--color-near);
|
|
color: var(--color-ink);
|
|
background: color-mix(in srgb, var(--color-near) 14%, transparent);
|
|
}
|
|
.routine-drawer .preview {
|
|
grid-column: 1 / -1;
|
|
border: 1px solid var(--rule-strong);
|
|
border-left: 3px solid var(--g);
|
|
border-radius: 3px;
|
|
padding: 12px 14px;
|
|
background: var(--color-ground);
|
|
}
|
|
.routine-drawer .preview .k {
|
|
font-size: 11px;
|
|
color: var(--color-faint);
|
|
letter-spacing: 0.06em;
|
|
text-transform: uppercase;
|
|
}
|
|
.routine-drawer .preview .t {
|
|
font: 600 18px/1.2 var(--font-display);
|
|
letter-spacing: 0.01em;
|
|
margin: 2px 0;
|
|
}
|
|
.routine-drawer .preview .pg {
|
|
color: var(--g);
|
|
font-size: 14px;
|
|
}
|
|
.routine-drawer .preview .l {
|
|
font-size: 13px;
|
|
color: var(--color-muted);
|
|
}
|
|
.routine-drawer .preview .l b {
|
|
color: var(--color-ink);
|
|
font-weight: 600;
|
|
}
|
|
.routine-drawer .cf-foot {
|
|
grid-column: 1 / -1;
|
|
display: flex;
|
|
gap: 10px;
|
|
align-items: center;
|
|
flex-wrap: wrap;
|
|
}
|
|
.routine-drawer .btn {
|
|
padding: 7px 12px;
|
|
border: 1px solid var(--rule-strong);
|
|
border-radius: 3px;
|
|
font-weight: 500;
|
|
font-size: 13px;
|
|
color: var(--color-muted);
|
|
}
|
|
.routine-drawer .btn.solid {
|
|
background: var(--color-ink);
|
|
color: var(--color-ground);
|
|
border-color: var(--color-ink);
|
|
}
|
|
.routine-drawer .btn.link {
|
|
border: 0;
|
|
padding: 7px 4px;
|
|
color: var(--color-near);
|
|
}
|
|
.routine-drawer .btn[disabled] {
|
|
opacity: 0.4;
|
|
cursor: default;
|
|
}
|
|
@media (max-width: 700px) {
|
|
.routine-drawer .cf {
|
|
grid-template-columns: 1fr;
|
|
padding: 16px;
|
|
}
|
|
.routine-drawer .li,
|
|
.routine-drawer .lg-h,
|
|
.routine-drawer .bulk {
|
|
padding-left: 16px;
|
|
padding-right: 16px;
|
|
}
|
|
}
|
|
.rt .routine-note {
|
|
display: block;
|
|
font-size: 12px;
|
|
font-weight: 400;
|
|
color: var(--color-muted);
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
.routine-drawer .cf .help.warn {
|
|
color: var(--color-soon);
|
|
}
|
|
/* Settings → Data & sources and About: the Round 6 B `.source-row` and `.about-prose`. */
|
|
.settings-content .muted-copy {
|
|
color: var(--color-muted);
|
|
line-height: 1.65;
|
|
max-width: 70ch;
|
|
}
|
|
.settings-content .acts {
|
|
display: flex;
|
|
gap: 12px;
|
|
align-items: center;
|
|
flex-wrap: wrap;
|
|
margin: 18px 0;
|
|
}
|
|
.settings-content .acts .btn {
|
|
padding: 7px 12px;
|
|
border: 1px solid
|
|
color-mix(in srgb, var(--color-ink) 22%, var(--color-surface));
|
|
border-radius: 3px;
|
|
font-size: 13px;
|
|
color: var(--color-ink);
|
|
}
|
|
.settings-content .acts .btn:hover {
|
|
border-color: var(--color-muted);
|
|
}
|
|
.settings-content .acts .btn[disabled] {
|
|
opacity: 0.5;
|
|
}
|
|
.sources-page .source-note {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
margin: 20px 0;
|
|
line-height: 1.6;
|
|
}
|
|
.sources-page .source-warning {
|
|
font-size: 13px;
|
|
color: var(--color-soon);
|
|
margin: -8px 0 20px;
|
|
max-width: 70ch;
|
|
}
|
|
.sources-page .source-row {
|
|
display: grid;
|
|
grid-template-columns: 160px 1fr;
|
|
gap: 16px;
|
|
padding: 18px 0;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
font-size: 13px;
|
|
line-height: 1.65;
|
|
max-width: 760px;
|
|
}
|
|
.sources-page .source-row strong {
|
|
color: var(--g);
|
|
font-weight: 600;
|
|
}
|
|
.sources-page .source-entry + .source-entry {
|
|
margin-top: 14px;
|
|
}
|
|
.sources-page .source-row p {
|
|
margin: 3px 0;
|
|
color: var(--color-muted);
|
|
}
|
|
.sources-page .source-row .source-name {
|
|
color: var(--color-ink);
|
|
font-weight: 500;
|
|
}
|
|
.sources-page .source-row .reason {
|
|
color: var(--color-soon);
|
|
}
|
|
.sources-page .source-row .reason.current {
|
|
color: #6ccbad;
|
|
}
|
|
:root[data-theme="light"] .sources-page .source-row .reason.current {
|
|
color: #26705b;
|
|
}
|
|
.sources-page .source-row a,
|
|
.about-prose a {
|
|
color: var(--color-near);
|
|
text-decoration: underline;
|
|
text-underline-offset: 3px;
|
|
}
|
|
.about-prose {
|
|
max-width: 70ch;
|
|
color: var(--color-muted);
|
|
line-height: 1.75;
|
|
font-size: 14px;
|
|
}
|
|
.about-prose h3 {
|
|
margin: 28px 0 8px;
|
|
color: var(--color-ink);
|
|
font: 600 17px/1.3 var(--font-body);
|
|
}
|
|
.about-prose p {
|
|
margin: 8px 0;
|
|
}
|
|
.about-prose .about-links {
|
|
display: flex;
|
|
gap: 16px;
|
|
flex-wrap: wrap;
|
|
}
|
|
@media (max-width: 700px) {
|
|
.sources-page .source-row {
|
|
grid-template-columns: 1fr;
|
|
gap: 4px;
|
|
}
|
|
}
|
|
/* Settings → Changelog: the Round 6 B `.changelog-page .rel`, with each note's commits kept. */
|
|
.changelog-page .rel {
|
|
padding: 24px 0;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
max-width: 760px;
|
|
}
|
|
.changelog-page .rel .d {
|
|
font: 600 12px var(--font-display);
|
|
letter-spacing: 0.1em;
|
|
text-transform: uppercase;
|
|
color: var(--color-faint);
|
|
}
|
|
.changelog-page .rel h3 {
|
|
font: 600 26px/1.15 var(--font-display);
|
|
letter-spacing: 0.01em;
|
|
margin: 8px 0;
|
|
color: var(--color-ink);
|
|
}
|
|
.changelog-page .rel p,
|
|
.changelog-page .rel li {
|
|
line-height: 1.7;
|
|
color: var(--color-muted);
|
|
font-size: 14px;
|
|
}
|
|
.changelog-page .rel p {
|
|
margin: 0 0 8px;
|
|
max-width: 70ch;
|
|
}
|
|
.changelog-page .rel ul {
|
|
margin: 10px 0 0;
|
|
padding-left: 20px;
|
|
list-style: disc;
|
|
}
|
|
.changelog-page .rel li {
|
|
font-size: 13px;
|
|
line-height: 1.65;
|
|
padding: 1px 0;
|
|
}
|
|
.changelog-page .rel li .meta {
|
|
margin-left: 8px;
|
|
white-space: nowrap;
|
|
font-size: 11.5px;
|
|
color: var(--color-faint);
|
|
}
|
|
.changelog-page .rel li .kind {
|
|
font: 600 11px var(--font-display);
|
|
letter-spacing: 0.06em;
|
|
text-transform: uppercase;
|
|
}
|
|
.changelog-page .rel li .kind.feature {
|
|
color: var(--color-near);
|
|
}
|
|
.changelog-page .rel li .kind.fix {
|
|
color: var(--color-soon);
|
|
}
|
|
.changelog-page .rel li .hash {
|
|
margin-left: 8px;
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
.changelog-page .rel a {
|
|
color: var(--color-faint);
|
|
text-decoration: underline;
|
|
text-decoration-color: var(--color-hairline);
|
|
text-underline-offset: 3px;
|
|
}
|
|
.changelog-page .rel a:hover {
|
|
color: var(--color-ink);
|
|
text-decoration-color: var(--color-near);
|
|
}
|
|
.changelog-page .rel .rel-links {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 4px 16px;
|
|
margin: 12px 0 0;
|
|
font-size: 12px;
|
|
}
|
|
.changelog-page .other-changes .d {
|
|
margin-top: 16px;
|
|
}
|
|
.changelog-page .other-changes ul {
|
|
margin-top: 6px;
|
|
}
|
|
/* Settings → Region & time (Round 6 B): timezone picker and per-server reset rows. */
|
|
.time-page .zone-pick select {
|
|
width: min(450px, 100%);
|
|
min-height: 40px;
|
|
}
|
|
.reset-row {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: flex-end;
|
|
gap: 16px;
|
|
padding: 18px 0;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
max-width: 760px;
|
|
}
|
|
.reset-row strong {
|
|
display: block;
|
|
color: var(--g);
|
|
font-weight: 600;
|
|
font-size: 14px;
|
|
}
|
|
.reset-row small {
|
|
display: block;
|
|
margin-top: 4px;
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.settings-content .reset-row label {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
margin: 0;
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.reset-row select {
|
|
min-height: 36px;
|
|
min-width: 160px;
|
|
}
|
|
@media (max-width: 700px) {
|
|
.reset-row {
|
|
flex-direction: column;
|
|
align-items: stretch;
|
|
}
|
|
}
|
|
.time-page .zone-pick {
|
|
margin-top: 12px;
|
|
}
|
|
.time-page .source-note {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
margin: 10px 0 0;
|
|
line-height: 1.6;
|
|
}
|
|
.sources-page .list-options {
|
|
max-width: 760px;
|
|
margin: 0 0 28px;
|
|
}
|
|
.sources-page .list-options h2 {
|
|
margin-top: 0;
|
|
}
|
|
.sources-page .sources-heading {
|
|
max-width: 760px;
|
|
}
|
|
.sources-page .list-options .chk {
|
|
display: flex;
|
|
flex-direction: row;
|
|
align-items: flex-start;
|
|
gap: 10px;
|
|
margin: 12px 0;
|
|
font-size: 14px;
|
|
color: var(--color-ink);
|
|
}
|
|
.sources-page .list-options .chk input {
|
|
margin-top: 3px;
|
|
}
|
|
.sources-page .list-options .chk small {
|
|
display: block;
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
/* Settings → Backup: the Round 6 B backup pane (policy strip, actions, tiered history). */
|
|
.backup-page {
|
|
--rule-strong: color-mix(in srgb, var(--color-ink) 22%, var(--color-surface));
|
|
max-width: 760px;
|
|
}
|
|
.backup-page .backup-policy {
|
|
display: flex;
|
|
gap: 28px;
|
|
flex-wrap: wrap;
|
|
margin: 24px 0 0;
|
|
padding: 20px 0;
|
|
border-block: 1px solid var(--color-hairline);
|
|
}
|
|
.backup-page .backup-policy dt {
|
|
font: 600 22px/1.1 var(--font-display);
|
|
color: var(--color-ink);
|
|
}
|
|
.backup-page .backup-policy dd {
|
|
margin: 4px 0 0;
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.backup-page .source-note {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
margin: 18px 0 12px;
|
|
line-height: 1.6;
|
|
}
|
|
.backup-page .backup-actions {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
gap: 8px;
|
|
margin: 12px 0;
|
|
}
|
|
.backup-page .btn {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
padding: 7px 12px;
|
|
border: 1px solid var(--rule-strong);
|
|
border-radius: 3px;
|
|
font-size: 13px;
|
|
font-weight: 500;
|
|
color: var(--color-ink);
|
|
cursor: pointer;
|
|
}
|
|
.backup-page .btn:hover {
|
|
border-color: var(--color-muted);
|
|
}
|
|
.backup-page .btn.solid {
|
|
background: var(--color-ink);
|
|
color: var(--color-ground);
|
|
border-color: var(--color-ink);
|
|
}
|
|
.backup-page .btn.link {
|
|
border: 0;
|
|
padding: 4px 2px;
|
|
color: var(--color-near);
|
|
text-decoration: underline;
|
|
text-underline-offset: 3px;
|
|
}
|
|
.backup-page .btn.sm {
|
|
padding: 3px 8px;
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.backup-page .btn.sm:hover {
|
|
color: var(--color-ink);
|
|
}
|
|
/* The file input stays focusable and clickable, but the label is the visible control. */
|
|
.settings-content .backup-page .file-button {
|
|
position: relative;
|
|
overflow: hidden;
|
|
margin: 0;
|
|
max-width: none;
|
|
flex-direction: row;
|
|
}
|
|
.backup-page .file-button input {
|
|
position: absolute;
|
|
inset: 0;
|
|
opacity: 0;
|
|
cursor: pointer;
|
|
}
|
|
.backup-page .file-button:focus-within {
|
|
outline: 2px solid var(--color-near);
|
|
outline-offset: 2px;
|
|
}
|
|
.settings-content .backup-page .backup-secondary {
|
|
max-width: none;
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 4px 14px;
|
|
align-items: center;
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
margin: 4px 0;
|
|
}
|
|
.backup-page .backup-message:empty {
|
|
display: none;
|
|
}
|
|
.backup-page .backup-message {
|
|
font-size: 13px;
|
|
color: var(--color-muted);
|
|
}
|
|
.backup-page .backup-preview {
|
|
margin: 20px 0;
|
|
padding: 16px 18px;
|
|
border: 1px solid var(--rule-strong);
|
|
border-left: 3px solid var(--color-near);
|
|
border-radius: 3px;
|
|
background: var(--color-surface);
|
|
}
|
|
.backup-page .backup-preview h2 {
|
|
font: 600 18px var(--font-display);
|
|
margin: 0 0 4px;
|
|
}
|
|
.backup-page .backup-preview p {
|
|
margin: 4px 0;
|
|
font-size: 13px;
|
|
color: var(--color-muted);
|
|
}
|
|
.backup-page .backup-tier {
|
|
margin-top: 28px;
|
|
}
|
|
.backup-page .backup-tier-h {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: baseline;
|
|
gap: 12px;
|
|
flex-wrap: wrap;
|
|
margin-bottom: 4px;
|
|
}
|
|
.backup-page .backup-tier-h h3 {
|
|
font: 600 17px var(--font-body);
|
|
margin: 0;
|
|
color: var(--color-ink);
|
|
}
|
|
.backup-page .backup-tier-h span {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.backup-page .backup-row {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
gap: 16px;
|
|
padding: 14px 0;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
.backup-page .backup-row time {
|
|
display: block;
|
|
font-size: 14px;
|
|
color: var(--color-ink);
|
|
}
|
|
.backup-page .backup-row small {
|
|
display: block;
|
|
margin-top: 3px;
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.backup-page .backup-confirm {
|
|
display: flex;
|
|
gap: 6px;
|
|
align-items: center;
|
|
flex-wrap: wrap;
|
|
justify-content: flex-end;
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.backup-page .btn.sm.danger {
|
|
color: var(--color-critical);
|
|
border-color: color-mix(in srgb, var(--color-critical) 50%, transparent);
|
|
}
|
|
.settings-content .backup-page .backup-history-h {
|
|
font: 600 20px var(--font-display);
|
|
margin: 36px 0 0;
|
|
padding-bottom: 6px;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
/* Settings → a game (Round 6 B `.ptitle`, `.grp`, `.comp`, `.srvrow`, `.game-colour`). */
|
|
.game-settings {
|
|
--rule-strong: color-mix(in srgb, var(--color-ink) 22%, var(--color-surface));
|
|
max-width: 760px;
|
|
}
|
|
.game-settings .ptitle {
|
|
display: flex;
|
|
align-items: flex-end;
|
|
gap: 14px;
|
|
flex-wrap: wrap;
|
|
padding-bottom: 14px;
|
|
border-bottom: 1px solid var(--rule-strong);
|
|
}
|
|
.settings-content .game-settings .ptitle h1 {
|
|
margin: 0;
|
|
padding: 0;
|
|
border: 0;
|
|
}
|
|
.game-settings .ptitle .studio {
|
|
font-size: 12px;
|
|
color: var(--color-faint);
|
|
padding-bottom: 3px;
|
|
}
|
|
.game-settings .btn {
|
|
padding: 7px 12px;
|
|
border: 1px solid var(--rule-strong);
|
|
border-radius: 3px;
|
|
font-size: 13px;
|
|
color: var(--color-ink);
|
|
}
|
|
.game-settings .btn:hover {
|
|
border-color: var(--color-muted);
|
|
}
|
|
.game-settings .btn.sm {
|
|
padding: 3px 8px;
|
|
font-size: 12px;
|
|
}
|
|
.game-settings .ptitle .btn.sm {
|
|
margin-bottom: 2px;
|
|
}
|
|
.game-settings .btn.link {
|
|
border: 0;
|
|
padding: 6px 0 0;
|
|
color: var(--color-near);
|
|
}
|
|
/* A game in the Settings list with codes not yet seen on its Codes tab. */
|
|
.settings-row .settings-new {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
flex: none;
|
|
margin-left: auto;
|
|
color: var(--color-near);
|
|
font-size: 11px;
|
|
white-space: nowrap;
|
|
}
|
|
.settings-row .settings-new::before {
|
|
content: "";
|
|
width: 7px;
|
|
height: 7px;
|
|
border-radius: 50%;
|
|
background: currentColor;
|
|
}
|
|
.codes-used {
|
|
margin-top: 28px;
|
|
}
|
|
.codes-used > h3 {
|
|
margin: 0 0 6px;
|
|
color: var(--color-muted);
|
|
font-size: 13px;
|
|
font-weight: 600;
|
|
letter-spacing: 0.04em;
|
|
text-transform: uppercase;
|
|
}
|
|
.code-row.used {
|
|
opacity: 0.55;
|
|
}
|
|
.code-row.used code {
|
|
text-decoration: line-through;
|
|
text-decoration-color: var(--color-muted);
|
|
}
|
|
/* A checklist event on its way to the Archive greys its text while it holds,
|
|
so it reads as leaving; the "Moved to Archive" line under it stays legible. */
|
|
.event-list > li[data-leaving] > button > span {
|
|
opacity: 0.45;
|
|
}
|
|
/* A code shining on its way to Redeemed greys the same way; its Redeemed
|
|
boxes stay full strength, so the tick that sent it is still plain. */
|
|
.code-row[data-shine] > div:first-child > * {
|
|
opacity: 0.45;
|
|
}
|
|
/* A code just redeemed, or an event just completed: the dailies' sweep and
|
|
ring cross the row in the game's colour. A code then fades out and lands
|
|
among the redeemed; an event fades as the Archive takes it. Only the
|
|
reader's own action sets these, and reduced motion skips the code's hold. */
|
|
@media (prefers-reduced-motion: no-preference) {
|
|
.event-list > li > button > span,
|
|
.code-row > div:first-child > * {
|
|
transition: opacity 300ms ease-out;
|
|
}
|
|
.code-row[data-shine],
|
|
.event-list > li[data-shine] > button {
|
|
position: relative;
|
|
animation: daily-glow 560ms ease-out;
|
|
}
|
|
.code-row[data-shine] {
|
|
animation:
|
|
daily-glow 560ms ease-out,
|
|
code-leave 210ms ease-in 590ms forwards;
|
|
}
|
|
.code-row[data-shine]::after,
|
|
.event-list > li[data-shine] > button::after {
|
|
content: "";
|
|
position: absolute;
|
|
inset: 0;
|
|
pointer-events: none;
|
|
background: linear-gradient(
|
|
100deg,
|
|
transparent 30%,
|
|
color-mix(in srgb, var(--g, var(--color-ink)) 38%, transparent) 50%,
|
|
transparent 70%
|
|
);
|
|
background-size: 250% 100%;
|
|
animation: code-sweep 640ms ease-out both;
|
|
}
|
|
.code-row[data-landing] {
|
|
animation: code-land 360ms ease-out;
|
|
}
|
|
.code-row label[data-fresh] input {
|
|
animation: daily-pop 420ms cubic-bezier(0.3, 1.6, 0.5, 1);
|
|
}
|
|
.codes-clear[data-fresh] {
|
|
animation: daily-rise 360ms ease-out;
|
|
}
|
|
/* The dailies' sweep, held bright until it has crossed: a single row is
|
|
too thin for a band that fades as it travels. */
|
|
@keyframes code-sweep {
|
|
from {
|
|
background-position: 100% 0;
|
|
}
|
|
75% {
|
|
opacity: 1;
|
|
}
|
|
to {
|
|
background-position: 0% 0;
|
|
opacity: 0;
|
|
}
|
|
}
|
|
@keyframes code-leave {
|
|
to {
|
|
opacity: 0;
|
|
transform: translateY(6px);
|
|
}
|
|
}
|
|
@keyframes code-land {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(-6px);
|
|
}
|
|
}
|
|
}
|
|
.game-settings .new-code {
|
|
margin-left: 6px;
|
|
font-size: 11px;
|
|
color: var(--color-near);
|
|
}
|
|
.game-settings .grp {
|
|
margin-top: 30px;
|
|
}
|
|
.settings-content .game-settings .grp > h3 {
|
|
display: flex;
|
|
gap: 10px;
|
|
align-items: baseline;
|
|
flex-wrap: wrap;
|
|
font: 700 18px var(--font-display);
|
|
letter-spacing: 0.02em;
|
|
margin: 0;
|
|
padding-bottom: 6px;
|
|
border-bottom: 1px solid var(--rule-strong);
|
|
}
|
|
.game-settings .grp > h3 span {
|
|
font: 400 12px var(--font-body);
|
|
color: var(--color-faint);
|
|
letter-spacing: 0;
|
|
}
|
|
:is(.game-settings, .motion-cards) .comp {
|
|
margin: 14px 0 8px;
|
|
display: grid;
|
|
grid-template-columns: repeat(4, 1fr);
|
|
gap: 8px;
|
|
}
|
|
:is(.game-settings, .motion-cards) .comp button {
|
|
position: relative;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: flex-start;
|
|
padding: 12px 12px 11px;
|
|
text-align: left;
|
|
border: 1px solid var(--rule-strong);
|
|
border-radius: 3px;
|
|
}
|
|
:is(.game-settings, .motion-cards) .comp button:hover {
|
|
border-color: var(--color-muted);
|
|
}
|
|
:is(.game-settings, .motion-cards) .comp button[data-st="on"] {
|
|
background: color-mix(in srgb, var(--g) 14%, transparent);
|
|
border-color: color-mix(in srgb, var(--g) 70%, transparent);
|
|
}
|
|
:is(.game-settings, .motion-cards) .comp button[data-st="some"] {
|
|
border-style: dashed;
|
|
border-color: color-mix(in srgb, var(--g) 70%, transparent);
|
|
}
|
|
/* Nothing built in yet: dimmed like the mockup, but still a choice that is remembered. */
|
|
:is(.game-settings, .motion-cards) .comp button[data-empty="true"]:not([data-st="on"]) {
|
|
opacity: 0.55;
|
|
}
|
|
:is(.game-settings, .motion-cards) .comp .cbx {
|
|
position: absolute;
|
|
top: 12px;
|
|
right: 12px;
|
|
width: 16px;
|
|
height: 16px;
|
|
border-radius: 3px;
|
|
border: 1px solid var(--rule-strong);
|
|
display: grid;
|
|
place-items: center;
|
|
}
|
|
:is(.game-settings, .motion-cards) .comp button[data-st="on"] .cbx {
|
|
background: var(--g);
|
|
border-color: var(--g);
|
|
}
|
|
:is(.game-settings, .motion-cards) .comp button[data-st="some"] .cbx::after {
|
|
content: "";
|
|
width: 8px;
|
|
height: 2px;
|
|
background: var(--g);
|
|
}
|
|
:is(.game-settings, .motion-cards) .comp .cbx svg {
|
|
width: 11px;
|
|
height: 11px;
|
|
stroke: var(--color-ground);
|
|
stroke-width: 3;
|
|
fill: none;
|
|
}
|
|
:is(.game-settings, .motion-cards) .comp .ln {
|
|
display: block;
|
|
padding-right: 22px;
|
|
font: 600 17px/1.1 var(--font-display);
|
|
letter-spacing: 0.02em;
|
|
color: var(--color-ink);
|
|
}
|
|
:is(.game-settings, .motion-cards) .comp .ls {
|
|
display: block;
|
|
margin-top: 3px;
|
|
font-size: 11.5px;
|
|
line-height: 1.3;
|
|
color: var(--color-faint);
|
|
}
|
|
/* Settings → Appearance → Motion & celebrations: the same cards, three across.
|
|
A card Reduce motion holds off is dimmed and cannot be pressed. */
|
|
.motion-cards {
|
|
--rule-strong: color-mix(in srgb, var(--color-ink) 22%, var(--color-surface));
|
|
}
|
|
.motion-cards .comp {
|
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
}
|
|
.motion-cards .comp button:disabled {
|
|
opacity: 0.45;
|
|
cursor: not-allowed;
|
|
}
|
|
.motion-cards .comp button:disabled:hover {
|
|
border-color: var(--rule-strong);
|
|
}
|
|
@media (max-width: 700px) {
|
|
.motion-cards .comp {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
.game-settings .compnote {
|
|
display: flex;
|
|
gap: 14px;
|
|
align-items: baseline;
|
|
flex-wrap: wrap;
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.game-settings .compnote button {
|
|
color: var(--color-near);
|
|
}
|
|
.game-settings .srvrow {
|
|
display: grid;
|
|
grid-template-columns: auto 1fr auto;
|
|
gap: 14px;
|
|
align-items: center;
|
|
padding: 12px 0;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
.game-settings .srvrow .tagn {
|
|
width: 58px;
|
|
font: 600 12px var(--font-display);
|
|
letter-spacing: 0.06em;
|
|
text-transform: uppercase;
|
|
color: var(--color-faint);
|
|
}
|
|
.game-settings .srvrow .clock {
|
|
font-size: 13px;
|
|
line-height: 1.45;
|
|
color: var(--color-muted);
|
|
}
|
|
.game-settings .srvrow .clock b {
|
|
color: var(--color-ink);
|
|
font-weight: 600;
|
|
}
|
|
.game-settings .srvrow .clock small {
|
|
display: block;
|
|
font-size: 12px;
|
|
color: var(--color-faint);
|
|
}
|
|
.game-settings .srvrow .r {
|
|
display: flex;
|
|
gap: 8px;
|
|
align-items: center;
|
|
}
|
|
.game-settings .srvrow select {
|
|
min-height: 36px;
|
|
}
|
|
.game-settings .game-colour {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
flex-wrap: wrap;
|
|
margin: 16px 0;
|
|
}
|
|
.game-settings .game-colour input[type="color"] {
|
|
padding: 2px;
|
|
width: 48px;
|
|
height: 40px;
|
|
}
|
|
.game-settings .game-colour input[type="text"] {
|
|
width: 110px;
|
|
min-height: 40px;
|
|
}
|
|
.game-settings .colour-preview {
|
|
padding: 12px 16px;
|
|
background: var(--color-raised);
|
|
font-size: 15px;
|
|
font-weight: 600;
|
|
}
|
|
.game-settings .source-note {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
@media (max-width: 860px) {
|
|
.game-settings .comp {
|
|
grid-template-columns: 1fr 1fr;
|
|
}
|
|
}
|
|
@media (max-width: 700px) {
|
|
.game-settings .srvrow {
|
|
grid-template-columns: 1fr;
|
|
gap: 6px;
|
|
}
|
|
}
|
|
/* A game's About tab (Round 6 B `aboutPage`): fact rows and credited sources. */
|
|
.settings-content .game-about .about-h {
|
|
font: 600 17px var(--font-body);
|
|
margin: 0 0 8px;
|
|
color: var(--color-ink);
|
|
}
|
|
.game-about .trow {
|
|
display: grid;
|
|
grid-template-columns: 1fr auto;
|
|
gap: 12px;
|
|
align-items: center;
|
|
padding: 10px 0;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
font-size: 14px;
|
|
}
|
|
.game-about .trow b {
|
|
font-weight: 600;
|
|
}
|
|
.settings-content .game-about .game-source {
|
|
max-width: none;
|
|
margin: 0;
|
|
padding: 12px 0;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
.game-about .game-source a {
|
|
color: var(--color-near);
|
|
text-decoration: underline;
|
|
text-underline-offset: 3px;
|
|
}
|
|
.game-about .game-source small {
|
|
display: block;
|
|
margin-top: 5px;
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.game-about .muted-copy {
|
|
margin: 14px 0;
|
|
}
|
|
/* Other games (not followed): muted name and a faded colour bar, as the mockup's `.srow.off`. */
|
|
.settings-row[data-off] .settings-copy > span {
|
|
color: var(--color-muted);
|
|
}
|
|
.settings-row[data-off] .settings-marker {
|
|
opacity: 0.25;
|
|
}
|
|
/* Appearance → Game order: large up/down buttons, for mouse, touch and keyboard alike. */
|
|
.game-order ol {
|
|
list-style: none;
|
|
margin: 0 0 14px;
|
|
padding: 0;
|
|
max-width: 480px;
|
|
}
|
|
.game-order li {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
padding: 6px 0;
|
|
border-bottom: 1px solid var(--color-hairline);
|
|
}
|
|
.game-order .name {
|
|
flex: 1;
|
|
font-size: 14px;
|
|
}
|
|
.game-order .move {
|
|
width: 40px;
|
|
height: 36px;
|
|
display: grid;
|
|
place-items: center;
|
|
border: 1px solid
|
|
color-mix(in srgb, var(--color-ink) 22%, var(--color-surface));
|
|
border-radius: 3px;
|
|
color: var(--color-ink);
|
|
}
|
|
.game-order .move:hover:not(:disabled) {
|
|
border-color: var(--color-muted);
|
|
}
|
|
.game-order .move:disabled {
|
|
opacity: 0.3;
|
|
cursor: default;
|
|
}
|
|
.game-order .move svg {
|
|
width: 16px;
|
|
height: 16px;
|
|
fill: none;
|
|
stroke: currentColor;
|
|
stroke-width: 2;
|
|
stroke-linecap: round;
|
|
stroke-linejoin: round;
|
|
}
|
|
.game-order .btn {
|
|
padding: 7px 12px;
|
|
border: 1px solid
|
|
color-mix(in srgb, var(--color-ink) 22%, var(--color-surface));
|
|
border-radius: 3px;
|
|
font-size: 13px;
|
|
color: var(--color-ink);
|
|
}
|
|
/* Appearance → Checklist: the three list options side by side, labels above. */
|
|
.checklist-settings .setting-fields {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 16px 28px;
|
|
margin: 4px 0 12px;
|
|
}
|
|
.settings-content .checklist-settings .setting-fields label {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
margin: 0;
|
|
font-size: 13px;
|
|
color: var(--color-muted);
|
|
}
|
|
.checklist-settings .setting-fields select {
|
|
min-width: 200px;
|
|
min-height: 36px;
|
|
}
|
|
/* Settings sidebar: the mockup's `.srow:hover`. */
|
|
.settings-layout > nav button:not([aria-current="page"]):hover {
|
|
background: var(--color-surface);
|
|
color: var(--color-ink);
|
|
}
|
|
@media (prefers-reduced-motion: no-preference) {
|
|
.settings-layout > nav button {
|
|
transition: background-color 120ms ease;
|
|
}
|
|
}
|
|
|
|
/* The logo is the way home: it opens the default view. */
|
|
button.mark {
|
|
background: none;
|
|
border: 0;
|
|
color: inherit;
|
|
cursor: pointer;
|
|
margin: 0;
|
|
}
|
|
|
|
/* "Not started yet" opens a second section: a gap, an accent rule and a
|
|
raised band, so it can't be read as one more row of the running list. */
|
|
.upcoming-events {
|
|
margin-top: 48px;
|
|
border-top: 2px solid var(--color-near);
|
|
}
|
|
.upcoming-events .list-heading {
|
|
background: var(--color-raised);
|
|
padding: 20px 32px 18px;
|
|
}
|
|
.upcoming-events .list-heading h2 {
|
|
font: 600 28px/1.2 var(--font-display);
|
|
margin: 0;
|
|
}
|
|
.upcoming-events .eyebrow {
|
|
font-size: 11px;
|
|
letter-spacing: 0.08em;
|
|
text-transform: uppercase;
|
|
color: var(--color-near);
|
|
margin: 0 0 4px;
|
|
}
|
|
|
|
/* Today's dailies: the whole row ticks, and a tick should feel like one.
|
|
Done rows wash in the game's colour, the box pops and the check draws.
|
|
Only rows ticked just now (data-fresh) animate, with the live fireworks
|
|
(Fireworks.tsx, styles.css) in the row; the last one gets the grand
|
|
celebration over the panel instead. */
|
|
.daily-panel {
|
|
position: relative;
|
|
}
|
|
.daily-progress {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
margin: -2px 0 12px;
|
|
}
|
|
.daily-pips {
|
|
display: flex;
|
|
flex: 1;
|
|
gap: 4px;
|
|
}
|
|
.daily-pips i {
|
|
flex: 1;
|
|
height: 6px;
|
|
border-radius: 3px;
|
|
background: var(--color-hairline);
|
|
transition:
|
|
background-color 240ms ease-out,
|
|
box-shadow 240ms ease-out;
|
|
}
|
|
.daily-pips i[data-on] {
|
|
background: var(--g);
|
|
box-shadow: 0 0 8px -1px var(--g);
|
|
}
|
|
.daily-count {
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
font-variant-numeric: tabular-nums;
|
|
white-space: nowrap;
|
|
}
|
|
.daily-panel[data-all-done] .daily-count {
|
|
color: var(--color-ink);
|
|
font-weight: 600;
|
|
}
|
|
.daily-hit {
|
|
position: relative;
|
|
width: calc(100% + 20px);
|
|
margin: 0 -10px 4px;
|
|
padding: 10px;
|
|
border: 0;
|
|
border-radius: 10px;
|
|
background: transparent;
|
|
color: inherit;
|
|
text-align: left;
|
|
font: inherit;
|
|
cursor: pointer;
|
|
transition:
|
|
background-color 180ms ease-out,
|
|
transform 120ms cubic-bezier(0.2, 0.7, 0.3, 1);
|
|
}
|
|
.daily-hit:last-child {
|
|
margin-bottom: 0;
|
|
}
|
|
.daily-hit:hover {
|
|
background: color-mix(in srgb, var(--g) 7%, transparent);
|
|
}
|
|
.daily-hit:active {
|
|
transform: scale(0.98);
|
|
transition-duration: 60ms;
|
|
}
|
|
.daily-hit[data-done] {
|
|
background: color-mix(in srgb, var(--g) 14%, transparent);
|
|
}
|
|
.daily-hit[data-done]:hover {
|
|
background: color-mix(in srgb, var(--g) 18%, transparent);
|
|
}
|
|
.daily-text {
|
|
min-width: 0;
|
|
flex: 1;
|
|
}
|
|
.daily-text strong {
|
|
display: block;
|
|
}
|
|
.daily-tally {
|
|
font-size: 11px;
|
|
color: var(--g);
|
|
font-variant-numeric: tabular-nums;
|
|
white-space: nowrap;
|
|
}
|
|
.daily-box {
|
|
flex: none;
|
|
width: 26px;
|
|
height: 26px;
|
|
}
|
|
.daily-box svg {
|
|
width: 100%;
|
|
height: 100%;
|
|
overflow: visible;
|
|
}
|
|
.daily-box rect {
|
|
fill: none;
|
|
stroke: var(--color-muted);
|
|
stroke-width: 1.2;
|
|
transition:
|
|
fill 160ms ease-out,
|
|
stroke 160ms ease-out;
|
|
}
|
|
.daily-hit:hover .daily-box rect {
|
|
stroke: var(--g);
|
|
}
|
|
.daily-box path {
|
|
fill: none;
|
|
stroke: var(--color-ground);
|
|
stroke-width: 2;
|
|
stroke-linecap: round;
|
|
stroke-linejoin: round;
|
|
stroke-dasharray: 12;
|
|
stroke-dashoffset: 12;
|
|
}
|
|
.daily-hit[data-done] .daily-box rect {
|
|
fill: var(--g);
|
|
stroke: var(--g);
|
|
}
|
|
.daily-hit[data-done] .daily-box path {
|
|
stroke-dashoffset: 0;
|
|
}
|
|
/* Goal met this week without today's tick: a lighter box and a dotted check,
|
|
as the live chip draws it. */
|
|
.daily-hit[data-met] .daily-box rect {
|
|
fill: color-mix(in srgb, var(--g) 35%, transparent);
|
|
}
|
|
.daily-hit[data-met] .daily-box path {
|
|
stroke: var(--g);
|
|
stroke-dasharray: 2 2.4;
|
|
}
|
|
@media (prefers-reduced-motion: no-preference) {
|
|
.daily-hit[data-fresh] .daily-box {
|
|
animation: daily-pop 420ms cubic-bezier(0.3, 1.6, 0.5, 1);
|
|
}
|
|
.daily-hit[data-fresh] .daily-box path {
|
|
animation: daily-draw 260ms ease-out 90ms backwards;
|
|
}
|
|
.daily-hit[data-fresh] {
|
|
animation: daily-glow 700ms ease-out;
|
|
}
|
|
.daily-hit[data-fresh] .daily-tally {
|
|
animation: daily-rise 360ms ease-out 120ms backwards;
|
|
}
|
|
@keyframes daily-pop {
|
|
0% {
|
|
transform: scale(0.7);
|
|
}
|
|
55% {
|
|
transform: scale(1.18);
|
|
}
|
|
100% {
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
@keyframes daily-draw {
|
|
from {
|
|
stroke-dashoffset: 12;
|
|
}
|
|
}
|
|
@keyframes daily-glow {
|
|
0% {
|
|
box-shadow: 0 0 0 0 color-mix(in srgb, var(--g) 45%, transparent);
|
|
}
|
|
100% {
|
|
box-shadow: 0 0 0 10px transparent;
|
|
}
|
|
}
|
|
@keyframes daily-rise {
|
|
from {
|
|
opacity: 0;
|
|
transform: translateY(4px);
|
|
}
|
|
}
|
|
.daily-panel[data-burst] .daily-pips i {
|
|
animation: daily-pip 600ms ease-out;
|
|
}
|
|
@keyframes daily-pip {
|
|
40% {
|
|
filter: brightness(1.5);
|
|
}
|
|
}
|
|
}
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.daily-hit,
|
|
.daily-pips i,
|
|
.daily-box rect {
|
|
transition: none;
|
|
}
|
|
.daily-hit:active {
|
|
transform: none;
|
|
}
|
|
}
|
|
|
|
/* Pinned routines in the Checklist rail: drawn like today's dailies. A met
|
|
target washes the row in the game's colour and fills the box; the live
|
|
fireworks go off in the row when an action here completes it. The box
|
|
unticks to undo. */
|
|
.pinned-routine {
|
|
position: relative;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
margin: 0 14px 4px;
|
|
padding: 10px;
|
|
border-radius: 10px;
|
|
color: var(--color-ink);
|
|
transition: background-color 180ms ease-out;
|
|
}
|
|
.pinned-routine[data-done] {
|
|
background: color-mix(in srgb, var(--g) 14%, transparent);
|
|
}
|
|
.pr-text {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
.pr-text strong {
|
|
display: block;
|
|
font-size: 13px;
|
|
font-weight: 500;
|
|
}
|
|
.pr-text small {
|
|
display: block;
|
|
font-size: 11px;
|
|
color: var(--color-muted);
|
|
margin-top: 3px;
|
|
}
|
|
.pinned-routine[data-done] .pr-text small {
|
|
color: var(--g);
|
|
}
|
|
.pr-amount {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
margin-top: 6px;
|
|
}
|
|
.pr-count {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 3px 6px;
|
|
margin-left: -6px;
|
|
border-radius: 6px;
|
|
font-size: 12px;
|
|
font-variant-numeric: tabular-nums;
|
|
color: var(--color-ink);
|
|
cursor: pointer;
|
|
}
|
|
.pr-count:hover {
|
|
background: color-mix(in srgb, var(--g) 10%, transparent);
|
|
}
|
|
.pr-count svg {
|
|
width: 12px;
|
|
height: 12px;
|
|
fill: none;
|
|
stroke: var(--color-muted);
|
|
stroke-width: 1.4;
|
|
opacity: 0.6;
|
|
}
|
|
.pr-count:hover svg {
|
|
opacity: 1;
|
|
}
|
|
.pr-bar {
|
|
width: 56px;
|
|
height: 4px;
|
|
border-radius: 2px;
|
|
background: var(--color-hairline);
|
|
overflow: hidden;
|
|
}
|
|
.pr-bar i {
|
|
display: block;
|
|
height: 100%;
|
|
background: var(--g);
|
|
transition: width 240ms ease-out;
|
|
}
|
|
.pr-step {
|
|
padding: 2px 8px;
|
|
border: 1px solid color-mix(in srgb, var(--g) 40%, transparent);
|
|
border-radius: 999px;
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
color: var(--g);
|
|
cursor: pointer;
|
|
transition:
|
|
background-color 130ms ease-out,
|
|
transform 120ms ease-out;
|
|
}
|
|
.pr-step:hover {
|
|
background: color-mix(in srgb, var(--g) 12%, transparent);
|
|
}
|
|
.pr-step:active {
|
|
transform: scale(0.94);
|
|
}
|
|
.pr-days {
|
|
display: block;
|
|
margin-top: 6px;
|
|
font-size: 12px;
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
.pr-edit {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
margin-top: 6px;
|
|
font-size: 12px;
|
|
}
|
|
.pr-edit input {
|
|
width: 80px;
|
|
padding: 4px 6px;
|
|
}
|
|
.pr-box {
|
|
flex: none;
|
|
width: 44px;
|
|
height: 44px;
|
|
margin: -9px -9px -9px 0;
|
|
padding: 9px;
|
|
cursor: pointer;
|
|
}
|
|
.pr-box svg {
|
|
width: 100%;
|
|
height: 100%;
|
|
overflow: visible;
|
|
}
|
|
.pr-box rect {
|
|
fill: none;
|
|
stroke: var(--color-muted);
|
|
stroke-width: 1.2;
|
|
transition:
|
|
fill 160ms ease-out,
|
|
stroke 160ms ease-out;
|
|
}
|
|
.pr-box:hover rect {
|
|
stroke: var(--g);
|
|
}
|
|
.pr-box path {
|
|
fill: none;
|
|
stroke: var(--color-ground);
|
|
stroke-width: 2;
|
|
stroke-linecap: round;
|
|
stroke-linejoin: round;
|
|
stroke-dasharray: 12;
|
|
stroke-dashoffset: 12;
|
|
}
|
|
.pinned-routine[data-done] .pr-box rect {
|
|
fill: var(--g);
|
|
stroke: var(--g);
|
|
}
|
|
.pinned-routine[data-done] .pr-box path {
|
|
stroke-dashoffset: 0;
|
|
}
|
|
/* Hovering a done box previews the undo. */
|
|
.pinned-routine[data-done] .pr-box:hover rect {
|
|
fill: color-mix(in srgb, var(--g) 45%, transparent);
|
|
}
|
|
/* Completing reads in order: the bar fills from where it was, the row warms
|
|
into the game's colour, then the box pops and the check draws. */
|
|
@media (prefers-reduced-motion: no-preference) {
|
|
.pinned-routine {
|
|
transition: background-color 420ms ease-out 180ms;
|
|
}
|
|
.pinned-routine[data-burst] .pr-bar i {
|
|
animation: pr-fill 480ms cubic-bezier(0.3, 0.7, 0.3, 1) backwards;
|
|
}
|
|
.pinned-routine[data-burst] .pr-box {
|
|
animation: daily-pop 420ms cubic-bezier(0.3, 1.6, 0.5, 1) 280ms backwards;
|
|
}
|
|
.pinned-routine[data-burst] .pr-box path {
|
|
animation: daily-draw 260ms ease-out 370ms backwards;
|
|
}
|
|
.pinned-routine[data-burst] {
|
|
animation: daily-glow 700ms ease-out 280ms;
|
|
}
|
|
.pinned-routine[data-burst] .pr-box rect {
|
|
transition-delay: 280ms;
|
|
}
|
|
/* The live sparks, held back until the box pops. */
|
|
.pinned-routine[data-burst] .spark {
|
|
animation-delay: calc(var(--delay, 0ms) + 300ms);
|
|
}
|
|
@keyframes pr-fill {
|
|
from {
|
|
width: var(--from, 0%);
|
|
}
|
|
}
|
|
}
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.pinned-routine,
|
|
.pr-box rect,
|
|
.pr-bar i,
|
|
.pr-step {
|
|
transition: none;
|
|
}
|
|
}
|
|
|
|
/* Urgency colours in Appearance: each step's picker beside a small time bar
|
|
drawn in it, the way countdown rows show it. */
|
|
.urgency-colours label {
|
|
display: flex;
|
|
gap: 10px;
|
|
margin: 0 0 8px;
|
|
}
|
|
.urgency-colours input[type="color"] {
|
|
width: 32px;
|
|
height: 24px;
|
|
padding: 0;
|
|
border: 1px solid var(--color-hairline);
|
|
border-radius: 4px;
|
|
background: none;
|
|
cursor: pointer;
|
|
}
|
|
.urgency-sample {
|
|
display: flex;
|
|
gap: 2px;
|
|
}
|
|
.urgency-sample i {
|
|
width: 6px;
|
|
height: 10px;
|
|
border-radius: 1px;
|
|
background: var(--u);
|
|
}
|
|
.urgency-colours .quiet {
|
|
margin-top: 4px;
|
|
}
|
|
|
|
/* Each Standard event carries its game's colour strip on the left, as live's
|
|
row rail does. It sits in the list's side padding, so the row's own padding
|
|
(which varies by interface and width) needn't change. Faded until hover. */
|
|
.event-entry {
|
|
position: relative;
|
|
}
|
|
.event-entry::before {
|
|
content: "";
|
|
position: absolute;
|
|
left: -14px;
|
|
top: 14px;
|
|
bottom: 14px;
|
|
width: 3px;
|
|
border-radius: 999px;
|
|
background: var(--g);
|
|
opacity: 0.55;
|
|
transform: scaleY(0.9);
|
|
transition:
|
|
transform 160ms cubic-bezier(0.2, 0.7, 0.3, 1),
|
|
opacity 130ms ease-out,
|
|
box-shadow 160ms ease-out;
|
|
}
|
|
.event-entry.no-description::before {
|
|
top: 10px;
|
|
bottom: 10px;
|
|
}
|
|
@media (hover: hover) {
|
|
.event-entry:hover::before {
|
|
opacity: 1;
|
|
transform: scaleY(1);
|
|
box-shadow: 0 0 10px -2px var(--g);
|
|
}
|
|
}
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.event-entry::before {
|
|
transition: none;
|
|
}
|
|
}
|
|
|
|
/* Live's legend under "Running now": what the bars and their colours mean.
|
|
It shares the count's line, which spans under the title and the buttons,
|
|
so it never widens the title block and pushes the buttons down. */
|
|
.running-heading {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
align-items: center;
|
|
row-gap: 8px;
|
|
}
|
|
.running-heading .heading-meta {
|
|
grid-column: 1 / -1;
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 8px 24px;
|
|
}
|
|
.running-heading .heading-meta .sub {
|
|
margin: 0;
|
|
}
|
|
@media (max-width: 700px) {
|
|
.running-heading {
|
|
grid-template-columns: minmax(0, 1fr);
|
|
}
|
|
.running-heading .list-tools {
|
|
justify-self: start;
|
|
}
|
|
}
|
|
.urgency-legend {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 6px 18px;
|
|
margin-top: 0;
|
|
font-size: 11px;
|
|
line-height: 1;
|
|
color: var(--color-faint);
|
|
}
|
|
.urgency-legend p {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
gap: 4px 10px;
|
|
margin: 0;
|
|
}
|
|
.urgency-legend .bars {
|
|
display: flex;
|
|
gap: 2px;
|
|
margin-right: -2px;
|
|
}
|
|
.urgency-legend .bars i {
|
|
width: 3px;
|
|
height: 10px;
|
|
border-radius: 1px;
|
|
background: var(--color-hairline);
|
|
}
|
|
.urgency-legend .bars i[data-on] {
|
|
background: var(--color-urgency-near, var(--color-near));
|
|
}
|
|
.urgency-legend .step {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
}
|
|
.urgency-legend .step i {
|
|
width: 8px;
|
|
height: 8px;
|
|
border-radius: 1px;
|
|
}
|
|
|
|
/* Finishing a whole section — every daily, or every routine in a game's
|
|
group — gets the grand celebration: wider waves of the live sparks, a sweep
|
|
of light across the section, and the "All done" line popping in. Off under
|
|
reduced motion, like the sparks themselves. */
|
|
.routine-group {
|
|
position: relative;
|
|
}
|
|
.routine-group[data-complete] > summary small,
|
|
.routine-group[data-complete] > h3 small {
|
|
color: currentColor;
|
|
font-weight: 600;
|
|
}
|
|
.fireworks.grand {
|
|
z-index: 2;
|
|
}
|
|
.fireworks.grand .spark {
|
|
width: 4px;
|
|
height: 4px;
|
|
}
|
|
@media (prefers-reduced-motion: no-preference) {
|
|
.fireworks.grand .spark {
|
|
animation-duration: 1400ms;
|
|
}
|
|
.daily-panel[data-burst]::after,
|
|
.routine-group[data-celebrate]::after {
|
|
content: "";
|
|
position: absolute;
|
|
inset: 0;
|
|
pointer-events: none;
|
|
background: linear-gradient(
|
|
100deg,
|
|
transparent 30%,
|
|
color-mix(in srgb, var(--sweep, var(--color-ink)) 16%, transparent) 50%,
|
|
transparent 70%
|
|
);
|
|
background-size: 250% 100%;
|
|
animation: section-sweep 1100ms ease-out 150ms both;
|
|
}
|
|
.routine-group[data-celebrate] {
|
|
--sweep: currentColor;
|
|
}
|
|
.daily-panel[data-burst] .daily-count,
|
|
.routine-group[data-celebrate] > summary small,
|
|
.routine-group[data-celebrate] > h3 small {
|
|
display: inline-block;
|
|
animation: section-pop 600ms cubic-bezier(0.3, 1.6, 0.5, 1) 120ms both;
|
|
}
|
|
.routine-group[data-celebrate] > summary small,
|
|
.routine-group[data-celebrate] > h3 small {
|
|
display: block;
|
|
transform-origin: left center;
|
|
}
|
|
.daily-panel[data-burst] .daily-count {
|
|
transform-origin: right center;
|
|
text-shadow: 0 0 12px color-mix(in srgb, var(--color-ink) 45%, transparent);
|
|
}
|
|
@keyframes section-sweep {
|
|
from {
|
|
background-position: 100% 0;
|
|
opacity: 1;
|
|
}
|
|
to {
|
|
background-position: 0% 0;
|
|
opacity: 0;
|
|
}
|
|
}
|
|
@keyframes section-pop {
|
|
0% {
|
|
transform: scale(0.85);
|
|
}
|
|
50% {
|
|
transform: scale(1.12);
|
|
}
|
|
100% {
|
|
transform: scale(1);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* The returning tour's controls: Continue first and always in the same spot,
|
|
Back beside it once there is somewhere to go back to, Skip apart at the end
|
|
so a quick run of clicks never lands on the wrong one. */
|
|
.returning-tour .tour-step {
|
|
margin: 0 0 6px;
|
|
font-size: 12px;
|
|
color: var(--color-muted);
|
|
}
|
|
.returning-tour .tour-actions {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
gap: 10px;
|
|
margin-top: 14px;
|
|
}
|
|
.returning-tour .tour-actions .commit {
|
|
color: var(--color-ground);
|
|
}
|
|
.returning-tour .tour-actions .btn {
|
|
color: var(--color-ink);
|
|
}
|
|
.returning-tour .tour-skip {
|
|
margin-left: auto;
|
|
color: var(--color-muted);
|
|
text-decoration: underline;
|
|
text-underline-offset: 3px;
|
|
}
|
|
|
|
/* The arrow belongs to the time on its left, not to the row's column rhythm:
|
|
pull it in so about 10px separates them, whatever the row's gap. */
|
|
.event-entry > svg {
|
|
margin-left: -14px;
|
|
}
|
|
:root[data-interface="relaxed"] .event-entry > svg {
|
|
margin-left: -12px;
|
|
}
|
|
@media (max-width: 1050px) {
|
|
.event-entry > svg {
|
|
margin-left: -6px;
|
|
}
|
|
}
|
|
|
|
/* One inset between the content and the page's outer edges (--edge), in
|
|
the Checklist, its frame and the other tabs. It was 24px (32px in places);
|
|
the owner wanted the content closer to the edge. Where a side column meets
|
|
the main content, the inner gap (--gutter) stays at 24px. */
|
|
.reader-ui {
|
|
--edge: 16px;
|
|
--gutter: 24px;
|
|
}
|
|
/* Full width: the edge on both sides. */
|
|
.reader-ui .top,
|
|
.feed-footer,
|
|
.rt-top,
|
|
.timeline-help,
|
|
.checklist-display,
|
|
.band-h,
|
|
.routine-histories,
|
|
.archive-view {
|
|
padding-inline: var(--edge);
|
|
}
|
|
.archive-story {
|
|
margin-inline: var(--edge);
|
|
}
|
|
.rt td:first-child,
|
|
.rt th:first-child {
|
|
padding-left: var(--edge);
|
|
}
|
|
.rt td:last-child,
|
|
.rt th:last-child {
|
|
padding-right: var(--edge);
|
|
}
|
|
/* Left columns: the edge outside, the gutter toward the content. */
|
|
.game-focus,
|
|
.checklist-rail .head,
|
|
.daily-panel,
|
|
.pinned-heading,
|
|
.routine-group summary,
|
|
.routine-group h3,
|
|
.archive-sidebar button,
|
|
.settings-layout nav button.settings-row,
|
|
.settings-layout > nav .settings-games-label {
|
|
padding-inline: var(--edge) var(--gutter);
|
|
}
|
|
.routine-group > .routine-control,
|
|
.pinned-routines > .quiet {
|
|
margin-inline: var(--edge) var(--gutter);
|
|
}
|
|
/* Card rows keep their text on the same line as everything else. */
|
|
.pinned-routine {
|
|
margin-inline: calc(var(--edge) - 10px) calc(var(--gutter) - 10px);
|
|
}
|
|
.daily-hit {
|
|
width: calc(100% + 20px);
|
|
}
|
|
/* The main column: the gutter toward the rail, the edge outside. */
|
|
.updates-panel,
|
|
.release-update,
|
|
.release-update.update-row,
|
|
.list-heading,
|
|
.upcoming-events .list-heading,
|
|
.event-list,
|
|
.list-foot,
|
|
.ledger-columns,
|
|
.ledger-row,
|
|
.archive-main {
|
|
padding-inline: var(--gutter) var(--edge);
|
|
}
|
|
/* At phone width the side columns stack above the content: the edge on both
|
|
sides. */
|
|
@media (max-width: 700px) {
|
|
.archive-main,
|
|
.archive-sidebar button,
|
|
.settings-layout nav button.settings-row,
|
|
.settings-layout > nav .settings-games-label,
|
|
.game-focus,
|
|
.checklist-rail .head,
|
|
.daily-panel,
|
|
.pinned-heading,
|
|
.routine-group summary,
|
|
.routine-group h3,
|
|
.updates-panel,
|
|
.release-update,
|
|
.release-update.update-row,
|
|
.list-heading,
|
|
.upcoming-events .list-heading,
|
|
.event-list,
|
|
.list-foot,
|
|
.ledger-columns,
|
|
.ledger-row {
|
|
padding-inline: var(--edge);
|
|
}
|
|
.routine-group > .routine-control,
|
|
.pinned-routines > .quiet {
|
|
margin-inline: var(--edge);
|
|
}
|
|
.pinned-routine {
|
|
margin-inline: calc(var(--edge) - 10px);
|
|
}
|
|
/* The game strip stays clear of the screen's edge. */
|
|
.event-entry::before {
|
|
left: -9px;
|
|
}
|
|
}
|
|
|
|
/* "Focus" is a small label like the rail's "Next to expire", in the body
|
|
face. `.reader-ui h2` (later, same weight) was giving it the condensed
|
|
display face at 13px, which sat oddly beside "Next: …"; the two now share
|
|
a text baseline instead of being centred by their boxes. */
|
|
.focus-heading {
|
|
align-items: baseline;
|
|
}
|
|
.game-focus .focus-heading h2 {
|
|
font: 500 12px/1.4 var(--font-body);
|
|
color: var(--color-muted);
|
|
}
|
|
|
|
/* Settings on large screens: the content used to stop at 900px, leaving most
|
|
of a 1920px screen empty, and the menu's rule ended partway down. Forms and
|
|
card grids now use up to 1320px (paragraphs keep their 75ch measure), and
|
|
the menu column runs the full height of the page. */
|
|
.settings-layout {
|
|
min-height: calc(100vh - 130px);
|
|
}
|
|
.settings-layout > nav {
|
|
align-self: stretch;
|
|
}
|
|
.settings-content {
|
|
max-width: 1320px;
|
|
}
|
|
@media (max-width: 700px) {
|
|
.settings-layout {
|
|
min-height: 0;
|
|
}
|
|
}
|
|
/* The form pages fill the wider settings column too; the changelog keeps its
|
|
reading measure. */
|
|
.game-settings,
|
|
.backup-page,
|
|
.reset-row,
|
|
.sources-page .source-row,
|
|
.sources-page .list-options,
|
|
.sources-page .sources-heading {
|
|
max-width: none;
|
|
}
|
|
|
|
/* Where to redeem: the official page as a button when the publisher has one,
|
|
and the in-game route either way. */
|
|
.redeem-where {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
gap: 8px 16px;
|
|
margin: 12px 0 16px;
|
|
}
|
|
.redeem-where .commit {
|
|
text-decoration: none;
|
|
}
|
|
.redeem-where p {
|
|
margin: 0;
|
|
font-size: 13px;
|
|
color: var(--color-ink);
|
|
}
|
|
.redeem-where p span {
|
|
color: var(--color-muted);
|
|
}
|
|
|
|
/* The tour floats over the page it describes, so the page stays visible and
|
|
scrollable behind it. During the tour, a replay too, the page is inert and
|
|
dimmed around the step's subject. The page gets room at its foot so its
|
|
last rows can scroll clear of the card. */
|
|
.tour-behind {
|
|
display: contents;
|
|
}
|
|
.reader-ui[data-touring] {
|
|
padding-bottom: 300px;
|
|
}
|
|
.tour-scrim {
|
|
position: fixed;
|
|
inset: 0;
|
|
z-index: 80;
|
|
pointer-events: none;
|
|
background: color-mix(in srgb, var(--color-ground) 62%, transparent);
|
|
}
|
|
.returning-tour {
|
|
position: fixed;
|
|
z-index: 90;
|
|
left: 50%;
|
|
bottom: 24px;
|
|
transform: translateX(-50%);
|
|
width: min(620px, calc(100vw - 2 * var(--edge)));
|
|
max-height: calc(100vh - 48px);
|
|
overflow-y: auto;
|
|
padding: 22px 26px 20px;
|
|
border: 1px solid var(--color-hairline);
|
|
border-radius: 14px;
|
|
background: var(--color-raised);
|
|
box-shadow: 0 18px 48px rgb(0 0 0 / 0.35);
|
|
}
|
|
.returning-tour:focus {
|
|
outline: none;
|
|
}
|
|
.returning-tour h2 {
|
|
margin: 0 0 8px;
|
|
font: 600 21px var(--font-display);
|
|
}
|
|
.returning-tour p {
|
|
margin: 0;
|
|
font-size: 13px;
|
|
line-height: 1.65;
|
|
}
|
|
.returning-tour .tour-choice {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 10px;
|
|
margin-top: 14px;
|
|
}
|
|
.returning-tour .tour-choice button {
|
|
display: grid;
|
|
gap: 2px;
|
|
padding: 11px 14px;
|
|
text-align: left;
|
|
border: 1px solid var(--color-hairline);
|
|
border-radius: 10px;
|
|
background: var(--color-surface);
|
|
color: var(--color-ink);
|
|
transition:
|
|
border-color 160ms ease,
|
|
background-color 160ms ease;
|
|
}
|
|
.returning-tour .tour-choice button:hover {
|
|
border-color: var(--color-muted);
|
|
}
|
|
.returning-tour .tour-choice button[aria-pressed="true"] {
|
|
border-color: var(--color-near);
|
|
background: color-mix(in srgb, var(--color-near) 14%, var(--color-surface));
|
|
}
|
|
.returning-tour .tour-choice small {
|
|
color: var(--color-muted);
|
|
font-size: 12px;
|
|
}
|
|
.returning-tour .tour-later {
|
|
margin-top: 8px;
|
|
color: var(--color-muted);
|
|
font-size: 12px;
|
|
}
|
|
/* The step's subject, ringed; its shadow is the scrim, so the page dims
|
|
everywhere but here. */
|
|
.tour-spotlight {
|
|
position: fixed;
|
|
z-index: 80;
|
|
pointer-events: none;
|
|
border-radius: 12px;
|
|
transition:
|
|
left 220ms ease,
|
|
top 220ms ease,
|
|
width 220ms ease,
|
|
height 220ms ease;
|
|
box-shadow:
|
|
0 0 0 2px var(--color-near),
|
|
0 0 0 100vmax color-mix(in srgb, var(--color-ground) 62%, transparent);
|
|
}
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.tour-spotlight {
|
|
transition: none;
|
|
}
|
|
}
|
|
.returning-tour .tour-actions .commit:disabled {
|
|
opacity: 0.45;
|
|
cursor: not-allowed;
|
|
}
|
|
/* A step that asks the reader to compare looks moves its card aside, so the
|
|
page it changes has the window to itself. */
|
|
@media (min-width: 1100px) {
|
|
.returning-tour.docked {
|
|
left: auto;
|
|
right: 24px;
|
|
bottom: auto;
|
|
top: 50%;
|
|
transform: translateY(-50%);
|
|
width: 340px;
|
|
}
|
|
.returning-tour.docked .tour-choice {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
.reader-ui[data-touring]:has(.returning-tour.docked) {
|
|
padding-right: 380px;
|
|
}
|
|
}
|
|
@media (max-width: 700px) {
|
|
.returning-tour {
|
|
bottom: var(--edge);
|
|
padding: 18px 18px 16px;
|
|
}
|
|
.returning-tour .tour-choice {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
/* On a phone the card stays at the foot, so a comparing step keeps it
|
|
short: the options side by side, by name only, leaving the page room. */
|
|
.returning-tour.docked {
|
|
padding: 14px 16px 12px;
|
|
}
|
|
.returning-tour.docked h2 {
|
|
font-size: 18px;
|
|
}
|
|
.returning-tour.docked .tour-choice {
|
|
grid-template-columns: 1fr 1fr;
|
|
margin-top: 10px;
|
|
}
|
|
.returning-tour.docked .tour-choice small {
|
|
display: none;
|
|
}
|
|
}
|