/* Visual language: nico-martin LFM2.5 WebGPU Space (editorial lab: paper + grid,
   hairlines, numbered smallcaps sections) × summary_audit.html (dark mode, viewer). */

:root {
  --paper: #faf9f6;
  --ink: #1a1a18;
  --muted: #8a8781;
  --hair: #e3e1db;
  --card: #ffffff;
  --soft: #f3f1ec;
  --accent: #b45309;
  --ok-bg: #e5f0e3;  --ok-ink: #2f5e2f;
  --warn-bg: #f7ecd4; --warn-ink: #8a5a10;
  --fail-bg: #f8e2e0; --fail-ink: #a13030;
}
@media (prefers-color-scheme: dark) {
  :root {
    --paper: #161614; --ink: #e6e4df; --muted: #8f8c85; --hair: #2e2d2a;
    --card: #1d1d1a; --soft: #232320; --accent: #d98a3d;
    --ok-bg: #223a22; --ok-ink: #a8d4a4;
    --warn-bg: #3d2f12; --warn-ink: #ecd39a;
    --fail-bg: #401f1d; --fail-ink: #e8a9a2;
  }
}

* { box-sizing: border-box; }
body {
  font: 15px/1.5 -apple-system, "Helvetica Neue", sans-serif;
  color: var(--ink);
  background:
    linear-gradient(var(--hair) 1px, transparent 1px) 0 0 / 100% 56px,
    linear-gradient(90deg, var(--hair) 1px, transparent 1px) 0 0 / 56px 100%,
    var(--paper);
  background-blend-mode: soft-light, soft-light, normal;
  max-width: 960px; margin: 0 auto; padding: 0 1.2rem 4rem;
}

.eyebrow { font-size: 0.72em; letter-spacing: 0.18em; text-transform: uppercase;
           color: var(--muted); }
header.masthead { padding: 2.2rem 0 1.2rem; border-bottom: 1px solid var(--ink); }
header.masthead h1 { font-size: 2.6em; line-height: 1.05; margin: 0.25em 0 0.15em;
                     letter-spacing: -0.02em; }
header.masthead .sub { font-family: Georgia, serif; font-style: italic; color: var(--muted);
                       max-width: 40rem; }
.masthead-row { display: flex; align-items: flex-end; gap: 1.5rem; justify-content: space-between;
                position: relative; }
.bubble { position: absolute; right: 128px; top: -2px; max-width: 240px;
  background: var(--card); border: 1px solid var(--ink); border-radius: 8px;
  padding: 7px 12px; font-size: 0.82em; line-height: 1.35; z-index: 3;
  transform-origin: bottom right; animation: bubblepop 0.25s ease-out; }
.bubble::after { content: ""; position: absolute; right: -7px; bottom: 10px;
  width: 10px; height: 10px; background: var(--card);
  border-right: 1px solid var(--ink); border-top: 1px solid var(--ink);
  transform: rotate(45deg); }
@keyframes bubblepop { from { transform: scale(0.7); opacity: 0; } to { transform: scale(1); opacity: 1; } }
.botcorner.wave .arm { animation: wave 0.7s ease-in-out 3; }
@keyframes wave { 0%, 100% { transform: rotate(0deg); } 40% { transform: rotate(-26deg); }
                  70% { transform: rotate(12deg); } }
@media (max-width: 640px) { .bubble { display: none; } }
/* busy = an episode is running: the librarian reads along, fast */
.botcorner.busy .pupils { animation-duration: 0.9s; }
.botcorner.busy .page,
.botcorner.busy .arm { animation-duration: 2.1s; }

/* consult = a tool call just fired: reach for the stack, magnifier out */
.botcorner.consult .arm { animation: consult 1s ease-in-out; }
@keyframes consult {
  0%, 100% { transform: rotate(0deg); }
  35% { transform: rotate(-34deg); }
  75% { transform: rotate(-30deg); }
}
.botcorner .stackbook { transform-box: fill-box; transform-origin: center; }
.botcorner.consult .stackbook { animation: booklift 1s ease-in-out; }
@keyframes booklift {
  0%, 100% { transform: translate(0, 0) rotate(0deg); }
  40% { transform: translate(1px, -5px) rotate(-6deg); }
  70% { transform: translate(1px, -4px) rotate(-4deg); }
}
.botcorner .magnifier { opacity: 0; transform-box: fill-box; transform-origin: center; }
.botcorner.consult .magnifier { animation: magsweep 1s ease-in-out; }
@keyframes magsweep {
  0%, 100% { opacity: 0; transform: translate(6px, 6px) scale(0.7); }
  25% { opacity: 1; transform: translate(0, 0) scale(1); }
  45% { opacity: 1; transform: translate(-3px, 1px) scale(1); }
  65% { opacity: 1; transform: translate(2px, -1px) scale(1); }
  85% { opacity: 1; transform: translate(0, 0) scale(1); }
}

