*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html,body{overflow-x:clip}
body{background:var(--color-paper);color:var(--color-ink);font-family:var(--font-body);
  font-size:var(--text-base);line-height:1.75;-webkit-font-smoothing:antialiased}
h1,h2,h3{font-family:var(--font-display);font-style:normal;line-height:1.25;letter-spacing:-.02em;
  overflow-wrap:anywhere;min-width:0}
.tnum{font-variant-numeric:tabular-nums}
.wrap{max-width:1120px;margin:0 auto;padding:0 clamp(1rem,4vw,2rem)}
a{color:var(--color-accent);text-underline-offset:3px}
:focus-visible{outline:2px solid var(--color-focus);outline-offset:3px}

/* N2 floating chip */
.navchip{position:fixed;top:var(--space-md);left:50%;transform:translateX(-50%);z-index:50;
  display:flex;align-items:center;gap:var(--space-md);background:oklch(100% 0 0 / .86);
  backdrop-filter:blur(12px);border:var(--rule);border-radius:999px;
  padding:var(--space-xs) var(--space-xs) var(--space-xs) var(--space-lg);
  box-shadow:0 1px 2px oklch(22% .03 250 / .06),0 8px 24px oklch(22% .03 250 / .07)}
.navchip .mark{font-family:var(--font-mono);font-size:var(--text-sm);font-weight:600;letter-spacing:-.01em}
.navchip .mark b{color:var(--color-accent)}
.navchip .sep{width:1px;height:18px;background:var(--color-rule)}
.navchip a.plain{font-size:var(--text-sm);color:var(--color-ink-2);text-decoration:none}
.navchip a.plain:hover{color:var(--color-ink)}
.btn{font-family:var(--font-body);font-size:var(--text-sm);font-weight:600;border-radius:999px;
  border:1px solid transparent;padding:.5rem 1.1rem;cursor:pointer;white-space:nowrap;
  transition:background var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out),
             transform var(--dur-fast) var(--ease-out)}
.btn-primary{background:var(--color-accent);color:oklch(100% 0 0)}
.btn-primary:hover{background:oklch(46% .19 255)}
.btn-primary:active{transform:translateY(1px)}
.btn-ghost{background:transparent;color:var(--color-ink);border-color:var(--color-rule)}
.btn-ghost:hover{background:var(--color-paper-2)}
.btn[disabled]{opacity:.45;cursor:not-allowed}

/* screens */
.screen{display:none;padding-top:calc(var(--space-3xl) + 1rem)}
.screen.on{display:block}

/* intake */
.lede{max-width:46ch;margin-bottom:var(--space-xl)}
.lede h1{font-size:var(--text-3xl);margin-bottom:var(--space-sm)}
.lede p{color:var(--color-ink-2)}
.drop{border:2px dashed var(--color-rule);border-radius:var(--radius-lg);background:var(--color-paper-2);
  padding:var(--space-2xl) var(--space-xl);text-align:center;
  transition:background var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out)}
.drop.hot{border-color:var(--color-accent);background:var(--color-accent-soft)}
.drop .big{font-family:var(--font-display);font-size:var(--text-xl);font-weight:650;margin-bottom:var(--space-2xs)}
.drop .sub{color:var(--color-ink-3);font-size:var(--text-sm);margin-bottom:var(--space-md)}
.privacy{display:flex;gap:var(--space-sm);align-items:flex-start;margin-top:var(--space-md);
  padding:var(--space-md);border:var(--rule);border-left:3px solid var(--color-accent);
  border-radius:var(--radius);background:oklch(100% 0 0);font-size:var(--text-sm);color:var(--color-ink-2)}
.cols{display:grid;grid-template-columns:1.15fr .85fr;gap:var(--space-xl);margin-top:var(--space-2xl)}
@media (max-width:860px){.cols{grid-template-columns:minmax(0,1fr)}}
h2.sec{font-size:var(--text-xl);margin-bottom:var(--space-sm)}
.tabs{display:flex;gap:var(--space-2xs);margin-bottom:var(--space-sm)}
.tab{font-family:var(--font-body);font-size:var(--text-sm);padding:.35rem .85rem;border-radius:var(--radius);
  border:var(--rule);background:oklch(100% 0 0);color:var(--color-ink-2);cursor:pointer}
