:root{--bg:#f7f8fa;--surface:#ffffff;--line:#e3e7ec;--fg:#16212c;--muted:#667380;--side:#0b2540;--side-fg:#d7e3ee;--side-active:#183c60;--accent:#0a6bb8;--accent-fg:#ffffff;--row:#f1f3f5;--ok:#2f7d3b;--font:"Hiragino Sans","Hiragino Kaku Gothic ProN","Noto Sans JP","Yu Gothic",Meiryo,system-ui,sans-serif;--mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}*{box-sizing:border-box}body,html{height:100%}body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--font);font-size:14px;line-height:1.65}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.app{display:grid;grid-template-columns:240px minmax(0,1fr);min-height:100%;background:linear-gradient(to right,var(--side) 240px,var(--bg) 240px)}.side{background:var(--side);color:var(--side-fg);padding:16px 10px;display:flex;flex-direction:column;gap:18px;position:-webkit-sticky;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:center;gap:10px;padding:4px 8px;font-weight:700;font-size:16px;color:#fff;text-decoration:none}.brand-logo{border-radius:7px;background:#fff}.nav{flex-direction:column;gap:4px}.nav,.nav a{display:flex}.nav a{align-items:center;gap:10px;padding:9px 12px;border-radius:7px;text-decoration:none;color:var(--side-fg);font-weight:600}.nav a:hover,.nav a[aria-current=page]{background:var(--side-active)}.nav a[aria-current=page]{color:#fff}.nav svg{width:18px;height:18px;flex:none}.main{min-width:0;display:flex;flex-direction:column}.hero{height:200px;background:#061528;position:relative;overflow:hidden}.hero canvas{position:absolute;inset:0;width:100%;height:100%}.wrap{width:100%;max-width:1240px;margin:0 auto;padding-inline:32px;padding-block:0 32px;display:flex;flex-direction:column;gap:24px}.wrap.narrow{max-width:900px}.head{display:flex;align-items:flex-end;gap:16px;margin-top:-52px;position:relative}.head-logo{width:122px;height:122px;border-radius:14px;background:#fff;border:3px solid var(--surface);box-shadow:0 4px 16px rgba(0,0,0,.12);flex:none}.head h1{font-size:24px;margin:0;line-height:1.2}.head p{margin:4px 0 6px;color:var(--muted)}.card{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:22px 24px}.card h2{font-size:15px;margin:0 0 14px}.stats{display:grid;grid-template-columns:minmax(0,590px)}.stat .lbl{color:var(--muted);font-size:13px}.stat .num{font-size:26px;font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.sec-title{font-size:22px;margin:8px 0 0}.tbl-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse;min-width:640px}th{font-size:12px;text-align:left;font-weight:600;padding:10px 8px;border-bottom:1px solid var(--line)}td{padding:14px 8px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}tbody tr:nth-child(odd){background:var(--row)}td.maker{font-weight:700}tr.clickable{cursor:pointer;transition:background .15s}tr.clickable:hover{background:#e6eef6}.maker-link{color:var(--fg)}.maker-link:hover{color:var(--accent)}.empty{color:var(--muted);padding:20px 8px}footer.foot{text-align:center;font-size:11px;color:var(--muted);border-top:1px solid var(--line);padding-top:28px;margin-top:24px}.crumb{font-size:12px;display:flex;gap:6px;align-items:center;margin-top:16px;flex-wrap:wrap}.crumb,.crumb a{color:var(--muted)}.crumb a{text-decoration:none}.crumb b{color:var(--fg)}.spec{grid-template-columns:minmax(0,1fr) 200px;grid-gap:28px;gap:28px}.kv,.spec{display:grid}.kv{grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:16px 28px;gap:16px 28px;margin:0}.kv.one{grid-template-columns:minmax(0,1fr)}.kv dt{font-size:12px;color:var(--muted)}.kv dd{margin:2px 0 0;overflow-wrap:anywhere;white-space:pre-line}.kv sup{font-size:9px}.kv sup,.note{color:var(--muted)}.note{font-size:10.5px;line-height:1.55;white-space:pre-line}.qrbox{display:flex;flex-direction:column;align-items:center;gap:14px}.qr{width:180px;max-width:100%}.qr svg{display:block;width:100%;height:auto}.hash{font-family:var(--mono);font-size:12.5px;overflow-wrap:anywhere}.chain-badge{display:inline-block;font-size:11px;font-weight:700;padding:2px 8px;border-radius:99px;background:#e8f3ea;color:var(--ok);margin-left:8px;vertical-align:middle}.factory{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);grid-gap:20px;gap:20px;align-items:start}.factory dl{border-top:1px solid var(--line);padding-top:8px}.map{border-radius:8px;overflow:hidden;border:1px solid var(--line);aspect-ratio:16/10;max-width:100%}.map iframe{width:100%;height:100%;border:0;display:block}.center{display:flex;justify-content:center}.map-link{display:inline-block;margin-top:8px;padding:4px 0;font-size:13px;font-weight:600}.static-map{position:relative;overflow:hidden;aspect-ratio:16/10;background:#e8ecef}.static-map img{position:absolute;display:block;max-width:none}.static-map-pin{position:absolute;left:50%;top:50%;width:18px;height:26px;transform:translate(-50%,-100%)}.static-map-label{position:absolute;left:calc(50% + 12px);top:50%;transform:translateY(-110%);font-size:12px;font-weight:700;color:#333;text-shadow:0 0 3px #fff,0 0 3px #fff}.static-map-attr{position:absolute;right:0;bottom:0;font-size:8px;background:rgba(255,255,255,.8);padding:1px 4px;color:#555}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;background:var(--accent);color:var(--accent-fg);border:0;border-radius:6px;padding:8px 14px;font-weight:700;cursor:pointer;text-decoration:none;font-size:13px;font-family:inherit}.btn:hover{filter:brightness(1.08)}.btn.ghost{background:transparent;color:var(--accent);border:1px solid var(--accent)}.btn.wide{width:100%;max-width:480px;padding:11px}.steps{margin:0;padding-left:1.3em;display:flex;flex-direction:column;gap:6px}.code{font-family:var(--mono);font-size:12px;background:var(--row);padding:1px 6px;border-radius:4px}.admin-table td,.admin-table th{font-size:12.5px;vertical-align:top}.login-form{display:flex;flex-direction:column;gap:10px;max-width:360px}.login-form label{font-size:13px;font-weight:600}.login-form input{font:inherit;padding:9px 12px;border:1px solid var(--line);border-radius:6px;background:var(--surface);color:var(--fg)}.login-form .btn{align-self:flex-start}.login-error{margin:0;color:#b3322b;font-size:13px}.card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}.card-head h2,.notice{margin:0}.notice{padding:12px 16px;border-radius:8px;background:#e8f3ea;color:var(--ok);font-weight:600}.pform{display:flex;flex-direction:column;gap:20px}.pform-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:14px 20px;gap:14px 20px}.pform-field{display:flex;flex-direction:column;gap:4px;min-width:0}.pform-field.wide{grid-column:1/-1}.pform-field label,.pform-label{font-size:13px;font-weight:600}.pform input,.pform textarea{font:inherit;width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:6px;background:var(--surface);color:var(--fg)}.pform textarea{resize:vertical;line-height:1.55}.pform-pair{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:8px;gap:8px}.pform-hint{margin:0;font-size:11.5px;color:var(--muted)}.req{margin-left:6px;font-size:10.5px;font-weight:700;color:#fff;background:#b3322b;border-radius:3px;padding:0 5px;vertical-align:1px}.pform-submit{display:flex;flex-direction:column;align-items:flex-start;gap:8px}.pform-submit .btn{padding:11px 28px;font-size:14px}.btn:disabled{opacity:.6;cursor:wait}.cert-page{padding:24px 16px;display:flex;flex-direction:column;align-items:center;gap:16px}.cert-actions{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}.dpp{--dpp-blue:#1565c0;--dpp-pale:#e6f1fb;--dpp-edge:#b9d6f2;--dpp-cell:#f4f6f8;--dpp-rule:#d2d8de;background:#fff;color:#1b2430;width:min(210mm,100%);padding:12mm 11mm 8mm;box-shadow:0 6px 24px rgba(0,0,0,.08);display:flex;flex-direction:column;gap:14px;font-size:11px}.dpp a{color:var(--dpp-blue);text-decoration:underline}.dpp-head{display:flex;align-items:center;gap:16px}.dpp-title{flex:1 1;background:var(--dpp-blue);color:#fff;padding:12px 22px}.dpp-title h1{font-size:22px;margin:0;line-height:1.2}.dpp-title p{margin:2px 0 0;font-size:14px;color:#d8e8f8}.dpp-logo{width:26mm;height:26mm;flex:none}.dpp-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:14px 32px;gap:14px 32px;align-items:start}.dpp-col{display:flex;flex-direction:column;gap:14px}.dpp-sec{font-size:15px;font-weight:500;color:var(--dpp-blue);margin:0 0 6px;padding:0 0 2px 8px;border-bottom:1.5px solid var(--dpp-blue)}.dpp-panel{display:block;background:var(--dpp-pale);border:1px solid var(--dpp-edge)}.dpp-qr{padding:8px;text-decoration:none!important}.dpp-qr span{display:block;width:44mm;max-width:100%;margin:0 auto}.dpp-qr svg{display:block;width:100%;height:auto}.dpp-table{width:100%;min-width:0;border-collapse:collapse}.dpp-table td,.dpp-table th{border:1px solid var(--dpp-rule);padding:4px 8px;text-align:left;vertical-align:top;font-size:11px;line-height:1.45}.dpp-table th{width:34%;background:var(--dpp-cell);font-weight:400}.dpp-table td{color:var(--dpp-blue);overflow-wrap:anywhere;white-space:pre-line}.dpp-table tbody tr:nth-child(odd){background:none}.dpp-table td.dpp-note{font-size:7px;line-height:1.3}.dpp-hash a{overflow-wrap:anywhere}.dpp-factory{padding:16px 16px 12px}.dpp-factory p{text-align:center;color:var(--dpp-blue);margin:6px 0 0}.dpp-steps{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:14px}.dpp-steps li{display:grid;grid-template-columns:40% minmax(0,1fr);min-height:32px;border:1px solid var(--dpp-edge);background:var(--dpp-pale);position:relative}.dpp-steps li+li:before{content:"↓";position:absolute;left:30px;top:-15px;font-size:11px;line-height:14px;color:var(--dpp-blue)}.dpp-step-no{background:var(--dpp-blue);color:#fff;display:flex;align-items:center;gap:22px;padding:0 8px;font-size:17px}.dpp-step-no b{font-size:14px;width:16px}.dpp-step-name{display:flex;align-items:center;padding:2px 10px;font-size:12.5px;line-height:1.35}.dpp-foot{margin-top:10px;border-top:1.5px solid var(--dpp-blue);background:#eef1f9;text-align:center;font-size:8px;color:#5c6670;padding:8px}@media print{@page{size:A4;margin:0}body,html{background:#fff!important;height:auto}.cert-actions,.no-print,.side{display:none!important}.app,.main{display:block;background:#fff}.cert-page{padding:0}.dpp{width:210mm;box-shadow:none;print-color-adjust:exact;-webkit-print-color-adjust:exact}}@media (max-width:860px){.app{grid-template-columns:1fr;grid-template-rows:auto 1fr;background:var(--bg)}.side{position:static;height:auto;align-items:center;justify-content:space-between;padding:10px 16px}.nav,.side{flex-direction:row}.nav a span{display:none}.hero{height:150px}.wrap{padding-inline:16px}.head{flex-direction:column;align-items:flex-start;gap:10px}.head p{margin-bottom:0}.head-logo{width:88px;height:88px}.factory,.spec{grid-template-columns:1fr}.qrbox{order:-1}}@media (max-width:560px){.kv,.pform-grid{grid-template-columns:1fr}}@media screen and (max-width:640px){table.stack{min-width:0}.stack thead{display:none}.stack,.stack tbody,.stack td,.stack tr{display:block;width:100%}.stack tr{padding:12px 14px;border-bottom:1px solid var(--line)}.stack td{display:flex;gap:12px;padding:3px 0;overflow-wrap:anywhere}.stack td[data-label]:before{content:attr(data-label);flex:0 0 7.5em;color:var(--muted);font-size:12px;font-weight:400}.stack td.maker{font-size:15px;padding-bottom:6px}.stack td>*{min-width:0}.dpp{padding:16px}.dpp-table td.dpp-note{font-size:9.5px}.dpp-foot{font-size:10px}.dpp-cols{grid-template-columns:1fr}.dpp-title{padding:12px 16px}.dpp-title p{font-size:12px}.dpp-logo{width:64px;height:64px}}