:root{
  --paper:#F2F4F1;
  --surface:#FFFFFF;
  --surface-2:#E8ECE7;
  --ink:#17222E;
  --ink-2:#4A5A5B;
  --ink-3:#78867F;
  --line:#D3DAD4;
  --line-strong:#B4BEB7;
  --accent:#1F5A66;
  --accent-ink:#10383F;
  --accent-soft:#DCEAE9;
  --ok:#2E6B4F;
  --ok-soft:#DEEDE2;
  --warn:#8C5E10;
  --warn-soft:#F6EBD5;
  --crit:#A33A2E;
  --crit-soft:#F6E0DC;
  --shadow:0 1px 2px rgba(23,34,46,.06), 0 8px 24px -18px rgba(23,34,46,.35);
  --mincho:"Zen Old Mincho", "Hiragino Mincho ProN", "Yu Mincho", serif;
  --gothic:"Zen Kaku Gothic New", "Hiragino Sans", "Yu Gothic", "Noto Sans JP", system-ui, sans-serif;
  --mono:"Roboto Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  --on-accent:#FFFFFF;
  --r:6px;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --paper:#131816; --surface:#1B2220; --surface-2:#232C29;
    --ink:#E7ECE8; --ink-2:#AFBCB5; --ink-3:#84948C;
    --on-accent:#0E1A1C;
    --line:#2F3A36; --line-strong:#42504B;
    --accent:#79BCC2; --accent-ink:#BFE2E4; --accent-soft:#1E2E30;
    --ok:#7FC39C; --ok-soft:#1B2B23;
    --warn:#DCB067; --warn-soft:#2C2418;
    --crit:#E08878; --crit-soft:#2E1D1A;
    --shadow:0 1px 2px rgba(0,0,0,.5), 0 8px 24px -18px rgba(0,0,0,.9);
  }
}
:root[data-theme="dark"]{
  --paper:#131816; --surface:#1B2220; --surface-2:#232C29;
  --ink:#E7ECE8; --ink-2:#AFBCB5; --ink-3:#84948C;
  --on-accent:#0E1A1C;
  --line:#2F3A36; --line-strong:#42504B;
  --accent:#79BCC2; --accent-ink:#BFE2E4; --accent-soft:#1E2E30;
  --ok:#7FC39C; --ok-soft:#1B2B23;
  --warn:#DCB067; --warn-soft:#2C2418;
  --crit:#E08878; --crit-soft:#2E1D1A;
  --shadow:0 1px 2px rgba(0,0,0,.5), 0 8px 24px -18px rgba(0,0,0,.9);
}

*{box-sizing:border-box}
[hidden]{display:none!important}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--gothic);font-size:15px;line-height:1.7;-webkit-font-smoothing:antialiased}
h1,h2,h3{margin:0;text-wrap:balance;font-weight:700}
p{margin:0}
button{font:inherit;color:inherit}
a{color:var(--accent)}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px}

/* ---------- shell ---------- */
.app{display:grid;grid-template-columns:236px minmax(0,1fr);min-height:100vh}
.rail{background:var(--surface);border-right:1px solid var(--line);padding-block:22px 32px;padding-inline:18px;display:flex;flex-direction:column;gap:22px;position:sticky;top:0;height:100vh;overflow-y:auto}
.brand{display:flex;flex-direction:column;gap:2px}
.brand .mark{font-family:var(--mincho);font-weight:900;font-size:19px;letter-spacing:.04em;line-height:1.35}
.brand .sub{font-size:11px;color:var(--ink-3);letter-spacing:.08em}
.steps{display:flex;flex-direction:column;gap:2px}
.step{display:grid;grid-template-columns:20px 1fr;gap:10px;align-items:baseline;padding:9px 10px;border:0;background:none;text-align:left;cursor:pointer;border-radius:var(--r);color:var(--ink-2);width:100%}
.step:hover{background:var(--surface-2)}
.step .n{font-family:var(--mono);font-size:11px;color:var(--ink-3);letter-spacing:.02em}
.step .t{font-size:13.5px;font-weight:500}
.step[aria-current="true"]{background:var(--accent-soft);color:var(--accent-ink)}
.step[aria-current="true"] .n{color:var(--accent)}
.railfoot{margin-top:auto;font-size:11.5px;color:var(--ink-3);display:flex;flex-direction:column;gap:8px}
.dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--ink-3);margin-right:6px;vertical-align:1px}
.dot.on{background:var(--ok)}
.dot.off{background:var(--warn)}

