/* K2-02-D012 SSR shell over design.css tokens (black/white, no brand colour).
   design.css resets are tuned for the prototype SPA; this file restores readable
   defaults for the server-rendered pages. Floors (UX §0): body 16px/1.75,
   auxiliary text >= 14px, touch targets >= 44px, visible focus. */

body { font-size: 1rem; line-height: 1.75; }
:focus-visible { outline: 2px solid var(--jy-ink); outline-offset: 3px; }
.aux { font-size: .875rem; color: var(--jy-muted); }

.skip-link { position: absolute; top: .25rem; left: 1rem; z-index: 50; padding: .6rem; background: var(--jy-surface); color: var(--jy-ink); transform: translateY(-200%); }
.skip-link:focus { transform: none; }

/* K2-02-D019 HOME-1: prototype header (design.css .jy-header, 957e073). The prototype used buttons inside a
   single-page app; the server pages keep real links, so the same look is given to links here. Key controls
   follow the UX §0 floors (>= 14px text, >= 44px targets); the prototype set some of them at 12-13px. */
.jy-brand { display: inline-flex; align-items: center; min-height: 44px; color: var(--jy-ink); text-decoration: none; }
.jy-navigation a, .jy-header-tools a { display: inline-flex; align-items: center; min-height: 44px; padding: 8px 7px; border-radius: 3px; color: var(--jy-muted); font-size: .875rem; text-decoration: none; white-space: nowrap; }
/* Prototype: main paths are muted, the tools (发布/我的/…) use the text colour. */
.jy-header-tools a { padding-inline: 12px; color: var(--jy-ink); }
.jy-navigation a:hover, .jy-header-tools a:hover { color: var(--jy-ink); background: var(--jy-soft); }
.jy-navigation a[aria-current="page"], .jy-header-tools a[aria-current="page"] { color: var(--jy-ink); }
.jy-header-tools form { margin: 0; }
.jy-header-tools button { font-size: .875rem; }
.jy-header-tools [data-action="appearance"] { min-width: 44px; }
@media (max-width: 640px) {
  .jy-navigation a { min-height: 44px; padding-inline: 4px; font-size: .875rem; }
  .jy-header-tools a, .jy-header-tools button { min-width: 40px; padding-inline: 6px; }
}

/* Main column and legacy page defaults. */
.site-main { max-width: 72rem; margin: 0 auto; padding: 16px var(--jy-page-gutter) 56px; overflow-wrap: anywhere; }
.site-main p, .site-main ul, .site-main ol, .site-main dl, .site-main pre, .site-main blockquote, .site-main table { margin-block: 0 1em; }
.site-main h1 { margin-block: .5em .5em; font-size: 2rem; line-height: 1.35; letter-spacing: -.03em; }
.site-main h2 { margin-block: 1.4em .5em; font-size: 1.375rem; line-height: 1.45; }
.site-main h3 { margin-block: 1.2em .4em; font-size: 1.125rem; line-height: 1.5; }
.site-main a { text-underline-offset: .2em; }
.site-main small { font-size: .875rem; }
/* Knowledge-space labels are buttons styled by knowledge-space.css; keep them out of form defaults. */
.site-main button:not(.jy-space__label) { border: 1px solid var(--jy-line); background: var(--jy-surface); color: var(--jy-ink); padding: 8px 14px; }
.site-main button:not(.jy-space__label):hover { background: var(--jy-soft); }
.site-main input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]), .site-main select, .site-main textarea { min-height: 44px; padding: 8px 10px; border: 1px solid var(--jy-line); border-radius: 3px; background: var(--jy-surface); color: var(--jy-ink); }
.site-main select:focus-visible, .site-main textarea:focus-visible { outline: 2px solid var(--jy-ink); outline-offset: 2px; }
.site-main fieldset { border: 1px solid var(--jy-border); }
.site-main pre { white-space: pre-wrap; }
.site-main img { max-width: 100%; height: auto; }
.site-main table { border-collapse: collapse; }
.site-main th, .site-main td { padding: 6px 10px 6px 0; border-bottom: 1px solid var(--jy-border); text-align: left; vertical-align: top; }
@media (max-width: 390px) { .site-main h1 { font-size: 1.625rem; } }

