/* The Calling of Nor: component stylesheet. Load after tokens.css. Classes are prefixed nor-. */
@import url('https://fonts.googleapis.com/css2?family=Alegreya:ital,wght@0,400..900;1,400..900&family=Alegreya+Sans:ital,wght@0,400;0,500;0,700;0,800;1,400;1,500&family=Alegreya+Sans+SC:wght@500;700&family=Piazzolla:ital,opsz,wght@0,8..30,400..900;1,8..30,400..900&display=swap');

/* ── Icons: <span class="nor-i nor-i-seal" aria-hidden="true"></span>, colored by `color` ── */
.nor-i {
  display: inline-block; flex: none; width: 20px; height: 20px; vertical-align: -4px;
  background-color: currentColor;
  -webkit-mask: var(--nor-i) center / contain no-repeat;
  mask: var(--nor-i) center / contain no-repeat;
}
.nor-i-blades { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cpath d='M4 4 15 15M20 4 9 15M13 17l4-4M7 13l4 4M16.5 16.5 20 20M7.5 16.5 4 20'/%3E%3C/svg%3E"); }
.nor-i-check { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cpath d='M5 12.5 10 17.5 19 6.5'/%3E%3C/svg%3E"); }
.nor-i-crack { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Ccircle cx='12' cy='12' r='8.75'/%3E%3Cpath d='M12.5 3.25 10.5 9l3.25 3-2.5 4.5 1 4.25'/%3E%3C/svg%3E"); }
.nor-i-cross { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cpath d='M6 6 18 18M18 6 6 18'/%3E%3C/svg%3E"); }
.nor-i-eclipse { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cmask id='ye'%3E%3Crect width='24' height='24' fill='%23fff'/%3E%3Ccircle cx='10.25' cy='12' r='7.25' fill='%23000'/%3E%3C/mask%3E%3Ccircle cx='13.75' cy='12' r='7.25' fill='%23000' stroke='none' mask='url%28%23ye%29'/%3E%3Ccircle cx='10.25' cy='12' r='7.25'/%3E%3C/svg%3E"); }
.nor-i-info { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Ccircle cx='12' cy='12' r='8.75'/%3E%3Cpath d='M12 10.75V17M12 7v1.75'/%3E%3C/svg%3E"); }
.nor-i-lamp { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cpath d='M10 8V6.25a2 2 0 0 1 4 0V8M7 8h10M8 8l1 11h6l1-11M8 21h8'/%3E%3Cpath d='M12 16.25c-1.25-1-1.25-2.75 0-4.25 1.25 1.5 1.25 3.25 0 4.25Z'/%3E%3C/svg%3E"); }
.nor-i-quill { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cpath d='M20 3.5C13 4.5 8.5 9 7 16c7-1 11.5-5.5 13-12.5Z'/%3E%3Cpath d='M20 3.5 9.75 13.75M7 16l-2.75 4.75'/%3E%3C/svg%3E"); }
.nor-i-record { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Ccircle cx='12' cy='12' r='8.75'/%3E%3Ccircle cx='12' cy='12' r='3.75' fill='%23000' stroke='none'/%3E%3C/svg%3E"); }
.nor-i-relic { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cpath d='M12 1.75 20.5 10.5 12 22.25 3.5 10.5Z'/%3E%3Cpath d='M12 1.75 10 13 12 22.25M3.5 10.5 10 13 20.5 10.5'/%3E%3C/svg%3E"); }
.nor-i-scroll { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Crect x='3.5' y='3' width='17' height='3.5' rx='1.75'/%3E%3Crect x='3.5' y='17.5' width='17' height='3.5' rx='1.75'/%3E%3Cpath d='M5.5 6.5v11M18.5 6.5v11M8.5 10h7M8.5 13.5h4.5'/%3E%3C/svg%3E"); }
.nor-i-seal { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Ccircle cx='12' cy='12' r='8.75'/%3E%3Ccircle cx='12' cy='10' r='2'/%3E%3Cpath d='M11.1 11.8 10.25 16.25h3.5L12.9 11.8'/%3E%3C/svg%3E"); }
.nor-i-search { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Ccircle cx='10.5' cy='10.5' r='6.25'/%3E%3Cpath d='M15 15l5.5 5.5'/%3E%3C/svg%3E"); }
.nor-i-shard { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cpath d='M12 2.5 19.5 12 9 21.5 4.5 11.5Z'/%3E%3Cpath d='M12 2.5 9 21.5'/%3E%3C/svg%3E"); }
.nor-i-thread { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cpath d='M3 17.5c3.5 0 4-10.5 7.75-10.5S14.5 15 18 13.5'/%3E%3Cpath d='M18 13.5 21 10.75M18 13.5l3.25.5M18 13.5l1.75 3.25'/%3E%3C/svg%3E"); }
.nor-i-tome { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cpath d='M12 6.5C9.5 4.75 6.5 4.5 3.5 5v13.5c3-.5 6-.25 8.5 1.5 2.5-1.75 5.5-2 8.5-1.5V5c-3-.5-6-.25-8.5 1.5Z'/%3E%3Cpath d='M12 6.5V20'/%3E%3C/svg%3E"); }
.nor-i-warn { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cpath d='M12 3.5 21 19.5H3Z'/%3E%3Cpath d='M12 9.5V14M12 16v1.75'/%3E%3C/svg%3E"); }
.nor-i-waypoint { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cpath d='M12 21.5S5.5 14.8 5.5 9.75a6.5 6.5 0 0 1 13 0C18.5 14.8 12 21.5 12 21.5Z'/%3E%3Ccircle cx='12' cy='9.75' r='2.25'/%3E%3C/svg%3E"); }
.nor-i-banner { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cpath d='M6 21V3.5M6 4.5h12l-3 4 3 4H6'/%3E%3C/svg%3E"); }
.nor-i-claw { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cpath d='M6 4c3 4 3.5 9.5 1.25 16M11.25 3c3 4.5 3.5 10.5 1.25 18M16.5 4c3 4 3.5 9.5 1.25 16'/%3E%3C/svg%3E"); }
.nor-i-hourglass { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cpath d='M6.5 3.5h11M6.5 20.5h11M7.75 3.5V6c0 3 4.25 4 4.25 6s-4.25 3-4.25 6v2.5M16.25 3.5V6c0 3-4.25 4-4.25 6s4.25 3 4.25 6v2.5'/%3E%3C/svg%3E"); }
.nor-i-person { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Ccircle cx='12' cy='8' r='3.75'/%3E%3Cpath d='M4.5 20.5c0-4.25 3.25-7 7.5-7s7.5 2.75 7.5 7'/%3E%3C/svg%3E"); }
.nor-i-spark { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cpath d='M12 3c.6 4.8 2.2 7.4 7 9-4.8 1.6-6.4 4.2-7 9-.6-4.8-2.2-7.4-7-9 4.8-1.6 6.4-4.2 7-9Z'/%3E%3C/svg%3E"); }
.nor-i-sword { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cpath d='M12 2.75 13.75 5v9.5h-3.5V5Z'/%3E%3Cpath d='M7 14.5h10M12 14.5v4.25'/%3E%3Ccircle cx='12' cy='20' r='1.25'/%3E%3C/svg%3E"); }
.nor-i-temple { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cpath d='M3.5 9 12 4l8.5 5ZM6.5 9v9.5M10 9v9.5M14 9v9.5M17.5 9v9.5M4 20.5h16'/%3E%3C/svg%3E"); }
.nor-i-tower { --nor-i: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' width='24' height='24' fill='none' stroke='%23000' stroke-width='1.5' stroke-linejoin='miter' stroke-linecap='butt'%3E%3Cpath d='M7 21V9h10v12M5 21h14M7 9V4.5h2v2h2v-2h2v2h2v-2h2V9M10.5 21v-4a1.5 1.5 0 0 1 3 0v4'/%3E%3C/svg%3E"); }

/* ── Base ──────────────────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; }
html {
  background: var(--ground);
  color: var(--ink);
  font-family: var(--font-serif);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}
body { margin: 0; }
::selection { background: color-mix(in srgb, var(--lumo) 38%, transparent); color: var(--ink); }
:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
  outline: 2px solid var(--focus);
  outline-offset: 2px;
}
.nor-visually-hidden {
  position: absolute; width: 1px; height: 1px; overflow: hidden;
  clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap;
}

/* Film grain: the grit over every page. Put it on <body>. */
.nor-grain::after {
  content: ""; position: fixed; inset: 0; z-index: 2147483000; pointer-events: none;
  opacity: .05;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  background-size: 200px 200px;
}

/* Shared text roles */
.nor-eyebrow {
  margin: 0;
  font: 700 15px/18px var(--font-caps);
  letter-spacing: .08em;
  color: var(--ink-muted);
}
.nor-eyebrow > span + span::before { content: "\00b7"; margin: 0 .5em; color: var(--ink-faint); }
.nor-meta { font: 500 13px/18px var(--font-sans); color: var(--ink-faint); }

/* ── Kindle: the light gathering (loading) ─────────────────────────────── */
.nor-kindle { display: inline-block; width: 20px; height: 20px; flex: none; vertical-align: -4px; color: var(--lumo-text); }
.nor-kindle path { fill: currentColor; opacity: .16; animation: nor-kindle 1.6s linear infinite; }
.nor-kindle path:nth-child(2) { animation-delay: .2s; }
.nor-kindle path:nth-child(3) { animation-delay: .4s; }
.nor-kindle path:nth-child(4) { animation-delay: .6s; }
.nor-kindle path:nth-child(5) { animation-delay: .8s; }
.nor-kindle path:nth-child(6) { animation-delay: 1s; }
.nor-kindle path:nth-child(7) { animation-delay: 1.2s; }
.nor-kindle path:nth-child(8) { animation-delay: 1.4s; }
@keyframes nor-kindle { 0% { opacity: 1; } 55%, 100% { opacity: .16; } }

/* ── Button ────────────────────────────────────────────────────────────── */
.nor-btn {
  --nor-cut: var(--cut-sm);
  position: relative; isolation: isolate;
  display: inline-flex; align-items: center; justify-content: center; gap: var(--space-2);
  min-height: 40px; padding: 8px 18px;
  font: 700 15px/22px var(--font-sans); letter-spacing: .01em;
  color: var(--ink); background: var(--ground-raised);
  border: 1px solid var(--line-strong); border-radius: var(--radius-1);
  text-decoration: none; white-space: nowrap; cursor: pointer;
  transition: background-color 120ms ease, border-color 120ms ease, color 120ms ease, filter 240ms ease;
}
.nor-btn .nor-i { width: 18px; height: 18px; }
.nor-btn:where(:not(:disabled, [aria-disabled="true"])):hover { background: var(--ground-hover); border-color: var(--ink-faint); }
.nor-btn:where(:not(:disabled, [aria-disabled="true"])):active { transform: translateY(1px); }

/* Lumo: the one primary action per view. Eighth-cut gold. */
.nor-btn--lumo { color: var(--on-lumo); background: none; border-color: transparent; }
.nor-btn--lumo::before,
.nor-btn--lumo::after {
  content: ""; position: absolute; z-index: -1;
  clip-path: polygon(var(--c) 0, calc(100% - var(--c)) 0, 100% var(--c), 100% calc(100% - var(--c)), calc(100% - var(--c)) 100%, var(--c) 100%, 0 calc(100% - var(--c)), 0 var(--c));
}
.nor-btn--lumo::before { --c: var(--nor-cut); inset: -1px; background: var(--lumo-deep); }
.nor-btn--lumo::after { --c: calc(var(--nor-cut) - .6px); inset: 0; background: var(--lumo); transition: background-color 120ms ease; }
.nor-btn--lumo:where(:not(:disabled, [aria-disabled="true"])):hover { background: none; border-color: transparent; filter: drop-shadow(var(--shadow-glow)); }
.nor-btn--lumo:where(:not(:disabled, [aria-disabled="true"])):hover::after { background: var(--lumo-bright); }
.nor-btn--lumo:where(:not(:disabled, [aria-disabled="true"])):active::after { background: var(--lumo-deep); }
.nor-btn--lumo .nor-kindle { color: var(--on-lumo); }

/* Iru: destruction. Square, never cut. */
.nor-btn--iru { color: var(--on-iru); background: var(--iru); border-color: var(--iru); }
.nor-btn--iru:where(:not(:disabled, [aria-disabled="true"])):hover { background: var(--iru); border-color: var(--iru-text); }

/* Quiet: tertiary actions, toolbars. */
.nor-btn--quiet { color: var(--ink-muted); background: transparent; border-color: transparent; }
.nor-btn--quiet:where(:not(:disabled, [aria-disabled="true"])):hover { color: var(--ink); background: var(--ground-hover); border-color: transparent; }
.nor-btn--quiet.is-danger { color: var(--iru-text); }

.nor-btn--sm { min-height: 32px; padding: 4px 12px; font-size: 13px; line-height: 18px; gap: 6px; }
.nor-btn--sm .nor-i { width: 16px; height: 16px; }
.nor-btn--lg { --nor-cut: var(--cut-md); min-height: 48px; padding: 12px 26px; font-size: 17px; line-height: 24px; }
.nor-btn:disabled, .nor-btn[aria-disabled="true"] { opacity: .45; cursor: not-allowed; }
.nor-btn[aria-busy="true"] { opacity: 1; cursor: progress; }
.nor-btn-row { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3); }

/* ── Field ─────────────────────────────────────────────────────────────── */
.nor-field { display: grid; gap: var(--space-2); }
.nor-label { font: 700 15px/22px var(--font-sans); color: var(--ink); }
.nor-label .nor-optional { font-weight: 500; color: var(--ink-faint); }
.nor-input, .nor-textarea, .nor-select > select {
  width: 100%; margin: 0;
  font: 500 16px/24px var(--font-sans); color: var(--ink);
  background: var(--ground-sunken);
  border: 1px solid var(--line-strong); border-radius: var(--radius-1);
  box-shadow: var(--shadow-inset);
  padding: 8px 12px;
  transition: border-color 120ms ease;
}
.nor-input::placeholder, .nor-textarea::placeholder { color: var(--ink-faint); opacity: 1; }
.nor-input:hover, .nor-textarea:hover, .nor-select > select:hover { border-color: var(--ink-faint); }
.nor-input:focus-visible, .nor-textarea:focus-visible, .nor-select > select:focus-visible { border-color: var(--lumo-deep); }
.nor-textarea { min-height: 120px; resize: vertical; }
.nor-textarea--prose { font: 400 18px/29px var(--font-serif); min-height: 200px; padding: 12px 16px; }
.nor-select { position: relative; }
.nor-select > select { appearance: none; -webkit-appearance: none; padding-right: 40px; cursor: pointer; }
.nor-select::after {
  content: ""; position: absolute; right: 16px; top: 50%; width: 7px; height: 7px; pointer-events: none;
  border-right: 1.5px solid var(--ink-muted); border-bottom: 1.5px solid var(--ink-muted);
  transform: translateY(-70%) rotate(45deg);
}
.nor-hint { margin: 0; font: 500 13px/18px var(--font-sans); color: var(--ink-muted); }
.nor-error { display: flex; align-items: center; gap: 6px; margin: 0; font: 700 13px/18px var(--font-sans); color: var(--iru-text); }
.nor-error .nor-i { width: 16px; height: 16px; }
.nor-field.is-invalid .nor-input,
.nor-field.is-invalid .nor-textarea,
.nor-field.is-invalid .nor-select > select { border-color: var(--iru); background: var(--iru-wash); }
.nor-check { display: inline-flex; align-items: center; gap: var(--space-2); font: 500 15px/22px var(--font-sans); color: var(--ink-muted); cursor: pointer; }
.nor-check input { width: 18px; height: 18px; margin: 0; accent-color: var(--lumo); cursor: pointer; }

/* ── Tabs ──────────────────────────────────────────────────────────────── */
.nor-tabs { display: flex; gap: var(--space-5); border-bottom: 1px solid var(--line); overflow-x: auto; scrollbar-width: none; }
.nor-tabs::-webkit-scrollbar { display: none; }
.nor-tab {
  appearance: none; background: none; border: 0; border-bottom: 2px solid transparent; margin: 0 0 -1px;
  padding: 10px 0 9px; font: 600 15px/22px var(--font-sans); color: var(--ink-muted);
  white-space: nowrap; cursor: pointer; text-decoration: none;
  transition: color 120ms ease, border-color 120ms ease;
}
.nor-tab:hover { color: var(--ink); }
.nor-tab[aria-selected="true"], .nor-tab[aria-current="page"] { color: var(--ink); border-bottom-color: var(--lumo); }
.nor-tab__count { margin-left: 6px; font: 500 13px/18px var(--font-sans); color: var(--ink-faint); font-variant-numeric: tabular-nums; }

/* ── Masthead ──────────────────────────────────────────────────────────── */
.nor-masthead {
  display: flex; align-items: center; gap: var(--space-6);
  min-height: 56px; padding: 0 var(--space-5);
  background: var(--ground); border-bottom: 1px solid var(--line);
}
.nor-masthead__brand {
  display: inline-flex; align-items: center; gap: 10px; flex: none;
  font: 700 19px/24px var(--font-display); letter-spacing: -.005em;
  color: var(--ink); text-decoration: none; white-space: nowrap;
}
.nor-masthead__brand img, .nor-masthead__brand svg { width: 22px; height: 22px; display: block; }
.nor-masthead__nav { display: flex; gap: var(--space-5); overflow-x: auto; scrollbar-width: none; }
.nor-masthead__link {
  padding: 17px 0 15px; border-bottom: 2px solid transparent;
  font: 500 15px/22px var(--font-sans); color: var(--ink-muted); text-decoration: none; white-space: nowrap;
  transition: color 120ms ease;
}
.nor-masthead__link:hover { color: var(--ink); }
.nor-masthead__link[aria-current="page"] { color: var(--lumo-text); border-bottom-color: var(--lumo); }
.nor-masthead__end { margin-left: auto; display: flex; align-items: center; gap: var(--space-3); flex: none; }
.nor-register { display: inline-flex; align-items: center; gap: 8px; font: 500 15px/22px var(--font-sans); color: var(--ink-muted); }
.nor-register strong { color: var(--pc, var(--ink)); font-weight: 700; }
@media (max-width: 640px) {
  .nor-masthead { flex-wrap: wrap; gap: 0 var(--space-4); padding: 0 var(--space-4); }
  .nor-masthead__brand { min-height: 52px; }
  .nor-masthead__nav { order: 3; width: 100%; gap: var(--space-4); }
  .nor-masthead__link { padding: 10px 0 9px; }
}

/* ── Divider ───────────────────────────────────────────────────────────── */
.nor-rule { height: 1px; border: 0; margin: var(--space-6) 0; background: var(--line); }
.nor-rule--relic {
  display: flex; align-items: center; gap: 14px; height: 14px; background: none;
  width: min(320px, 100%); margin-inline: auto;
}
.nor-rule--relic::before, .nor-rule--relic::after { content: ""; flex: 1; height: 1px; }
.nor-rule--relic::before { background: linear-gradient(90deg, transparent, var(--line-strong)); }
.nor-rule--relic::after { background: linear-gradient(90deg, var(--line-strong), transparent); }
.nor-rule__gem {
  flex: none; width: 10px; height: 10px; transform: rotate(45deg);
  background: linear-gradient(135deg, var(--lumo-bright) 0 50%, var(--lumo) 50% 100%);
  box-shadow: 0 0 0 1px var(--lumo-deep);
}

/* ── Folio ─────────────────────────────────────────────────────────────── */
.nor-folio {
  background: var(--ground-raised); color: var(--ink);
  border: 1px solid var(--line); border-radius: var(--radius-2);
  padding: var(--space-5);
}
.nor-folio--sunken { background: var(--ground-sunken); box-shadow: var(--shadow-inset); }
.nor-folio--link { display: block; text-decoration: none; transition: border-color 120ms ease, background-color 120ms ease; }
.nor-folio--link:hover { border-color: var(--line-strong); background: var(--ground-hover); }
.nor-folio--marked {
  --m: var(--lumo-deep);
  background-image:
    linear-gradient(var(--m), var(--m)), linear-gradient(var(--m), var(--m)),
    linear-gradient(var(--m), var(--m)), linear-gradient(var(--m), var(--m)),
    linear-gradient(var(--m), var(--m)), linear-gradient(var(--m), var(--m)),
    linear-gradient(var(--m), var(--m)), linear-gradient(var(--m), var(--m));
  background-repeat: no-repeat;
  background-size: 12px 1px, 1px 12px, 12px 1px, 1px 12px, 12px 1px, 1px 12px, 12px 1px, 1px 12px;
  background-position: 5px 5px, 5px 5px, calc(100% - 5px) 5px, calc(100% - 5px) 5px,
    5px calc(100% - 5px), 5px calc(100% - 5px), calc(100% - 5px) calc(100% - 5px), calc(100% - 5px) calc(100% - 5px);
}
.nor-folio__head { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--space-3); margin-bottom: var(--space-4); }
.nor-folio__title { margin: 4px 0 0; font: 700 22px/28px var(--font-display); font-variation-settings: 'opsz' 22; color: var(--ink); }
.nor-folio__body { margin: 0; font: 400 16px/25px var(--font-serif); color: var(--ink-muted); }
.nor-folio__foot {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-4);
  margin-top: var(--space-4); padding-top: var(--space-3); border-top: 1px solid var(--line);
  font: 500 13px/18px var(--font-sans); color: var(--ink-faint);
}

/* ── Badge ─────────────────────────────────────────────────────────────── */
.nor-badge {
  position: relative; isolation: isolate;
  display: inline-flex; align-items: center; gap: 5px;
  padding: 3px 8px 4px;
  font: 500 13px/16px var(--font-caps); letter-spacing: .06em; white-space: nowrap;
  color: var(--ink-muted); background: transparent;
  border: 1px solid var(--line-strong); border-radius: var(--radius-1);
}
.nor-badge .nor-i { width: 14px; height: 14px; }
.nor-badge--lumo { color: var(--lumo-text); border-color: transparent; }
.nor-badge--lumo::before, .nor-badge--lumo::after {
  content: ""; position: absolute; z-index: -1;
  clip-path: polygon(var(--c) 0, calc(100% - var(--c)) 0, 100% var(--c), 100% calc(100% - var(--c)), calc(100% - var(--c)) 100%, var(--c) 100%, 0 calc(100% - var(--c)), 0 var(--c));
}
.nor-badge--lumo::before { --c: var(--cut-sm); inset: -1px; background: var(--lumo-deep); }
.nor-badge--lumo::after { --c: calc(var(--cut-sm) - .6px); inset: 0; background: var(--lumo-wash); }
.nor-badge--iru { color: var(--iru-text); border-color: color-mix(in srgb, var(--iru) 70%, var(--line)); }
.nor-badge--ember { color: var(--ember-text); border-color: color-mix(in srgb, var(--ember) 60%, var(--line)); }
.nor-badge--iron { color: var(--iron); border-color: color-mix(in srgb, var(--iron) 45%, var(--line)); }
.nor-badge--seal { color: var(--seal); background: var(--seal-wash); border-color: color-mix(in srgb, var(--seal) 45%, var(--line)); }
.nor-badge--pc { color: var(--pc, var(--ink-muted)); }
.nor-badge--pc::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: currentColor; }

/* ── Notice ────────────────────────────────────────────────────────────── */
.nor-notice {
  display: grid; grid-template-columns: 20px minmax(0, 1fr) auto; gap: var(--space-3); align-items: start;
  padding: 14px var(--space-4);
  background: var(--ground-raised); color: var(--ink);
  border: 1px solid var(--line); border-radius: var(--radius-2);
}
.nor-notice > .nor-i { width: 20px; height: 20px; margin-top: 1px; color: var(--ink-muted); }
.nor-notice__title { margin: 0; font: 700 15px/22px var(--font-sans); color: var(--ink); }
.nor-notice__text { margin: 2px 0 0; font: 500 15px/22px var(--font-sans); color: var(--ink-muted); }
.nor-notice__actions { display: flex; gap: var(--space-2); align-self: center; }
.nor-notice--lumo { background: var(--lumo-wash); border-color: color-mix(in srgb, var(--lumo) 40%, var(--line)); }
.nor-notice--lumo > .nor-i { color: var(--lumo-text); }
.nor-notice--iru { background: var(--iru-wash); border-color: color-mix(in srgb, var(--iru) 55%, var(--line)); }
.nor-notice--iru > .nor-i { color: var(--iru-text); }
.nor-notice--ember { background: var(--ember-wash); border-color: color-mix(in srgb, var(--ember) 45%, var(--line)); }
.nor-notice--ember > .nor-i { color: var(--ember-text); }
.nor-notice--iron { background: var(--iron-wash); border-color: color-mix(in srgb, var(--iron) 30%, var(--line)); }
.nor-notice--iron > .nor-i { color: var(--iron); }

/* ── Sealed: DM-only content (the rubric) ──────────────────────────────── */
.nor-sealed {
  background: var(--seal-wash); color: var(--ink);
  border: 1px solid color-mix(in srgb, var(--seal) 35%, var(--line)); border-radius: var(--radius-2);
  padding: var(--space-4) var(--space-5);
}
.nor-sealed__label {
  display: flex; align-items: center; gap: 6px; margin: 0 0 var(--space-2);
  font: 700 13px/16px var(--font-caps); letter-spacing: .08em; color: var(--seal);
}
.nor-sealed__label .nor-i { width: 16px; height: 16px; }
.nor-sealed__body { margin: 0; font: 400 16px/25px var(--font-serif); color: var(--ink); }
.nor-sealed__body + .nor-sealed__body { margin-top: .8em; }
.nor-sealed__source { margin: var(--space-2) 0 0; font: italic 500 13px/18px var(--font-sans); color: var(--ink-muted); }
.nor-rubric { color: var(--seal); }

/* ── Lumo's hand: text Lumo wrote or proposes ──────────────────────────── */
.nor-hand {
  font-style: italic; color: var(--ink); text-decoration: none;
  background: var(--lumo-wash); border-radius: var(--radius-1); padding: 0 .18em;
  -webkit-box-decoration-break: clone; box-decoration-break: clone;
}
.nor-struck { color: var(--ink-muted); text-decoration: line-through; text-decoration-color: var(--iru-text); text-decoration-thickness: 1.5px; }
.nor-hand-block {
  background: var(--lumo-wash); color: var(--ink);
  border: 1px solid color-mix(in srgb, var(--lumo) 30%, var(--line)); border-radius: var(--radius-2);
  padding: var(--space-4) var(--space-5);
}
.nor-hand-block__sig {
  display: flex; align-items: center; gap: 6px; margin: 0 0 var(--space-2);
  font: 700 13px/16px var(--font-caps); letter-spacing: .08em; color: var(--lumo-text);
}
.nor-hand-block__sig .nor-i { width: 16px; height: 16px; }
.nor-hand-block__text { margin: 0; font: italic 400 18px/29px var(--font-serif); color: var(--ink); }
.nor-hand-block__text + .nor-hand-block__text { margin-top: .8em; }

/* ── Prose and Article ─────────────────────────────────────────────────── */
.nor-prose {
  max-width: var(--measure-prose);
  font: 400 18px/29px var(--font-serif); color: var(--ink);
  font-variant-numeric: oldstyle-nums proportional-nums;
  hanging-punctuation: first; text-wrap: pretty;
}
.nor-prose > * { margin: 0; }
.nor-prose > * + * { margin-top: 1em; }
.nor-prose h2 { margin-top: 1.7em; font: 700 30px/36px var(--font-display); font-variation-settings: 'opsz' 30; letter-spacing: -.005em; text-wrap: balance; }
.nor-prose h3 { margin-top: 1.5em; font: 700 22px/28px var(--font-display); font-variation-settings: 'opsz' 22; }
.nor-prose h2 + *, .nor-prose h3 + * { margin-top: .5em; }
.nor-prose ul, .nor-prose ol { padding-left: 1.3em; }
.nor-prose li + li { margin-top: .35em; }
.nor-prose li::marker { color: var(--ink-faint); }
.nor-prose strong { font-weight: 700; }
.nor-prose blockquote { padding-left: 1.1em; border-left: 1px solid var(--line-strong); color: var(--ink-muted); font-style: italic; }
.nor-prose--opening > p:first-of-type::first-letter {
  float: left; margin: 5px 10px 0 0;
  font: 800 76px/58px var(--font-display); font-variation-settings: 'opsz' 30;
  color: var(--ink);
}
.nor-wikilink {
  color: inherit; text-decoration: underline;
  text-decoration-color: var(--lumo-deep); text-decoration-thickness: 1px; text-underline-offset: .22em;
  transition: color 120ms ease, text-decoration-color 120ms ease;
}
.nor-wikilink:hover { color: var(--lumo-text); text-decoration-color: var(--lumo); }
.nor-wikilink.is-unwritten { color: var(--ink-muted); text-decoration-style: dashed; text-decoration-color: var(--ink-faint); }

.nor-article { color: var(--ink); }
.nor-article__head { max-width: var(--measure-prose); margin-bottom: var(--space-5); }
.nor-article__title {
  margin: 6px 0 12px;
  font: 700 44px/48px var(--font-display); font-variation-settings: 'opsz' 30; letter-spacing: -.01em;
  text-wrap: balance;
}
.nor-article__dek { margin: 0; font: 400 21px/33px var(--font-serif); color: var(--ink-muted); text-wrap: pretty; }
.nor-article__layout { display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: var(--space-7); align-items: start; }
@media (max-width: 860px) { .nor-article__layout { grid-template-columns: minmax(0, 1fr); gap: var(--space-5); } .nor-article__title { font-size: 34px; line-height: 40px; } }

.nor-toc { font: 500 15px/22px var(--font-sans); }
.nor-toc ol { list-style: none; margin: var(--space-2) 0 0; padding: 0; border-left: 1px solid var(--line); }
.nor-toc a {
  display: block; margin-left: -1px; padding: 4px 0 4px 14px; border-left: 2px solid transparent;
  color: var(--ink-muted); text-decoration: none;
}
.nor-toc a:hover { color: var(--ink); }
.nor-toc a[aria-current="true"] { color: var(--ink); border-left-color: var(--lumo); }

.nor-lorecard {
  width: min(320px, 100%); overflow: hidden;
  background: var(--ground-overlay); color: var(--ink);
  border: 1px solid var(--line); border-radius: var(--radius-2); box-shadow: var(--shadow-deep);
}
.nor-lorecard__img { display: block; width: 100%; height: 128px; object-fit: cover; border-bottom: 1px solid var(--line); }
.nor-lorecard__body { padding: 14px var(--space-4) var(--space-4); }
.nor-lorecard__title { margin: 4px 0 6px; font: 700 22px/28px var(--font-display); font-variation-settings: 'opsz' 22; }
.nor-lorecard__text { margin: 0; font: 400 16px/25px var(--font-serif); color: var(--ink-muted); }

/* ── Infobox ───────────────────────────────────────────────────────────── */
.nor-infobox {
  width: 100%; max-width: 320px; overflow: hidden;
  background: var(--ground-raised); color: var(--ink);
  border: 1px solid var(--line); border-radius: var(--radius-2);
}
.nor-infobox__img { display: block; width: 100%; aspect-ratio: 4 / 3; object-fit: cover; border-bottom: 1px solid var(--line); }
.nor-infobox__head { padding: var(--space-4) var(--space-4) var(--space-3); }
.nor-infobox__title { margin: 4px 0 0; font: 700 22px/28px var(--font-display); font-variation-settings: 'opsz' 22; }
.nor-infobox dl { margin: 0; padding: 0 var(--space-4) var(--space-2); }
.nor-infobox__row { display: grid; grid-template-columns: 92px minmax(0, 1fr); gap: var(--space-3); padding: 9px 0; border-top: 1px solid var(--line); }
.nor-infobox dt { font: 500 13px/20px var(--font-caps); letter-spacing: .06em; color: var(--ink-faint); }
.nor-infobox dd { margin: 0; font: 500 15px/20px var(--font-sans); color: var(--ink); }

/* ── Stat block ────────────────────────────────────────────────────────── */
.nor-statblock {
  max-width: 440px; padding: var(--space-5);
  background: var(--ground-raised); color: var(--ink);
  border: 1px solid var(--line); border-radius: var(--radius-2);
  font: 400 16px/24px var(--font-serif);
}
.nor-statblock__name { margin: 0; font: 700 22px/28px var(--font-display); font-variation-settings: 'opsz' 22; }
.nor-statblock__meta { margin: 2px 0 0; font-style: italic; color: var(--ink-muted); }
.nor-statblock__rule { height: 5px; margin: 12px 0; background: var(--lumo-deep); clip-path: polygon(0 0, 100% 50%, 0 100%); }
.nor-statblock__line { margin: 0; }
.nor-statblock__line b { font-weight: 700; }
.nor-statblock__abilities { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 4px; margin: 4px 0; text-align: center; }
.nor-ability { padding: 6px 2px; background: var(--ground-sunken); border-radius: var(--radius-1); }
.nor-ability__name { display: block; font: 500 13px/16px var(--font-caps); letter-spacing: .06em; color: var(--ink-faint); }
.nor-ability__score { display: block; font: 700 16px/22px var(--font-sans); font-variant-numeric: tabular-nums; }
.nor-ability__mod { display: block; font: 500 13px/18px var(--font-sans); color: var(--ink-muted); font-variant-numeric: tabular-nums; }
.nor-statblock__section {
  margin: 18px 0 8px; padding-bottom: 4px; border-bottom: 1px solid var(--line-strong);
  font: 700 15px/18px var(--font-caps); letter-spacing: .08em; color: var(--ink);
}
.nor-statblock p { margin: 0; }
.nor-statblock p + p { margin-top: 8px; }
.nor-statblock__feat { font-weight: 700; font-style: italic; }

/* ── Entry: journal or recap ───────────────────────────────────────────── */
.nor-entry { max-width: var(--measure-prose); color: var(--ink); }
.nor-entry__title { margin: 6px 0 10px; font: 700 30px/36px var(--font-display); font-variation-settings: 'opsz' 30; letter-spacing: -.005em; text-wrap: balance; }
.nor-entry__byline { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; margin: 0 0 var(--space-5); font: 500 15px/22px var(--font-sans); color: var(--ink-muted); }
.nor-entry__byline strong { color: var(--pc, var(--ink)); font-weight: 700; }
.nor-entry__byline .nor-i { width: 16px; height: 16px; }
.nor-sigil { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: var(--pc, var(--ink-faint)); }
.nor-entry--recap .nor-entry__byline strong, .nor-entry--recap .nor-entry__byline .nor-i { color: var(--lumo-text); }
.nor-entry__figure { margin: var(--space-5) 0; }
.nor-entry__figure img { display: block; width: 100%; height: auto; border: 1px solid var(--line); border-radius: var(--radius-2); }
.nor-entry__figure figcaption { margin-top: var(--space-2); font: 500 13px/18px var(--font-sans); color: var(--ink-faint); }

/* ── Proposal ──────────────────────────────────────────────────────────── */
.nor-proposal { background: var(--ground-raised); color: var(--ink); border: 1px solid var(--line); border-radius: var(--radius-2); }
.nor-proposal__head { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2) var(--space-3); padding: var(--space-4) var(--space-5); border-bottom: 1px solid var(--line); }
.nor-proposal__target { margin: 0; font: 700 22px/28px var(--font-display); font-variation-settings: 'opsz' 22; }
.nor-proposal__path { font: 500 13px/18px var(--font-sans); color: var(--ink-muted); }
.nor-proposal__head .nor-badge:first-child { margin-right: 2px; }
.nor-proposal__body { display: grid; gap: var(--space-3); padding: var(--space-4) var(--space-5); }
.nor-proposal__why { margin: 0; font: 500 13px/18px var(--font-sans); color: var(--ink-muted); }
.nor-proposal__ask {
  display: grid; grid-template-columns: 18px minmax(0, 1fr); gap: var(--space-2);
  padding: var(--space-3) var(--space-4); background: var(--iron-wash); border-radius: var(--radius-1);
  font: 500 15px/22px var(--font-sans); color: var(--ink);
}
.nor-proposal__ask .nor-i { width: 18px; height: 18px; margin-top: 2px; color: var(--iron); }
.nor-proposal__ask b { display: block; font: 700 13px/16px var(--font-caps); letter-spacing: .08em; color: var(--iron); margin-bottom: 2px; }
.nor-proposal__foot { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3); padding: 0 var(--space-5) var(--space-4); }
.nor-proposal__state { display: inline-flex; align-items: center; gap: 6px; font: 700 15px/22px var(--font-sans); }
.nor-proposal__state .nor-i { width: 18px; height: 18px; }
.nor-proposal.is-confirmed { border-color: var(--lumo-deep); }
.nor-proposal.is-confirmed .nor-proposal__state { color: var(--lumo-text); }
.nor-proposal.is-rejected .nor-proposal__state { color: var(--ink-faint); }
.nor-proposal.is-rejected .nor-proposal__target, .nor-proposal.is-rejected .nor-hand-block__text { color: var(--ink-faint); }

/* ── Recorder ──────────────────────────────────────────────────────────── */
.nor-recorder {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-5);
  padding: var(--space-5); background: var(--ground-raised); color: var(--ink);
  border: 1px solid var(--line); border-radius: var(--radius-2);
}
.nor-recorder__button {
  position: relative; flex: none; display: grid; place-items: center;
  width: 72px; height: 72px; padding: 0; border-radius: 50%; cursor: pointer;
  background: var(--ground-sunken); border: 2px solid var(--line-strong);
  transition: border-color 160ms ease, box-shadow 240ms ease;
}
.nor-recorder__button::after { content: ""; width: 24px; height: 24px; border-radius: 50%; background: var(--lumo); transition: border-radius 160ms ease, width 160ms ease, height 160ms ease; }
.nor-recorder__button:hover { border-color: var(--lumo); }
.nor-recorder__status { display: grid; gap: 2px; min-width: 0; }
.nor-recorder__state { font: 700 13px/16px var(--font-caps); letter-spacing: .08em; color: var(--ink-muted); }
.nor-recorder__time { font: 600 30px/36px var(--font-sans); font-variant-numeric: tabular-nums lining-nums; color: var(--ink); }
.nor-recorder__meta { font: 500 13px/18px var(--font-sans); color: var(--ink-muted); }
.nor-recorder__level { display: flex; align-items: center; gap: 3px; height: 36px; margin-left: auto; }
.nor-recorder__level i { display: block; width: 3px; height: var(--h, 20%); background: var(--line-strong); border-radius: 1px; }
.nor-recorder.is-live .nor-recorder__button { border-color: var(--lumo); box-shadow: var(--shadow-glow); animation: nor-breathe 2.6s ease-in-out infinite; }
.nor-recorder.is-live .nor-recorder__button::after { width: 22px; height: 22px; border-radius: 2px; }
.nor-recorder.is-live .nor-recorder__state { color: var(--lumo-text); }
.nor-recorder.is-live .nor-recorder__level i { background: var(--lumo); }
.nor-recorder.is-working .nor-recorder__button { cursor: progress; }
.nor-recorder.is-working .nor-recorder__button::after { display: none; }
@keyframes nor-breathe {
  0%, 100% { box-shadow: var(--shadow-glow), 0 0 0 0 transparent; }
  50% { box-shadow: var(--shadow-glow), 0 0 0 7px color-mix(in srgb, var(--lumo) 16%, transparent); }
}

/* ── Converse: the Lumo collaborator ───────────────────────────────────── */
.nor-converse { display: grid; gap: var(--space-5); max-width: var(--measure-wide); color: var(--ink); }
.nor-msg { display: grid; gap: 6px; min-width: 0; }
.nor-msg__who { display: flex; align-items: center; gap: 6px; font: 700 13px/16px var(--font-caps); letter-spacing: .08em; color: var(--ink-faint); }
.nor-msg__who .nor-i { width: 16px; height: 16px; }
.nor-msg--dm { justify-self: end; max-width: min(80%, 560px); }
.nor-msg--dm .nor-msg__who { justify-content: flex-end; }
.nor-msg--dm .nor-msg__text {
  margin: 0; padding: var(--space-3) var(--space-4);
  background: var(--ground-raised); border: 1px solid var(--line); border-radius: var(--radius-2);
  font: 500 15px/22px var(--font-sans);
}
.nor-msg--lumo .nor-msg__who { color: var(--lumo-text); }
.nor-msg--lumo .nor-msg__text { margin: 0; max-width: var(--measure-prose); font: 400 18px/29px var(--font-serif); }
.nor-composer {
  display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--space-3); align-items: end;
  padding: var(--space-3) var(--space-3) var(--space-3) var(--space-4);
  background: var(--ground-sunken); border: 1px solid var(--line-strong); border-radius: var(--radius-2);
  box-shadow: var(--shadow-inset);
}
.nor-composer:focus-within { outline: 2px solid var(--focus); outline-offset: 2px; }
.nor-composer textarea {
  min-height: 48px; padding: 6px 0; resize: none; border: 0; outline: none; background: none;
  font: 500 16px/24px var(--font-sans); color: var(--ink);
}
.nor-composer textarea::placeholder { color: var(--ink-faint); opacity: 1; }

/* ── Ledger ────────────────────────────────────────────────────────────── */
.nor-ledger-wrap { overflow-x: auto; }
.nor-ledger { width: 100%; border-collapse: collapse; color: var(--ink); font: 500 14px/20px var(--font-sans); font-variant-numeric: tabular-nums lining-nums; }
.nor-ledger caption { caption-side: top; text-align: left; padding: 0 0 var(--space-3); font: 700 15px/18px var(--font-caps); letter-spacing: .08em; color: var(--ink-muted); }
.nor-ledger th {
  padding: 10px 12px; text-align: left; white-space: nowrap; vertical-align: bottom;
  font: 500 13px/16px var(--font-caps); letter-spacing: .06em; color: var(--ink-faint);
  border-bottom: 1px solid var(--line-strong);
}
.nor-ledger td { padding: 10px 12px; vertical-align: top; border-bottom: 1px solid var(--line); }
.nor-ledger .is-num { text-align: right; }
.nor-ledger tbody tr { transition: background-color 120ms ease; }
.nor-ledger tbody tr:hover { background: var(--ground-hover); }
.nor-ledger tfoot td { font-weight: 700; border-top: 1px solid var(--line-strong); border-bottom: 0; }
.nor-ledger__sub { display: block; font: 500 13px/18px var(--font-sans); color: var(--ink-muted); }

/* ── Relic meter ───────────────────────────────────────────────────────── */
.nor-relic { display: inline-flex; align-items: center; gap: var(--space-4); color: var(--ink); }
.nor-relic__gem { display: block; flex: none; width: 56px; height: 76px; overflow: visible; }
.nor-relic__shard { fill: transparent; stroke: var(--line-strong); stroke-width: 1; stroke-linejoin: miter; }
.nor-relic__shard.is-held { fill: var(--lumo); stroke: var(--lumo-deep); }
.nor-relic__shard.is-held.is-lit { fill: var(--lumo-bright); }
.nor-relic__mold { fill: none; stroke: var(--line-strong); stroke-width: 1.5; stroke-dasharray: 3 3; }
.nor-relic__mold.is-held { stroke: var(--lumo); stroke-dasharray: none; }
.nor-relic__count { display: block; margin-top: 2px; font: 700 30px/36px var(--font-display); font-variation-settings: 'opsz' 30; }
.nor-relic__count small { font: 500 15px/22px var(--font-sans); color: var(--ink-muted); margin-left: 6px; }
.nor-relic--lg .nor-relic__gem { width: 112px; height: 152px; }

/* ── Reckoning: the Nor calendar ───────────────────────────────────────── */
.nor-reckoning { color: var(--ink); }
.nor-reckoning__head { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: var(--space-3); margin-bottom: var(--space-4); }
.nor-reckoning__month { margin: 4px 0 0; font: 700 44px/48px var(--font-display); font-variation-settings: 'opsz' 30; letter-spacing: -.01em; }
.nor-reckoning__grid {
  display: grid; grid-template-columns: 44px repeat(10, minmax(0, 1fr));
  border-top: 1px solid var(--line); border-left: 1px solid var(--line);
}
.nor-reckoning__grid > * { border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.nor-reckoning__dow, .nor-reckoning__tenday {
  padding: 8px 4px; text-align: center; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font: 500 13px/16px var(--font-caps); letter-spacing: .04em; color: var(--ink-faint);
  background: var(--ground-raised);
}
.nor-reckoning__tenday { display: grid; place-items: center; padding: 0; }
.nor-day { position: relative; min-height: 76px; padding: 6px 6px 8px; font: 500 13px/18px var(--font-sans); color: var(--ink-muted); font-variant-numeric: tabular-nums; }
.nor-day__n { display: block; }
.nor-day__event { display: flex; gap: 5px; align-items: baseline; margin-top: 4px; font: 600 13px/16px var(--font-sans); color: var(--ink); }
.nor-day__event::before { content: ""; flex: none; width: 6px; height: 6px; margin-top: 4px; border-radius: 50%; background: var(--ink-muted); }
.nor-day__event--relic::before { background: var(--lumo); border-radius: 0; transform: rotate(45deg) scale(.9); }
.nor-day__event--pc::before { background: var(--pc, var(--ink-muted)); }
.nor-day.is-past { background: var(--ground-sunken); color: var(--ink-faint); }
.nor-day.is-today { background: var(--lumo-wash); box-shadow: inset 0 0 0 2px var(--lumo); color: var(--lumo-text); }
.nor-day.is-today .nor-day__n::after { content: "Today"; margin-left: 6px; font: 700 13px/16px var(--font-caps); letter-spacing: .06em; }
.nor-day.is-lightless { background: var(--void); color: var(--iru-text); }
.nor-day.is-lightless .nor-day__event { color: var(--iru-text); }
.nor-day.is-lightless .nor-day__event::before { display: none; }
.nor-day.is-lightless .nor-i { width: 16px; height: 16px; color: var(--iru-text); }
/* Seasons: each month wears its season, the first month of a season the lighter shade.
   Set data-month="<month>" on .nor-reckoning. */
.nor-reckoning[data-month="cramas"] { --month: var(--month-cramas); --season: var(--season-spring); --season-line: var(--season-spring-line); }
.nor-reckoning[data-month="crafin"] { --month: var(--month-crafin); --season: var(--season-spring); --season-line: var(--season-spring-line); }
.nor-reckoning[data-month="vidmas"] { --month: var(--month-vidmas); --season: var(--season-summer); --season-line: var(--season-summer-line); }
.nor-reckoning[data-month="vidfin"] { --month: var(--month-vidfin); --season: var(--season-summer); --season-line: var(--season-summer-line); }
.nor-reckoning[data-month="mormas"] { --month: var(--month-mormas); --season: var(--season-autumn); --season-line: var(--season-autumn-line); }
.nor-reckoning[data-month="morfin"] { --month: var(--month-morfin); --season: var(--season-autumn); --season-line: var(--season-autumn-line); }
.nor-reckoning[data-month="dormas"] { --month: var(--month-dormas); --season: var(--season-winter); --season-line: var(--season-winter-line); }
.nor-reckoning[data-month="dorfin"] { --month: var(--month-dorfin); --season: var(--season-winter); --season-line: var(--season-winter-line); }
.nor-reckoning[data-month] .nor-reckoning__month { color: var(--season); }
.nor-reckoning[data-month] .nor-reckoning__grid,
.nor-reckoning[data-month] .nor-reckoning__grid > * { border-color: var(--season-line); }
.nor-reckoning[data-month] .nor-reckoning__dow,
.nor-reckoning[data-month] .nor-reckoning__tenday { background: color-mix(in srgb, var(--month) 55%, var(--ground-raised)); color: var(--season); }
.nor-reckoning[data-month] .nor-day { background: var(--month); }
.nor-reckoning[data-month] .nor-day.is-past { background: color-mix(in srgb, var(--month) 65%, var(--ground-sunken)); }
.nor-reckoning[data-month] .nor-day.is-today { background: var(--lumo-wash); }
.nor-reckoning[data-month] .nor-day.is-lightless { background: var(--void); }
.nor-reckoning__legend { display: flex; flex-wrap: wrap; gap: var(--space-2) var(--space-5); margin-top: var(--space-3); font: 500 13px/18px var(--font-sans); color: var(--ink-muted); }
.nor-reckoning__legend span { display: inline-flex; align-items: center; gap: 6px; }
@media (max-width: 640px) {
  .nor-reckoning__grid { grid-template-columns: 30px repeat(10, minmax(0, 1fr)); }
  .nor-day { min-height: 44px; padding: 3px; }
  .nor-day__event { font-size: 0; }
  .nor-day.is-today .nor-day__n::after { content: none; }
}

/* ── Flair: the player pages' atmosphere (Zack, 2026-10-31) ──────────────────
   Put .nor-flair on <body> (with nor-grain). The map of Nor lies dim under the top of
   the page with the blood sun rising behind the title, the edges of the screen fall
   into shadow, and Folios become engraved plates. Night only: Vellum drops the sky. */
.nor-flair { position: relative; z-index: 0; }
.nor-flair::before {
  content: ""; position: absolute; inset: 0 0 auto 0; height: 760px; z-index: -1; pointer-events: none;
  background:
    radial-gradient(circle at 50% 210px, color-mix(in srgb, var(--blood-sun-core) 30%, transparent) 0, color-mix(in srgb, var(--blood-sun) 50%, transparent) 70px, color-mix(in srgb, var(--blood-sun) 22%, transparent) 170px, transparent 330px),
    linear-gradient(color-mix(in srgb, var(--ground) 82%, transparent), color-mix(in srgb, var(--ground) 82%, transparent)),
    url("/static/images/nor-map.webp") center 30% / cover no-repeat;
  filter: blur(1.2px);
  -webkit-mask: linear-gradient(to bottom, #000 30%, transparent 92%);
          mask: linear-gradient(to bottom, #000 30%, transparent 92%);
}
/* A character's own pages: their heraldry rises instead of the blood sun. */
.nor-flair.nor-pc-page::before {
  background:
    radial-gradient(circle at 50% 160px, color-mix(in srgb, var(--pc) 30%, transparent) 0, color-mix(in srgb, var(--pc) 12%, transparent) 180px, transparent 360px),
    linear-gradient(color-mix(in srgb, var(--pc-ground) 86%, transparent), color-mix(in srgb, var(--pc-ground) 86%, transparent)),
    url("/static/images/nor-map.webp") center 30% / cover no-repeat;
}
html:has(> body.nor-flair)::after {
  content: ""; position: fixed; inset: var(--lumo-nav-h, 0px) 0 0 0; z-index: 2147482000; pointer-events: none;
  box-shadow: inset 0 0 200px rgba(0, 0, 0, .78);
}
@media (max-width: 560px) { html:has(> body.nor-flair)::after { box-shadow: inset 0 0 90px rgba(0, 0, 0, .7); } }
[data-theme="vellum"] .nor-flair::before, [data-theme="vellum"]:has(> body.nor-flair)::after { display: none; }

/* Gilt: a page title in engraved capitals, gold-leafed. */
.nor-gilt {
  font-family: var(--font-engraved); font-weight: 700; letter-spacing: .04em; font-variant-ligatures: none;
  background: linear-gradient(180deg, var(--gilt-hi) 0%, var(--gilt) 45%, var(--gilt-lo) 100%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
  filter: drop-shadow(0 2px 0 var(--void)) drop-shadow(0 0 18px color-mix(in srgb, var(--blood-sun) 40%, transparent));
}

/* Flourish: the engraved rule under a gilt title, a blood sun at its heart. --start aligns it left. */
.nor-flourish {
  display: block; width: min(420px, 90%); height: 24px; margin: var(--space-2) auto 0;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 420 24' fill='none' stroke='%23c9942a' stroke-width='1.2'%3E%3Cpath d='M10 12H168M252 12H410'/%3E%3Cpath d='M40 8H160M260 8H380' opacity='.45'/%3E%3Cpath d='M168 12c10-9 20-9 28 0M252 12c-10-9-20-9-28 0M168 12c10 9 20 9 28 0M252 12c-10 9-20 9-28 0'/%3E%3Ccircle cx='210' cy='12' r='9' stroke-width='1'/%3E%3Ccircle cx='210' cy='12' r='6' fill='%23c43a2c' stroke='%23e0ab45'/%3E%3Ccircle cx='10' cy='12' r='2' fill='%23c9942a'/%3E%3Ccircle cx='410' cy='12' r='2' fill='%23c9942a'/%3E%3C/svg%3E") center / contain no-repeat;
}
.nor-flourish--start { width: min(320px, 90%); margin-left: 0; background-position: left center; }

/* Engraved plates: Folios on flair pages gain depth, a warm top light and gilt corners. */
.nor-flair .nor-folio:not(.nor-folio--sunken) {
  position: relative;
  background-color: var(--ground-raised);
  background-image: linear-gradient(180deg, color-mix(in srgb, var(--gilt) 6%, var(--ground-raised)), var(--ground-raised) 140px);
  border-color: color-mix(in srgb, var(--gilt-lo) 35%, var(--line));
  box-shadow: 0 14px 34px rgba(0, 0, 0, .5), inset 0 1px 0 color-mix(in srgb, var(--gilt-hi) 10%, transparent);
}
.nor-flair .nor-folio:not(.nor-folio--sunken)::before {
  content: ""; position: absolute; inset: 5px; pointer-events: none; opacity: .7;
  --m: var(--gilt-lo);
  background:
    linear-gradient(var(--m), var(--m)) top left / 14px 1px no-repeat, linear-gradient(var(--m), var(--m)) top left / 1px 14px no-repeat,
    linear-gradient(var(--m), var(--m)) top right / 14px 1px no-repeat, linear-gradient(var(--m), var(--m)) top right / 1px 14px no-repeat,
    linear-gradient(var(--m), var(--m)) bottom left / 14px 1px no-repeat, linear-gradient(var(--m), var(--m)) bottom left / 1px 14px no-repeat,
    linear-gradient(var(--m), var(--m)) bottom right / 14px 1px no-repeat, linear-gradient(var(--m), var(--m)) bottom right / 1px 14px no-repeat;
}
.nor-flair .nor-folio .nor-eyebrow { color: color-mix(in srgb, var(--gilt) 75%, var(--ink-muted)); }
[data-theme="vellum"] .nor-flair .nor-folio:not(.nor-folio--sunken) { box-shadow: var(--shadow-deep); }

/* Labeled rule: a section's name between two fading lines. */
.nor-rule--label {
  display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: var(--space-4);
  height: auto; margin: 0; background: none;
  font: 700 15px/18px var(--font-engraved); letter-spacing: .18em; text-transform: uppercase; color: var(--ink-faint);
}
.nor-rule--label::before { content: ""; height: 1px; background: linear-gradient(to right, transparent, var(--gilt-lo)); }
.nor-rule--label::after { content: ""; height: 1px; background: linear-gradient(to left, transparent, var(--gilt-lo)); }
@media (max-width: 560px) { .nor-rule--label { font-size: 13px; letter-spacing: .12em; gap: var(--space-3); } }

/* Inspiration: two sun pips, lit when held. Round, never the Relic's diamond. */
.nor-pips { display: inline-flex; gap: 6px; align-items: center; min-height: 18px; }
.nor-pips i { width: 11px; height: 11px; border-radius: 50%; border: 1.5px solid var(--gilt-lo); }
.nor-pips i.is-lit {
  border-color: var(--lumo-bright);
  background: radial-gradient(circle at 35% 30%, var(--gilt-hi), var(--lumo) 70%);
  box-shadow: 0 0 8px color-mix(in srgb, var(--lumo-bright) 60%, transparent);
}

/* A painting hung on the page: gilt frame and a brass plaque under it. */
.nor-hung { display: grid; justify-items: center; gap: var(--space-3); margin: 0; }
.nor-hung img {
  display: block; width: 100%; height: auto; padding: 10px;
  background: linear-gradient(135deg, var(--gilt-lo), var(--gilt) 22%, var(--gilt-lo) 48%, var(--gilt) 74%, var(--gilt-lo));
  box-shadow: 0 0 0 1px var(--void), 0 24px 60px rgba(0, 0, 0, .8), inset 0 0 0 1px color-mix(in srgb, var(--gilt-hi) 40%, transparent);
}
.nor-plaque {
  padding: 6px 22px; font: 700 14px/18px var(--font-engraved); letter-spacing: .14em; color: var(--on-lumo);
  background: linear-gradient(180deg, var(--gilt-hi), var(--gilt) 60%, var(--gilt-lo)); box-shadow: 0 2px 6px rgba(0, 0, 0, .6);
}
@media (max-width: 560px) { .nor-hung img { padding: 6px; } .nor-plaque { font-size: 13px; padding: 5px 14px; } }

/* Hovered linked Folios on flair pages keep their hover (the plate would hide it). */
.nor-flair .nor-folio--link:not(.nor-folio--sunken):hover { background-color: var(--ground-hover); border-color: color-mix(in srgb, var(--gilt) 55%, var(--line-strong)); }

/* ── Lumo flair: the DM pages' atmosphere (Zack, 2026-10-31) ─────────────────
   Put .nor-flair.nor-flair--lumo on <body>. White light falls from above through the Relic (right of the title),
   its eight Shards hang around it; gilt titles turn white-gold, the flourish carries the
   Relic, and plates are lit white instead of warm. Vellum drops the sky like the rest. */
.nor-flair--lumo::before {
  height: 620px;
  background:
    url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%20720%20420%27%20fill%3D%27none%27%20stroke-linejoin%3D%27miter%27%3E%3Cg%20opacity%3D%27.72%27%3E%3Cg%20stroke%3D%27%23fff8e7%27%20stroke-width%3D%271.2%27%20stroke-opacity%3D%27.7%27%3E%3Cpath%20d%3D%27M360%2040%20280%20170%20344%20192Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.3%27%2F%3E%3Cpath%20d%3D%27M360%2040%20344%20192%20440%20170Z%27%20fill%3D%27%23f2c14e%27%20fill-opacity%3D%27.16%27%2F%3E%3Cpath%20d%3D%27M280%20170%20344%20192%20360%20330Z%27%20fill%3D%27%23f2c14e%27%20fill-opacity%3D%27.09%27%2F%3E%3Cpath%20d%3D%27M344%20192%20440%20170%20360%20330Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.04%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28170%2092%29%20rotate%28-20%29%20scale%281.1%29%27%20opacity%3D%270.55%27%3E%3Cpath%20d%3D%27M0-13%2010%200-4%2013-10%200Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.18%27%20stroke%3D%27%23f2c14e%27%20stroke-width%3D%271.1%27%2F%3E%3Cpath%20d%3D%27M0-13-4%2013%27%20stroke%3D%27%23fff8e7%27%20stroke-width%3D%27.8%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28552%2070%29%20rotate%2825%29%20scale%280.9%29%27%20opacity%3D%270.5%27%3E%3Cpath%20d%3D%27M0-13%2010%200-4%2013-10%200Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.18%27%20stroke%3D%27%23f2c14e%27%20stroke-width%3D%271.1%27%2F%3E%3Cpath%20d%3D%27M0-13-4%2013%27%20stroke%3D%27%23fff8e7%27%20stroke-width%3D%27.8%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28112%20232%29%20rotate%2840%29%20scale%280.8%29%27%20opacity%3D%270.32%27%3E%3Cpath%20d%3D%27M0-13%2010%200-4%2013-10%200Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.18%27%20stroke%3D%27%23f2c14e%27%20stroke-width%3D%271.1%27%2F%3E%3Cpath%20d%3D%27M0-13-4%2013%27%20stroke%3D%27%23fff8e7%27%20stroke-width%3D%27.8%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28612%20214%29%20rotate%28-35%29%20scale%281.2%29%27%20opacity%3D%270.4%27%3E%3Cpath%20d%3D%27M0-13%2010%200-4%2013-10%200Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.18%27%20stroke%3D%27%23f2c14e%27%20stroke-width%3D%271.1%27%2F%3E%3Cpath%20d%3D%27M0-13-4%2013%27%20stroke%3D%27%23fff8e7%27%20stroke-width%3D%27.8%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28236%20332%29%20rotate%2815%29%20scale%280.7%29%27%20opacity%3D%270.28%27%3E%3Cpath%20d%3D%27M0-13%2010%200-4%2013-10%200Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.18%27%20stroke%3D%27%23f2c14e%27%20stroke-width%3D%271.1%27%2F%3E%3Cpath%20d%3D%27M0-13-4%2013%27%20stroke%3D%27%23fff8e7%27%20stroke-width%3D%27.8%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28498%20322%29%20rotate%28-10%29%20scale%280.75%29%27%20opacity%3D%270.32%27%3E%3Cpath%20d%3D%27M0-13%2010%200-4%2013-10%200Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.18%27%20stroke%3D%27%23f2c14e%27%20stroke-width%3D%271.1%27%2F%3E%3Cpath%20d%3D%27M0-13-4%2013%27%20stroke%3D%27%23fff8e7%27%20stroke-width%3D%27.8%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%2852%20118%29%20rotate%2860%29%20scale%280.6%29%27%20opacity%3D%270.22%27%3E%3Cpath%20d%3D%27M0-13%2010%200-4%2013-10%200Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.18%27%20stroke%3D%27%23f2c14e%27%20stroke-width%3D%271.1%27%2F%3E%3Cpath%20d%3D%27M0-13-4%2013%27%20stroke%3D%27%23fff8e7%27%20stroke-width%3D%27.8%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28672%20112%29%20rotate%28-50%29%20scale%280.65%29%27%20opacity%3D%270.24%27%3E%3Cpath%20d%3D%27M0-13%2010%200-4%2013-10%200Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.18%27%20stroke%3D%27%23f2c14e%27%20stroke-width%3D%271.1%27%2F%3E%3Cpath%20d%3D%27M0-13-4%2013%27%20stroke%3D%27%23fff8e7%27%20stroke-width%3D%27.8%27%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E") right -140px top 24px / 720px 420px no-repeat,
    radial-gradient(circle at calc(100% - 220px) 210px, color-mix(in srgb, var(--lumen) 16%, transparent) 0, color-mix(in srgb, var(--lumo-bright) 7%, transparent) 150px, transparent 320px),
    radial-gradient(ellipse 220px 600px at calc(100% - 220px) 0, color-mix(in srgb, var(--lumen) 13%, transparent), transparent 70%),
    radial-gradient(ellipse 70px 520px at calc(100% - 220px) 0, color-mix(in srgb, var(--lumen) 12%, transparent), transparent 75%);
  filter: none;
  -webkit-mask: linear-gradient(to bottom, #000 22%, transparent 62%);
          mask: linear-gradient(to bottom, #000 22%, transparent 62%);
}
/* A phone's title fills the width: the Relic hangs to the right of it. */
@media (max-width: 560px) {
  .nor-flair--lumo::before {
    height: 420px;
    background:
      url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%20720%20420%27%20fill%3D%27none%27%20stroke-linejoin%3D%27miter%27%3E%3Cg%20opacity%3D%27.72%27%3E%3Cg%20stroke%3D%27%23fff8e7%27%20stroke-width%3D%271.2%27%20stroke-opacity%3D%27.7%27%3E%3Cpath%20d%3D%27M360%2040%20280%20170%20344%20192Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.3%27%2F%3E%3Cpath%20d%3D%27M360%2040%20344%20192%20440%20170Z%27%20fill%3D%27%23f2c14e%27%20fill-opacity%3D%27.16%27%2F%3E%3Cpath%20d%3D%27M280%20170%20344%20192%20360%20330Z%27%20fill%3D%27%23f2c14e%27%20fill-opacity%3D%27.09%27%2F%3E%3Cpath%20d%3D%27M344%20192%20440%20170%20360%20330Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.04%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28170%2092%29%20rotate%28-20%29%20scale%281.1%29%27%20opacity%3D%270.55%27%3E%3Cpath%20d%3D%27M0-13%2010%200-4%2013-10%200Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.18%27%20stroke%3D%27%23f2c14e%27%20stroke-width%3D%271.1%27%2F%3E%3Cpath%20d%3D%27M0-13-4%2013%27%20stroke%3D%27%23fff8e7%27%20stroke-width%3D%27.8%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28552%2070%29%20rotate%2825%29%20scale%280.9%29%27%20opacity%3D%270.5%27%3E%3Cpath%20d%3D%27M0-13%2010%200-4%2013-10%200Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.18%27%20stroke%3D%27%23f2c14e%27%20stroke-width%3D%271.1%27%2F%3E%3Cpath%20d%3D%27M0-13-4%2013%27%20stroke%3D%27%23fff8e7%27%20stroke-width%3D%27.8%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28112%20232%29%20rotate%2840%29%20scale%280.8%29%27%20opacity%3D%270.32%27%3E%3Cpath%20d%3D%27M0-13%2010%200-4%2013-10%200Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.18%27%20stroke%3D%27%23f2c14e%27%20stroke-width%3D%271.1%27%2F%3E%3Cpath%20d%3D%27M0-13-4%2013%27%20stroke%3D%27%23fff8e7%27%20stroke-width%3D%27.8%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28612%20214%29%20rotate%28-35%29%20scale%281.2%29%27%20opacity%3D%270.4%27%3E%3Cpath%20d%3D%27M0-13%2010%200-4%2013-10%200Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.18%27%20stroke%3D%27%23f2c14e%27%20stroke-width%3D%271.1%27%2F%3E%3Cpath%20d%3D%27M0-13-4%2013%27%20stroke%3D%27%23fff8e7%27%20stroke-width%3D%27.8%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28236%20332%29%20rotate%2815%29%20scale%280.7%29%27%20opacity%3D%270.28%27%3E%3Cpath%20d%3D%27M0-13%2010%200-4%2013-10%200Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.18%27%20stroke%3D%27%23f2c14e%27%20stroke-width%3D%271.1%27%2F%3E%3Cpath%20d%3D%27M0-13-4%2013%27%20stroke%3D%27%23fff8e7%27%20stroke-width%3D%27.8%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28498%20322%29%20rotate%28-10%29%20scale%280.75%29%27%20opacity%3D%270.32%27%3E%3Cpath%20d%3D%27M0-13%2010%200-4%2013-10%200Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.18%27%20stroke%3D%27%23f2c14e%27%20stroke-width%3D%271.1%27%2F%3E%3Cpath%20d%3D%27M0-13-4%2013%27%20stroke%3D%27%23fff8e7%27%20stroke-width%3D%27.8%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%2852%20118%29%20rotate%2860%29%20scale%280.6%29%27%20opacity%3D%270.22%27%3E%3Cpath%20d%3D%27M0-13%2010%200-4%2013-10%200Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.18%27%20stroke%3D%27%23f2c14e%27%20stroke-width%3D%271.1%27%2F%3E%3Cpath%20d%3D%27M0-13-4%2013%27%20stroke%3D%27%23fff8e7%27%20stroke-width%3D%27.8%27%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%27translate%28672%20112%29%20rotate%28-50%29%20scale%280.65%29%27%20opacity%3D%270.24%27%3E%3Cpath%20d%3D%27M0-13%2010%200-4%2013-10%200Z%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.18%27%20stroke%3D%27%23f2c14e%27%20stroke-width%3D%271.1%27%2F%3E%3Cpath%20d%3D%27M0-13-4%2013%27%20stroke%3D%27%23fff8e7%27%20stroke-width%3D%27.8%27%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E") right -60px top 6px / 340px 198px no-repeat,
      radial-gradient(circle at calc(100% - 110px) 100px, color-mix(in srgb, var(--lumen) 14%, transparent) 0, transparent 160px),
      radial-gradient(ellipse 110px 360px at calc(100% - 110px) 0, color-mix(in srgb, var(--lumen) 12%, transparent), transparent 70%);
  }
}
.nor-flair--lumo .nor-gilt {
  font-family: var(--font-engraved); letter-spacing: .04em;
  background: linear-gradient(180deg, var(--lumen) 0%, var(--gilt-hi) 45%, var(--gilt) 100%);
  -webkit-background-clip: text; background-clip: text;
  filter: drop-shadow(0 2px 0 var(--void)) drop-shadow(0 0 20px color-mix(in srgb, var(--lumen) 30%, transparent));
}
.nor-flair--lumo .nor-flourish { background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%20420%2024%27%20fill%3D%27none%27%20stroke%3D%27%23e0ab45%27%20stroke-width%3D%271.2%27%3E%3Cpath%20d%3D%27M10%2012H190M230%2012H410%27%2F%3E%3Cpath%20d%3D%27M40%208H170M250%208H380%27%20opacity%3D%27.45%27%2F%3E%3Cpath%20d%3D%27M190%2012l8-6M190%2012l8%206M230%2012l-8-6M230%2012l-8%206%27%20opacity%3D%27.7%27%2F%3E%3Ccircle%20cx%3D%27210%27%20cy%3D%2712%27%20r%3D%2711%27%20fill%3D%27%23fff8e7%27%20fill-opacity%3D%27.14%27%20stroke%3D%27none%27%2F%3E%3Cg%20stroke%3D%27none%27%3E%3Cpath%20d%3D%27M210%201%20201%2012%20208%2014Z%27%20fill%3D%27%23f2c14e%27%2F%3E%3Cpath%20d%3D%27M210%201%20208%2014%20219%2012Z%27%20fill%3D%27%23c9942a%27%2F%3E%3Cpath%20d%3D%27M201%2012%20208%2014%20210%2023Z%27%20fill%3D%27%2386601a%27%2F%3E%3Cpath%20d%3D%27M208%2014%20219%2012%20210%2023Z%27%20fill%3D%27%235a3d0c%27%2F%3E%3C%2Fg%3E%3Ccircle%20cx%3D%2710%27%20cy%3D%2712%27%20r%3D%272%27%20fill%3D%27%23e0ab45%27%2F%3E%3Ccircle%20cx%3D%27410%27%20cy%3D%2712%27%20r%3D%272%27%20fill%3D%27%23e0ab45%27%2F%3E%3C%2Fsvg%3E"); }
.nor-flair--lumo .nor-folio:not(.nor-folio--sunken) {
  background-image: linear-gradient(180deg, color-mix(in srgb, var(--lumen) 5%, var(--ground-raised)), var(--ground-raised) 140px);
  border-color: color-mix(in srgb, var(--lumo) 26%, var(--line));
  box-shadow: 0 14px 34px rgba(0, 0, 0, .5), inset 0 1px 0 color-mix(in srgb, var(--lumen) 14%, transparent);
}
.nor-flair--lumo .nor-folio:not(.nor-folio--sunken)::before { --m: color-mix(in srgb, var(--lumen) 45%, var(--lumo)); opacity: .55; }
.nor-flair--lumo details.nor-folio::before { content: none; }
.nor-flair--lumo .nor-folio--link:not(.nor-folio--sunken):hover { border-color: var(--lumo); background-color: var(--ground-hover); }
[data-theme="vellum"] .nor-flair--lumo .nor-gilt { filter: none; }

/* ── Waypoint: the Chronicle map ───────────────────────────────────────── */
.nor-map { position: relative; overflow: hidden; background: var(--void); border: 1px solid var(--line); border-radius: var(--radius-2); }
.nor-map__art { display: block; width: 100%; height: auto; filter: brightness(.55) saturate(.7) sepia(.12); }
[data-theme="vellum"] .nor-map__art { filter: saturate(.8) sepia(.18); }
.nor-map__trail { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; overflow: visible; }
.nor-map__trail path { fill: none; stroke: var(--lumo); stroke-width: 2; stroke-dasharray: 2 5; stroke-linecap: round; vector-effect: non-scaling-stroke; }
.nor-waypoint {
  position: absolute; left: var(--x); top: var(--y);
  width: 12px; height: 12px; margin: -6px 0 0 -6px; padding: 0; border: 0; border-radius: 50%; cursor: pointer;
  background: var(--ink-muted); box-shadow: 0 0 0 2px var(--void);
}
.nor-waypoint:hover { background: var(--ink); }
.nor-waypoint.is-current {
  width: 16px; height: 16px; margin: -8px 0 0 -8px; background: var(--lumo);
  box-shadow: 0 0 0 2px var(--void), 0 0 0 7px color-mix(in srgb, var(--lumo) 22%, transparent), var(--shadow-glow);
}
.nor-waypoint__tip {
  position: absolute; left: var(--x); top: var(--y); transform: translate(-50%, calc(-100% - 16px));
  width: max-content; max-width: 280px; padding: 10px 14px 12px;
  background: var(--ground-overlay); color: var(--ink);
  border: 1px solid var(--line); border-radius: var(--radius-2); box-shadow: var(--shadow-deep);
}
.nor-waypoint__tip .nor-eyebrow { font-size: 13px; line-height: 16px; }
.nor-waypoint__title { display: block; margin: 3px 0 2px; font: 700 18px/24px var(--font-display); }
.nor-waypoint__place { display: block; font: 500 13px/18px var(--font-sans); color: var(--ink-muted); }

/* ── Character plate and heraldry ──────────────────────────────────────── */
/* Each character: accent, ground, and their own face for their name (font, weight, style, case, tracking,
   and a size factor so the faces sit at one visual size). */
.nor-pc-cal       { --pc: var(--pc-cal);       --pc-ground: var(--pc-cal-ground);       --pc-font: "Cinzel Decorative", var(--font-engraved); --pc-weight: 700; --pc-track: .05em; --pc-size: .82; }
.nor-pc-ashann    { --pc: var(--pc-ashann);    --pc-ground: var(--pc-ashann-ground);    --pc-font: var(--font-engraved); --pc-weight: 600; --pc-track: .12em; --pc-size: .82; }
.nor-pc-riordan   { --pc: var(--pc-riordan);   --pc-ground: var(--pc-riordan-ground);   --pc-font: Lora, var(--font-display); --pc-weight: 700; --pc-style: italic; --pc-track: .02em; }
.nor-pc-voldsom   { --pc: var(--pc-voldsom);   --pc-ground: var(--pc-voldsom-ground);   --pc-font: var(--font-engraved); --pc-weight: 700; --pc-case: uppercase; --pc-track: .16em; --pc-size: .78; }
.nor-pc-valdani   { --pc: var(--pc-valdani);   --pc-ground: var(--pc-valdani-ground);   --pc-font: "Cormorant Garamond", var(--font-display); --pc-weight: 600; --pc-style: italic; --pc-track: .01em; --pc-size: 1.2; }
.nor-pc-pain      { --pc: var(--pc-pain);      --pc-ground: var(--pc-pain-ground);      --pc-font: var(--font-engraved); --pc-weight: 400; --pc-track: .06em; --pc-size: .82; }
.nor-pc-charlotte { --pc: var(--pc-charlotte); --pc-ground: var(--pc-charlotte-ground); --pc-font: var(--font-engraved); --pc-weight: 400; --pc-track: .08em; --pc-size: .82; }
.nor-pc-page { background: var(--pc-ground, var(--ground)); }

.nor-plate {
  display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--space-5); align-items: center;
  padding: var(--space-6) var(--space-5);
  background: var(--pc-ground, var(--ground)); color: var(--ink);
}
.nor-plate__portrait {
  display: block; width: 112px; height: 112px; object-fit: cover; border-radius: 50%;
  border: 2px solid var(--pc, var(--line-strong));
  box-shadow: 0 0 0 5px var(--pc-ground, var(--ground)), 0 0 0 6px color-mix(in srgb, var(--pc, var(--line-strong)) 45%, transparent);
}
.nor-plate__name {
  margin: 4px 0 6px; font: 700 44px/48px var(--font-display); font-variation-settings: 'opsz' 30; text-wrap: balance;
  font-family: var(--pc-font, var(--font-display)); font-size: calc(44px * var(--pc-size, 1));
  font-weight: var(--pc-weight, 700); font-style: var(--pc-style, normal);
  text-transform: var(--pc-case, none); letter-spacing: var(--pc-track, -.01em);
  color: var(--pc, var(--ink));
  text-shadow: 0 1px 0 var(--void), 0 0 18px color-mix(in srgb, var(--pc, var(--lumo)) 40%, transparent);
}
.nor-plate__line { margin: 0; font: 500 15px/22px var(--font-sans); color: var(--ink-muted); }
.nor-plate__stats { display: flex; flex-wrap: wrap; gap: var(--space-2) var(--space-6); margin: var(--space-4) 0 0; padding: 0; }
.nor-plate__stats div { display: grid; }
.nor-plate__stats dt { font: 500 13px/16px var(--font-caps); letter-spacing: .06em; color: var(--ink-muted); }
.nor-plate__stats dd { margin: 0; font: 700 22px/28px var(--font-display); font-variant-numeric: lining-nums; }
@media (max-width: 560px) {
  .nor-plate { grid-template-columns: 1fr; justify-items: center; text-align: center; }
  .nor-plate__stats { justify-content: center; }
  .nor-plate__name { font-size: calc(34px * var(--pc-size, 1)); line-height: 40px; }
}

/* ── Threshold: the landing ────────────────────────────────────────────── */
.nor-threshold {
  position: relative; isolation: isolate;
  display: grid; place-items: center; min-height: 100svh;
  padding: var(--space-9) var(--space-4) var(--space-8);
  text-align: center; color: var(--ink);
  background: var(--void); overflow: hidden;
}
.nor-threshold::before {
  content: ""; position: absolute; inset: -12px; z-index: -2;
  background: var(--nor-art, none) center / cover no-repeat;
  filter: blur(3px) saturate(.6);
}
.nor-threshold::after {
  content: ""; position: absolute; inset: 0; z-index: -1;
  background:
    radial-gradient(ellipse 55% 45% at 50% 36%, color-mix(in srgb, var(--lumo) 14%, transparent), transparent 72%),
    radial-gradient(ellipse 120% 90% at 50% 50%, transparent 35%, var(--void) 100%),
    linear-gradient(var(--scrim), var(--scrim));
}
.nor-threshold__inner { display: grid; justify-items: center; gap: var(--space-4); max-width: 720px; }
.nor-threshold__title {
  margin: 0; font: 800 64px/60px var(--font-display); font-variation-settings: 'opsz' 30; letter-spacing: -.015em;
  font-size: clamp(42px, 9vw, 64px); line-height: .94; text-wrap: balance;
}
.nor-threshold__sub { margin: 0; font: 700 18px/22px var(--font-caps); letter-spacing: .32em; color: var(--lumo-text); padding-left: .32em; }
.nor-threshold__line { margin: 0; max-width: 34ch; font: 400 21px/33px var(--font-serif); color: var(--ink-muted); }
.nor-doors { display: grid; grid-template-columns: repeat(2, minmax(0, 248px)); gap: var(--space-5); justify-content: center; margin-top: var(--space-6); width: 100%; }
@media (max-width: 560px) { .nor-doors { grid-template-columns: minmax(0, 320px); } }
.nor-door {
  --c: var(--cut-lg);
  position: relative; isolation: isolate;
  display: grid; justify-items: center; gap: var(--space-2);
  padding: var(--space-6) var(--space-5) var(--space-5);
  color: var(--ink); text-decoration: none; text-align: center; cursor: pointer;
  transition: filter 240ms ease;
}
.nor-door::before, .nor-door::after {
  content: ""; position: absolute; z-index: -1;
  clip-path: polygon(var(--c) 0, calc(100% - var(--c)) 0, 100% var(--c), 100% calc(100% - var(--c)), calc(100% - var(--c)) 100%, var(--c) 100%, 0 calc(100% - var(--c)), 0 var(--c));
  transition: background-color 160ms ease;
}
.nor-door::before { inset: 0; background: var(--line-strong); }
.nor-door::after { --c: calc(var(--cut-lg) - .6px); inset: 1px; background: color-mix(in srgb, var(--ground-raised) 88%, transparent); }
.nor-door .nor-i { width: 32px; height: 32px; color: var(--lumo-text); margin-bottom: var(--space-2); }
.nor-door__name { font: 700 22px/28px var(--font-display); font-variation-settings: 'opsz' 22; }
.nor-door__text { font: 500 13px/18px var(--font-sans); color: var(--ink-muted); }
.nor-door:hover { filter: drop-shadow(var(--shadow-glow)); }
.nor-door:hover::before { background: var(--lumo); }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { transition-duration: 1ms !important; }
  .nor-kindle path { animation: none; opacity: .7; }
  .nor-recorder.is-live .nor-recorder__button { animation: none; }
}
