:root{--bg:#0f172a;--card:#1e293b;--card2:#273449;--line:#334155;--txt:#e2e8f0;--muted:#94a3b8;--accent:#3b82f6;--accent2:#60a5fa;--ok:#22c55e;--err:#ef4444}
*{box-sizing:border-box}
body{font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--txt);margin:0;min-height:100vh;font-size:15px}
button{cursor:pointer;font-family:inherit}input,select,textarea{font-family:inherit}
.hidden{display:none!important}
h2{margin:0 0 16px;font-size:1.3rem}h3{margin:0 0 12px;font-size:1.02rem}
.hint{font-size:.8rem;color:var(--muted)}.muted{color:var(--muted)}.saved{color:var(--ok);font-size:.85rem;margin-left:6px}
.req{color:var(--err)}.spacer{flex:1}
/* auth */
#auth{min-height:100vh;display:grid;place-items:center;padding:20px}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:22px}
#auth .card{max-width:420px;width:100%;box-shadow:0 10px 40px rgba(0,0,0,.3)}
h1{margin:0 0 4px;font-size:1.5rem}h1 .v{color:var(--accent2)}.sub{color:var(--muted);margin:0 0 22px;font-size:.9rem}
#auth label{display:block;font-size:.85rem;color:var(--muted);margin:14px 0 5px}
#auth input{width:100%;padding:11px 12px;border-radius:9px;border:1px solid var(--line);background:#0f172a;color:var(--txt);font-size:1rem}
#auth input:focus{outline:none;border-color:var(--accent)}
#auth button{width:100%;margin-top:18px;padding:12px;border:0;border-radius:9px;background:var(--accent);color:#fff;font-size:1rem;font-weight:600}
#auth button:hover{background:var(--accent2)}button:disabled{opacity:.5;cursor:default}
.msg{margin-top:12px;font-size:.85rem;min-height:1.1em}.msg.err{color:var(--err)}.msg.ok{color:var(--ok)}
.secret{font-family:ui-monospace,monospace;background:#0f172a;border:1px dashed var(--line);border-radius:8px;padding:10px;word-break:break-all;letter-spacing:1px;color:var(--accent2);margin-top:6px}
#su-qr{display:flex;justify-content:center;margin:10px 0}#su-qr svg{width:200px;height:200px;background:#fff;padding:10px;border-radius:10px}
/* app */
header.top{display:flex;align-items:center;gap:14px;padding:10px 18px;background:var(--card);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20;flex-wrap:wrap}
.brand{font-weight:700;font-size:1.1rem}nav#nav{display:flex;gap:4px;flex-wrap:wrap}
.navbtn{background:transparent;border:0;color:var(--muted);padding:8px 11px;border-radius:8px;font-size:.9rem}
.navbtn.active,.navbtn:hover{background:var(--card2);color:var(--txt)}
.btn{border:0;border-radius:8px;padding:9px 13px;font-size:.9rem;font-weight:600;background:var(--accent);color:#fff}
.btn:hover{background:var(--accent2)}.btn.ghost{background:#334155;color:var(--txt)}.btn.ghost:hover{background:#475569}
.btn.sm{padding:6px 10px;font-size:.82rem}.btn.xs{padding:4px 8px;font-size:.78rem}
.inp{padding:8px 10px;border-radius:8px;border:1px solid var(--line);background:var(--card2);color:var(--txt)}.inp.sm{padding:5px 8px;font-size:.85rem}
main.wrap{max-width:1280px;margin:0 auto;padding:20px}
.row-between{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.tools{display:flex;gap:6px;flex-wrap:wrap}
.toolbar{display:flex;gap:10px;align-items:center;margin-bottom:14px;flex-wrap:wrap}
.kpis{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:12px;margin-bottom:20px}
.kpi{background:var(--card);border:1px solid var(--line);border-top:3px solid var(--line);border-radius:10px;padding:12px;text-align:center}
.kpi .n{font-size:1.6rem;font-weight:700}.kpi .l{color:var(--muted);font-size:.72rem;margin-top:3px}
.sums{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}
.sumbox{display:flex;flex-direction:column;background:var(--card);border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:8px;padding:6px 12px}.sumbox b{font-size:1.1rem;font-weight:700}.sumbox .muted.small{margin-bottom:1px}
.charts{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:16px}
@media(max-width:720px){.charts{grid-template-columns:1fr}}
.cc{padding:14px}.cc canvas{max-height:260px}
.cols{display:grid;grid-template-columns:1fr 1fr;gap:14px}@media(max-width:720px){.cols{grid-template-columns:1fr}}
.card+.card,.charts+.charts,.card+.charts,.charts+.card{margin-top:4px}
section>.card{margin-bottom:14px}
.evlist{display:flex;flex-direction:column;gap:10px}
.ev{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--accent);border-radius:10px;padding:11px 13px;display:flex;gap:12px;cursor:pointer}
.ev:hover{border-color:var(--accent)}.ev .emoji{font-size:1.3rem}.ev .body{flex:1;min-width:0}.ev .t{font-weight:600}
.ev .meta{color:var(--muted);font-size:.82rem;margin-top:3px}.ev .na{color:var(--accent2);font-size:.8rem;margin-top:4px}
.ev .tags{margin-top:5px;display:flex;gap:5px;flex-wrap:wrap}
.tag{background:#0f172a;border:1px solid var(--line);border-radius:20px;padding:1px 9px;font-size:.73rem;color:var(--accent2)}
.tagcloud{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}.tagcloud .tag{cursor:pointer}.tagcloud .tag.active{background:var(--accent);color:#fff}
.empty{color:var(--muted);text-align:center;padding:30px}
.gauge{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px;margin-bottom:10px}
.gauge .bar{height:10px;background:#0f172a;border-radius:6px;overflow:hidden;margin-top:6px}.gauge .fill{height:100%;background:var(--accent)}
.ptabs{display:flex;gap:6px;margin-bottom:14px;flex-wrap:wrap}.ptab{background:var(--card);border:1px solid var(--line);color:var(--muted);padding:7px 12px;border-radius:8px}.ptab.active{background:var(--accent);color:#fff;border-color:var(--accent)}
.pipe{display:flex;gap:12px;overflow-x:auto;padding-bottom:10px}.pcol{min-width:230px;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px}.pcol h4{margin:0 0 8px;font-size:.9rem}
.pcard{background:#0f172a;border:1px solid var(--line);border-radius:8px;padding:8px;margin-bottom:8px;cursor:pointer;font-size:.85rem}
.ctable{width:100%;border-collapse:collapse}.ctable th,.ctable td{text-align:left;padding:7px 8px;border-bottom:1px solid var(--line);font-size:.88rem}.ctable tr{cursor:pointer}
.conges-row{display:grid;grid-template-columns:repeat(6,1fr);gap:6px;margin:8px 0}.conges-row label{font-size:.72rem;color:var(--muted)}.conges-row input{width:100%;padding:4px;border-radius:6px;border:1px solid var(--line);background:#0f172a;color:var(--txt)}
details.box{margin-top:10px}details.box summary{cursor:pointer;color:var(--accent2);font-size:.85rem}
/* admin */
.adm label{display:block;font-size:.82rem;color:var(--muted);margin:10px 0 4px}
.adm .inp{width:100%}
.tblock{border:1px solid var(--line);border-radius:10px;padding:12px;margin-bottom:10px;background:#0f172a}
.tblock .thead{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.tblock input,.tblock select{padding:6px 8px;border-radius:7px;border:1px solid var(--line);background:var(--card);color:var(--txt);font-size:.85rem}
.fitem{border:1px solid var(--line);border-radius:8px;padding:8px;margin:8px 0;background:var(--card)}
.fitem .fhead{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.fopts{margin-top:8px;display:none;grid-template-columns:1fr 1fr;gap:8px}.fopts.open{display:grid}
.fopts label{margin:4px 0 2px}.ck{display:flex;align-items:center;gap:7px;color:var(--txt);font-size:.85rem;margin:4px 0}.ck input{width:auto}
.gear{background:transparent;border:0;color:var(--muted);font-size:1rem;cursor:pointer}
/* modal */
.modal{position:fixed;inset:0;background:rgba(0,0,0,.55);display:grid;place-items:center;padding:16px;z-index:50}
.modal-box{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:20px;width:100%;max-width:520px;max-height:92vh;overflow:auto}
.modal-box.wide{max-width:780px}
form.grid label{display:block;font-size:.82rem;color:var(--muted);margin:11px 0 4px}
form.grid input,form.grid select,form.grid textarea{width:100%;padding:9px;border-radius:8px;border:1px solid var(--line);background:var(--card2);color:var(--txt);font-size:.92rem}
form.grid textarea{min-height:60px}.icon{background:transparent;border:0;color:var(--muted);font-size:1.2rem}
.section-label{margin:16px 0 6px;font-weight:600;font-size:.9rem}
.modal-actions{display:flex;gap:10px;margin-top:18px}.modal-actions .btn{flex:1}.modal-actions .btn.ghost{flex:0 0 auto}
.act-row{display:flex;gap:6px;align-items:center;margin-bottom:6px}.act-row input[type=text]{flex:1}.act-row input[type=date]{width:150px}
.report-html{background:#fff;color:#111;border-radius:10px;padding:20px;max-height:62vh;overflow:auto}
.report-html h1{font-size:1.4rem}.report-html h2{font-size:1.1rem;margin-top:16px;color:#1f2937}.report-html table{width:100%;border-collapse:collapse;margin:8px 0}.report-html th,.report-html td{border:1px solid #ddd;padding:6px 8px;text-align:left;font-size:.9rem}.report-html .rep-sub{color:#666}
.lrow{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--line);gap:10px}.lrow:last-child{border:0}
.tcfg{border-bottom:1px solid var(--line);padding-bottom:8px;margin-bottom:8px}
.tcfg label{display:block;font-size:.78rem;color:var(--muted);margin:6px 0 3px}
.tcfg input[type=text],.tcfg textarea{width:100%;padding:6px 8px;border-radius:7px;border:1px solid var(--line);background:var(--card);color:var(--txt);font-size:.85rem}
.tcfg label.ck{display:flex;align-items:center;gap:7px;font-size:.84rem;color:var(--txt);margin-top:8px}
.tcfg label.ck input{width:auto}
.t-toggle{background:#334155;border:0;color:var(--txt);font-size:1.05rem;line-height:1;width:30px;height:30px;border-radius:8px;cursor:pointer}.t-toggle:hover{background:#475569}
.io-line{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--line)}
.imp-lbl{cursor:pointer;display:inline-block}
.dl-item{display:flex;align-items:center;gap:10px;padding:7px 8px;border:1px solid var(--line);border-radius:8px;margin-bottom:6px;background:#0f172a}
.dl-item.dragging{opacity:.5}.dl-item .dl-drag{cursor:grab;color:var(--muted);user-select:none;font-size:1.05rem}.dl-item label.ck{margin:0;flex:1}
.fdrag,.tdrag{cursor:grab;color:var(--muted);user-select:none;font-size:1.1rem;padding:0 2px}
.fdrag:active,.tdrag:active{cursor:grabbing}
.fitem.dragging,.tblock.dragging{opacity:.5}

.sd-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:7px 0;border-bottom:1px solid var(--line)}
.sd-row:last-child{border-bottom:0}.sd-type{font-weight:600;min-width:130px}
.sd-pill{background:var(--card2);border-radius:20px;padding:2px 10px;font-size:.82rem}
.gauge{margin:4px 0}.gauge-top{display:flex;justify-content:space-between;font-size:.83rem;margin-bottom:2px}
.gauge-bar{height:9px;background:var(--card2);border-radius:6px;overflow:hidden}.gauge-fill{height:100%;border-radius:6px;transition:width .4s}
.small{font-size:.82rem}

.dblk{margin-bottom:14px}
.dblk:empty{margin:0}

/* pipeline kanban (v3) */
.pipe-board{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:14px}
.pipe-h{margin:2px 0 8px;font-size:.95rem}
.kanban{display:flex;gap:12px;flex-wrap:wrap;padding-bottom:8px}
.kcol{flex:1 1 180px;min-width:0;background:var(--bg);border:1px solid var(--line);border-radius:10px;display:flex;flex-direction:column;min-height:120px}
.kcol-h{padding:8px 10px;font-weight:600;font-size:.85rem;border-bottom:1px solid var(--line)}
.kcol-body{flex:1;padding:8px;display:flex;flex-direction:column;gap:8px;min-height:40px}
.kcol-f{padding:7px 10px;border-top:1px solid var(--line);font-size:.78rem;color:var(--muted)}
.kcard{background:var(--card);border:1px solid var(--line);border-left:3px solid var(--line);border-radius:8px;padding:8px;cursor:grab;font-size:.85rem}
.kcard:hover{background:var(--card2)}.kcard.dragging{opacity:.5}.kcard .kca{color:var(--ok);font-weight:600;font-size:.82rem;margin-top:2px}
.pdot{display:inline-block;width:11px;height:11px;border-radius:50%;margin-right:7px;vertical-align:middle}
.pipe-h{font-weight:700}