/* Profile and workspace pages (moved from the former inline base styles). */
.profile-page, .workspace-page { max-width: 50rem; margin: auto; overflow-wrap: anywhere; }
.profile-page section, .profile-page form, .workspace-page section { margin-block: 1.5rem; padding: 1rem; background: var(--jy-surface); border: 1px solid var(--jy-border); border-radius: 3px; }
.profile-page input:not([type=checkbox]):not([type=hidden]), .profile-page textarea { display: block; width: 100%; max-width: 100%; }
.profile-page textarea { resize: vertical; }
.profile-page label { display: block; margin-block: .4rem; }
.profile-page .check { display: flex; gap: .5rem; align-items: center; min-height: 44px; }
.profile-page input[type=checkbox] { width: 1.2rem; height: 1.2rem; flex: 0 0 auto; }
.profile-page button, .profile-page .action-link, .workspace-page .action-link { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: .5rem .8rem; white-space: normal; border: 1px solid var(--jy-line); border-radius: 3px; background: var(--jy-surface); color: var(--jy-ink); text-decoration: none; cursor: pointer; }
.profile-page button[type=submit][value=save] { background: var(--jy-ink); border-color: var(--jy-ink); color: var(--jy-bg); }
.profile-page button:disabled { opacity: .6; cursor: default; }
.profile-page fieldset { min-width: 0; margin-block: 1rem; }
.profile-page .aux, .workspace-page .aux { font-size: .875rem; color: var(--jy-muted); }
.profile-page .actions { display: flex; flex-wrap: wrap; gap: .5rem; margin-block: .5rem; }
.profile-page .notice { padding: .8rem; border: 2px solid var(--jy-line); }
.profile-page .error { border-color: var(--jy-ink); }
.profile-page .entry-list, .workspace-page .entry-list { padding-left: 1.25rem; }
.profile-page .entry-list li, .workspace-page .entry-list li { margin-block: .8rem; }
.profile-page .entry-list a, .workspace-page .entry-list a { display: inline-block; min-height: 44px; align-content: center; }
.profile-page .markdown pre { white-space: pre-wrap; }
@media (max-width: 390px) { .profile-page section, .profile-page form, .workspace-page section { padding: .75rem; } }

/* K2-02-D019 HOME-1: the prototype one-screen home (design.css #jy-home) is used as is. Additions only:
   real links styled like the prototype buttons, UX §0 floors for key controls and the disclosure line,
   and the no-JS fallback (html:not(.js)) where the page scrolls and the index dialog renders inline. */
.jy-exploration-tools a { display: inline-flex; align-items: center; min-height: 44px; padding: 4px 7px; border-radius: 3px; color: var(--jy-muted); font-size: .875rem; text-decoration: none; white-space: nowrap; }
.jy-exploration-tools a:hover { color: var(--jy-ink); background: var(--jy-soft); }
.jy-breadcrumbs, .jy-breadcrumbs button { font-size: .875rem; }
#jy-space-caption { font-size: .875rem; }
/* The eyebrow (净因 · 知识空间) stays at the prototype's 12px as a decorative label; the subline is key text. */
.jy-home-description { font-size: .875rem; }
.jy-depth-controls button, .jy-space-actions button { min-height: 44px; }
.jy-space-actions button { font-size: .875rem; }
.jy-preview-note { font-size: .875rem; letter-spacing: 0; }
.jy-preview-note a { display: inline-flex; align-items: center; min-height: 44px; color: var(--jy-muted); text-underline-offset: 4px; }
.jy-preview-note a:hover { color: var(--jy-ink); }
/* K2-02-D013 (R001 F2): UX §0 14px floor inside the sphere; the component sets label sizes inline (>= 14px). */
.jy-main-space .jy-space__label, .jy-main-space .jy-space__empty { font-size: 14px; }
/* Index dialog (prototype #jy-index-dialog): key text >= 14px. */
.jy-dialog-heading button { min-height: 44px; font-size: .875rem; }
.jy-index-dialog .jy-muted, .jy-index-group, .jy-index-item > .jy-meta, .jy-index-empty { font-size: .875rem; }
.jy-index-list > .jy-index-item { min-height: 44px; color: var(--jy-ink); }
.jy-index-list > .jy-index-item:hover { background: var(--jy-soft); }
.jy-index-empty { grid-column: 1 / -1; margin: 6px 0 0; color: var(--jy-muted); }
.jy-index-list:focus { outline: none; }
@media (max-width: 640px) {
  #jy-space-caption, .jy-depth-controls button, .jy-space-actions button, .jy-preview-note { font-size: .875rem; }
  .jy-depth-controls button, .jy-space-actions button { min-height: 44px; }
}
/* No script: the page scrolls, the sphere and its toolbar are not shown, and the index is inline (V25). */
html:not(.js) body[data-view="home"] { overflow: auto; }
html:not(.js) #jy-app[data-view="home"] { display: block; height: auto; min-height: 100vh; overflow: visible; }
html:not(.js) #jy-home { display: block; height: auto; padding-bottom: 0; }
html:not(.js) #jy-home .jy-exploration-bar, html:not(.js) #jy-home .jy-space-stage, html:not(.js) #jy-home .jy-space-toolbar { display: none; }
html:not(.js) #jy-home .jy-home-intro { padding: 24px 0; }
.jy-home-noscript { margin: 0 var(--jy-page-gutter); color: var(--jy-muted); font-size: .875rem; }
html:not(.js) #jy-index-dialog { display: block; position: static; width: auto; max-width: none; max-height: none; margin: 16px var(--jy-page-gutter) 48px; }
html:not(.js) #jy-index-dialog .jy-dialog-panel { max-height: none; padding: 0; border: 0; box-shadow: none; }
html:not(.js) #jy-index-dialog [data-action="close-home-index"] { display: none; }

