:root{
  --navy:#13294b;--navy2:#1d3a66;--teal:#0f766e;--teal-bg:#e6f4f2;
  --ai:#6d28d9;--ai-bg:#f3edff;--ai-bd:#d6c5fb;
  --ok:#15803d;--ok-bg:#e9f7ee;--ok-bd:#a7dcb8;
  --warn:#b45309;--warn-bg:#fff6e5;--warn-bd:#f5d08a;
  --err:#b91c1c;--err-bg:#fdecec;--err-bd:#f3b0b0;
  --info:#1d4ed8;--info-bg:#eaf1ff;--info-bd:#b8cdf8;
  --ink:#1b2430;--muted:#5b6675;--line:#dfe3e8;--bg:#f4f6f9;--card:#fff;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;font-family:"Segoe UI",system-ui,-apple-system,Roboto,Arial,sans-serif;color:var(--ink);background:var(--bg);font-size:13.5px;line-height:1.45}
a{color:var(--info);text-decoration:none;cursor:pointer}
a:hover{text-decoration:underline}
h1,h2,h3,h4{margin:0}
.hidden{display:none!important}
button,.btn{appearance:none;border:1px solid var(--line);background:#fff;color:var(--ink);padding:7px 12px;border-radius:6px;cursor:pointer;font-size:12.5px;font-weight:600;font-family:inherit;white-space:nowrap}
button:hover:not(:disabled){background:#eef1f5}
button:disabled{opacity:.45;cursor:not-allowed}
button.pri{background:var(--navy);border-color:var(--navy);color:#fff}
button.pri:hover:not(:disabled){background:var(--navy2)}
button.gate{background:var(--ok);border-color:var(--ok);color:#fff}
button.gate:hover:not(:disabled){background:#116632}
button.ai{background:var(--ai);border-color:var(--ai);color:#fff}
button.ai:hover:not(:disabled){background:#5b21b6}
button.warnb{background:#fff6e5;border-color:var(--warn-bd);color:var(--warn)}
button.danger{background:var(--err);border-color:var(--err);color:#fff}
button.sm{padding:4px 8px;font-size:11.5px}
button.link{border:none;background:none;color:var(--info);padding:0;font-weight:600}
input,select,textarea{font-family:inherit;font-size:13px;padding:8px 10px;border:1px solid #c9d0d9;border-radius:6px;background:#fff;color:var(--ink)}
input:focus,select:focus{outline:2px solid #9db8e8;border-color:#7b9fdc}
/* ---------- login ---------- */
.login-wrap{min-height:100vh;display:grid;grid-template-columns:1.05fr 1fr}
.login-brand{background:linear-gradient(150deg,#0e2142 0%,#163764 55%,#0f5f5a 100%);color:#fff;padding:48px 56px;display:flex;flex-direction:column;justify-content:space-between}
.login-brand .logo{display:flex;align-items:center;gap:12px}
.logo-mark{width:44px;height:44px;border-radius:9px;background:#fff;color:var(--navy);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:15px;letter-spacing:.5px}
.login-brand h1{font-size:28px;font-weight:700;margin:26px 0 8px;line-height:1.2}
.login-brand p{opacity:.85;max-width:470px}
.login-brand ul{padding-left:18px;opacity:.9;max-width:480px}
.login-brand li{margin-bottom:6px}
.login-brand .fine{font-size:11.5px;opacity:.7}
.login-panel{display:flex;align-items:center;justify-content:center;padding:30px}
.login-card{width:100%;max-width:440px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:28px 30px;box-shadow:0 10px 30px rgba(19,41,75,.08)}
.login-card h2{font-size:19px;margin-bottom:4px}
.login-card label{display:block;font-size:12px;font-weight:600;color:var(--muted);margin:14px 0 5px}
.login-card input{width:100%}
.login-card .row{display:flex;gap:8px;align-items:center;justify-content:space-between;margin-top:18px}
.or{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:11.5px;margin:16px 0}
.or::before,.or::after{content:"";flex:1;height:1px;background:var(--line)}
.sso{width:100%;display:flex;align-items:center;justify-content:center;gap:8px;padding:9px}
.err-msg{background:var(--err-bg);border:1px solid var(--err-bd);color:var(--err);padding:7px 10px;border-radius:6px;font-size:12px;margin-top:12px}
.demo-accts{margin-top:18px;border-top:1px dashed var(--line);padding-top:12px}
.demo-accts .h{font-size:11.5px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.4px;margin-bottom:8px}
.demo-grid{display:grid;grid-template-columns:1fr 1fr;gap:7px}
.demo-acct{border:1px solid var(--line);border-radius:8px;padding:7px 9px;cursor:pointer;background:#fafbfc;text-align:left;font-weight:400;white-space:normal}
.demo-acct:hover{border-color:#9db8e8;background:#f2f6fd}
.demo-acct b{display:block;font-size:12.5px}
.demo-acct span{font-size:11px;color:var(--muted)}
.otp{letter-spacing:8px;font-size:20px;text-align:center;font-weight:700}
/* ---------- shell ---------- */
.top{height:54px;background:var(--navy);color:#fff;display:flex;align-items:center;justify-content:space-between;padding:0 16px;position:sticky;top:0;z-index:20}
.top .brand{display:flex;align-items:center;gap:10px}
.top .brand .logo-mark{width:32px;height:32px;font-size:11px;border-radius:7px}
.top .brand b{font-size:14px}
.top .brand small{display:block;font-size:11px;opacity:.75}
.top .right{display:flex;align-items:center;gap:10px}
.pill{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:600;padding:3px 9px;border-radius:999px}
.pill.res{background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.25)}
.pill.ex{background:#f59e0b;color:#1b1300}
.dotg{width:8px;height:8px;border-radius:50%;background:#34d399;box-shadow:0 0 0 2px rgba(52,211,153,.3)}
.user-chip{display:flex;align-items:center;gap:8px;padding:3px 10px 3px 4px;border-radius:999px;background:rgba(255,255,255,.1)}
.avatar{width:28px;height:28px;border-radius:50%;background:#e2e8f0;color:var(--navy);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:11px}
.user-chip small{display:block;font-size:10.5px;opacity:.75}
.top button.ghost{background:transparent;color:#fff;border-color:rgba(255,255,255,.35)}
.top button.ghost:hover{background:rgba(255,255,255,.12)}
.shell{display:grid;grid-template-columns:228px 1fr;min-height:calc(100vh - 54px);align-items:start}
nav.side{background:#fff;border-right:1px solid var(--line);padding:12px 10px;display:flex;flex-direction:column;gap:2px;position:sticky;top:54px;height:calc(100vh - 54px);overflow:auto}
nav.side .sec{font-size:10.5px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);font-weight:700;margin:12px 8px 4px}
nav.side a{display:flex;align-items:center;justify-content:space-between;padding:8px 10px;border-radius:6px;color:var(--ink);font-weight:600;font-size:13px}
nav.side a:hover{background:#f1f4f8;text-decoration:none}
nav.side a.active{background:var(--teal-bg);color:var(--teal)}
nav.side .cnt{background:var(--err);color:#fff;font-size:10.5px;border-radius:999px;padding:1px 7px}
nav.side .foot{margin-top:auto;font-size:11px;color:var(--muted);padding:10px 8px;border-top:1px solid var(--line)}
main{padding:18px 22px 50px;min-width:0}
.page-h{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}
.page-h h1{font-size:20px}
.page-h .sub{color:var(--muted);font-size:12.5px;margin-top:3px}
.crumb{font-size:12px;color:var(--muted);margin-bottom:6px}
.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:14px 16px;margin-bottom:14px;overflow-x:auto}
.card>h3{font-size:14.5px;margin-bottom:8px;display:flex;align-items:center;gap:8px;justify-content:space-between}
.muted{color:var(--muted)}
.small{font-size:12px}
.xs{font-size:11px}
.grid{display:grid;gap:12px}
.g2{grid-template-columns:1fr 1fr}.g3{grid-template-columns:repeat(3,1fr)}.g4{grid-template-columns:repeat(4,1fr)}.g6{grid-template-columns:repeat(auto-fill,minmax(190px,1fr))}.g6>*{min-width:0;overflow-wrap:anywhere}
.stat{background:#fff;border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.stat .n{font-size:24px;font-weight:700;color:var(--navy)}
.stat .l{font-size:11.5px;color:var(--muted);font-weight:600}
.stat.alert .n{color:var(--err)}
.stat.okk .n{color:var(--ok)}
table{width:100%;border-collapse:collapse;font-size:12.5px}
th,td{border-bottom:1px solid var(--line);padding:7px 8px;text-align:left;vertical-align:top}
th{background:#f5f7fa;font-weight:700;font-size:11.5px;color:#3c4654;text-transform:uppercase;letter-spacing:.2px;border-top:1px solid var(--line)}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}
tr.rw-warn td{background:#fffaf0}
tr.rw-err td{background:#fff5f5}
tr.rw-new td{background:#f2f7ff}
tr.click{cursor:pointer}
tr.click:hover td{background:#f6f9fc}
.tag{display:inline-block;font-size:11px;font-weight:700;padding:2px 8px;border-radius:999px;border:1px solid transparent;white-space:nowrap}
.t-ai{background:var(--ai-bg);color:var(--ai);border-color:var(--ai-bd)}
.t-ok{background:var(--ok-bg);color:var(--ok);border-color:var(--ok-bd)}
.t-warn{background:var(--warn-bg);color:var(--warn);border-color:var(--warn-bd)}
.t-err{background:var(--err-bg);color:var(--err);border-color:var(--err-bd)}
.t-info{background:var(--info-bg);color:var(--info);border-color:var(--info-bd)}
.t-grey{background:#eef1f4;color:#4b5563;border-color:#d7dce2}
.t-navy{background:#e8edf6;color:var(--navy);border-color:#c5d0e3}
.ch{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;padding:2px 8px;border-radius:5px;border:1px solid;white-space:nowrap}
.ch-own_online{background:#e8f4ff;color:#0b5cad;border-color:#b5d6f6}
.ch-own_pdf{background:#eef0ff;color:#3a3fb0;border-color:#c6c9f5}
.ch-confcom{background:#e9f7f5;color:#0f766e;border-color:#a9dcd4}
.ch-word_post{background:#f5f0e8;color:#7a5520;border-color:#e2cfae}
.ch-broker{background:#fbeef6;color:#9d2a6b;border-color:#efc1dc}
.ch-unknown{background:#fff7e6;color:#92400e;border-color:#f3d08a}
.banner{padding:9px 12px;border-radius:8px;font-size:12.5px;margin-bottom:12px;border:1px solid}
.banner.ex{background:#fff7e6;border-color:#f5cf86;color:#7a4b00}
.banner.info{background:var(--info-bg);border-color:var(--info-bd);color:#1e3a8a}
.banner.ok{background:var(--ok-bg);border-color:var(--ok-bd);color:#14532d}
.banner.err{background:var(--err-bg);border-color:var(--err-bd);color:#7f1d1d}
.banner.ai{background:var(--ai-bg);border-color:var(--ai-bd);color:#3b0f8a}
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:14px;overflow-x:auto}
.tabs a{padding:9px 12px;font-weight:600;color:var(--muted);border-bottom:3px solid transparent;white-space:nowrap;font-size:12.5px}
.tabs a:hover{color:var(--ink);text-decoration:none}
.tabs a.active{color:var(--teal);border-bottom-color:var(--teal)}
.tabs a .cnt{background:var(--err);color:#fff;border-radius:999px;font-size:10px;padding:0 6px;margin-left:4px}
.eng-head{background:#fff;border:1px solid var(--line);border-radius:10px;padding:12px 16px;margin-bottom:12px;display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:12px}
.eng-head h1{font-size:19px}
.kv{font-size:12px;color:var(--muted)}
.kv b{color:var(--ink);font-weight:600}
.gatebox{border:2px dashed var(--ok-bd);background:var(--ok-bg);border-radius:10px;padding:12px 14px;display:flex;align-items:center;justify-content:space-between;gap:14px;margin:12px 0}
.gatebox.done{border-style:solid;background:#dcf2e3}
.gatebox.lock{border-color:#d7dce2;background:#f6f7f9}
.gatebox h4{font-size:13.5px;color:#14532d}
.gatebox.lock h4{color:#4b5563}
.prog{height:7px;background:#e8ecf1;border-radius:99px;overflow:hidden}
.prog>i{display:block;height:100%;background:linear-gradient(90deg,#0f766e,#22a38f)}
.steps{display:flex;gap:2px;flex-wrap:wrap;max-width:230px}
.steps span{font-size:10px;padding:2px 5px;white-space:nowrap;border-radius:4px;background:#eef1f4;color:#7a8594;font-weight:600}
.steps span.done{background:var(--ok-bg);color:var(--ok)}
.steps span.cur{background:var(--ai);color:#fff;animation:pulse 1s infinite}
.steps span.bad{background:var(--err);color:#fff}
@keyframes pulse{50%{opacity:.6}}
.console{background:#0f1726;color:#d6e2f5;border-radius:8px;padding:10px 12px;font-family:ui-monospace,Consolas,Menlo,monospace;font-size:11.5px;height:240px;overflow:auto;line-height:1.55}
.console .ts{color:#7f8ea8}
.console .l-ai{color:#c4b5fd}.console .l-out{color:#7dd3fc}.console .l-ok{color:#86efac}.console .l-warn{color:#fcd34d}.console .l-err{color:#fca5a5}.console .l-human{color:#fde68a}
.spin{display:inline-block;width:10px;height:10px;border:2px solid #c4b5fd;border-top-color:transparent;border-radius:50%;animation:sp .8s linear infinite;vertical-align:-1px}
@keyframes sp{to{transform:rotate(360deg)}}
.noaccess{max-width:620px;margin:50px auto;text-align:center;background:#fff;border:1px solid var(--err-bd);border-radius:12px;padding:30px}
.noaccess .ic{font-size:40px}
.noaccess h1{color:var(--err);font-size:22px;margin:8px 0}
.doc-row td:first-child{width:28px}
.ficon{display:inline-block;width:22px;height:26px;border-radius:3px;color:#fff;font-size:8.5px;font-weight:800;text-align:center;line-height:26px}
.f-pdf{background:#c53030}.f-xlsx{background:#1f7a46}.f-docx{background:#2b5797}.f-lock{background:#9aa3ad}
.sigs{display:flex;gap:12px;align-items:stretch}
.sigbox{flex:1;border:1px solid var(--line);border-radius:8px;padding:8px;background:#fcfcfd;text-align:center}
.sigbox svg{width:100%;height:58px}
.sigbox .cap{font-size:11px;color:var(--muted)}
.check-list{list-style:none;padding:0;margin:6px 0}
.check-list li{padding:3px 0;font-size:12.5px}
.check-list .y{color:var(--ok);font-weight:800}.check-list .n{color:var(--err);font-weight:800}
.modal-bg{position:fixed;inset:0;background:rgba(15,23,38,.5);display:flex;align-items:center;justify-content:center;z-index:50}
.modal{background:#fff;border-radius:12px;max-width:760px;width:94%;max-height:88vh;overflow:auto;box-shadow:0 20px 50px rgba(0,0,0,.3)}
.modal .mh{padding:12px 16px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}
.modal .mb{padding:16px}
.modal .mf{padding:12px 16px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:8px}
.docview{position:relative;border:1px solid var(--line);background:#fafafa;border-radius:6px;padding:18px;min-height:260px;overflow:hidden}
.docview .wm{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;transform:rotate(-24deg);font-size:22px;color:rgba(185,28,28,.12);font-weight:800;pointer-events:none;text-align:center}
.ln{height:9px;background:#e5e8ec;border-radius:3px;margin:8px 0}
.toast{position:fixed;bottom:18px;right:18px;background:#1b2430;color:#fff;padding:10px 16px;border-radius:8px;font-size:12.5px;opacity:0;transition:opacity .25s;z-index:60;pointer-events:none;max-width:420px}
.toast.show{opacity:1}
.flex{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.sp{justify-content:space-between}
.mt8{margin-top:8px}.mt12{margin-top:12px}.mb8{margin-bottom:8px}
.legend span{margin-right:10px}
.mono{font-family:ui-monospace,Consolas,monospace;font-size:12px}
.masked{font-family:ui-monospace,Consolas,monospace;letter-spacing:1px;color:#475569}
.task{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid var(--line);gap:10px}
.task:last-child{border-bottom:none}
.eng-card{border:1px solid var(--line);border-radius:10px;padding:12px 14px;background:#fff;cursor:pointer}
.eng-card:hover{border-color:#9db8e8;box-shadow:0 2px 8px rgba(19,41,75,.06)}
.eng-card h4{font-size:14px;margin-bottom:2px}
.chk{width:16px;height:16px;cursor:pointer}
.draft{background:#fbfbfd;border:1px solid var(--line);border-left:4px solid var(--ai);border-radius:6px;padding:10px 12px;font-size:12.5px;white-space:pre-wrap;margin:6px 0}
.arch{display:grid;grid-template-columns:1fr 1.25fr 1fr;gap:10px;font-size:12px}
.arch .box{border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#fbfcfd}
.arch .box b{display:block;font-size:12.5px;margin-bottom:2px}
.arch .zone{border:2px dashed #9fb3d1;border-radius:10px;padding:8px;display:flex;flex-direction:column;gap:8px}
.arch .zone .zt{font-size:10.5px;font-weight:800;text-transform:uppercase;color:var(--navy);letter-spacing:.4px}
.arch .zone.ext{border-color:#e2b46b}
.arch .zone.ext .zt{color:#7a4b00}
select.sm{padding:4px 6px;font-size:12px}
#reg-table td{font-size:12px}
.nw{white-space:nowrap}
.rw-yel td{background:#fff4a8}
.t-yel{background:#fff4a8;color:#7a5a00;border:1px solid #e9cf4a}
.mk{font-family:'Times New Roman',serif;font-weight:700;font-size:14px}
.mk-g{color:#808080}.mk-r{color:#c00000}
pre.json{background:#0f172a;color:#e2e8f0;font-size:11px;line-height:1.45;padding:10px 12px;border-radius:6px;max-height:360px;overflow:auto;white-space:pre;margin:0}
.fname{font-family:ui-monospace,Consolas,monospace;font-size:11px;overflow-wrap:anywhere}
table.k21{width:auto;min-width:520px}
table.k21 td{padding:4px 10px}
table.k21 tr.tot td{border-top:1px solid #334155;font-weight:700}
details.rs summary{cursor:pointer;color:var(--info);font-size:11.5px}
details.rs div{font-size:11px;margin-top:4px;max-width:340px}
.rules{margin:0;padding-left:15px;font-size:11px}
.rules li{margin:1px 0}
.cc{display:flex;gap:6px;align-items:flex-start;font-size:12.5px;margin:3px 0}
/* ===================== JMD Staff Portal shell (portal-layout.png) ===================== */
html,body{font-family:"Segoe UI",system-ui,-apple-system,"PingFang TC","Noto Sans CJK TC","Microsoft JhengHei",Roboto,Arial,sans-serif}
.top{height:58px;background:#0f2a43;gap:16px;padding:0 18px}
.top .brand .logo-mark{background:#fff}
.top .brand .pname{font-size:17px;font-weight:700;letter-spacing:.2px}
.top .brand .pname span{color:#5eead4}
.top .search{flex:1;max-width:520px;position:relative}
.top .search input{width:100%;background:#163a5c;border:1px solid #1f4a73;color:#fff;border-radius:8px;padding:8px 12px 8px 32px}
.top .search input::placeholder{color:#9fb3c8}
.top .search::before{content:"🔍";position:absolute;left:10px;top:7px;font-size:13px;opacity:.8}
.top .search .results{position:absolute;top:40px;left:0;right:0;background:#fff;color:var(--ink);border:1px solid var(--line);border-radius:8px;box-shadow:0 10px 30px rgba(0,0,0,.18);z-index:40;max-height:360px;overflow:auto}
.top .search .results a{display:block;padding:7px 12px;color:var(--ink);border-bottom:1px solid #f0f2f5}
.top .search .results a:hover{background:#f2f6fd;text-decoration:none}
.top .search .results .h{font-size:10.5px;text-transform:uppercase;color:var(--muted);padding:6px 12px 2px;font-weight:700}
.lang{display:inline-flex;background:#163a5c;border-radius:20px;overflow:hidden;border:1px solid #1f4a73}
.lang button{background:transparent;border:none;color:#9fb3c8;padding:5px 11px;border-radius:0;font-size:12px}
.lang button.on{background:#5eead4;color:#0f2a43}
.lang button:hover:not(.on){background:#1f4a73;color:#fff}
.bell{position:relative;background:#163a5c!important;border:1px solid #1f4a73!important;color:#fff!important;border-radius:20px!important;padding:6px 12px!important}
.bell .cnt{background:#ef4444;color:#fff;border-radius:999px;font-size:10.5px;padding:0 6px;margin-left:4px}
.user-chip{background:#163a5c;cursor:default}
.shell{grid-template-columns:262px 1fr;min-height:calc(100vh - 58px)}
nav.side{background:#13304d;color:#cfe0f0;border-right:none;padding:12px 0;top:58px;height:calc(100vh - 58px)}
nav.side .sec{color:#7fa3c6;font-size:11px;letter-spacing:1px;margin:12px 18px 4px}
nav.side a{color:#cfe0f0;font-weight:500;font-size:13.5px;border-radius:0;padding:6px 18px 6px 26px;justify-content:flex-start;gap:8px}
nav.side a:hover{background:#1a3d60;color:#fff}
nav.side a.active{background:#1f4a73;color:#fff;border-left:3px solid #5eead4;padding-left:23px}
nav.side a .lbl{flex:1}
nav.side a .soon{font-size:9.5px;font-weight:700;color:#7fa3c6;border:1px solid #2b5680;border-radius:8px;padding:0 5px}
nav.side .dot{width:9px;height:9px;border-radius:50%;flex:none}
.dot.b{background:#10b981}.dot.d{background:#f59e0b}.dot.p{background:#9ca3af}.dot.s{background:#60a5fa}
nav.side .foot{color:#7fa3c6;border-top:1px solid #1f4a73;margin:auto 0 0;padding:12px 18px;line-height:1.5}
nav.side .cnt{margin-left:auto}
.subnav{padding-left:44px!important;font-size:12px!important;opacity:.9}
/* module launcher tiles */
.launch{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px}
.tile{border:1px solid var(--line);border-radius:10px;padding:11px 12px;background:#fff;cursor:pointer;display:flex;flex-direction:column;gap:4px;min-height:74px}
.tile:hover{border-color:#9db8e8;box-shadow:0 2px 8px rgba(19,41,75,.07)}
.tile b{font-size:13px;color:#0f2a43}
.tile .g{font-size:10.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.4px;font-weight:700}
.tile.soon{background:#fafbfc;border-style:dashed}
.tile .st{align-self:flex-start}
.ph-wrap{max-width:900px}
.ph-actions li{margin:4px 0}
.coming{display:inline-block;background:#eef2f6;border:1px dashed #9ca3af;color:#475467;padding:4px 12px;border-radius:999px;font-weight:700;font-size:12px}
.ph-areas{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.ph-areas .card{min-height:120px}
.ph-areas .empty{border:1px dashed var(--line);border-radius:8px;padding:16px;text-align:center;color:var(--muted);font-size:12px}
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.cal .h{font-size:11px;font-weight:700;color:var(--muted);text-align:center;padding:4px 0}
.cal .d{background:#fff;border:1px solid var(--line);border-radius:6px;min-height:86px;padding:4px 6px;font-size:11px}
.cal .d.o{background:#f7f8fa;color:#a0a8b3}
.cal .d.t{border-color:#5eead4;box-shadow:inset 0 0 0 1px #5eead4}
.cal .d .n{font-weight:700;font-size:12px}
.cal .ev{display:block;border-radius:4px;padding:1px 4px;margin-top:2px;background:#e8edf6;color:#0f2a43;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cal .ev.NAR1{background:#fdecec;color:#7f1d1d}.cal .ev.BR{background:#fff6e5;color:#7a4b00}.cal .ev.AGM{background:#eaf1ff;color:#1e3a8a}.cal .ev.Audit{background:#e9f7ee;color:#14532d}
.qr{display:block;margin:10px auto;width:200px;height:200px;image-rendering:pixelated;border:1px solid var(--line);border-radius:8px}
.secret{font-family:ui-monospace,Consolas,monospace;font-size:12px;background:#f5f7fa;border:1px solid var(--line);border-radius:6px;padding:6px 8px;text-align:center;letter-spacing:1px;word-break:break-all}
.pwrules{font-size:11.5px;color:var(--muted);margin:6px 0 0 16px;padding:0}
.kbd{font-family:ui-monospace,Consolas,monospace;background:#f5f7fa;border:1px solid var(--line);border-radius:4px;padding:0 5px}
.formgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;align-items:end}
.formgrid label{font-size:11.5px;font-weight:600;color:var(--muted);display:block;margin-bottom:3px}
.formgrid input,.formgrid select{width:100%}
.inline-pw{font-family:ui-monospace,Consolas,monospace;font-size:15px;background:#fff7e6;border:1px solid #f5cf86;border-radius:6px;padding:8px 12px;display:inline-block;letter-spacing:1px}
@media (max-width:1100px){.shell{grid-template-columns:1fr}nav.side{position:static;height:auto}.login-wrap{grid-template-columns:1fr}.ph-areas,.g2,.g3,.g4{grid-template-columns:1fr}}
