/* BEGIN:shared-visual-core */
/* Shared type scale. Root size is the only large-text multiplier.
   Titles, controls and details use roles, never arbitrary per-element sizes. */
:root{
 --text-caption:.8125rem;--text-detail:.875rem;--text-body:1rem;
 --text-subhead:1.125rem;--text-title-small:1.25rem;--text-title:1.375rem;--text-pane:1.5rem;
 --text-section:2.5rem;--text-display:4rem;--text-lead:1.25rem;
 --text-control:var(--text-detail);--text-card-title:var(--text-title);
 --font-ui:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
 --font-number:var(--font-ui);--font-site:var(--font-ui);--font-sans:var(--font-ui);font-size:16px;font-family:var(--font-ui);font-synthesis:none;
}
:root[data-font=large],:root[data-large-text=true]{font-size:20px}
body,button,input,textarea,select{font-family:var(--font-ui)}
body{font-size:var(--text-body);line-height:1.6}
body :is(button,input,select,textarea){letter-spacing:0}
body :is(button,[role=button]){font-weight:500;line-height:1.4}
body :is(p,li){text-wrap:pretty}
@media(max-width:700px){:root{--text-control:var(--text-body);--text-card-title:var(--text-subhead);--text-section:1.875rem;--text-display:2.5rem;--text-lead:var(--text-subhead)}}
:root{
 --vis-paper:#fff;--vis-soft:#f5f5f7;--vis-ink:#1d1d1f;--vis-muted:#646469;
 --vis-line:#e5e5e9;--vis-control-line:#86868b;--vis-action:var(--site-action,#c65300);--vis-on-action:var(--site-on-action,#fff);
 --vis-link:#ad3d0b;--vis-focus:#0071e3;--vis-danger:#c43228;
 --vis-control-height:44px;--vis-prominent-height:48px;--vis-control-gap:8px;
 --vis-radius-control:14px;--vis-radius-segment:12px;--vis-radius-menu:18px;--vis-radius-pill:999px;
 --vis-duration:160ms;--vis-ease:cubic-bezier(.2,.8,.2,1);
 font-size:100%;
}
:root[data-font=large],:root[data-large-text=true]{font-size:125%}
:root[data-theme=dark],:root[data-site-theme=dark]{--vis-paper:#101012;--vis-soft:#28282c;--vis-ink:#f5f5f7;--vis-muted:#b4b4bc;--vis-line:#39393e;--vis-control-line:#9c9ca4;--vis-link:#ffad7c;--vis-focus:#66aaff;--vis-danger:#ffaaa1}
:root{--ink:var(--vis-ink);--muted:var(--vis-muted);--bg:var(--vis-paper);--surface:var(--vis-paper);--soft:var(--vis-soft);--line:var(--vis-line);--control-line:var(--vis-control-line);--focus:var(--vis-focus);--accent:var(--vis-link);--brand:var(--vis-action);--on-brand:var(--vis-on-action);--display-ink:var(--vis-ink);--display-muted:var(--vis-muted);--display-bg:var(--vis-paper);--display-card:var(--vis-paper);--display-soft:var(--vis-soft);--display-line:var(--vis-line);--display-focus:var(--vis-focus);--display-accent:var(--vis-link)}
:root[data-high-contrast=true]{--vis-muted:var(--vis-ink);--vis-control-line:var(--vis-ink);--vis-focus:var(--vis-ink)}

/* Keep a complete Chinese headline phrase on the narrowest supported screen. */
@media(max-width:360px){:root{--text-display:2rem}}

/* Familiar web semantics; the activity canvas retains its own interaction sizes. */
:root{--ui-focus:var(--vis-focus);--ui-line:var(--vis-control-line);--ui-radius:var(--vis-radius-control);--ui-duration:var(--vis-duration)}
:root body :is(button,a,input,textarea,select,summary):focus-visible{outline:2px solid var(--vis-focus);outline-offset:3px}
:root body :is(input,select,textarea)[aria-invalid=true]{border-color:var(--vis-danger);outline:1px solid var(--vis-danger)}
:root body :is(button,[role=button]):disabled,:root body :is(button,[role=button])[aria-disabled=true]{opacity:.45;cursor:not-allowed;box-shadow:none}
:root body :is(.btn,.play-toolbar button,.play-settings button,.play-controls button){min-height:var(--vis-control-height);font-size:var(--text-control);font-weight:500;line-height:1.4;gap:var(--vis-control-gap);box-shadow:none}
:root body :is(main button[class*="primary" i],.btn-primary):not(.play-root button){min-height:var(--vis-control-height);border-radius:var(--vis-radius-pill);border:1px solid transparent;background:var(--vis-action);color:var(--vis-on-action);font-size:var(--text-control);font-weight:600;line-height:1.4;box-shadow:none}
:root body :is(main button[class*="secondary" i],.btn-secondary):not(.play-root button){min-height:var(--vis-control-height);border-radius:var(--vis-radius-pill);border:1px solid transparent;background:var(--ui-control-soft);color:var(--ui-ink);font-size:var(--text-control);font-weight:500;line-height:1.4;box-shadow:none}
:root body :is(input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]):not([type=file]):not([type=hidden]),select,textarea):not(.search-form input):not([role=combobox]){font-size:var(--text-body);line-height:1.6;border-radius:var(--vis-radius-control);box-shadow:none}
:root body :is(input,textarea)::placeholder{color:var(--vis-muted);opacity:1}
:root body input[type=file]::file-selector-button{font-size:var(--text-control);font-weight:500;min-height:var(--vis-control-height);border-radius:var(--vis-radius-pill)}
:root body :is(.role-tabs,.search-switch) button{font-size:var(--text-control);font-weight:500;line-height:1.4;min-height:var(--vis-control-height);border-radius:var(--vis-radius-segment);border:0;box-shadow:none}
:root body :is(.role-tabs,.search-switch) button[aria-pressed=true]{background:var(--ui-surface);color:var(--ui-ink);font-weight:600;box-shadow:0 1px 5px #0000000a;border:0}
@media(hover:hover) and (pointer:fine){:root body :is(.btn,.play-toolbar button,.play-settings button):not(:disabled):hover{filter:brightness(.97)}}
@media(prefers-reduced-motion:reduce){:root{--vis-duration:0ms}}
@media(forced-colors:active){:root body :is(button,a,input,select,textarea,summary):focus-visible{outline-color:Highlight}:root body :is(.btn-primary,.btn-secondary){border:1px solid ButtonText}}

/* Action labels are indivisible; groups reflow before their text is squeezed.
   Rich choice cards and activity canvases keep their own multiline layout. */
:root body :is(.btn,.play-toolbar-actions button,.play-controls>button,.play-settings-heading button){white-space:nowrap;word-break:normal;overflow-wrap:normal;flex-shrink:0}
:root body :is(.btn,.play-toolbar-actions button,.play-controls>button,.play-settings-heading button)>svg{flex:none}
:root body summary{text-wrap:pretty;word-break:normal;overflow-wrap:normal}
:root body .play-root .play-toolbar-actions{display:flex;flex-wrap:wrap;max-width:100%;min-width:0}
:root body .play-root .play-toolbar-actions>button{flex:0 0 auto;min-width:max-content;height:auto;flex-direction:row;align-items:center;justify-content:center}
@media(max-width:900px){
 :root body .play-root:not(.projecting) .play-toolbar-actions{width:100%;gap:8px}
 :root body .play-root:not(.projecting) .play-toolbar-actions>button{flex:1 0 auto;min-height:44px;padding:10px 12px}
}

/* END:shared-visual-core */

/* Global site chrome: links and buttons share a type role. */
:root body>header :is(nav a,button){font-size:var(--text-detail);font-weight:500;line-height:1.4}
:root body>header a>span>strong{font-size:var(--text-title);font-weight:600;line-height:1.35}
:root body>header a>span>small{font-size:var(--text-caption);font-weight:400;line-height:1.5}
:root body>footer{font-size:var(--text-caption);font-weight:400;line-height:1.6}
:root body>footer :is(a,p){font-size:var(--text-caption);font-weight:400;line-height:1.6}
:root body>footer nav a{display:inline-flex;align-items:center;min-height:44px}
@media(max-width:700px){:root body>header a>span>strong{font-size:var(--text-title-small)}}