/* Content list template (U02, /p?tag=<key>). */
.list-heading { max-width: 46rem; }
.list-heading p { color: var(--jy-muted); }
.list-filters { display: flex; flex-wrap: wrap; gap: 0 18px; margin-block: 8px 0; border-bottom: 1px solid var(--jy-ink); }
.list-filters a { display: inline-flex; align-items: center; min-height: 44px; color: var(--jy-muted); text-decoration: none; }
.list-filters a[aria-current="page"], .list-filters a:hover { color: var(--jy-ink); text-decoration: underline; text-underline-offset: 6px; }
.list-row { padding-block: 20px 8px; border-bottom: 1px solid var(--jy-border); }
.site-main .list-row h2 { margin: 0 0 6px; font-size: 1.25rem; }
.list-row h2 a { display: inline-flex; align-items: center; min-height: 44px; text-decoration: none; }
.list-clear { display: inline-flex; align-items: center; min-height: 44px; margin-inline-start: 8px; }
.list-row h2 a:hover { text-decoration: underline; }
.list-meta { color: var(--jy-muted); font-size: .875rem; }
.site-main .list-tags { display: flex; flex-wrap: wrap; gap: 0 12px; margin: 0 0 8px; padding: 0; list-style: none; }
.list-tags a { display: inline-flex; align-items: center; min-height: 44px; color: var(--jy-muted); font-size: .875rem; text-decoration: none; }
.list-tags a::before { content: "#"; margin-right: 2px; }
.list-tags a:hover, .list-tags a[aria-current="true"] { color: var(--jy-ink); text-decoration: underline; }
.list-pagination a { display: inline-flex; align-items: center; min-height: 44px; }

/* K2-02-D014 neutral unavailable shell (profile, question, catalog and updates pages). K2-02-D022 READ replaced the
   reader page itself with the prototype reader, so its former reader-* rules are gone. */
.reader-unavailable { max-width: 46rem; min-width: 0; }
.reader-unavailable { padding-block: 32px; }
.site-main .reader-unavailable h1 { font-size: clamp(1.625rem, 4vw, 2.25rem); font-weight: 520; letter-spacing: -.04em; }
.reader-unavailable p { color: var(--jy-muted); }
.reader-unavailable a { display: inline-flex; align-items: center; min-height: 44px; color: var(--jy-ink); }

/* K2-02-D015 test pages (U05-U11, U15): question, result, question index, catalog, private drafts and forms.
   Formatting only: every number, state and group comes from the DTO (TECHNICAL 10.1). */
.page { max-width: 46rem; min-width: 0; }
.page--wide { max-width: 60rem; }
.page-back a { display: inline-flex; align-items: center; min-height: 44px; color: var(--jy-muted); font-size: .9375rem; }
.page-head { padding-block: 8px 16px; border-bottom: 1px solid var(--jy-ink); }
.site-main .page-kind { margin: 0; font-size: .875rem; letter-spacing: .12em; color: var(--jy-muted); }
.site-main .page-head h1 { margin: 6px 0 10px; font-size: clamp(1.625rem, 4.2vw, 2.5rem); font-weight: 520; line-height: 1.3; letter-spacing: -.04em; }
.site-main .page-meta { margin: 0 0 4px; color: var(--jy-muted); }
.page-lead { color: var(--jy-muted); }
.page-section { margin-block: 28px; padding-top: 4px; border-top: 1px solid var(--jy-border); }
.site-main .page-section > h2:first-child { margin-top: 12px; }
.page-panel { margin-block: 16px; padding: 12px 16px; border: 1px solid var(--jy-border); border-radius: 3px; background: var(--jy-surface); }
.site-main .page-panel > :last-child { margin-bottom: 0; }
.site-main .page-panel h3 { margin-top: 4px; }
.page-panel[aria-current="true"] { border-color: var(--jy-ink); border-width: 2px; }
.site-main .facts { display: grid; grid-template-columns: minmax(6rem, max-content) minmax(0, 1fr); gap: 2px 16px; }
.facts dt { color: var(--jy-muted); font-size: .9375rem; }
.facts dd { margin: 0; min-width: 0; }
@media (max-width: 480px) { .site-main .facts { grid-template-columns: minmax(0, 1fr); } .facts dd { margin-bottom: 6px; } }
.site-main code, .page-code { font-size: .875rem; overflow-wrap: anywhere; word-break: break-all; }
.site-main pre { max-width: 100%; overflow-x: auto; padding: 10px 12px; background: var(--jy-soft); border-radius: 3px; font-size: .9375rem; }
.action-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px; margin-block: 12px; }
.site-main .action-row p { margin: 0; }
.action-row a, .action-link { display: inline-flex; align-items: center; min-height: 44px; }
.action-primary { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding: 8px 16px; border: 1px solid var(--jy-ink); border-radius: 3px; background: var(--jy-ink); color: var(--jy-bg); text-decoration: none; }
.action-primary:hover { text-decoration: underline; }
.page-tabs { display: flex; flex-wrap: wrap; gap: 0 18px; margin-block: 8px 0; border-bottom: 1px solid var(--jy-ink); }
.page-tabs a { display: inline-flex; align-items: center; min-height: 44px; color: var(--jy-muted); text-decoration: none; }
.page-tabs a[aria-current="page"], .page-tabs a:hover { color: var(--jy-ink); text-decoration: underline; text-underline-offset: 6px; }
.entry-rows { margin: 0; padding: 0; list-style: none; }
.entry-rows > li { padding-block: 10px; border-bottom: 1px solid var(--jy-border); }
.entry-rows > li > a:first-child { display: inline-flex; align-items: center; min-height: 44px; font-size: 1.0625rem; }
.site-main .entry-rows p { margin: 0; }
.entry-meta { color: var(--jy-muted); font-size: .875rem; }
.run-list { padding-inline-start: 1.25rem; }
.run-list > li { margin-block: 16px; padding-bottom: 12px; border-bottom: 1px solid var(--jy-border); }
.site-main .run-list h4 { margin: 12px 0 4px; font-size: 1rem; }
.site-main .aux { font-size: .875rem; }
.status-line { padding: 8px 12px; border-left: 2px solid var(--jy-ink); background: var(--jy-soft); }
.site-main [role="alert"] { padding: 8px 12px; border: 2px solid var(--jy-ink); border-radius: 3px; }
.form-page label { display: inline-block; max-width: 100%; }
.form-page fieldset { margin-block: 16px; padding: 8px 14px 12px; border-radius: 3px; }
.form-page legend { padding-inline: 4px; font-weight: 600; }
.form-page input[type="checkbox"], .form-page input[type="radio"] { width: 1.15rem; height: 1.15rem; margin-inline-end: 6px; vertical-align: middle; }
.form-page fieldset > label, .form-page li > label { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; min-height: 44px; }
.form-page textarea { display: block; }
.form-page button[type="submit"] { min-height: 44px; }
.form-page summary { display: inline-flex; align-items: center; min-height: 44px; cursor: pointer; }
.form-page details > pre, .form-page details > p { margin-top: 8px; }
.site-main .form-page ol { padding-inline-start: 1.25rem; }
.form-page > p > a:only-child, .facts dd > a:only-child { display: inline-flex; align-items: center; min-height: 44px; }
.k106-controls summary { display: inline-flex; align-items: center; min-height: 44px; cursor: pointer; }
#result-draft-status, #run-draft-status { padding: 8px 12px; border-left: 2px solid var(--jy-ink); background: var(--jy-soft); }
#draft-conflict { margin-block: 16px; padding: 12px 16px; border: 2px solid var(--jy-ink); border-radius: 3px; }

