/* ONE ARCHITECTURE, MANY ROOMS.
   Publishing order: room sheet, shared reading/effects sheets, then this file.
   Opt-in is explicit and emitted by architecture-sweep.py. Hidden artifacts and
   the independent Seal Room never opt in. No palette, font, content, or motion
   is introduced here. Room weather and print remain their existing owners'. */

html[data-architecture="house"] {
  /* The spacing scale moveth to shell.css's root (MF-043, 2026-10-09). */
  --space-section: clamp(2rem, 4vw, 4rem);
  --measure-prose: var(--body-max);
  --measure-page: 64rem;
  --measure-ledger: 68rem;
  --type-title: clamp(2.1rem, 1.4rem + 2.3vw, 3.75rem);
  --type-label: 0.8125rem;
  --target-size: 2.75rem;
  --edge: clamp(1rem, 3vw, 3rem);
}

@media screen {
  body.site-page[data-room-family] {
    /* Resolve roles on the room, where lamp and doctrine tokens are owned;
       resolving var(--paper) on html would freeze the wrong inherited canvas. */
    --rule: var(--line-dark);
    --surface-base: var(--paper);
    --surface-inset: var(--surface, var(--paper));
  }
  html[data-architecture="house"] {
    /* Clearance belongs to the target, not also to the scroll container. */
    scroll-padding-top: 0;
  }
  body.site-page[data-room-family]:not(.cell):not(.unwatched):not(.noise) {
    max-width: 80rem;
    padding-inline: max(var(--edge), env(safe-area-inset-left));
    padding-block-start: var(--space-3);
  }
  body.site-page[data-room-family]:not(.cell):not(.unwatched):not(.noise) > main {
    max-width: var(--measure-page);
    margin-inline: auto;
  }
  body.site-page[data-room-family]:not(.cell) main > h1:first-of-type {
    font-size: var(--type-title);
    line-height: 1.15;
    letter-spacing: -0.02em;
    margin-block: var(--space-6) var(--space-8);
    padding-block-end: var(--space-6);
    border-color: var(--rule);
  }
  body.site-page[data-room-family] :where(main [id]) {
    scroll-margin-top: var(--band-clear, 12rem);
  }
  body.site-page[data-room-family] :where(a, button, summary, input, select, textarea, [tabindex]):focus-visible {
    outline: 2px solid var(--brass);
    outline-offset: 3px;
  }
  /* A tall but 18px-wide ordinal is not a comfortable target. Navigation
     receives both dimensions; citations in ordinary prose remain inline. */
  body.site-page[data-room-family] :where(button, summary, [role="button"]) {
    min-width: var(--target-size);
    min-height: var(--target-size);
  }
  body.site-page[data-room-family] :where(nav, [role="navigation"]) a {
    display: inline-flex;
    align-items: center;
    min-width: var(--target-size);
    min-height: var(--target-size);
  }
  body.site-page[data-room-family] :where(input, select, textarea) {
    max-width: 100%;
    min-height: var(--target-size);
    font-size: max(1rem, 1em);
  }
  body.site-page[data-room-family] :where([dir="rtl"], [lang="he"], [lang="yi"]) {
    unicode-bidi: isolate;
  }

  /* ARRIVAL: identity, three primary roads, one optional set of instruments.
     A solid paper surface, not glass. No navigation list is an enormous menu. */
  body[data-room-family] .room-header {
    display: grid;
    grid-template-areas: "brand tools" "primary primary" "rail rail";
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: 0 var(--space-4);
    padding-block: var(--space-2);
    background: var(--paper);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    border-bottom: 1px solid var(--rule);
  }
  body[data-room-family] .room-header .room-brand {
    grid-area: brand;
    margin: 0;
    min-width: 0;
    font-family: "EB Garamond", Georgia, serif;
    font-size: 1.2rem;
    letter-spacing: -0.02em;
  }
  html[data-architecture="house"] body.site-page[data-room-family] .room-header {
    background: var(--paper);
  }
  body[data-room-family] .room-header .room-family-cue {
    display: none; /* The accessible, static location trail now owns context. */
  }
  body[data-room-family] .room-header > nav[aria-label="Primary"] {
    grid-area: primary;
    justify-content: flex-start;
    gap: 0 var(--space-4);
    margin: 0;
  }
  body[data-room-family] .room-header > nav[aria-label="Primary"] a {
    padding-inline: var(--space-1);
    min-height: var(--target-size);
    border-radius: 0;
    text-underline-offset: 0.4em;
  }

  /* Instruments and the room outline are navigation only. They open as bounded
     panels; neither expansion makes a sticky band half a phone tall. */
  body[data-room-family] .reader-instruments {
    grid-area: tools;
    position: relative;
    margin: 0;
    font: 500 var(--type-label)/1.4 var(--font-ui);
  }
  body[data-room-family] .reader-instruments > summary {
    display: flex;
    align-items: center;
    gap: var(--space-2);
    min-height: var(--target-size);
    padding-inline: var(--space-2);
    cursor: pointer;
    list-style: none;
    border: 1px solid var(--rule);
    border-radius: 2px;
  }
  body[data-room-family] .reader-instruments > summary::-webkit-details-marker { display: none; }
  body[data-room-family] .reader-instruments > summary::after { content: "+"; color: var(--brass); }
  body[data-room-family] .reader-instruments[open] > summary::after { content: "−"; }
  body[data-room-family] .reader-instruments-panel {
    position: absolute;
    inset-block-start: calc(100% + var(--space-2));
    inset-inline-end: 0;
    z-index: var(--z-band-raised);
    width: min(30rem, calc(100vw - 2 * var(--edge)));
    max-height: min(55svh, 28rem);
    overflow: auto;
    overscroll-behavior: contain;
    padding: var(--space-4);
    border: 1px solid var(--rule);
    background: var(--paper);
  }
  body[data-room-family] .reader-instruments .reader-tools {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2);
    margin: 0;
  }
  body[data-room-family] .reader-instruments :is(button, .lamp-control) {
    margin: 0;
    min-height: var(--target-size);
    font-size: var(--type-label);
    border-radius: 2px;
  }
  body[data-room-family] .reader-instruments [data-form-sky] { margin-block-start: var(--space-3); }
  body[data-room-family] .room-header .page-outline > summary {
    min-height: var(--target-size);
    padding-inline: var(--space-2);
  }
  body[data-room-family] .reader-instruments .page-outline {
    margin-block-start: var(--space-3);
    border-top: 1px solid var(--rule);
  }
  body[data-room-family] .room-header .page-outline > nav,
  body[data-room-family] .room-header .page-outline > .contents-line {
    position: static;
    width: 100%;
    max-height: min(55svh, 28rem);
    background: var(--paper);
    border-radius: 0;
    box-shadow: none;
  }
  body[data-room-family] .reader-navigator {
    top: min(var(--band-clear, 10rem), 25svh);
    max-height: 65svh;
    border-radius: 2px;
    background: var(--paper);
  }

  /* CONTEXT: ordinary source links. It leaves with the first screen; it is
     never another sticky bar and works without JavaScript. */
  .room-location { margin-block: var(--space-4) var(--space-2); }
  .room-location ol {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0 var(--space-3);
    margin: 0;
    padding: 0;
    list-style: none;
    font: 400 var(--type-label)/1.5 var(--font-ui);
    color: var(--bureau);
  }
  .room-location li { display: flex; align-items: center; min-width: 0; }
  .room-location li:not(:last-child)::after {
    content: "/";
    margin-inline-start: var(--space-3);
    color: var(--bureau);
  }
  .room-location a { display: inline-flex; align-items: center; min-height: var(--target-size); }
  .room-location [aria-current] { color: var(--brass); padding-block: var(--space-2); }

  /* THE SHELL'S COMPONENTS (W4-A1, MF-074): the place trail's road note, the
     guide strip, the data-driven slots, and the record strip. Built from the
     house's existing grammar (wing-road, onward + why, cold-entry, shr-table,
     the threshold rule); none uses glitch colour, none relies on colour
     alone, each is keyed on body[data-room-family] where a family hand is
     wanted, and each prints plain. A slot whose data is absent renders
     nothing, so no rule here may manufacture a box of its own. */
  body[data-room-family] .room-road-note {
    margin: 0 0 var(--space-3);
    font: 400 var(--type-label)/1.5 var(--font-ui);
    color: var(--bureau);
  }

  /* the guide strip: a quiet legend in table dress (the house's own
     preference for legends); the current guide is marked by aria-current
     and underlined, never by colour alone. */
  body[data-room-family] .guide-strip {
    max-width: var(--measure-prose);
    margin-block: var(--space-4) var(--space-6);
    border-block: 1px solid var(--rule);
    padding-block: var(--space-2);
  }
  body[data-room-family] .guide-strip-table {
    width: 100%;
    border-collapse: collapse;
    font: 400 var(--type-label)/1.5 var(--font-ui);
  }
  body[data-room-family] .guide-strip-title {
    text-align: start;
    color: var(--bureau);
    font: 500 var(--type-label)/1.5 var(--font-ui);
    padding-block: var(--space-1) var(--space-2);
  }
  body[data-room-family] .guide-strip-table thead th {
    text-align: start;
    width: 30%;
    padding: var(--space-1) var(--space-2) var(--space-1) 0;
    color: var(--bureau);
    font-weight: 500;
    border-bottom: 1px solid var(--rule);
  }
  body[data-room-family] .guide-strip-table tbody th,
  body[data-room-family] .guide-strip-table tbody td {
    vertical-align: top;
    text-align: start;
    padding: var(--space-2) var(--space-2) var(--space-2) 0;
    border-bottom: 1px solid var(--rule);
    overflow-wrap: break-word;
  }
  body[data-room-family] .guide-strip-table tbody th { font-weight: 500; }
  body[data-room-family] .guide-strip-table tbody th a,
  body[data-room-family] .guide-strip-table tbody th [aria-current] {
    display: inline-flex;
    align-items: center;
    min-height: var(--target-size);
  }
  body[data-room-family] .guide-strip-table tbody th [aria-current] {
    color: var(--brass);
    text-decoration: underline;
    text-underline-offset: 0.35em;
  }
  body[data-room-family] .guide-first {
    font-family: "EB Garamond", Georgia, serif;
    font-size: 0.95rem;
    color: var(--bureau);
  }

  /* kindred rooms: related reading in the onward grammar (a link, its one
     line under it), under a quiet label. */
  body[data-room-family] .kindred-rooms {
    max-width: var(--measure-prose);
    margin-block: var(--space-6) 0;
    border-block-start: 1px solid var(--rule);
    padding-block-start: var(--space-3);
  }
  body[data-room-family] .kindred-title,
  body[data-room-family] .also-kept-line,
  body[data-room-family] .contested-topic {
    margin: 0 0 var(--space-2);
    font: 500 var(--type-label)/1.5 var(--font-ui);
    color: var(--bureau);
  }
  body[data-room-family] .kindred-list {
    margin: 0;
    padding: 0;
    list-style: none;
    font: 400 var(--type-label)/1.5 var(--font-ui);
  }
  body[data-room-family] .kindred-list li { margin-block: var(--space-1); }
  body[data-room-family] .kindred-list a {
    display: inline-flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0 var(--space-2);
    min-height: var(--target-size);
  }
  body[data-room-family] .kindred-why {
    flex-basis: 100%;
    margin: 0;
    color: var(--bureau);
    font-weight: 400;
  }

  /* the stranger's word: a quiet paragraph wherever it standeth (inside the
     room's own cold-entry, or as its own labelled aside). */
  body[data-room-family] .stranger-word {
    margin-block: var(--space-2);
    color: inherit;
  }
  body[data-room-family] main > aside.cold-entry > .stranger-word { margin-block-end: 0; }

  /* the contested positions: the room's own disagreement, kept as apparatus
     (the threshold rule's hand, never a resolution). */
  body[data-room-family] .contested {
    max-width: var(--measure-prose);
    margin-block: var(--space-6) 0;
    border-inline-start: 2px solid var(--brass);
    padding-inline: var(--space-4);
  }
  body[data-room-family] .contested-positions {
    margin: 0;
    padding: 0;
    list-style: none;
    font: 400 var(--type-label)/1.6 var(--font-ui);
  }
  body[data-room-family] .contested-positions li { margin-block: var(--space-2); }
  body[data-room-family] .contested-quote { font-family: "EB Garamond", Georgia, serif; }
  body[data-room-family] .contested-stratum {
    margin-inline-start: var(--space-2);
    color: var(--bureau);
    font-size: 0.75rem;
    text-transform: none;
  }
  body[data-room-family] .contested-note {
    margin: var(--space-2) 0 0;
    color: var(--bureau);
    font-size: 0.85rem;
  }

  /* also kept at, and the hub table: the manifest's own index dress. */
  body[data-room-family] .hub-table {
    max-width: var(--measure-prose);
    margin-block: var(--space-6) 0;
  }
  body[data-room-family] .hub-purpose {
    margin: 0 0 var(--space-2);
    font-family: "EB Garamond", Georgia, serif;
  }
  body[data-room-family] .hub-rooms {
    width: 100%;
    border-collapse: collapse;
    font: 400 var(--type-label)/1.5 var(--font-ui);
  }
  body[data-room-family] .hub-rooms caption {
    text-align: start;
    color: var(--bureau);
    padding-block: var(--space-1);
  }
  body[data-room-family] .hub-rooms th,
  body[data-room-family] .hub-rooms td {
    text-align: start;
    vertical-align: top;
    padding: var(--space-1) var(--space-2) var(--space-1) 0;
    border-bottom: 1px solid var(--rule);
  }
  body[data-room-family] .hub-rooms th[scope="row"] { font-weight: 500; }
  body[data-room-family] .hub-note { color: var(--bureau); }

  /* the record strip: W3-A2's marked aside, dressed only (their flag
     rendereth it; the shell never writeth it). */
  body[data-room-family] .record-strip {
    max-width: var(--measure-prose);
    margin-block: var(--space-2) var(--space-4);
  }
  body[data-room-family] .record-strip-line {
    margin: 0;
    font: 400 var(--type-label)/1.5 var(--font-ui);
    color: var(--bureau);
  }

  /* PROGRESS: a readable current position plus a small chapter instrument.
     Do not announce every scroll position through a live region. */
  body[data-room-family] .chapter-rail {
    grid-area: rail;
    position: relative;
    display: flex;
    flex-wrap: wrap;
    gap: 0 var(--space-2);
    margin: var(--space-1) 0 0;
    padding-block: var(--space-1);
    font-size: var(--type-label);
  }
  body[data-room-family] .chapter-rail-now { flex: 1 1 100%; line-height: 1.5; }
  body[data-room-family] :is(.chapter-rail-toggle, .chapter-rail-back, .chapter-rail-hide) {
    min-height: var(--target-size);
    margin: 0;
    padding-inline: var(--space-2);
    border-radius: 2px;
  }
  body[data-room-family] .chapter-rail-list {
    position: absolute;
    inset-block-start: 100%;
    inset-inline: 0;
    z-index: var(--z-band-raised);
    padding: var(--space-3);
    border: 1px solid var(--rule);
    background: var(--paper);
    max-height: min(55svh, 28rem, calc(100svh - var(--band-block-size, 12rem) - 2 * var(--space-3)));
    overscroll-behavior: contain;
  }

  /* THE ROOM: the prose measure is not the table measure. All family material
     remains in document order, including margins, citations and source notes. */
  body[data-room-family] main > :is(.cold-entry, .threshold) {
    margin-block: var(--space-8);
    border-inline-start: 2px solid var(--brass);
    padding-inline: var(--space-4);
  }
  body[data-room-family] .table-scroll {
    border-block: 1px solid var(--rule);
    margin-block: var(--space-6);
  }
  body[data-room-family] .table-scroll :is(th, td) { line-height: 1.6; }
  body[data-room-family] .table-scroll th { text-align: start; }
  body[data-room-family] :is(.book-selector, .register-roads, .chapter-toc) {
    justify-content: flex-start;
    gap: var(--space-1) var(--space-2);
    border-block: 1px solid var(--rule);
    padding-block: var(--space-2);
    margin-block: var(--space-6);
  }
  body[data-room-family] :is(.book-selector, .register-roads, .chapter-toc, .anchor-row) a {
    min-height: var(--target-size);
    border-radius: 2px;
    transform: none;
    box-shadow: none;
  }
  body[data-room-family] :is(.book-selector, .register-roads, .chapter-toc) [aria-current] {
    text-decoration: underline double;
    text-underline-offset: 0.35em;
  }
  body[data-room-family="scripture"] .scripture-block {
    margin-block: var(--space-section);
  }
  body[data-room-family="scripture"] .chapter-heading {
    font-size: var(--step-1);
    letter-spacing: 0.025em;
    margin-block-start: var(--space-section);
  }
  body.site-page[data-room-family="register"]:not(.cell):not(.unwatched):not(.noise) > main { max-width: var(--measure-ledger); }
  body[data-room-family="register"] .shr-group { max-width: var(--measure-ledger); }
  body[data-room-family="register"] .heavenly-entry {
    max-width: 46rem;
    padding: var(--space-6) var(--space-4);
    margin-block: 0;
    border: 0;
    border-bottom: 1px solid var(--rule);
    border-radius: 0;
    background: none;
    box-shadow: none;
  }
  body[data-room-family="register"] .heavenly-entry h3 { margin-block: 0 var(--space-3); }
  body[data-room-family="communion"] .communion-entry {
    max-width: 46rem;
    border-radius: 0;
    box-shadow: none;
  }
  body[data-room="communion-by-name"] .communion-entry {
    border: 0;
    border-bottom: 1px solid var(--rule);
    background: none;
    margin-block: 0;
    padding: var(--space-3) 0;
  }
  body[data-room="communion-by-name"] .communion-entry h3 { margin: 0; }
  body[data-room="communion-by-name"] .communion-entry h3 a {
    display: inline-flex;
    align-items: center;
    min-height: var(--target-size);
  }
  body[data-room-family="ministries"] .ministry-artifact { max-width: 48rem; }
  body[data-room-family="ministries"] .ministry-table { max-width: none; }
  body[data-room-family="ministries"] :is(.ministry-lore, .ministry-crossing) { margin-block: var(--space-section); }
  body[data-room-family="record"] main > section { max-width: 48rem; margin-inline: auto; }
  body[data-room-family="record"] main > section > p { max-width: var(--measure-prose); }
  body[data-room-family="understanding"] .atlas-wing { border-radius: 0; box-shadow: none; }
  body[data-room-family="practice"] :is(.diary-tool, .refusal-tool) { border-radius: 2px; box-shadow: none; }

  /* DEPARTURE: contextual roads first, complete twenty-five-door sitemap last.
     No door is lost and no new content is substituted for the dismissal. */
  body[data-room-family] .pager.onward {
    gap: 0 var(--space-6);
    border-block: 1px solid var(--rule);
    padding-block: var(--space-4);
    margin-block-start: var(--space-section);
  }
  body[data-room-family] .pager.onward a {
    padding: var(--space-4) 0;
    border: 0;
    border-radius: 0;
    box-shadow: none;
    transform: none;
  }
  body.site-page[data-room-family] .quiet-nav {
    position: static;
    border-radius: 2px;
    background: var(--paper);
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    padding: var(--space-4);
    margin-block-start: var(--space-section);
  }
  body.site-page[data-room-family] .quiet-nav a {
    border-radius: 2px;
    text-shadow: none;
    box-shadow: none;
    transform: none;
  }
  body.site-page[data-room-family] .quiet-nav a[aria-current] { text-decoration: underline double; }
  body[data-room-family].focus-reading .room-header { position: relative; border-color: transparent; }
  body[data-room-family].focus-reading .reader-instruments { grid-area: tools; }
}