.tab[aria-selected="true"]{background:var(--color-ink);color:var(--color-paper);border-color:var(--color-ink)}
pre.cmd{background:oklch(26% .03 250);color:oklch(94% .01 250);font-family:var(--font-mono);
  font-size:var(--text-xs);line-height:1.8;padding:var(--space-md);border-radius:var(--radius);
  overflow-x:auto;position:relative}
.copy{position:absolute;top:.5rem;right:.5rem;font-size:var(--text-xs);font-family:var(--font-body);
  background:oklch(100% 0 0 / .1);color:oklch(94% .01 250);border:1px solid oklch(100% 0 0 / .18);
  border-radius:4px;padding:.2rem .5rem;cursor:pointer}
.copy:hover{background:oklch(100% 0 0 / .2)}
.aside{background:var(--color-paper-2);border:var(--rule);border-radius:var(--radius);padding:var(--space-md)}
.aside h3{font-size:var(--text-base);margin-bottom:var(--space-xs)}
.aside p{font-size:var(--text-sm);color:var(--color-ink-2)}
.quote{font-family:var(--font-mono);font-size:var(--text-xs);line-height:1.9;color:var(--color-ink-2);
  background:oklch(100% 0 0);border:var(--rule);border-radius:4px;padding:var(--space-sm);margin-top:var(--space-xs)}

/* stat hero */
.stat-hero{border-bottom:var(--rule);padding-bottom:var(--space-xl);margin-bottom:var(--space-xl)}
.figure{font-family:var(--font-display);font-size:var(--text-figure);font-weight:700;line-height:.9;
  letter-spacing:-.045em;color:var(--color-alert)}
.figure .unit{font-size:.3em;font-weight:650;color:var(--color-ink);letter-spacing:-.01em;margin-left:.15em}
.qualifier{font-family:var(--font-display);font-size:var(--text-2xl);font-weight:650;margin-top:var(--space-sm);max-width:30ch}
.sub-q{color:var(--color-ink-2);margin-top:var(--space-xs)}
.meta-row{display:flex;flex-wrap:wrap;gap:var(--space-lg);margin-top:var(--space-lg);
  font-size:var(--text-sm);color:var(--color-ink-2)}
.meta-row b{color:var(--color-ink);font-weight:650}

/* supporting stats */
.strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-md);margin-bottom:var(--space-xl)}
@media (max-width:860px){.strip{grid-template-columns:repeat(2,minmax(0,1fr))}}
.stat{border-top:2px solid var(--color-ink);padding-top:var(--space-sm)}
.stat .n{font-family:var(--font-display);font-size:var(--text-2xl);font-weight:700;line-height:1.1}
.stat .l{font-size:var(--text-sm);color:var(--color-ink-2)}
.block{margin-bottom:var(--space-2xl)}
.block > h2{font-size:var(--text-xl);margin-bottom:var(--space-2xs)}
.block > .note{font-size:var(--text-sm);color:var(--color-ink-3);margin-bottom:var(--space-md)}
.chart{border:var(--rule);border-radius:var(--radius);background:oklch(100% 0 0);padding:var(--space-lg)}
table{width:100%;border-collapse:collapse;font-size:var(--text-sm)}
th{text-align:left;font-weight:650;font-size:var(--text-xs);letter-spacing:.04em;color:var(--color-ink-3);
  padding:0 var(--space-sm) var(--space-xs);border-bottom:var(--rule)}
td{padding:var(--space-sm);border-bottom:var(--rule);vertical-align:top}
tr:last-child td{border-bottom:none}
tbody tr:hover td{background:var(--color-paper-2)}
td.num{text-align:right;font-variant-numeric:tabular-nums;font-weight:650;white-space:nowrap}
td .why{display:block;color:var(--color-ink-2);font-size:var(--text-xs);margin-top:2px}
code.path{font-family:var(--font-mono);font-size:var(--text-xs);background:var(--color-paper-3);
  padding:.1em .4em;border-radius:3px}