/* K2-02-D015 P4: work tiles, work information block, profile shell. */
.list-tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 17rem), 1fr)); gap: 16px; margin-top: 16px; }
.list-tile { display: flex; flex-direction: column; padding: 12px 16px 8px; border: 1px solid var(--jy-border); border-radius: 3px; background: var(--jy-surface); }
.site-main .list-tile h2 { font-size: 1.125rem; }
.reader-work { padding: 12px 16px; border: 1px solid var(--jy-border); border-radius: 3px; }
.site-main .reader-work h2 { margin-top: 0; }
.profile-tabs { max-width: 50rem; margin-inline: auto; }
.profile-public .page-head { margin-bottom: 8px; }
.profile-page .profile-tiles { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 14rem), 1fr)); gap: 12px; padding: 0; list-style: none; }
.profile-page .profile-tiles li { margin: 0; padding: 10px 12px; border: 1px solid var(--jy-border); border-radius: 3px; }

/* K2-02-D015 P5: synthetic X updates (U24), moved from static/updates.css onto the black/white tokens. */
/* K2-02-D025 PUBLISH: the外部动态 rows sit in the prototype's library rows; DESIGN 14.5 keeps every part visible. */
.updates-page .x-post { padding: 26px 0; }
.x-byline { display: flex; align-items: flex-start; gap: 12px; }
.x-byline h2 { margin: 0 0 4px; font-size: 1.125rem; line-height: 1.5; }
.x-byline a { text-underline-offset: 4px; }
.x-avatar { border-radius: 50%; flex: 0 0 auto; }
.x-body { white-space: pre-wrap; margin: 14px 0; font-size: 1rem; line-height: 1.85; }
.x-image { display: block; max-width: 100%; height: auto; margin: 12px 0; border-radius: 3px; }
.x-note { color: var(--jy-muted); font-size: .875rem; }
.x-original, .x-next { display: inline-flex; min-height: 44px; align-items: center; font-size: .9375rem; text-underline-offset: 5px; }
.x-post:focus-within { outline: none; }

/* K2-02-D015 P6: D-06 index dialog, share page. */
.site-index p a { display: inline-flex; align-items: center; min-height: 44px; }
.site-main .site-index h3 { margin: 16px 0 4px; font-size: 1rem; color: var(--jy-muted); }

@media (forced-colors: active) {
  .site-nav a[aria-current="page"], .list-filters a[aria-current="page"] { text-decoration: underline; text-decoration-thickness: 2px; }
  .home-space { border-color: CanvasText; }
}