/* thought bubble: shown while a model turn is in flight (it really is thinking) */
.thought[hidden] { display: none; }
.thought { position: absolute; right: 108px; top: 6px; background: var(--card);
  border: 1px solid var(--muted); border-radius: 50%; padding: 8px 12px; z-index: 2;
  display: flex; gap: 4px; align-items: center; }
.thought::before, .thought::after { content: ""; position: absolute; background: var(--card);
  border: 1px solid var(--muted); border-radius: 50%; }
.thought::before { width: 8px; height: 8px; right: -10px; bottom: -6px; }
.thought::after { width: 4px; height: 4px; right: -17px; bottom: -13px; }
.thought span { width: 5px; height: 5px; border-radius: 50%; background: var(--muted);
  animation: thinkdots 1.2s infinite; }
.thought span:nth-child(2) { animation-delay: 0.2s; }
.thought span:nth-child(3) { animation-delay: 0.4s; }
@keyframes thinkdots { 0%, 100% { opacity: 0.25; } 40% { opacity: 1; } }
@media (max-width: 640px) { .thought { display: none; } }
@media (prefers-reduced-motion: reduce) { .thought span { animation: none; } }
.masthead-text { min-width: 0; }
.botcorner { width: 120px; flex: 0 0 auto; color: var(--ink); opacity: 0.85; }
.botcorner .pupils { animation: scanline 3.2s infinite; }
@keyframes scanline {                 /* read left-to-right, snap back like a carriage return */
  0%   { transform: translateX(-1.6px); }
  78%  { transform: translateX(1.8px); }
  84%  { transform: translateX(-1.6px); }
  100% { transform: translateX(-1.6px); }
}
.botcorner .page { transform-origin: 58px 90px; animation: pageflip 6.4s infinite; }
@keyframes pageflip {
  0%, 55%  { transform: rotate(0deg); opacity: 1; }
  70%      { transform: rotate(-38deg); opacity: 1; }
  78%      { transform: rotate(-64deg); opacity: 0; }
  79%, 100%{ transform: rotate(0deg); opacity: 0; }
  54.9%    { opacity: 1; }
}
.botcorner .arm { transform-origin: 58px 68px; animation: scribble 6.4s infinite; }
@keyframes scribble {
  0%, 55%, 100% { transform: rotate(0deg); }
  62% { transform: rotate(9deg); }
  70% { transform: rotate(-4deg); }
  76% { transform: rotate(6deg); }
}
@media (max-width: 640px) { .botcorner { display: none; } }
@media (prefers-reduced-motion: reduce) {
  .botcorner .pupils, .botcorner .page, .botcorner .arm { animation: none; }
}

section.block { border: 1px solid var(--hair); background: var(--card);
                border-radius: 4px; margin: 1.4rem 0; }
section.block > .block-head { display: flex; align-items: center; gap: 10px;
  padding: 10px 16px; border-bottom: 1px solid var(--hair); }
.block-num { border: 1px solid var(--hair); border-radius: 50%; width: 26px; height: 26px;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 0.7em; color: var(--muted); }
.block-body { padding: 14px 16px; }

button { padding: 7px 16px; cursor: pointer; border: 1px solid var(--ink);
         border-radius: 3px; background: transparent; color: var(--ink); font: inherit;
         font-size: 0.85em; letter-spacing: 0.06em; text-transform: uppercase; }
button:hover { background: var(--soft); }
button:disabled { opacity: 0.45; cursor: default; }
select, input[type=text] { padding: 7px 10px; font: inherit; border: 1px solid var(--hair);
  border-radius: 3px; min-width: 230px; background: var(--card); color: inherit; }
.meta { color: var(--muted); font-size: 0.85em; }
.reject { color: var(--fail-ink); font-size: 0.9em; }

.caps { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
  border: 1px solid var(--hair); border-radius: 3px; margin: 6px 0 10px; }
.caps > div { padding: 5px 10px; border-right: 1px solid var(--hair); font-size: 0.78em; }
.caps > div:last-child { border-right: none; }
.caps b { display: block; letter-spacing: 0.1em; text-transform: uppercase; font-size: 0.85em;
          color: var(--muted); font-weight: 500; }
.caps.spec { margin: 1rem 0 0.2rem; background: var(--card); }
.caps.spec a { color: inherit; }
footer.gate { margin-top: 2.2rem; border-top: 1px solid var(--hair); padding-top: 0.9rem;
              display: grid; gap: 5px; max-width: 34rem; }
footer.gate a { color: inherit; }
.gatebar { height: 5px; border: 1px solid var(--hair); border-radius: 3px;
           background: var(--card); overflow: hidden; }
.gatebar-fill { height: 100%; width: 0%; background: var(--ink);
                transition: width 0.8s ease-out; }
.health { font-size: 0.9em; }
.health.ok   { color: var(--ok-ink); }
.health.warm { color: var(--warn-ink); }
.health.bad  { color: var(--fail-ink); }