.bar{height:6px;border-radius:3px;background:var(--color-accent);display:block;margin-top:4px}
details.rules{border:var(--rule);border-radius:var(--radius);background:oklch(100% 0 0);padding:var(--space-md)}
details.rules summary{cursor:pointer;font-weight:650;font-size:var(--text-sm);list-style:none}
details.rules summary::-webkit-details-marker{display:none}
details.rules summary::before{content:"▸ ";color:var(--color-accent)}
details.rules[open] summary::before{content:"▾ "}
details.rules ul{margin:var(--space-sm) 0 0 1.1rem;font-size:var(--text-sm);color:var(--color-ink-2)}
.cta-bar{display:flex;gap:var(--space-sm);align-items:center;flex-wrap:wrap;
  border:var(--rule);border-radius:var(--radius-lg);background:var(--color-accent-soft);
  padding:var(--space-lg);margin-bottom:var(--space-2xl)}
.cta-bar .t{flex:1;min-width:260px}
.cta-bar .t h3{font-size:var(--text-lg);margin-bottom:2px}
.cta-bar .t p{font-size:var(--text-sm);color:var(--color-ink-2)}

/* Ft4 dense colophon */
footer{border-top:var(--rule);margin-top:var(--space-2xl);padding:var(--space-lg) 0 var(--space-2xl);
  font-family:var(--font-mono);font-size:var(--text-xs);color:var(--color-ink-3);line-height:2}
footer b{color:var(--color-ink-2);font-weight:600}
.switcher{position:fixed;right:var(--space-md);bottom:var(--space-md);z-index:50;display:flex;gap:var(--space-2xs);
  background:oklch(100% 0 0 / .9);backdrop-filter:blur(10px);border:var(--rule);border-radius:999px;padding:4px}
.switcher button{font-size:var(--text-xs);border:none;background:transparent;border-radius:999px;
  padding:.35rem .8rem;cursor:pointer;color:var(--color-ink-2);font-family:var(--font-body)}
.switcher button[aria-pressed="true"]{background:var(--color-ink);color:var(--color-paper)}
@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}}

/* ── 実装で足した分 ── */
.hidden{display:none!important}
.warn-ua{display:flex;gap:var(--space-sm);align-items:flex-start;margin:var(--space-md) 0;
  padding:var(--space-md);border:var(--rule);border-left:3px solid var(--color-alert);
  border-radius:var(--radius);background:var(--color-alert-soft);font-size:var(--text-sm)}
.colmap{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:var(--space-sm);
  margin:var(--space-md) 0}
.colmap label{font-size:var(--text-sm);color:var(--color-ink-2);display:block}
.colmap select,.colmap input{width:100%;font-family:var(--font-body);font-size:var(--text-sm);
  padding:.4rem .5rem;border:var(--rule);border-radius:var(--radius);background:#fff}
.preview{font-family:var(--font-mono);font-size:var(--text-xs);background:var(--color-paper-2);
  border:var(--rule);border-radius:var(--radius);padding:var(--space-sm);overflow-x:auto;white-space:pre}
.progress{margin-top:var(--space-md);font-size:var(--text-sm);color:var(--color-ink-2)}
.progress .bar2{height:4px;background:var(--color-paper-3);border-radius:2px;overflow:hidden;margin-top:4px}
.progress .bar2 i{display:block;height:100%;background:var(--color-accent);width:0;
  transition:width var(--dur-fast) var(--ease-out)}
/* 解析が失敗したときの進捗バー。**黙って止めない**ための表示（2026-11-03） */
.progress .bar2 i.failed{background:var(--color-danger,#c0392b)}
.progress:has(i.failed){color:var(--color-danger,#c0392b)}
.qr{width:96px;height:96px}
.print-only{display:none}
@media print{
  .navchip,.switcher,.drop,.cta-bar button,#screen-intake{display:none!important}
  .print-only{display:block}
  body{background:#fff;font-size:11pt}
  .screen{padding-top:0}
  .chart,.aside,table{break-inside:avoid}
  a[href]:after{content:" (" attr(href) ")";font-size:9pt;color:#555}
}