/* K2-02-D020 HOME-2: prototype relation preview and context panel (design.css rules) with the UX §0 floors for
   key text and targets; the prototype set these at 11-13px and 32-38px. */
.jy-relation-heading button { flex-basis: 44px; min-width: 44px; min-height: 44px; }
#jy-relation-description { font-size: .875rem; }
.jy-preview-link { min-height: 44px; font-size: .875rem; }
.jy-preview-link small { font-size: .875rem; }
.jy-relation-preview > [data-action="explore-preview"] { min-height: 44px; font-size: .875rem; }
.jy-breadcrumbs button { min-height: 44px; }
#jy-context-description { font-size: .875rem; }
#jy-context-links > button, #jy-context-links > a, .jy-branch-links button { min-height: 44px; font-size: .875rem; }
.jy-context-content .jy-meta { font-size: .875rem; }
.jy-space-actions button:disabled { opacity: .45; }
.jy-preview-evidence { min-height: 44px; font-size: .875rem; }
#jy-relation-dialog-body > .jy-meta, .jy-relation-row > .jy-meta, .jy-relation-row small { font-size: .875rem; }
.jy-relation-row > .jy-keyword { min-height: 44px; }
.jy-relation-source { font-size: .875rem; text-decoration: none; }
@media (max-width: 640px) {
  .jy-preview-evidence { font-size: .875rem; }
  #jy-relation-description, .jy-preview-link, .jy-preview-link small, .jy-relation-preview > [data-action="explore-preview"] { font-size: .875rem; }
  #jy-context-description, #jy-context-links > button, #jy-context-links > a, .jy-context .jy-branch-links button { font-size: .875rem; }
  #jy-context-links > button, #jy-context-links > a { min-height: 44px; }
}

/* K2-02-D021 LIST: the prototype library view (design.css .jy-library rules) with real links in place of the
   prototype's buttons, and the UX §0 floors for key text and targets (the prototype set 11-13px and 36px). */
