:root{--hand:url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24"%3E%3Cpath fill="%23111" stroke="%23fff" stroke-width="1.3" stroke-linejoin="round" d="M9 2.5c1 0 1.8.8 1.8 1.8V11h.4V9.6c0-1 .8-1.7 1.7-1.7s1.7.8 1.7 1.7V11h.4v-.6c0-1 .8-1.7 1.7-1.7s1.7.8 1.7 1.7V12h.3c0-.9.8-1.6 1.7-1.6.9 0 1.6.7 1.6 1.6v4.6c0 3.4-2.7 5.9-6 5.9h-2.2c-1.9 0-3.6-.9-4.7-2.4L4.1 15.2c-.6-.8-.4-1.9.4-2.4.7-.5 1.7-.4 2.3.3l.4.5V4.3c0-1 .8-1.8 1.8-1.8z"/%3E%3C/svg%3E') 10 3, pointer;--grab:url('data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 24 24"%3E%3Cpath fill="%23111" stroke="%23fff" stroke-width="1.3" stroke-linejoin="round" d="M8 7.5c0-.9.7-1.6 1.6-1.6s1.6.7 1.6 1.6V11h.3V4.6c0-.9.7-1.6 1.6-1.6s1.6.7 1.6 1.6V11h.3V6c0-.9.7-1.6 1.6-1.6s1.6.7 1.6 1.6v5.5h.3V8.6c0-.9.7-1.6 1.6-1.6s1.6.7 1.6 1.6v7.6c0 3.5-2.8 6.3-6.3 6.3h-1.6c-2 0-3.8-1-5-2.6L3.6 14.6c-.6-.8-.4-1.9.4-2.4.8-.5 1.8-.3 2.4.4L8 14.4z"/%3E%3C/svg%3E') 14 14, grab}
button,a,[role=button],summary,select,label:has(input[type=radio]),label:has(input[type=checkbox]),label.btn{cursor:var(--hand)}
.stage:active:not(.drawing){cursor:var(--grab)}
:root{
  --black:#111; --green:#66CC00; --green-d:#4E9E00; --green-t:#3D7A00; --ink:#1B1B1B; --muted:#6B6460;
  --bg:#F2F3F0; --card:#fff; --field:#F1F6EC; --line:#E2DAD7; --link:#1F7AE0;
  --radius:10px;
  --font:"Helvetica Neue",Helvetica,Arial,system-ui,sans-serif;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.4 var(--font)}
button,input,textarea,select{font:inherit;color:inherit}
a{color:inherit}
[hidden]{display:none!important}

.top{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:12px;padding:10px 16px calc(10px);padding-top:max(10px,env(safe-area-inset-top));
  background:var(--bg);border-bottom:3px solid var(--green)}
.brand{display:block;flex:none}
.logo{width:132px;height:auto;display:block}
.top-title{flex:1;min-width:0;font-weight:800;font-size:15px;letter-spacing:.04em;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lang{display:flex;border:1px solid var(--line);border-radius:999px;overflow:hidden;background:#fff;flex:none}
.lang button{border:0;background:none;padding:6px 11px;font-size:12px;font-weight:700;color:var(--muted);cursor:var(--hand)}
.lang button.on{background:var(--ink);color:#fff}

main{max-width:980px;margin:0 auto;padding:14px 12px 80px}
.row-h{display:flex;align-items:center;gap:10px;margin:4px 0 12px}
.row-h h1{flex:1;margin:0;font-size:20px;font-weight:800;min-width:0}
.crumbs{font-size:13px;color:var(--muted);margin:0 0 6px;display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.crumbs a{color:var(--green-t);font-weight:700;text-decoration:none}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:44px;padding:0 14px;border-radius:8px;border:1.5px solid var(--ink);
  background:var(--ink);color:#fff;font-weight:700;font-size:14px;cursor:var(--hand);text-decoration:none;white-space:nowrap}
.btn.alt{background:#fff;color:var(--ink)}
.btn.green{background:var(--green);border-color:var(--green-d);color:#111}
.btn.ghost{background:none;border-color:transparent;color:var(--ink)}
.btn.danger{background:#fff;color:#B42318;border-color:#E4B4AF}
.btn:disabled{opacity:.5;cursor:default}
.btn.sm{min-height:36px;padding:0 10px;font-size:13px}
.icon-btn{width:44px;height:44px;border-radius:8px;border:0;background:none;display:inline-flex;align-items:center;justify-content:center;cursor:var(--hand);color:inherit;flex:none}
.icon-btn:hover{background:rgba(0,0,0,.06)}
svg.i{width:22px;height:22px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}

.search{position:relative;margin:0 0 12px}
.search input{width:100%;border:1.5px solid transparent;background:#fff;border-radius:8px;padding:11px 12px 11px 40px;min-height:46px;outline:none;box-shadow:0 1px 2px rgba(0,0,0,.06)}
.search input:focus{border-color:var(--green-d)}
.search svg{position:absolute;left:12px;top:12px;width:20px;height:20px;stroke:var(--muted)}

.card{background:var(--card);border-radius:var(--radius);box-shadow:0 1px 2px rgba(0,0,0,.06)}
.plist{display:grid;gap:10px}
.pcard{display:flex;align-items:center;gap:14px;padding:14px;text-decoration:none;border-left:6px solid var(--green)}
.pcard .num{flex:none;min-width:56px;text-align:center;font-weight:800;font-size:13px;background:var(--black);color:#fff;border-radius:6px;padding:6px 8px;font-variant-numeric:tabular-nums}
.pcard .meta{flex:1;min-width:0}
.pcard .name{font-weight:800;font-size:16px}
.pcard .sub{color:var(--muted);font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pcard .count{flex:none;font-size:12px;color:var(--muted);text-align:right}
.pcard .count b{display:block;font-size:18px;color:var(--ink)}

.tabs{display:flex;gap:4px;background:#E6E8E2;border-radius:10px;padding:4px;margin:0 0 12px}
.tabs a{flex:1;text-align:center;padding:10px;border-radius:7px;text-decoration:none;font-weight:800;font-size:14px;color:var(--muted)}
.tabs a.on{background:#fff;color:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.08)}

.disc{margin:16px 0 8px;font-size:12px;font-weight:800;letter-spacing:.06em;color:var(--muted);text-transform:uppercase;display:flex;align-items:center;gap:8px}
.disc::after{content:"";flex:1;height:1px;background:var(--line)}
.sheets{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px}
.sheet{display:block;text-decoration:none;overflow:hidden;position:relative}
.sheet .th{aspect-ratio:3/2;background:#fafaf8 center/contain no-repeat;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:center;color:#bbb}
.sheet .th img{width:100%;height:100%;object-fit:contain;display:block}
.sheet .lb{padding:8px 10px}
.sheet .sn{font-weight:800;font-size:15px}
.sheet .st{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sheet .rev{position:absolute;top:6px;right:6px;background:var(--black);color:#fff;font-size:11px;font-weight:700;padding:2px 6px;border-radius:4px}
.view-toggle{display:flex;gap:4px}
.slist .sheet{display:flex;align-items:center;gap:12px;padding:10px 12px;margin-bottom:6px}
.slist .sheet .th{display:none}
.slist .sheet .lb{padding:0;display:flex;gap:12px;align-items:baseline;min-width:0}
.slist .sheet .sn{min-width:70px}

.folders{display:grid;gap:8px}
.frow{display:flex;align-items:center;gap:12px;padding:12px 14px;text-decoration:none;min-height:56px}
.frow .fi{flex:none;width:36px;height:36px;border-radius:8px;display:flex;align-items:center;justify-content:center;background:var(--field);color:var(--green-t)}
.frow .fi.doc{background:#EEF0F4;color:#445}
.frow .fn{flex:1;min-width:0}
.frow .fn b{display:block;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.frow .fn small{color:var(--muted);font-size:12px}
.frow .fc{color:var(--muted);font-size:13px;flex:none}
.frow .acts{display:flex;gap:2px;flex:none}

.empty{text-align:center;padding:36px 16px;color:var(--muted)}
.empty b{display:block;color:var(--ink);font-size:16px;margin-bottom:4px}
.skel{background:linear-gradient(90deg,#e9eae6 0%,#f4f5f1 50%,#e9eae6 100%);background-size:200% 100%;animation:sk 1.2s infinite;border-radius:var(--radius);height:72px}
@keyframes sk{to{background-position:-200% 0}}

.fab{position:fixed;right:16px;bottom:max(16px,env(safe-area-inset-bottom));z-index:15;box-shadow:0 6px 18px rgba(0,0,0,.25);border-radius:999px;min-height:54px;padding:0 20px}

/* modal */
.modal{position:fixed;inset:0;z-index:60;background:rgba(17,17,17,.55);display:flex;align-items:flex-end;justify-content:center}
.sheetm{background:#fff;width:100%;max-width:560px;max-height:92vh;overflow:auto;border-radius:16px 16px 0 0;padding:18px 16px max(18px,env(safe-area-inset-bottom))}
@media(min-width:640px){.modal{align-items:center}.sheetm{border-radius:14px}}
.sheetm.wide{max-width:900px}
.sheetm h2{margin:0 0 12px;font-size:18px;font-weight:800;display:flex;align-items:center;gap:8px}
.sheetm h2 span{flex:1}
label.f{display:block;margin:0 0 12px}
label.f>span{display:block;font-size:13px;font-weight:700;margin:0 0 5px}
.f input,.f select,.f textarea{width:100%;border:1.5px solid transparent;background:var(--field);border-radius:6px;padding:11px 12px;min-height:46px;outline:none}
.f input:focus,.f select:focus{border-color:var(--green-d);background:#fff}
.chk{display:flex;gap:10px;align-items:flex-start;margin:0 0 12px;font-size:14px}
.chk input{width:22px;height:22px;flex:none;accent-color:var(--green-d);margin:0}
.m-acts{display:flex;gap:8px;justify-content:flex-end;margin-top:14px;flex-wrap:wrap}
.m-acts .btn{min-width:110px}
.err{color:#B42318;font-size:14px;margin:6px 0}
.note{color:var(--muted);font-size:13px;margin:4px 0 12px}
.prog{height:8px;background:#E6E8E2;border-radius:99px;overflow:hidden;margin:8px 0}
.prog i{display:block;height:100%;width:0;background:var(--green);transition:width .2s}
.uplist{list-style:none;margin:0;padding:0;font-size:14px}
.uplist li{padding:8px 0;border-bottom:1px solid var(--line)}
.uplist li .nm{display:flex;justify-content:space-between;gap:8px}
.uplist li .nm b{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.uplist li .stt{color:var(--muted);font-size:12px;flex:none}
.review{width:100%;border-collapse:collapse;font-size:14px}
.review th{text-align:left;font-size:12px;color:var(--muted);padding:6px;border-bottom:1px solid var(--line)}
.review td{padding:4px 6px;border-bottom:1px solid var(--line);vertical-align:middle}
.review td input{width:100%;border:1.5px solid transparent;background:var(--field);border-radius:6px;padding:8px;min-height:38px}
.review td.pg{color:var(--muted);width:44px}
.review td.n{width:120px}
.review img{width:84px;height:56px;object-fit:contain;background:#fafaf8;border:1px solid var(--line);border-radius:4px;display:block}
.pick{max-height:52vh;overflow:auto;margin:0 -4px}
.pick button{display:flex;width:100%;gap:12px;align-items:baseline;text-align:left;border:0;background:none;padding:12px 8px;border-bottom:1px solid var(--line);cursor:var(--hand)}
.pick button:hover{background:var(--field)}
.pick button b{min-width:72px}
.pick button span{color:var(--muted);font-size:14px}

.toast{position:fixed;left:50%;transform:translateX(-50%);bottom:max(84px,calc(env(safe-area-inset-bottom) + 84px));z-index:80;background:var(--black);color:#fff;padding:10px 16px;border-radius:8px;font-size:14px;font-weight:600;max-width:90vw;box-shadow:0 6px 18px rgba(0,0,0,.3)}

/* viewer */
.viewer{position:fixed;inset:0;z-index:40;background:#3a3c38;display:flex;flex-direction:column;color:#fff;touch-action:none}
.vbar{display:flex;align-items:center;gap:4px;padding:6px 6px;padding-top:max(6px,env(safe-area-inset-top));background:var(--black);border-bottom:3px solid var(--green);flex:none}
.vbar .ttl{flex:1;min-width:0;cursor:var(--hand);padding:4px 6px;border-radius:6px}
.vbar .ttl b{display:block;font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vbar .ttl small{display:block;font-size:12px;color:#bbb;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vbar .icon-btn:hover{background:rgba(255,255,255,.12)}
.vbar .icon-btn.on{background:var(--green);color:#111}
.stage{position:relative;flex:1;overflow:hidden;touch-action:none;cursor:var(--grab);user-select:none;-webkit-user-select:none}
.stage.drawing{cursor:crosshair}
.content{position:absolute;left:0;top:0;transform-origin:0 0;will-change:transform;background:#fff;box-shadow:0 4px 24px rgba(0,0,0,.4)}
.content canvas{position:absolute;left:0;top:0;display:block}
.content canvas.base{width:100%;height:100%}
.links{position:absolute;inset:0}
.lnk{position:absolute;border:calc(2px * var(--inv,1)) solid var(--link);background:rgba(31,122,224,.14);border-radius:calc(3px * var(--inv,1));cursor:var(--hand)}
.lnk.man{border-color:#E07A1F;background:rgba(224,122,31,.14)}
.lnk.hid{border-style:dashed;background:none;opacity:.7}
.lnk:hover{background:rgba(31,122,224,.3)}
.draw-rect{position:absolute;border:calc(2px * var(--inv,1)) dashed #E07A1F;background:rgba(224,122,31,.18);pointer-events:none}
.backchip{position:absolute;left:12px;bottom:max(14px,env(safe-area-inset-bottom));z-index:3;background:var(--link);color:#fff;border:0;border-radius:999px;padding:0 16px;min-height:46px;font-weight:800;font-size:14px;box-shadow:0 4px 14px rgba(0,0,0,.35);cursor:var(--hand);display:flex;align-items:center;gap:6px}
.vhint{position:absolute;left:50%;top:12px;transform:translateX(-50%);z-index:3;background:rgba(17,17,17,.88);color:#fff;padding:8px 14px;border-radius:8px;font-size:13px;font-weight:600;max-width:90%;text-align:center}
.vload{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;z-index:2;color:#ddd;font-size:14px;pointer-events:none}
.spinner{width:28px;height:28px;border:3px solid rgba(255,255,255,.25);border-top-color:var(--green);border-radius:50%;animation:spin .8s linear infinite;margin-right:10px}
@keyframes spin{to{transform:rotate(360deg)}}
.zoomctl{position:absolute;right:12px;bottom:max(14px,env(safe-area-inset-bottom));z-index:3;display:flex;flex-direction:column;gap:6px}
.zoomctl button{width:46px;height:46px;border-radius:10px;border:0;background:rgba(17,17,17,.85);color:#fff;font-size:22px;font-weight:700;cursor:var(--hand);display:flex;align-items:center;justify-content:center}

@media(max-width:520px){
  .logo{width:104px}
  .top-title{font-size:13px}
  .sheets{grid-template-columns:repeat(2,1fr);gap:8px}
  .row-h h1{font-size:18px}
  .hide-sm{display:none}
}
@media print{.top,.fab{display:none}}
@media(max-width:520px){
  .review td:first-child,.review th:first-child{display:none}
  .review td.n{width:96px}
  .review td.pg{width:28px}
}
.pick button.cur{background:var(--field)}
.review tr.chk-row td{background:#FFF9E6}
.review .guess{margin-top:6px;font-size:12px;color:#8A5A00;font-weight:700}
.review .guess img.corner{display:block;width:100%;max-width:420px;height:170px;object-fit:cover;object-position:right bottom;margin-top:4px;border:1px solid var(--line);border-radius:4px;background:#fff}
.scanchip{position:absolute;left:50%;transform:translateX(-50%);top:12px;z-index:3;background:#111;color:#fff;border:2px solid var(--green,#66CC00);border-radius:999px;padding:0 16px;min-height:44px;font-weight:800;font-size:14px;box-shadow:0 4px 14px rgba(0,0,0,.3);cursor:var(--hand);display:flex;align-items:center;gap:8px;white-space:nowrap}
.scanchip svg{width:18px;height:18px}
.scanchip[disabled]{opacity:.85;cursor:progress}
.scanchip[hidden]{display:none}
.scanchip{cursor:default}
.scanchip .spinner.sm{width:16px;height:16px;border-width:3px}
.scanbar{background:#111;color:#fff;border-left:4px solid #66CC00;border-radius:8px;padding:10px 12px;margin:10px 0;font-size:13px;font-weight:600}
.scanbar .prog{height:4px;background:#333;border-radius:2px;margin-top:8px;overflow:hidden}
.scanbar .prog i{display:block;height:100%;width:0;background:#66CC00;transition:width .3s}
.scanbar[hidden]{display:none}

.lockb{display:inline-flex;margin-right:6px;color:var(--muted);vertical-align:middle}.lockb .i{width:18px;height:18px}
label.f>span .i,h2 .i{width:18px;height:18px;vertical-align:-3px}

.dethl{position:absolute;pointer-events:none;border:calc(3px * var(--inv,1)) solid #66CC00;background:rgba(102,204,0,.18);border-radius:calc(4px * var(--inv,1));animation:dethl 2.6s ease-out forwards}
@keyframes dethl{0%,60%{opacity:1}100%{opacity:0}}

/* ---- markups ---- */
.mk{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;overflow:visible}
.mk .mktxt,.mk .mklbl{font-family:var(--font);font-weight:700}
.mk .mksel{fill:rgba(31,122,224,.06);stroke:var(--link)}
.pins{position:absolute;inset:0;pointer-events:none}
.pin{position:absolute;width:30px;height:30px;margin:-30px 0 0 -15px;transform:scale(var(--inv,1));transform-origin:50% 100%;pointer-events:auto;cursor:var(--hand)}
.pin::before{content:"";position:absolute;inset:0;background:var(--pc);border:2px solid #fff;border-radius:50% 50% 50% 0;transform:rotate(-45deg);box-shadow:0 2px 6px rgba(0,0,0,.45)}
.pin span{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:800;font-size:12px;padding-bottom:3px}
.pin.pulse::after{content:"";position:absolute;left:50%;top:50%;width:60px;height:60px;margin:-30px;border-radius:50%;border:3px solid var(--pc);animation:pinp 1.2s ease-out 3}
@keyframes pinp{from{transform:scale(.3);opacity:1}to{transform:scale(1.4);opacity:0}}
.mtools{position:absolute;left:10px;top:10px;z-index:4;display:flex;flex-direction:column;gap:8px}
.mgrp{display:flex;flex-direction:column;background:rgba(17,17,17,.9);border-radius:10px;overflow:hidden;box-shadow:0 2px 10px rgba(0,0,0,.3)}
.mt{width:46px;height:44px;border:0;background:none;color:#fff;display:flex;align-items:center;justify-content:center;cursor:var(--hand);position:relative}
.mt:hover{background:rgba(255,255,255,.12)}
.mt.on{background:var(--green);color:#111}
.mt.off{opacity:.45}
.mt .dot{width:22px;height:22px;border-radius:50%;border:2px solid #fff}
.mfly{position:absolute;left:54px;display:flex;flex-direction:column;gap:6px;background:rgba(17,17,17,.94);border-radius:10px;padding:6px;box-shadow:0 2px 10px rgba(0,0,0,.35);z-index:5}
.mfly .mt{width:auto;justify-content:flex-start;gap:10px;padding:0 12px 0 10px;border-radius:8px;white-space:nowrap}
.mfly .lbl{font-size:14px;font-weight:600}
.mfly .pal{display:flex;gap:6px;flex-wrap:wrap;max-width:236px}
.sw{width:34px;height:34px;border-radius:50%;border:2px solid rgba(255,255,255,.35);cursor:var(--hand)}
.sw.on{outline:3px solid var(--green);outline-offset:1px}
.wbtn{width:48px;height:34px;border-radius:8px;border:1px solid rgba(255,255,255,.25);background:none;cursor:var(--hand);display:flex;align-items:center;justify-content:center;color:#fff;font-size:13px;font-weight:700}
.wbtn i{display:block;width:26px;background:#fff;border-radius:4px}
.wbtn.txt{width:auto;padding:0 10px}
.wbtn.on{background:var(--green);color:#111;border-color:var(--green)}
.wbtn.on i{background:#111}
.selbar{position:absolute;left:50%;bottom:max(14px,env(safe-area-inset-bottom));transform:translateX(-50%);z-index:4;display:flex;gap:8px;align-items:center;background:rgba(17,17,17,.92);color:#fff;padding:8px;border-radius:12px;box-shadow:0 4px 14px rgba(0,0,0,.35)}
.selbar .who{font-size:12px;color:#ccc;padding:0 6px;white-space:nowrap}
.stb{flex:1;min-height:42px;border-radius:8px;border:2px solid var(--pc);background:#fff;color:var(--ink);font-weight:700;cursor:var(--hand)}
.stb.on{background:var(--pc);color:#fff}
.stbs{display:flex;gap:8px}
.tnum{display:inline-flex;align-items:center;justify-content:center;min-width:28px;height:28px;padding:0 6px;border-radius:999px;background:var(--pc);color:#fff;font-weight:800;font-size:13px;flex:none}
.tphs{display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:6px}
.tphs:empty{display:none}
.tph img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:8px;display:block;background:#eee}
.tnote{border-left:3px solid var(--green);padding:4px 8px;margin:4px 0;background:var(--field);border-radius:4px;font-size:14px}
.tnote small{color:var(--muted)}
.tkf{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 10px}
.chip{border:1.5px solid var(--line);background:#fff;border-radius:999px;min-height:38px;padding:0 14px;font-weight:700;font-size:13px;cursor:var(--hand)}
.chip.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.tkrow{width:100%;text-align:left;cursor:var(--hand);font:inherit;border:0}
.tkthumb{width:48px;height:48px;object-fit:cover;border-radius:6px;flex:none}
.modal h2 > span{display:inline-flex;align-items:center;gap:8px}
.tnum:empty{display:none}
div.f > span:first-child{display:block;font-size:13px;font-weight:700;margin:12px 0 6px}
.tphs{margin-bottom:8px}
.symfly{width:340px;display:flex;flex-direction:column;gap:8px;padding:4px}
.symhd{display:flex;gap:6px}
.symhd select,.symhd input{min-height:40px;border-radius:8px;border:0;padding:0 10px;font-size:15px;background:#fff;color:#111}
.symhd select{flex:1.2;min-width:0;font-weight:600}
.symhd input{flex:1;min-width:0}
.symgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;max-height:min(52vh,420px);overflow-y:auto;touch-action:pan-y;-webkit-overflow-scrolling:touch;padding:2px}
.symb{display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px 2px 6px;border:2px solid transparent;border-radius:10px;background:#fff;cursor:var(--hand);min-height:76px}
.symb:hover{border-color:#bbb}
.symb.on{border-color:var(--green)}
.symb .symi{width:34px;height:34px}
.symb span{font-size:10.5px;line-height:1.15;color:#333;text-align:center;font-weight:600;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.symnone{grid-column:1/-1;color:#ccc;padding:18px;text-align:center;font-size:14px}
.selbar #selsm,.selbar #selbg{font-size:20px;font-weight:800;min-width:42px;justify-content:center}
.xopts{display:flex;flex-direction:column;gap:8px}
.xopts.row{flex-direction:row}
.xopts.row .xopt{flex:1}
.xopt{display:flex;gap:10px;align-items:flex-start;padding:12px;border:2px solid #e3e3e3;border-radius:10px;cursor:var(--hand);background:#fff}
.xopt:has(input:checked){border-color:var(--green);background:#f3fbea}
.xopt input{margin-top:3px;accent-color:#4c9a00;width:18px;height:18px;flex:none}
.xopt span{display:flex;flex-direction:column;gap:2px;min-width:0}
.xopt small{color:#666;font-size:12.5px;overflow-wrap:anywhere}
.xchk{display:flex;align-items:center;gap:10px;margin:12px 0 0;font-weight:600;cursor:var(--hand)}
.xchk input{width:20px;height:20px;accent-color:#4c9a00}
.xprog{display:flex;flex-direction:column;align-items:center;gap:12px;padding:26px 8px 10px;text-align:center}
.xprog .bar{width:100%;height:8px;border-radius:99px;background:#eee;overflow:hidden}
.xprog .bar i{display:block;height:100%;background:var(--green);transition:width .3s}
.xdone{display:flex;flex-direction:column;align-items:center;gap:6px;padding:16px 8px 6px;text-align:center}
.xdone b{font-size:18px}
.xdone small{color:#666;overflow-wrap:anywhere}
.xacts{display:flex;flex-direction:column;gap:8px;margin-top:14px}
.xacts .btn{justify-content:center;text-decoration:none}
.mfly.gridfly{display:grid;grid-template-columns:repeat(5,46px);gap:4px}
.mfly.gridfly .mt{width:46px;padding:0;justify-content:center}
.privbtn{display:flex;align-items:center;justify-content:center;gap:8px;min-height:42px;border-radius:8px;border:2px solid #6B3FA0;background:transparent;color:#fff;font-weight:700;cursor:var(--hand);padding:0 12px}
.privbtn .i{width:18px;height:18px}
.privbtn.on{background:#6B3FA0}
.mt#mcolor.priv::after{content:"";position:absolute;right:5px;bottom:5px;width:13px;height:13px;border-radius:50%;background:#6B3FA0 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='6' y='11' width='12' height='9' rx='2' fill='%23fff'/%3E%3Cpath d='M8.5 11V8.5a3.5 3.5 0 0 1 7 0V11' stroke='%23fff' stroke-width='2.4' fill='none'/%3E%3C/svg%3E") center/11px no-repeat;border:1.5px solid #111}
.privtag{display:inline-flex;align-items:center;gap:4px;background:#6B3FA0;color:#fff;border-radius:6px;padding:2px 6px;margin-right:6px;font-weight:700}
.privtag .i{width:12px;height:12px}
.selbar #selpriv .i{width:16px;height:16px}
/* offline copies */
.offp{display:flex;align-items:center;gap:12px;background:#fff;border:1px solid #DADDD5;border-left:6px solid var(--black);border-radius:10px;padding:10px 12px;margin:10px 0}
.offp[hidden]{display:none}
.offp .oic{flex:none;display:inline-flex;width:34px;height:34px;border-radius:50%;align-items:center;justify-content:center;background:#F0F1EC;color:var(--ink)}
.offp .oic .i{width:20px;height:20px}
.offp .ot{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.offp .ot b{font-size:14px}.offp .ot small{color:var(--muted);font-size:12.5px}
.offp .prog{margin:6px 0 0}
.offp.ok{border-left-color:var(--green)}.offp.ok .oic{background:var(--green);color:#fff}
.offp.stale{border-left-color:#E0A000}.offp.stale .oic{background:#FFF1CC;color:#7A5600}
.offp.busy{border-left-color:var(--green)}
.offp .btn{flex:none}
.offb{display:inline-flex;align-items:center;gap:3px;margin-right:6px;padding:2px 7px;border-radius:99px;background:var(--green);color:#111;font-weight:800;font-size:11px;vertical-align:middle}
.offb .i{width:13px;height:13px;stroke-width:3}
.netbar{position:fixed;top:0;left:0;right:0;z-index:60;height:40px;display:flex;align-items:center;justify-content:center;background:#111;color:#fff;border-bottom:3px solid #E0A000;padding:0 14px;font-size:13px;font-weight:700;text-align:center;line-height:1.2}
.netbar[hidden]{display:none}
body.nonet{padding-top:40px}body.nonet .viewer{top:40px}
/* plan sets, uploads and revisions */
.bdg{position:absolute;top:6px;left:6px;font-size:11px;font-weight:800;padding:2px 7px;border-radius:4px;letter-spacing:.02em;text-transform:uppercase}
.sheet .bdg.b-new{background:var(--green);color:#111}
.sheet .bdg.b-rev{background:#E0A000;color:#111}
.setbar{display:flex;gap:6px;align-items:center;overflow-x:auto;margin:0 0 10px;padding-bottom:2px}
.setbar button[data-set]{flex:none;min-height:40px;padding:0 14px;border-radius:20px;border:1.5px solid var(--line);background:#fff;font-weight:700;cursor:var(--hand);color:var(--ink)}
.setbar button[data-set] span{font-weight:500;color:#666;margin-left:4px}
.setbar button.on{background:var(--black);border-color:var(--black);color:#fff}
.setbar button.on span{color:#cfcfcf}
.issbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;padding:10px 12px;margin:0 0 12px;border:1.5px solid var(--line);border-left:5px solid #E0A000;border-radius:8px;background:#fff}
.issbar.on{border-left-color:var(--green);background:#F4FBEC}
.issbar .ilab{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;flex:1;min-width:200px}
.issbar .ilab small{color:#555;font-size:13px}
.issrow{display:flex;align-items:center;gap:4px;border-bottom:1px solid var(--line)}
.issrow button[data-i]{border-bottom:0;flex-direction:column;gap:2px}
.issrow button[data-i] span{font-size:13px;color:#555}
.setsec{border:1.5px solid var(--line);border-radius:8px;padding:10px 12px;margin:8px 0;display:grid;gap:10px}
.setsec[hidden]{display:none}
.setsec .opt{display:flex;gap:10px;align-items:flex-start;padding:8px 0;cursor:var(--hand)}
.setsec .opt input[type=radio]{width:22px;height:22px;margin-top:2px;accent-color:var(--green-d);flex:none}
.setsec .opt>span{display:grid;gap:4px;flex:1}
.setsec .opt small{color:#555;font-size:13px;line-height:1.35}
.setsec .opt select,.setsec .opt input[name=setName]{margin-top:4px}
.setsec .row2{display:grid;grid-template-columns:1fr 170px;gap:10px}
.rsum{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}
.tag{display:inline-block;font-size:12px;font-weight:800;padding:3px 8px;border-radius:4px;white-space:nowrap}
.tag.new{background:var(--green);color:#111}
.tag.rev{background:#E0A000;color:#111}
.tag.same{background:#E6E6E6;color:#333}
.chips{display:flex;gap:6px;margin:6px 0 8px;flex-wrap:wrap}
.chips button{min-height:36px;padding:0 12px;border-radius:18px;border:1.5px solid var(--line);background:#fff;font-weight:700;cursor:var(--hand)}
.chips button.on{background:var(--black);border-color:var(--black);color:#fff}
.stc{white-space:nowrap}
.stc select{display:block;margin-top:4px;min-height:36px}
tr.skip td{opacity:.55}
tr.skip td.stc{opacity:1}
.setsec .f .opt input[type=radio]{width:22px;min-height:0;height:22px;padding:0}
.stc select{width:auto;border:1.5px solid var(--line);border-radius:6px;background:#fff;padding:4px 8px}
.issrow button[data-i]{flex:1;width:auto;min-width:0;align-items:flex-start}
.issrow .icon-btn{flex:none;width:44px;border-bottom:0;padding:0;justify-content:center;align-items:center}