.main{min-width:0;padding-block:26px 72px;padding-inline:clamp(16px,3.2vw,40px);max-width:1180px}
.pagehead{display:flex;flex-wrap:wrap;gap:12px 20px;align-items:flex-end;justify-content:space-between;padding-bottom:14px;border-bottom:1.5px solid var(--line-strong);margin-bottom:22px}
.pagehead h1{font-family:var(--mincho);font-size:clamp(21px,2.6vw,27px);font-weight:600;letter-spacing:.02em}
.pagehead .lede{font-size:13px;color:var(--ink-2);max-width:62ch;margin-top:4px}
.eyebrow{font-size:10.5px;letter-spacing:.16em;color:var(--ink-3);text-transform:uppercase;font-family:var(--mono)}
.view{display:none;flex-direction:column;gap:22px}
.view.on{display:flex}

/* ---------- blocks ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:18px 18px 20px}
.card.flat{background:transparent;border:0;padding:0}
.card > h2{font-size:15px;letter-spacing:.02em;display:flex;align-items:center;gap:9px;margin-bottom:3px}
.card > .hint{font-size:12.5px;color:var(--ink-3);margin-bottom:14px;max-width:70ch}
.row{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.grid{display:grid;gap:12px 16px}
.g2{grid-template-columns:repeat(auto-fit,minmax(230px,1fr))}
.g3{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}
.field{display:flex;flex-direction:column;gap:4px;min-width:0}
.field > label{font-size:11.5px;color:var(--ink-2);letter-spacing:.04em;font-weight:500}
.field .key{font-family:var(--mono);font-size:10.5px;color:var(--ink-3)}
input[type=text],input[type=number],select,textarea{
  font:inherit;font-size:14px;background:var(--surface);color:var(--ink);
  border:1px solid var(--line-strong);border-radius:4px;padding:7px 9px;width:100%;min-width:0}
input[type=number]{font-family:var(--mono);text-align:right;font-variant-numeric:tabular-nums}
textarea{line-height:1.85;resize:vertical}
input::placeholder,textarea::placeholder{color:var(--ink-3);opacity:.8}

.btn{border:1px solid var(--line-strong);background:var(--surface);border-radius:4px;padding:7px 13px;font-size:13px;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:7px}
.btn:hover{border-color:var(--accent);color:var(--accent-ink)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
.btn.primary:hover{filter:brightness(1.08);color:var(--on-accent)}
.btn.ghost{border-color:transparent;background:transparent;color:var(--ink-2);padding-inline:8px}
.btn.ghost:hover{background:var(--surface-2)}
.btn.sm{padding:4px 9px;font-size:12px}
.btn[disabled]{opacity:.45;cursor:not-allowed}

.tablewrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r);background:var(--surface)}
table{border-collapse:collapse;width:100%;font-size:13.5px}
th,td{text-align:left;padding:7px 10px;border-bottom:1px solid var(--line);vertical-align:middle}
th{font-size:11px;letter-spacing:.07em;color:var(--ink-2);font-weight:700;background:var(--surface-2);white-space:nowrap}
tr:last-child td{border-bottom:0}
td.num,th.num{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums}
table input[type=text],table input[type=number],table select{border-color:transparent;background:transparent;padding:4px 6px}
table input:focus,table select:focus{border-color:var(--line-strong);background:var(--surface)}
tfoot td{background:var(--surface-2);font-weight:700;border-top:1.5px solid var(--line-strong)}

.pill{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:700;padding:2px 9px;border-radius:999px;letter-spacing:.02em;white-space:nowrap}
.pill.ok{background:var(--ok-soft);color:var(--ok)}
.pill.warn{background:var(--warn-soft);color:var(--warn)}
.pill.crit{background:var(--crit-soft);color:var(--crit)}
.pill.mute{background:var(--surface-2);color:var(--ink-3)}

.checkline{display:grid;grid-template-columns:6px 1fr auto;gap:0 12px;align-items:start;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.checkline + .checkline{margin-top:8px}
.checkline .stripe{align-self:stretch;background:var(--ink-3)}
.checkline.ok .stripe{background:var(--ok)}
.checkline.warn .stripe{background:var(--warn)}
.checkline.crit .stripe{background:var(--crit)}
.checkline .body{padding:11px 0 12px}
.checkline .t{font-size:13.5px;font-weight:500}
.checkline .d{font-size:12.5px;color:var(--ink-2);margin-top:2px}
.checkline .d b{font-family:var(--mono);font-variant-numeric:tabular-nums;font-weight:500}
.checkline .right{padding:11px 14px 12px 0}

.note{font-size:12px;color:var(--ink-2);background:var(--surface-2);border-left:3px solid var(--line-strong);padding:9px 12px;border-radius:0 4px 4px 0}
.note.src{border-left-color:var(--accent)}
.note a{text-decoration-thickness:1px;text-underline-offset:2px}
.banner{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:center;justify-content:space-between;background:var(--warn-soft);color:var(--warn);border:1px solid currentColor;border-radius:var(--r);padding:9px 14px;font-size:12.5px;font-weight:500;margin-bottom:20px}

.tiles{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
.tile{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:13px 14px;display:flex;flex-direction:column;gap:3px}
.tile .lab{font-size:11px;letter-spacing:.07em;color:var(--ink-3)}
.tile .val{font-family:var(--mono);font-size:23px;font-weight:500;font-variant-numeric:tabular-nums;line-height:1.25}
.tile .sub{font-size:11.5px;color:var(--ink-2)}

.doclist{display:grid;gap:8px;grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}
.doccard{text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:11px 13px;cursor:pointer;display:flex;flex-direction:column;gap:3px}
.doccard:hover{border-color:var(--accent)}
.doccard .cat{font-size:10.5px;letter-spacing:.1em;color:var(--accent);font-family:var(--mono)}
.doccard .nm{font-size:14px;font-weight:700}
.doccard .ds{font-size:12px;color:var(--ink-2)}

.mergegrid{display:grid;gap:10px 16px;grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
.merge{border:1px solid var(--line);border-radius:4px;padding:8px 10px;background:var(--surface);display:flex;flex-direction:column;gap:2px}
.merge .k{font-family:var(--mono);font-size:10.5px;color:var(--ink-3)}
.merge .v{font-size:13.5px;word-break:break-word}
.merge.empty{border-color:var(--crit);background:var(--crit-soft)}
.merge.empty .v{color:var(--crit);font-weight:700}

.narr{border:1px solid var(--line);border-radius:var(--r);background:var(--surface);padding:14px}
.narr + .narr{margin-top:12px}
.narr h3{font-size:14px;display:flex;gap:9px;align-items:baseline;flex-wrap:wrap}
.narr h3 .ct{font-family:var(--mono);font-size:11px;color:var(--ink-3);font-weight:400}
.narr .guide{font-size:12px;color:var(--ink-2);margin:5px 0 10px}
.narr .stack{display:flex;flex-direction:column;gap:8px}
.aihead{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:space-between;border-top:1px dashed var(--line-strong);padding-top:11px;margin-top:11px}
.aihead .lbl{font-size:11.5px;letter-spacing:.06em;color:var(--ink-3);font-family:var(--mono)}
.out{white-space:pre-wrap;font-size:13.5px;line-height:1.9;background:var(--surface-2);border-radius:4px;padding:11px 12px;min-height:0}
.out:empty{display:none}

pre.md{white-space:pre-wrap;font-family:var(--mono);font-size:12.5px;line-height:1.75;background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:14px;overflow-x:auto;margin:0}

.inline-del{color:var(--ink-3);border:0;background:none;cursor:pointer;font-size:15px;line-height:1;padding:2px 6px;border-radius:3px}
.inline-del:hover{color:var(--crit);background:var(--crit-soft)}

@media (max-width:880px){
  .app{grid-template-columns:1fr}
  .rail{position:static;height:auto;flex-direction:row;align-items:center;gap:14px;overflow-x:auto;border-right:0;border-bottom:1px solid var(--line);padding-block:12px}
  .rail .brand{flex:0 0 auto}
  .steps{flex-direction:row;gap:4px}
  .step{grid-template-columns:1fr;gap:0;padding:6px 10px;white-space:nowrap}
  .step .n{display:none}
  .railfoot{display:none}
}
@media print{
  .rail,.pagehead .row,.toolbar,.btn{display:none!important}
  .app{display:block}
  body{background:#fff;color:#000}
  pre.md{border:0;padding:0;background:#fff}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ---------- ログインゲート（自前ホスティング版で追加） ---------- */
#gate{position:fixed;inset:0;display:grid;place-items:center;background:var(--paper);z-index:50;padding:24px}
#gate[hidden]{display:none}
.gatebox{width:min(360px,100%);background:var(--surface);border:1px solid var(--line);border-radius:var(--r);
  padding:26px 24px 24px;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:14px}
.gatemark{font-family:var(--mincho);font-weight:900;font-size:20px;letter-spacing:.04em;line-height:1.4}
.gatenote{font-size:11.5px;color:var(--ink-3);margin:0}
#gateForm{display:flex;flex-direction:column;gap:12px}
#gateForm .btn{justify-content:center}
.gatemsg{font-size:12.5px;margin:0;min-height:1.2em}
.gatemsg.err{color:var(--crit)}
.gatemsg.ok{color:var(--ok)}