.jy-back-link { display: inline-flex; align-items: center; min-height: 44px; font-size: .875rem; text-decoration: none; }
.jy-back-link > span { white-space: pre; }
/* list-page.js moves focus like the prototype; after a pointer action the ring waits for the keyboard. */
#jy-library [data-pointer-focus]:focus-visible { outline: none; }
.jy-content-row > p { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.jy-page-heading > p:last-child { font-size: .875rem; }
.jy-content-filters a { display: inline-flex; align-items: center; min-height: 44px; padding: 6px 0; font-size: .875rem; color: var(--jy-muted); text-decoration: none; }
.jy-content-filters a:hover, .jy-content-filters a[aria-current="page"] { color: var(--jy-ink); }
.jy-content-filters a[aria-current="page"] { box-shadow: inset 0 -1px currentColor; }
.jy-content-row .jy-meta { font-size: .875rem; }
.jy-content-title { display: inline-block; min-height: 44px; text-decoration: none; }
a.jy-example-author { display: inline-flex; align-items: center; min-height: 44px; margin: 4px 0 8px; font-size: .875rem; text-decoration: none; }
span.jy-example-author { font-size: .875rem; }
a.jy-example-author:hover { color: var(--jy-ink); text-decoration: underline; text-underline-offset: 5px; }
.jy-content-keywords a.jy-keyword { text-decoration: none; }
.jy-content-keywords a.jy-keyword:hover { color: var(--jy-ink); }
.jy-list-pages { margin-bottom: 0; }
.jy-page-footer { font-size: .875rem; }
@media (max-width: 640px) {
  .jy-page-heading > p:last-child, .jy-content-row p { font-size: .875rem; }
}
@media (forced-colors: active) {
  .jy-content-filters a[aria-current="page"] { text-decoration: underline; text-decoration-thickness: 2px; }
}

/* K2-02-D022 READ: the prototype reader (design.css .jy-reader/.jy-article/.jy-reader-graph rules) with real links
   and forms, the spec's response controls, and the UX §0 floors (the prototype set 11-13px and 36px). */
.jy-article-heading > .jy-example-author { margin-top: 12px; }
.jy-work-details { margin: 0 0 32px; }
.jy-work-details img { display: block; max-width: 100%; height: auto; margin: 12px 0; }
.jy-work-details a, .jy-article-references a, .jy-reader-note a { display: inline-flex; align-items: center; min-height: 44px; }
.jy-article-body img { max-width: 100%; height: auto; }
.jy-article-body pre { white-space: pre-wrap; overflow-wrap: anywhere; }
.jy-article-references { margin-top: 42px; }
.jy-article-references h2 { margin-top: 0; font-size: 1.125rem; }
.jy-article-references li { font-size: .9375rem; }
.jy-article-footer .jy-meta, .jy-article-heading .jy-meta { font-size: .875rem; }
.jy-article-footer .jy-content-keywords a.jy-keyword { text-decoration: none; }
.jy-article-footer .jy-content-keywords a.jy-keyword:hover { color: var(--jy-ink); }
.jy-reader-notes { margin-top: 24px; }
.jy-reader-notes[data-enhanced] { display: none; }
/* reader-page.js moves focus like the prototype; after a pointer action the ring waits for the keyboard. */
#jy-reader [data-pointer-focus]:focus-visible, #jy-reader-graph [data-pointer-focus]:focus-visible { outline: none; }
.jy-reader-note { padding: 16px 0; border-top: 1px solid var(--jy-border); }
.jy-reader-note h3 { margin: 0 0 6px; font-size: 1rem; }
.jy-reader-note blockquote { margin: 8px 0; }
.jy-reader-note p, .jy-reader-note__missing { font-size: .9375rem; line-height: 1.85; margin-bottom: 8px; }
.jy-reader-graph .jy-graph-heading > button { min-height: 44px; font-size: .875rem; }
.jy-reader-graph .jy-eyebrow { font-size: .75rem; }
.jy-reader-definition, .jy-reader-definition p { font-size: .875rem; }
.jy-reader-definition blockquote { margin: 6px 0 0; padding-left: 14px; border-left: 1px solid var(--jy-line); }
.jy-reader-definition blockquote p { margin: 0; }
.jy-reader-relations .jy-relation-row { padding: 10px 0; }
.jy-reader-relations .jy-relation-row > .jy-keyword { min-height: 44px; font-size: .9375rem; }
.jy-reader-relations .jy-relation-row > .jy-meta { display: block; font-size: .875rem; }
.jy-reader-relations .jy-relation-source { font-size: .875rem; text-decoration: none; }
.jy-reader-relations .jy-empty-note { padding: 12px 0; }
.reader-responses { max-width: 720px; margin: 56px auto 0; }
.reader-responses .jy-guide-note { font-size: 1rem; line-height: 2; }
.jy-solution-state p { margin: 8px 0; font-size: .9375rem; }
.jy-solution-state a { text-underline-offset: 4px; }
.reader-comment .jy-meta { font-size: .875rem; }
.reader-comment__body { font-size: .9375rem; line-height: 1.9; }
.reader-comment__body p { margin: 8px 0; }
.reader-replies { margin-left: 20px; border-left: 1px solid var(--jy-border); padding-left: 16px; }
.reader-replies .jy-contribution-row:last-child { border-bottom: 0; }
.reader-reply summary { display: inline-flex; align-items: center; min-height: 44px; cursor: pointer; font-size: .875rem; color: var(--jy-muted); }
.reader-reply .jy-demo-form { margin: 8px 0 12px; }
.reader-responses .jy-demo-form textarea { min-height: 96px; }
.jy-solution-toggle { min-height: 44px; font-size: .875rem; }
.reader-comment__deleted { color: var(--jy-muted); }
.reader-comment strong { color: var(--jy-ink); font-weight: 600; }
.reader-responses .jy-entry-shortcuts > a { text-underline-offset: 5px; }
@media (max-width: 640px) {
  .reader-replies { margin-left: 8px; padding-left: 10px; }
}

/* K2-02-D023 EXPERIMENT: the prototype experiment and catalog views (design.css .jy-experience-page,
   .jy-flow-steps, .jy-run-card, .jy-condition-grid, .jy-evaluation-table, .jy-catalog-grid) on the server-rendered
   question, result and catalog pages. The prototype writes one step into #jy-experience, so its direct-child rules
   are repeated for the step sections; every control here is a link or a real form. */
.jy-experience-step > h2 { margin: 32px 0 16px; font-size: 1.5rem; line-height: 1.5; letter-spacing: -.025em; }
.jy-experience-step > h3 { margin: 28px 0 12px; font-size: 1.1875rem; line-height: 1.5; }
.jy-experience-step > p:not([class]) { max-width: 800px; margin: 14px 0 24px; font-size: 1rem; line-height: 1.9; }
.jy-experience-step > ul, .jy-experience-step > ol { max-width: 820px; margin: 12px 0 28px; padding-left: 24px; font-size: .9375rem; line-height: 1.9; }
.jy-experience-step > ul > li + li, .jy-experience-step > ol > li + li { margin-top: 12px; }
.jy-experience-step > ol > li > p { margin: 6px 0 16px; color: var(--jy-muted); }
.jy-experience-step > dl { margin: 16px 0 22px; font-size: .875rem; line-height: 1.85; }
.jy-experience-step > dl > dt { margin-top: 14px; color: var(--jy-ink); font-weight: 550; }
.jy-experience-step > dl > dd { margin: 5px 0 16px; color: var(--jy-muted); }
.jy-experience-step > blockquote { max-width: 800px; margin: 22px 0 30px; padding: 8px 0 8px 20px; border-left: 1px solid var(--jy-line); font-size: 1rem; line-height: 1.95; white-space: pre-wrap; overflow-wrap: anywhere; }
/* UX §0 floors on the prototype's smaller evidence text: key auxiliary text 14px, controls 44px. */
.jy-experience-page .jy-meta, .jy-experience-page .jy-sample-note, .jy-experience-page .jy-evaluation-table caption,
.jy-run-card .jy-meta, .jy-evaluation-table .jy-meta { font-size: .875rem; line-height: 1.8; }
.jy-experience-page .jy-meta code { font-size: .875rem; overflow-wrap: anywhere; }
.jy-experience-page .jy-meta a, .jy-experience-page li > a, .jy-experience-page .jy-evidence-grid a,
.jy-experience-page .jy-catalog-card h2 a, .jy-experience-page dd > a, .jy-experience-page > p a,
.jy-run-card p > a, .jy-contribution-row p > a, .jy-experience-heading > p a {
  display: inline-flex; align-items: center; min-height: 44px; text-underline-offset: 5px; overflow-wrap: anywhere; }
.jy-result-link { font-size: 1rem; }
.jy-experience-page > .jy-meta { margin: 12px 0 26px; color: var(--jy-muted); font-size: .875rem; line-height: 1.85; }
.jy-experience-page > .jy-guide-note { margin: 22px 0; }
/* Before experiment-page.js runs, only the step the address asks for is drawn; without scripts all four stay. */
html.js .jy-experience-page[data-experiment]:not([data-steps-ready]) [data-step-panel]:not(:first-of-type):not(:target):not(:has(:target)) { display: none; }
html.js .jy-experience-page[data-experiment]:not([data-steps-ready]):has([data-step-panel]:not(:first-of-type):is(:target, :has(:target))) [data-step-panel]:first-of-type { display: none; }
/* The prototype's step advance control is a plain button; here it is a link with the same box. */
.jy-step-advance { margin: 26px 0 8px; }
.jy-step-advance > a { display: inline-flex; align-items: center; min-height: 44px; margin-left: -12px; padding: 8px 12px; border-radius: 3px; font-size: .9375rem; text-decoration: none; }
.jy-step-advance > a:hover { background: var(--jy-soft); }
.jy-flow-steps > a { min-height: 44px; }
.jy-experience-page .jy-content-filters { margin: 18px 0 26px; }
.jy-run-card .jy-contribution-row:last-child { border-bottom: 0; }
.jy-run-card .jy-contribution-row h3 { margin-bottom: 8px; font-size: 1.0625rem; }
.jy-run-card form { margin: 12px 0 0; }
.jy-run-card form button { min-height: 44px; padding: 8px 12px; margin-left: -12px; border-radius: 3px; font-size: .875rem; }
.jy-run-card form button:hover { background: var(--jy-soft); }
.jy-run-card img { max-width: 100%; height: auto; }
.jy-evaluation-table .jy-meta { display: inline-block; margin-top: 4px; }
.jy-evaluation-table td, .jy-evaluation-table th { min-width: 110px; }
.jy-cell-repeat { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.jy-catalog-card h2 { margin-bottom: 10px; }
.jy-catalog-card h2 a { text-underline-offset: 5px; }
.jy-catalog-card dl { margin: 10px 0 0; font-size: .875rem; line-height: 1.85; }
.jy-catalog-card dt { color: var(--jy-ink); font-weight: 550; }
.jy-catalog-card dd { margin: 4px 0 0; color: var(--jy-muted); overflow-wrap: anywhere; }
.jy-experience-page .k106-controls { margin-top: 40px; padding-top: 24px; border-top: 1px solid var(--jy-border); }
.jy-experience-page .k106-controls h2 { font-size: 1.1875rem; }
.jy-experience-page .k106-controls form { max-width: 800px; margin: 18px 0; }
.jy-experience-page .k106-controls label { display: block; margin: 12px 0 6px; font-size: .875rem; }
.jy-experience-page .k106-controls textarea, .jy-experience-page .k106-controls select, .jy-experience-page .k106-controls input:not([type="checkbox"]):not([type="hidden"]) { display: block; width: 100%; max-width: 100%; min-height: 46px; margin-top: 6px; padding: 10px 12px; border: 1px solid var(--jy-border); border-radius: 3px; background: var(--jy-bg); color: var(--jy-ink); }
.jy-experience-page .k106-controls button { min-height: 44px; padding: 8px 12px; margin-left: -12px; border-radius: 3px; font-size: .875rem; }
.jy-experience-page .k106-controls button:hover { background: var(--jy-soft); }
.jy-experience-page .k106-controls p, .jy-experience-page .k106-controls summary { font-size: .875rem; line-height: 1.85; color: var(--jy-muted); }
/* experiment-page.js moves focus like the prototype; after a pointer action the ring waits for the keyboard. */
.jy-experience-page [data-pointer-focus]:focus-visible { outline: none; }

/* K2-02-D024 PROFILE: the prototype's 个人空间 card, workspace panels and form shapes (design.css .jy-profile-card,
   .jy-workspace-grid, .jy-demo-form) on the public profile, 我的 and the settings page. */
.jy-library-list > .jy-profile-card { max-width: 800px; margin-top: 8px; }
.jy-profile-card h2 { margin-bottom: 10px; }
.jy-profile-card h3 { margin: 18px 0 6px; font-size: 1.0625rem; line-height: 1.5; }
.jy-profile-card .markdown p, .jy-profile-card > p { margin: 10px 0; color: var(--jy-muted); font-size: .9375rem; line-height: 1.85; }
.jy-profile-card .jy-meta { font-size: .875rem; }
.jy-library-list > h2 { margin: 34px 0 12px; font-size: 1.5rem; line-height: 1.5; letter-spacing: -.025em; }
.jy-library-list section > h3 { margin: 26px 0 8px; font-size: 1.1875rem; line-height: 1.5; }
.jy-content-row h4 { margin: 7px 0 9px; font-size: clamp(1.0625rem, 1.8vw, 1.3125rem); line-height: 1.5; letter-spacing: -.025em; }
.jy-content-row h4 a { text-decoration: none; }
.jy-content-row h4 a:hover { text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 5px; }
.jy-workspace .jy-contribution-row .jy-meta, .jy-workspace .jy-meta { font-size: .875rem; }
.jy-workspace .jy-contribution-row p > a, .jy-workspace .jy-entry-shortcuts > a { display: inline-flex; align-items: center; min-height: 44px; font-size: .9375rem; text-underline-offset: 5px; }
.jy-workspace .jy-workspace-panel .jy-contribution-row:last-of-type { border-bottom: 0; }
.jy-workspace .jy-workspace-panel .jy-entry-shortcuts { margin-bottom: 0; }
.jy-settings-forms { max-width: 800px; overflow-wrap: anywhere; }
.jy-settings-forms h2 { margin: 30px 0 4px; font-size: 1.3125rem; line-height: 1.5; }
.jy-settings-forms .jy-demo-form fieldset > fieldset { margin: 18px 0 0; padding-top: 16px; }
.jy-settings-forms legend { font-size: 1rem; }
.jy-settings-forms .check { display: flex; gap: 10px; align-items: center; min-height: 44px; margin: 14px 0 4px; font-size: .875rem; }
.jy-settings-forms .check input[type="checkbox"] { flex: 0 0 auto; }
.jy-settings-forms .notice { margin: 18px 0; padding: 14px 16px; border: 1px solid var(--jy-line); font-size: .9375rem; line-height: 1.85; }
.jy-settings-forms .notice.error { border-color: var(--jy-ink); }
.jy-settings-forms .notice h2 { margin-top: 0; font-size: 1.0625rem; }
.jy-settings-forms p > a, .jy-settings-forms .notice a { display: inline-flex; align-items: center; min-height: 44px; text-underline-offset: 5px; }
.jy-settings-forms .jy-field-hint { font-size: .875rem; }
.jy-settings-forms .jy-form-actions > button:not([value="save"]) { background: transparent; border-color: var(--jy-border); color: var(--jy-ink); }

/* K2-02-D025 PUBLISH: the editor in the prototype's form shapes, with the UX §0 floors on its hints. */
.jy-experience-page .jy-field-hint, .jy-library-list .jy-field-hint, .jy-library-list .jy-sample-note { font-size: .875rem; line-height: 1.8; }
.x-byline .jy-meta a { display: inline-flex; align-items: center; min-height: 44px; }
.publish-page .jy-demo-form { max-width: 800px; }
.publish-page .check { display: flex; gap: 10px; align-items: center; min-height: 44px; margin: 14px 0 4px; font-size: .875rem; }
.publish-page .check input[type="checkbox"] { flex: 0 0 auto; }
.publish-page fieldset > .jy-form-actions { margin-bottom: 4px; }
.publish-page .jy-run-card { margin-top: 32px; }
.publish-page .jy-run-card .jy-article-body { font-size: 1rem; line-height: 1.9; }
.publish-page .jy-field-hint a, .publish-page .jy-entry-shortcuts > a { text-underline-offset: 5px; }

/* K2-02-D026 SITEWIDE: the prototype's appearance dialog, page-failure bar and entry guide page, with the UX §0
   floors (key text 14px, targets 44px) on top of design.css. */
.jy-appearance-dialog .jy-muted, .jy-appearance-dialog .jy-motion-label, .jy-appearance-dialog .jy-motion-option small { font-size: .875rem; line-height: 1.8; }
.jy-appearance-dialog .jy-theme-options > button, .jy-appearance-dialog .jy-motion-controls > button { min-height: 44px; font-size: .875rem; }
.jy-appearance-dialog .jy-motion-option { display: flex; align-items: flex-start; gap: 12px; min-height: 44px; font-size: .9375rem; }
.jy-appearance-dialog .jy-motion-option small { display: block; color: var(--jy-muted); }
.jy-appearance-dialog .jy-dialog-heading button { min-height: 44px; font-size: .875rem; }
/* K2-02-D027 DARKMODE: the failure bar keeps the prototype's own rules (design.css .jy-error, a floating panel
   on the page surface); only its link keeps the site's 44px target floor. */
.jy-error a { display: inline-flex; align-items: center; min-height: 44px; }
.usage-page .jy-workspace-panel { max-width: 800px; }
.usage-page .jy-workspace-panel h2 { margin-bottom: 8px; }
.usage-page .jy-section-guide { margin-bottom: 4px; }