@media screen and (min-width: 64rem) {
  body[data-room-family] .room-header {
    grid-template-areas: "brand primary tools" "rail rail rail";
    grid-template-columns: minmax(9rem, 1fr) auto auto;
  }
  body[data-room-family] .room-header > nav[aria-label="Primary"] { justify-content: flex-end; }
  body[data-room-family] .chapter-rail-now { flex: 1 1 12rem; }
}

@media screen and (min-width: 72rem) {
  /* The location trail adds one full-width row to the existing dossier folio.
     Keep the portrait/word beside the introduction, never above the title. */
  body.communion[data-room-family] main > .saint-portrait { grid-row: 4 / span 5; }
}

@media screen and (max-width: 40rem) {
  body[data-room-family] .chapter-rail-now { flex-basis: 100%; }
  body[data-room-family] .chapter-rail[data-kind="chapter"] .chapter-rail-label { display: none; }
  body[data-room-family] .reader-instruments-panel { width: calc(100vw - 2 * var(--edge)); }
}

/* A short landscape viewport must never be occupied by a pinned navigation
   band. The static location trail and instruments remain in document flow. */
@media screen and (max-height: 32rem) {
  body[data-room-family] .room-header { position: relative; }
}

@media (forced-colors: active) {
  body[data-room-family] :is(.room-header, .reader-instruments-panel, .chapter-rail-list, .table-scroll, .guide-strip) { border-color: CanvasText; }
  body[data-room-family] :where(a, button, summary, input, select, textarea):focus-visible { outline-color: Highlight; }
}

@media (prefers-reduced-motion: reduce) {
  /* Stillness is absence of motion, not the inherited 0.01ms transition. */
  html[data-architecture="house"] body.site-page[data-room-family] *,
  html[data-architecture="house"] body.site-page[data-room-family] *::before,
  html[data-architecture="house"] body.site-page[data-room-family] *::after {
    animation: none !important;
    transition: none !important;
  }
  /* effects.css's :has(sky) field is more specific than its older stillness
     rule. Keep the existing dust texture static, rather than remove it. */
  html[data-architecture="house"] body.site-page[data-room-family]::after {
    animation: none;
    transition: none;
  }
}

@media print {
  .room-location, .room-road-note, .reader-instruments { display: none !important; }
}