.gen { border: 1px solid var(--hair); border-radius: 4px; padding: 12px 14px;
       margin: 12px 0; background: var(--card); }
.gen h3 { margin: 0 0 8px; font-size: 0.78em; letter-spacing: 0.16em;
          text-transform: uppercase; color: var(--muted); font-weight: 600; }
details.tool { margin: 6px 0; border-left: 2px solid var(--hair); padding-left: 10px; }
details.tool summary { cursor: pointer; font-family: ui-monospace, monospace;
                       font-size: 0.83em; color: var(--muted); }
.actor { font-family: -apple-system, sans-serif; font-size: 0.85em; letter-spacing: 0.1em;
         text-transform: uppercase; color: var(--accent); }
.obs-label { font-size: 0.72em; letter-spacing: 0.1em; text-transform: uppercase;
             color: var(--muted); margin: 6px 0 0; }
details.tool[open] summary { color: var(--ink); }
details.tool pre { margin: 6px 0 2px; padding: 8px 10px; background: var(--soft);
  border-radius: 3px; font-size: 0.78em; overflow: auto; white-space: pre-wrap;
  word-break: break-word; max-height: 260px; }
.assistant { color: var(--muted); font-size: 0.85em; font-style: italic; margin: 4px 0; }
details.think { margin: 5px 0; border-left: 2px dotted var(--hair); padding-left: 10px; }
details.think summary { cursor: pointer; font-size: 0.78em; letter-spacing: 0.08em;
                        text-transform: uppercase; color: var(--muted); }
details.think pre { margin: 6px 0 2px; padding: 8px 10px; background: var(--soft);
  border-radius: 3px; font-size: 0.78em; color: var(--muted); white-space: pre-wrap;
  word-break: break-word; max-height: 220px; overflow-y: auto; font-style: italic; }
.nudge { color: var(--accent); font-size: 0.78em; letter-spacing: 0.08em;
         text-transform: uppercase; }
.coverage { display: inline-block; background: var(--warn-bg); color: var(--warn-ink);
            border-radius: 3px; padding: 0 6px; font-size: 0.75em; margin-left: 6px; }
.spin { display: inline-block; animation: pulse 1.2s infinite; color: var(--muted); }
@keyframes pulse { 50% { opacity: 0.25; } }

.tldr { margin: 10px 0 6px; padding: 12px 14px; background: var(--soft);
        border-radius: 3px; border-left: 3px solid var(--ink);
        font-family: Georgia, serif; font-size: 1.05em; position: relative; }
.tldr.stamped { padding-right: 132px; }   /* text never runs under the stamp */
.stamp { position: absolute; top: 8px; right: 14px; transform: rotate(-8deg);
  color: #a33327; border: 2px solid #a33327; border-radius: 4px;
  box-shadow: inset 0 0 0 1px var(--soft), inset 0 0 0 2px #a33327;
  padding: 3px 10px; font: 600 0.62em/1.3 -apple-system, sans-serif;
  letter-spacing: 0.18em; text-transform: uppercase; text-align: center;
  opacity: 0.82; pointer-events: none; mix-blend-mode: multiply;
  animation: stampin 0.45s cubic-bezier(0.2, 2.2, 0.4, 1); }
@media (prefers-color-scheme: dark) {
  .stamp { color: #e07a6d; border-color: #e07a6d;
           box-shadow: inset 0 0 0 1px var(--soft), inset 0 0 0 2px #e07a6d;
           mix-blend-mode: normal; }
}
@keyframes stampin {
  0%   { transform: rotate(-20deg) scale(2.4); opacity: 0; }
  60%  { transform: rotate(-8deg) scale(0.96); opacity: 0.9; }
  100% { transform: rotate(-8deg) scale(1); opacity: 0.82; }
}
@media (prefers-reduced-motion: reduce) { .stamp { animation: none; } }
.tldr.refusal { color: var(--muted); font-style: italic; background: transparent;
                border: 1px dashed var(--hair); border-left-style: dashed; }
.badges { display: flex; gap: 6px; flex-wrap: wrap; margin: 8px 0 2px; }
.chip { border-radius: 3px; padding: 1px 8px; font-size: 0.78em;
        font-family: ui-monospace, monospace; }
.chip.ok   { background: var(--ok-bg);   color: var(--ok-ink); }
.chip.warn { background: var(--warn-bg); color: var(--warn-ink); }
.chip.fail { background: var(--fail-bg); color: var(--fail-ink); }
.chip.muted{ background: var(--soft);    color: var(--muted); }

.rate { display: flex; gap: 10px; margin: 12px 0; align-items: center; }
.rate button.picked { background: var(--ink); color: var(--paper); }
.viewer { margin-top: 10px; }
.viewer summary { cursor: pointer; font-size: 0.8em; letter-spacing: 0.12em;
                  text-transform: uppercase; color: var(--muted); }
.viewer iframe { width: 100%; height: 420px; border: 1px solid var(--hair);
                 border-radius: 4px; margin-top: 8px; }
