:root{--navy:#262B7B;--navy2:#3B409A;--red:#D9262C;--red-d:#B91C22;--bg:#F5F6FA;--tint:#EEF1F8;--line:#DFE3EC;--ink:#1B2438;--muted:#667189;--green:#17703E;--amber:#7A5400;
--font:"Plus Jakarta Sans","Segoe UI",system-ui,-apple-system,Arial,sans-serif}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font);font-size:15px;line-height:1.45}
h1,h2,h3,h4{font-family:var(--font);margin:0;color:var(--navy);font-weight:700}
a{color:var(--navy2)}
.top{background:var(--navy);color:#fff;padding:14px 28px 0}
.top-row{display:flex;align-items:center;gap:18px;flex-wrap:wrap;padding-bottom:14px}
.logo-plate{background:#fff;border-radius:10px;padding:5px 8px;display:flex;align-items:center}
.logo-plate img{height:46px;display:block}
.brand{display:flex;flex-direction:column;border-left:1px solid rgba(255,255,255,.35);padding-left:18px}
.brand b{font-size:19px}.brand span{color:#C9D3E8;font-size:13px}
.spacer{flex:1}
.nav{display:flex;gap:4px;flex-wrap:wrap}
.nav a{color:#E4E7FA;text-decoration:none;padding:7px 12px;border-radius:8px;font-weight:600;font-size:14px}
.nav a:hover,.nav a.on{background:rgba(255,255,255,.14);color:#fff}
.who{display:flex;align-items:center;gap:10px;font-size:13px;color:#C9D3E8}
.badge{display:inline-block;padding:3px 10px;border-radius:12px;font-size:12px;font-weight:700;background:#fff;color:var(--navy)}
.badge.super_admin{background:var(--red);color:#fff}.badge.viewer{background:#E4E7FA}
.linkbtn{background:none;border:0;color:#fff;text-decoration:underline;cursor:pointer;font:inherit;padding:0}
.red-line{height:4px;background:var(--red)}
main{max-width:1180px;margin:0 auto;padding:26px 24px 60px}
.card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:22px 24px;margin-bottom:18px}
.card h2{font-size:19px;margin-bottom:4px}.card .sub{color:var(--muted);margin:0 0 16px;font-size:14px}
.accent{border-top:3px solid var(--navy2)}
label{font-weight:600;font-size:14px}
input[type=text],input[type=password],input[type=date],select,textarea{width:100%;padding:10px 12px;border:1px solid #CBD2E0;border-radius:9px;background:#F8F9FC;font:inherit;color:var(--ink)}
textarea{min-height:76px;font-family:Consolas,monospace;font-size:13px}
input:focus,select:focus,textarea:focus{outline:2px solid var(--navy2);background:#fff}
.btn{display:inline-block;border:0;border-radius:10px;padding:10px 18px;font:inherit;font-weight:700;cursor:pointer;text-decoration:none;background:var(--navy);color:#fff}
.btn:hover{background:var(--navy2)}.btn.red{background:var(--red)}.btn.red:hover{background:var(--red-d)}
.btn.light{background:var(--tint);color:var(--navy)}.btn.light:hover{background:#DDE3F3}.btn.sm{padding:6px 12px;font-size:13px}
.btn[disabled]{opacity:.45;cursor:not-allowed}
.row{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px 22px}
.field{display:flex;flex-direction:column;gap:6px}.field .help{color:var(--muted);font-size:12.5px}
.lock{color:var(--amber);font-size:12px;font-weight:600}
.flash{background:#DCF1E6;color:var(--green);border-radius:10px;padding:10px 14px;margin-bottom:14px;font-weight:600}
.err{background:#FBDCDC;color:#A02A2A;border-radius:10px;padding:10px 14px;margin-bottom:14px;font-weight:600;white-space:pre-wrap;max-height:320px;overflow:auto}
table.t{width:100%;border-collapse:collapse;font-size:14px}
table.t th{text-align:left;color:var(--muted);font-size:12.5px;text-transform:uppercase;letter-spacing:.03em;padding:8px 10px;border-bottom:1px solid var(--line)}
table.t td{padding:10px;border-bottom:1px solid #EEF0F6;vertical-align:middle}
.pill-ok{background:#DCF1E6;color:var(--green)}.pill-bad{background:#FBDCDC;color:#A02A2A}.pill-warn{background:#FBEFCF;color:var(--amber)}.pill-neutral{background:var(--tint);color:var(--muted)}
.pill{display:inline-block;padding:2px 10px;border-radius:12px;font-size:12px;font-weight:700}
.center-card{max-width:440px;margin:70px auto}
.center-card .logo-plate{display:inline-flex;margin-bottom:14px;border:1px solid var(--line)}
.banner{background:#FBEFCF;color:var(--amber);border-radius:10px;padding:10px 14px;margin-bottom:16px;font-weight:600}
.secret{background:#262B7B;color:#fff;border-radius:12px;padding:16px 20px;margin-bottom:18px}
.secret code{background:rgba(255,255,255,.16);padding:3px 9px;border-radius:6px;font-size:16px;user-select:all}
.matrix td,.matrix th{text-align:center}.matrix td:first-child,.matrix th:first-child{text-align:left}
/* generator */
.steps{display:flex;gap:6px;flex-wrap:wrap;padding-bottom:16px}
.step-pill{border:0;cursor:pointer;border-radius:18px;padding:8px 18px;font:inherit;font-weight:700;font-size:14px;background:#3A3F96;color:#C9D3E8}
.step-pill:hover{background:#484EAC}.step-pill.on{background:var(--red);color:#fff}.step-pill.done{background:#1F7A57;color:#fff}.step-pill.warn{background:#B45309;color:#fff}
.step{display:none}.step.on{display:block}
.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}
.tile{background:#fff;border:1px solid var(--line);border-radius:14px;padding:16px;display:flex;flex-direction:column;gap:6px}
.tile.needed{border-color:#F2A58E}.tile.error{border-color:#D9534F}
.tile-top{display:flex;justify-content:space-between;align-items:center}
.ico{width:38px;height:38px;border-radius:10px;background:var(--tint);color:var(--navy2);display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:700}
.chip{padding:3px 11px;border-radius:12px;font-size:12px;font-weight:700}
.tile h3{font-size:15px}.fname{color:var(--muted);font-size:13px;word-break:break-all;min-height:18px}
.count{font-size:21px;font-weight:700;color:var(--navy)}.note{font-size:12.5px;color:var(--amber);min-height:16px}
.tile-actions{display:flex;gap:8px;margin-top:6px;align-items:center}
.cal{display:grid;grid-template-columns:1fr 1fr;gap:26px}.cal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;text-align:center}
.cal-grid .dow{color:var(--muted);font-size:12px;font-weight:700;padding:4px 0}
.day{border:0;background:#F8F9FC;border-radius:9px;padding:9px 0;font:inherit;cursor:pointer}.day:hover{background:var(--tint)}
.day.sel{background:var(--navy);color:#fff;font-weight:700}.day.blank{visibility:hidden}.day.we{color:#A9AFC2}
.chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.dchip{background:var(--tint);border-radius:14px;padding:5px 12px;font-size:13px;font-weight:600;color:var(--navy)}
.bar{position:sticky;bottom:0;background:#fff;border-top:1px solid var(--line);padding:12px 24px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.bar .chip{background:var(--tint);color:var(--ink);font-weight:600}.bar .grow{flex:1}
.progress{height:12px;border-radius:6px;background:#E4E6EE;overflow:hidden}.progress>div{height:100%;width:0;background:#2E9E6B;transition:width .4s}
.result{border:1px solid var(--line);border-radius:14px;overflow:hidden;margin-top:18px}
.result-head{background:var(--navy);color:#fff;padding:16px 20px;display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.result-head .bd{width:44px;height:44px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:700;background:#2E9E6B}
.result-head.warn .bd{background:#E0A82E}.result-head h3{color:#fff;font-size:18px}.result-head p{margin:0;color:#C9D3E8;font-size:13px}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;padding:16px}
.kpi{border:1px solid var(--line);border-top:3px solid var(--navy2);border-radius:10px;padding:10px 12px}.kpi small{color:var(--muted);display:block}.kpi b{font-size:18px;color:var(--navy)}
.viewonly .actions{display:none}
@media(max-width:780px){.cal{grid-template-columns:1fr}.top{padding:12px 14px 0}main{padding:16px 12px 60px}}
