/* Typography roles are scoped: the frozen main sanctuary retains its own font system. */
:root {
  --font-brand: "Memorial Serif", serif;
  --font-memorial: "Memorial Serif", "Noto Serif SC", serif;
  --font-ui: "Segoe UI", "Microsoft YaHei UI", "Microsoft YaHei", "PingFang SC", system-ui, sans-serif;
  --type-display-size: 30px; --type-display-weight:400; --type-display-line:1.3; --type-display-space:.16em;
  --type-page-size:30px; --type-page-weight:500; --type-page-line:1.4; --type-page-space:.045em;
  --type-section-size:22px; --type-section-weight:500; --type-section-line:1.55; --type-section-space:.025em;
  --type-body-size:15px; --type-body-weight:400; --type-body-line:1.95; --type-body-space:.01em;
  --type-label-size:13px; --type-label-weight:500; --type-label-line:1.6; --type-label-space:.015em;
  --type-caption-size:12px; --type-caption-weight:400; --type-caption-line:1.8; --type-caption-space:.01em;
  --type-data-size:14px; --type-data-weight:500; --type-data-line:1.6; --type-data-space:0;
  --type-button-size:14px; --type-button-weight:500; --type-button-line:1.5; --type-button-space:.02em;
  --type-subtitle-size:17px; --type-subtitle-weight:600;
  --type-metric-size:34px; --type-field-size:15px;
  --type-ink:#352e27; --type-secondary:#74695d; --type-caption:#837567; --type-brand:#654a2d;
}
@media(max-width:580px) {
 :root {--type-page-size:26px;--type-section-size:21px;--type-metric-size:28px;--type-field-size:16px;}
}
/* Public UI round 01. No selectors reach the frozen sanctuary, its rail or its first-screen nav. */
.public-surface {
  --ink:#332d29; --muted:#786d63; --gold:#82643e; --line:#dcd3c7; --panel:#fcfaf6;
  color:var(--ink); color-scheme:light;
  font-family:var(--font-ui);
  font-size:var(--type-body-size); line-height:var(--type-body-line); font-weight:var(--type-body-weight); letter-spacing:var(--type-body-space); font-variant-numeric:tabular-nums;
}
body.public-page {background:#eeeae3; color:#332d29;}
.public-page .top {border-bottom:1px solid #d8cec0; padding-block:22px;}
.public-page .brand {color:#654a2d;}
.public-page :is(.brand span,#identity) {color:#796d60;}
.public-page #nav a {color:#74695f;}
.public-page #nav a.active {color:#684c2c; border-color:#947447;}
.public-page #identity button {background:transparent; border-color:#cfc3b4; color:#574638;}
.public-page footer {border-color:#d8cec0; color:#796c5e;}
.public-page footer a {color:#6b5032;}
.public-surface :is(h1,h2,h3):not(.template-preview *) {color:#352d25;letter-spacing:.04em;}
.public-surface h1:not(.template-preview *) {font-size:var(--type-page-size);line-height:1.4;font-weight:500;}
.public-surface h2:not(.template-preview *) {font-size:var(--type-section-size);line-height:1.5;margin-bottom:24px;}
.public-surface h3:not(.template-preview *) {font-size:var(--type-subtitle-size);line-height:1.6;font-weight:600;}
.public-surface p {line-height:1.9;}
.public-surface small {font-size:var(--type-caption-size);line-height:1.8;}
.public-surface .eyebrow {color:#8b7356;letter-spacing:.16em;font-size:10px;}
.public-surface .heading {margin-bottom:32px;align-items:center;}
.public-surface .heading p {color:#817265;font-size:var(--type-button-size);}
.public-surface .card {background:var(--panel);border:0;border-radius:4px;padding:30px;}
.public-surface .sidebar {background:transparent;padding:8px 0;}
.public-surface .workspace {grid-template-columns:196px minmax(0,1fr);gap:32px;}
.public-surface .sidebar button {color:#77695b;padding:12px 16px;min-height:46px;border-radius:0;}
.public-surface .sidebar button.selected {color:#4c3823;background:#e3d9c9;border-left:2px solid #8b6b3e;font-weight:600;}
.public-surface .sidebar button:hover {background:#e8e0d6;}
.public-surface .sidebar .side-tabs button:not(.template-choice) {border:0;border-radius:0;font-family:var(--font-ui);}
@media(min-width:901px) {
 .public-surface .sidebar {background:#302922;padding:16px 0;border-radius:3px;}
 .public-surface .sidebar > label {padding:4px 16px 16px;color:#c9baa3;}
 .public-surface .sidebar .side-tabs button:not(.template-choice) {color:#c9bba5;padding:12px 20px;}
 .public-surface .sidebar .side-tabs button.selected:not(.template-choice) {background:#55442f;color:#f6e7cd;border-left:2px solid #c4a36c;}
 .public-surface .sidebar .side-tabs button:hover:not(.template-choice) {background:#493c2e;color:#f6e7cd;}
}
.public-surface label {color:#63564a;font-size:var(--type-label-size);line-height:1.65;}
.public-surface :is(input,select,textarea):not([type=checkbox]):not([type=range]):not([type=file]) {
  background:#fffefa;border:1px solid #cfc4b5;color:#352d25;border-radius:4px;min-height:46px;
  padding:11px 13px;margin-top:8px;font-size:var(--type-body-size);line-height:1.55;
}
.public-surface input::placeholder,.public-surface textarea::placeholder {color:#998d80;}
.public-surface :is(input,select,textarea):focus-visible {outline:2px solid #967448;outline-offset:2px;border-color:#967448;}
.public-surface :is(input,select,textarea):disabled {background:#eee9e1;color:#958a7d;cursor:not-allowed;}
.public-surface input[type=checkbox] {accent-color:#80613b;}
.public-surface textarea {min-height:130px;}
.public-surface .form {gap:23px;}
.public-surface .field-grid {gap:23px 26px;}
.public-surface .form > button[type=submit] {justify-self:start;min-width:136px;}
.public-surface :is(button,.button):not(.template-choice):not(.template-preview *) {
  background:transparent;color:#735733;border:1px solid #c7b9a5;border-radius:4px;padding:10px 17px;min-height:44px;font:inherit;font-size:var(--type-button-size);line-height:1.5;
}
.public-surface :is(button,.button):hover:not(.template-choice):not(.template-preview *) {background:#eee7db;border-color:#9a805c;}
.public-surface button.primary {background:#795c36!important;color:#fff9ec!important;border-color:#795c36!important;font-weight:600!important;}
.public-surface button.primary:hover {background:#654a2a!important;}
.public-surface button.danger {color:#994d42!important;border-color:#d8bfb8!important;background:transparent!important;}
.public-surface button:disabled {opacity:.5;cursor:not-allowed;}
.public-surface button.link {border:0;padding:6px 0;}
.public-surface .notice {background:#efe6d6;border-left:2px solid #a4895d;color:#716047;padding:14px 18px;font-size:var(--type-label-size);line-height:1.85;}
.public-surface .error {color:#a14136;}
.public-surface .empty {padding:40px 24px;border-block:1px solid #e5dcd0;line-height:1.9;color:#867769;max-width:100%;}
.public-surface .entry {padding:24px 0;border-bottom-color:#e2d8cb;}
.public-surface .entry p {font-size:var(--type-body-size);line-height:1.95;}
.public-surface .entry .reply {background:#eee7dc;padding:14px 18px;border-left:2px solid #b79c75;color:#73604a;margin-top:18px;}
.public-surface .badge {font:var(--type-label-weight) var(--type-caption-size)/var(--type-label-line) var(--font-ui);border:0;background:#eae1d4;color:#755e3f;padding:4px 10px;border-radius:3px;}
.public-surface [data-state=success] {color:#49644f;}
.public-surface [data-state=pending] {color:#8a682b;}
.public-surface [data-state=error] {color:#9c4d42;}
.public-surface [data-state=neutral] {color:#7c7369;}
.public-surface .badge[data-state=success] {background:#e5ebe3;}
.public-surface .badge[data-state=error] {background:#f1e3dd;}
.public-surface .badge[data-state=pending] {background:#f1e9d6;}
.public-surface .stat-grid {gap:1px;background:#ddd2c2;border-radius:4px;overflow:hidden;}
.public-surface .stat-grid .card {border-radius:0;padding:24px;}
.public-surface .stat-grid .card:first-child {background:#e9dfcf;}
.public-surface .metric {font:var(--type-data-weight) var(--type-metric-size)/1.3 var(--font-ui);color:#55422c;font-variant-numeric:tabular-nums;margin-top:16px;}
.public-surface table {font:var(--type-body-weight) var(--type-data-size)/var(--type-data-line) var(--font-ui);color:#433a32;}
.public-surface :is(td,th) {padding:17px 14px;border-bottom:1px solid #e4dcd2;white-space:normal;overflow-wrap:anywhere;}
.public-surface th {background:#eee8de;color:#7c6a56;font-weight:500;font-size:var(--type-caption-size);white-space:nowrap;}
.public-surface tbody tr:hover {background:#f3eee5;}
.public-surface td.wrap {min-width:0;}
.public-surface table :is(button,.button) {padding:6px 9px!important;min-height:34px!important;font-size:var(--type-caption-size)!important;border-color:transparent!important;}
.public-surface table .row {gap:4px;}
.public-surface table code {font:12px/1.7 ui-monospace,monospace;color:#7c7165;}
.public-surface .table-wrap {margin-top:22px;}
.public-surface .capacity-summary {grid-template-columns:repeat(3,minmax(0,1fr));gap:0;border-block:1px solid #dfd4c3;padding:12px 0;}
.public-surface .capacity-summary span {border:0;padding:10px 14px;font-size:var(--type-label-size);color:#756146;}
.public-surface table .capacity-summary {display:block;border:0;margin:0;padding:0;min-width:135px;}
.public-surface table .capacity-summary span {display:block;padding:2px 0;font-size:var(--type-caption-size);}
.public-surface progress {accent-color:#91754b;height:6px;margin:20px 0;}
.public-surface .album {margin-top:30px;gap:22px;}
.public-surface .media-card {border:0;background:#f2ede5;padding:12px;border-radius:3px;}
.public-surface .media-card h3 {margin:16px 0 8px;}
.public-surface .media-card img,.public-surface .media-card video {background:#e8e1d7;}
.public-surface #upload {padding:24px;background:#f2ede4;border-top:1px solid #dfd1bc;margin:24px 0 8px;}
.public-surface #category-form {margin-top:34px;padding-top:24px;border-top:1px solid #dfd1bc;}
.public-surface .file-picker {display:flex;align-items:center;flex-wrap:wrap;gap:12px;margin-top:10px;padding:16px;border:1px dashed #bca88a;background:#fffdf7;}
.public-surface .file-trigger {position:relative;display:inline-flex;align-items:center;min-height:44px;padding:10px 16px;background:#e6d8c2;color:#614b2d;border:1px solid #bfa782;border-radius:3px;cursor:pointer;}
.public-surface .file-trigger:focus-within {outline:2px solid #967448;outline-offset:3px;}
.public-surface .file-trigger input[type=file] {position:absolute;inset:0;width:100%;height:100%;opacity:0;margin:0;padding:0;cursor:pointer;}
.public-surface .file-name {font-size:var(--type-label-size);color:#84705a;overflow-wrap:anywhere;flex:1;min-width:100px;}
.public-surface .upload-feedback {font-size:var(--type-label-size);margin:0;padding:10px 0;}
.public-surface #upload:has(.upload-feedback) + #upload-status {display:none;}
.public-surface .memorial-audio {background:#ede5d8;border:0;border-left:2px solid #a68c63;padding:20px;margin:18px 0;min-width:0;}
.public-surface .audio-title {font-family:var(--font-memorial);font-size:var(--type-subtitle-size);color:#554632;line-height:1.7;margin-bottom:18px;}
.public-surface .audio-card:has(> .memorial-audio) > h3 {display:none;}
.public-surface .audio-controls {display:flex;align-items:center;gap:18px;}
.public-surface .audio-toggle {background:#7a603c!important;color:#fff9ec!important;border:0!important;flex:none;min-width:64px;}
.public-surface .audio-controls input {min-height:32px;margin:0;padding:0;accent-color:#896a3b;width:100%;min-width:0;}
.public-surface .audio-meta {display:flex;justify-content:space-between;gap:12px;margin-top:14px;color:#84715a;font-size:var(--type-caption-size);font-variant-numeric:tabular-nums;}
.public-surface .audio-time {white-space:nowrap;}
.public-surface .login {max-width:480px;padding:44px 38px;border-top:3px solid #9b7a4e;margin:40px auto;}
.public-surface .login h1 {font-family:var(--font-memorial);font-size:28px;letter-spacing:.05em;}
.public-surface .login .notice {background:transparent;padding:0;border:0;color:#8a7c6d;}
.public-surface .login form > button {width:100%;}
.public-surface .hall-card {border-top:2px solid #b1966e;}
dialog.public-surface {background:#fcfaf6;border:1px solid #c7b491;padding:38px;width:600px;max-width:calc(100vw - 28px);}
dialog.public-surface .close {position:sticky;float:right;top:-24px;padding:0 7px!important;min-height:32px!important;border:0!important;background:#fcfaf6!important;z-index:2;}
dialog.public-surface:has(#poster-canvas) {width:470px;}
.public-surface .poster-canvas {max-height:62vh;width:auto;max-width:100%;display:block;margin:0 auto;}
.public-surface:has(#poster-canvas) h2 {font-size:var(--type-section-size);margin-bottom:18px;}
.public-surface:has(#poster-canvas) p {font-size:var(--type-caption-size);}
.public-surface .offering-list button {background:#eee5d7;}
.public-surface .legal-copy {max-width:760px;font-size:var(--type-body-size);line-height:2.15;}
.admin-page .public-surface h2 {font-family:var(--font-ui);font-weight:600;font-size:var(--type-section-size);}
.admin-page .public-surface #hall-filter {grid-template-columns:1fr auto;align-items:end;}
.admin-page .public-surface #hall-filter .field-grid {grid-template-columns:repeat(3,minmax(0,1fr));gap:14px 22px;}
.admin-page .public-surface #hall-statistics {display:flex;gap:22px;flex-wrap:wrap;margin-top:20px;color:#8a7a66;font-size:var(--type-caption-size);}
.admin-page .public-surface #hall-statistics p {margin:0;}
/* Sanctuary preview DOM remains in its original visual system. */
.public-surface .template-preview {font-family:var(--font-memorial);color:#e9e1d5;--gold:#d4b982;--muted:#ad9f95;line-height:normal;color-scheme:dark;}
.public-surface .template-choice {background:#f8f4ed;border:1px solid #ddd0ba;color:#5f4b31;border-radius:3px;}
.public-surface .template-choice strong {font:500 16px/1.7 "Memorial Serif",serif;padding:14px 14px 0;}
.public-surface .template-choice small {color:#8a7659;padding:2px 14px 14px;}
.public-surface .template-choice.selected {outline:2px solid #9b7a47;outline-offset:2px;}
/* Memorial reading area: quiet paper-like content, surrounded by the existing deep brown. */
#visit-panel.public-surface {background:#f3eee4;border:0;max-width:880px;width:calc(100% - 48px);align-self:center;padding:48px 54px;margin:32px auto;color:#514432;}
#visit-panel > h2:first-of-type {font-size:var(--type-page-size);margin-bottom:30px;}
#visit-panel .reading-brand {font:var(--type-caption-weight) var(--type-caption-size)/var(--type-caption-line) var(--font-ui);letter-spacing:.12em;color:#968064;margin-bottom:16px;}
#visit-panel .biography {font-family:var(--font-ui);font-size:var(--type-body-size);line-height:var(--type-body-line);letter-spacing:var(--type-body-space);}
#visit-panel .family-teaching {border:0;border-left:2px solid #ab9066;background:#e8decc;padding:26px 30px;margin:34px 0 48px;}
#visit-panel .family-teaching h2 {font-size:var(--type-subtitle-size);margin-bottom:12px;}
#visit-panel .family-teaching .biography {font-size:var(--type-body-size);}
#visit-panel .category-filter {gap:8px;margin:22px 0;}
#visit-panel .category-filter button {font-size:var(--type-label-size);min-height:38px;padding:8px 13px;}
#visit-panel .category-filter button.selected {background:#80643f;color:#fff9e9;}
#visit-panel .timeline {border-color:#bba47e;padding-left:28px;}
#visit-panel .timeline time {color:#8f7147;letter-spacing:.06em;}
#visit-panel .timeline .entry:before {background:#9b7b4d;left:-33px;}
#visit-panel .grave-info {gap:16px;line-height:1.8;}
#visit-panel #comment {margin-bottom:20px;}
#visit-panel #comment .row {justify-content:space-between;}
#visit-panel #comment select {width:auto;max-width:100%;}
.visit-reading .visit-bottom-nav {background:#241e1b;backdrop-filter:none;border-color:#69543c;}
.visit-reading .visit-bottom-nav button {font:var(--type-button-weight) var(--type-button-size)/var(--type-button-line) var(--font-ui);min-height:48px;padding:12px 15px;color:#b3a58e;}
.visit-reading .visit-bottom-nav button.selected {color:#f2dfb8;background:#3c3024;border-top-color:#bc9a61;}
@media(max-width:900px) {
 .public-surface .workspace {grid-template-columns:1fr;gap:24px;}
 .public-surface .sidebar {padding:0;min-width:0;}
 .public-surface .sidebar .side-tabs {padding:4px 0 10px;gap:4px;scroll-padding-inline:12px;scrollbar-width:thin;}
 .public-surface .sidebar .side-tabs {scroll-snap-type:x mandatory;}
 .public-surface .sidebar .side-tabs button:not(.template-choice) {flex:0 0 calc((100% - 8px)/3);white-space:normal;text-align:center;scroll-snap-align:start;font-size:var(--type-button-size);padding:10px 8px;min-height:54px;}
 .public-surface .sidebar button.selected {border-left:0;border-bottom:2px solid #8b6b3e;}
}
@media(max-width:580px) {
 .public-page .top {padding:18px 20px;}
 main#app.public-surface {padding:28px 18px 46px;}
 .public-surface .heading {align-items:flex-start;margin-bottom:24px;gap:14px;}
 .public-surface .heading h1 {font-size:var(--type-page-size);}
 .public-surface .heading .row {gap:6px;max-width:132px;}
 .public-surface .heading .row :is(button,.button) {padding:8px 10px;font-size:var(--type-caption-size);}
 .public-surface .card {padding:24px 20px;}
 .public-surface h2:not(.template-preview *) {font-size:var(--type-section-size);margin-bottom:24px;}
 .public-surface .login {margin:16px auto;padding:30px 24px;}
 .public-surface .login h1 {font-size:var(--type-page-size);}
 .public-surface .field-grid {gap:22px;}
 .public-surface .form > button[type=submit] {width:100%;}
 .public-surface .capacity-summary {grid-template-columns:1fr 1fr;}
 .public-surface .capacity-summary span {padding:8px 6px;font-size:var(--type-caption-size);}
 .public-surface #upload {padding:20px 14px;}
 .public-surface .file-picker {padding:12px;flex-direction:column;align-items:stretch;}
 .public-surface .file-trigger {justify-content:center;}
 .public-surface .file-name {min-width:0;}
 .public-surface .memorial-audio {padding:18px 14px;}
 .public-surface .audio-card {grid-column:1/-1;}
 .public-surface .audio-meta {flex-wrap:wrap;gap:4px 10px;}
 .public-surface .stat-grid {gap:1px;}
 .public-surface .stat-grid .card {padding:20px 16px;}
 .public-surface .metric {font-size:28px;}
 .public-surface .table-wrap {overflow:visible;}
 .public-surface table,.public-surface tbody {display:block;width:100%;}
 .public-surface thead {position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);}
 .public-surface tbody tr {display:block;padding:18px 0;border-bottom:1px solid #ddd1c0;}
 .public-surface td {display:grid;grid-template-columns:70px minmax(0,1fr);gap:5px 12px;padding:6px 0;border:0;min-width:0;font-size:var(--type-label-size);white-space:normal;}
 .public-surface td:before {content:attr(data-label);color:#9a856a;font-size:var(--type-caption-size);}
 .public-surface td > * {min-width:0;}
 .public-surface td > :nth-child(n+2) {grid-column:2;}
 .public-surface td br {display:none;}
 .public-surface td.empty {display:block;text-align:left;}
 .public-surface td.empty:before {content:none;}
 .public-surface td .row {gap:4px;}
 .public-surface table .capacity-summary {min-width:0;display:grid;grid-template-columns:1fr 1fr;gap:2px 6px;}
 .public-surface table .capacity-summary span {font-size:var(--type-caption-size);}
 .admin-page .public-surface #hall-filter {display:block;}
 .admin-page .public-surface #hall-filter .field-grid {grid-template-columns:1fr 1fr;gap:16px 12px;}
 .admin-page .public-surface #hall-filter button {margin-top:20px;}
 .admin-page .public-surface #hall-statistics {gap:3px;display:block;}
 dialog.public-surface {padding:26px 22px;max-height:92vh;}
 #visit-panel.public-surface {width:calc(100% - 24px);margin:24px auto;padding:30px 24px;}
 #visit-panel > h2:first-of-type {font-size:var(--type-page-size);margin-bottom:24px;}
 #visit-panel .biography {font-size:var(--type-body-size);line-height:2.15;}
 #visit-panel .family-teaching {padding:22px 18px;margin:28px 0 34px;}
 .visit-reading .visit-bottom-nav {display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;padding:5px 10px;overflow:visible;}
 .visit-reading .visit-bottom-nav button {padding:11px 3px;min-height:44px;font-size:var(--type-button-size);white-space:nowrap;}
}

/* Role assignments: brand > page > section > body, with separate utility/data treatment. */
body.public-page {font-family:var(--font-ui);}
.public-page .brand {font-family:var(--font-brand);font-size:var(--type-display-size);font-weight:var(--type-display-weight);line-height:var(--type-display-line);letter-spacing:var(--type-display-space);color:var(--type-brand);}
.public-page :is(#nav,#identity,footer) {font-family:var(--font-ui);}
.public-surface h1:not(.template-preview *) {font-family:var(--font-memorial);font-size:var(--type-page-size);font-weight:var(--type-page-weight);line-height:var(--type-page-line);letter-spacing:var(--type-page-space);color:var(--type-ink);}
.public-surface h2:not(.template-preview *) {font-family:var(--font-ui);font-size:var(--type-section-size);font-weight:var(--type-section-weight);line-height:var(--type-section-line);letter-spacing:var(--type-section-space);color:var(--type-ink);}
.public-surface h3:not(.template-preview *) {font-family:var(--font-ui);font-size:var(--type-subtitle-size);font-weight:var(--type-subtitle-weight);line-height:var(--type-section-line);letter-spacing:var(--type-section-space);}
.public-surface :is(p,.biography,.entry p):not(.template-preview *) {font-family:var(--font-ui);font-size:var(--type-body-size);font-weight:var(--type-body-weight);line-height:var(--type-body-line);letter-spacing:var(--type-body-space);}
.public-surface label {font-family:var(--font-ui);font-size:var(--type-label-size);font-weight:var(--type-label-weight);line-height:var(--type-label-line);letter-spacing:var(--type-label-space);color:var(--type-secondary);}
.public-surface :is(small,.audio-note,.audio-meta,.reading-brand,.heading p,.upload-feedback,.file-name,.notice) {font-family:var(--font-ui);font-size:var(--type-caption-size);font-weight:var(--type-caption-weight);line-height:var(--type-caption-line);letter-spacing:var(--type-caption-space);}
.public-surface :is(input,select,textarea):not([type=checkbox]):not([type=range]):not([type=file]) {font-family:var(--font-ui);font-size:var(--type-field-size);font-weight:400;line-height:1.6;letter-spacing:0;}
.public-surface :is(button,.button):not(.template-choice):not(.template-preview *) {font-family:var(--font-ui);font-size:var(--type-button-size);font-weight:var(--type-button-weight);line-height:var(--type-button-line);letter-spacing:var(--type-button-space);}
.public-surface :is(time,.metric,.capacity-summary,.audio-time,.status-cell,td) {font-family:var(--font-ui);font-variant-numeric:tabular-nums;letter-spacing:var(--type-data-space);}
.public-surface time {font-size:var(--type-data-size);font-weight:var(--type-data-weight);line-height:var(--type-data-line);}
#visit-panel.public-surface h2, #visit-panel .audio-title, .public-surface .hall-card h2, dialog.public-surface h2 {font-family:var(--font-memorial);font-weight:400;}
.admin-page .public-surface :is(h1,h2,h3) {font-family:var(--font-ui);}
.public-surface .muted {color:var(--type-secondary);}
.public-surface .metric {font-size:var(--type-metric-size);}
