*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
[hidden]{display:none!important}
:root{--bg:#0f0f13;--surface:#17171f;--surface2:#1e1e2a;--surface3:#252535;--border:#2e2e42;--accent:#7c6af7;--accent2:#5b8ef7;--accent-glow:rgba(124,106,247,0.25);--text:#e8e8f0;--muted:#7878a0;--danger:#f76a7c;--success:#6af7b8;--warning:#f7c56a;--ui-font:'NotoTCApp','Noto Sans TC','PingFang TC','Microsoft JhengHei',sans-serif;--mono:'JetBrains Mono','SF Mono',Menlo,monospace}
body{font-family:var(--ui-font);background:var(--bg);color:var(--text);height:100vh;overflow:hidden;display:flex;flex-direction:column}
.mono{font-family:var(--mono);font-size:12px}
header{display:flex;align-items:center;gap:10px;padding:0 16px;height:50px;background:var(--surface);border-bottom:1px solid var(--border);flex-shrink:0;z-index:100}
.logo{font-family:var(--mono);font-weight:700;font-size:15px;color:var(--accent)}.logo span{color:var(--accent2)}
.hdr-sep{flex:1}
.file-chip{font-size:11px;color:var(--muted);font-family:var(--mono);background:var(--surface2);padding:3px 10px;border-radius:6px;border:1px solid var(--border);max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.font-status{font-size:11px;color:var(--muted)}.font-status.ok{color:var(--success)}.font-status.err{color:var(--danger)}
.btn{display:inline-flex;align-items:center;gap:5px;padding:5px 12px;border:1px solid transparent;border-radius:7px;font-family:var(--ui-font);font-size:13px;font-weight:500;cursor:pointer;transition:all .15s;white-space:nowrap;flex-shrink:0;background:transparent;color:inherit}
.btn svg{width:14px;height:14px;flex-shrink:0}
.btn-ghost{background:transparent;color:var(--muted)}.btn-ghost:hover{background:var(--surface3);color:var(--text)}
.btn-ghost.active{background:var(--accent-glow);color:var(--accent);border-color:var(--accent)}
.btn-primary{background:var(--accent);color:#fff;border-color:var(--accent)}.btn-primary:hover{background:#9180f9}
.btn-success{background:transparent;color:var(--success)}.btn-success:hover{background:rgba(106,247,184,.12);border-color:var(--success)}
.btn:disabled{opacity:.35;cursor:not-allowed}
.toolbar{display:flex;align-items:center;gap:3px;padding:0 10px;height:46px;background:var(--surface2);border-bottom:1px solid var(--border);flex-shrink:0;overflow-x:auto}
.tb-sep{width:1px;height:26px;background:var(--border);margin:0 6px;flex-shrink:0}
.page-nav{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--muted)}
.page-nav input{width:42px;text-align:center;background:var(--surface3);border:1px solid var(--border);color:var(--text);border-radius:6px;padding:3px;font-size:12px;font-family:var(--mono)}
.page-nav input:focus{outline:none;border-color:var(--accent)}
.zoom-sel{background:var(--surface3);border:1px solid var(--border);color:var(--text);border-radius:6px;padding:3px 7px;font-size:12px;cursor:pointer}
.zoom-sel:focus{outline:none;border-color:var(--accent)}
.main{display:flex;flex:1;overflow:hidden}
.sidebar{width:190px;background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;flex-shrink:0;overflow:hidden}
.panel-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:var(--muted);padding:11px 13px 7px}
.thumb-list{flex:1;overflow-y:auto;padding:0 7px 7px}
.thumb-list::-webkit-scrollbar{width:3px}.thumb-list::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}
.thumb-item{display:flex;flex-direction:column;align-items:center;gap:4px;padding:7px 3px;border-radius:7px;cursor:pointer;transition:background .15s;margin-bottom:3px;position:relative}
.thumb-item:hover{background:var(--surface2)}.thumb-item.active{background:var(--accent-glow)}
.thumb-item.active .thumb-lbl{color:var(--accent)}
.thumb-wrap{border:2px solid transparent;border-radius:4px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.4);transition:border-color .15s;background:#fff;min-height:40px}
.thumb-item.active .thumb-wrap{border-color:var(--accent)}
.thumb-canvas{display:block}.thumb-lbl{font-size:10px;color:var(--muted);font-family:var(--mono)}
.thumb-del{position:absolute;top:5px;right:5px;width:18px;height:18px;background:var(--danger);border:none;border-radius:3px;color:#fff;font-size:11px;cursor:pointer;display:none;align-items:center;justify-content:center}
.thumb-item:hover .thumb-del{display:flex}
.canvas-area{flex:1;overflow:auto;display:flex;align-items:flex-start;justify-content:center;background:#08080d;padding:28px;position:relative}
.canvas-area::-webkit-scrollbar{width:7px;height:7px}.canvas-area::-webkit-scrollbar-track{background:#08080d}.canvas-area::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}
.canvas-area.img-dragover .page-wrap{outline:2px dashed var(--accent);outline-offset:4px}
.page-wrap{position:relative;box-shadow:0 8px 48px rgba(0,0,0,.7);border-radius:3px;flex-shrink:0;background:#fff}
.page-wrap.hidden{display:none}
#pdfCanvas{display:block}
#hlSvg{position:absolute;top:0;left:0;pointer-events:none;z-index:9;overflow:visible;mix-blend-mode:multiply}
#annotSvg{position:absolute;top:0;left:0;pointer-events:none;z-index:10;overflow:visible}
.modal-back{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:300;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(4px)}
.modal-back.hidden{display:none}
.modal{background:var(--surface2);border:1px solid var(--border);border-radius:14px;padding:26px;min-width:320px;max-width:460px;box-shadow:0 16px 64px rgba(0,0,0,.6)}
.modal h2{font-size:15px;font-weight:500;line-height:1.6;margin-bottom:14px}
.modal-actions{display:flex;gap:7px;margin-top:14px;justify-content:flex-end}
#annotSvg .sel-outline{fill:none;stroke:#7c6af7;stroke-width:1.5;stroke-dasharray:5 3;vector-effect:non-scaling-stroke;pointer-events:none}
#annotSvg .txt{font-family:var(--ui-font);color:#1a1a1a;white-space:pre;line-height:1.3;overflow:visible}
#drawCanvas{position:absolute;top:0;left:0;pointer-events:none;z-index:11}
#guideCanvas{position:absolute;top:0;left:0;pointer-events:none;z-index:13}
#hitLayer{position:absolute;top:0;left:0;z-index:20;cursor:default;touch-action:none}
#hitLayer.tool-text{cursor:text}
#hitLayer.tool-highlight,#hitLayer.tool-rect,#hitLayer.tool-draw,#hitLayer.tool-ellipse,#hitLayer.tool-line,#hitLayer.tool-arrow,#hitLayer.tool-whiteout{cursor:crosshair}
#hitLayer.can-move{cursor:move}
#selBox{position:absolute;z-index:22;pointer-events:none;border:1.5px solid var(--accent);border-radius:2px}
#selBox.hidden{display:none}
#selBox.no-resize .rh{display:none}
#selBox .sz-tip{position:absolute;bottom:-22px;left:0;background:var(--surface3);border:1px solid var(--border);border-radius:4px;padding:1px 6px;font-size:10px;color:var(--muted);font-family:var(--mono);white-space:nowrap;pointer-events:none}
#selBox .del-btn{position:absolute;top:-28px;right:-10px;width:20px;height:20px;background:var(--danger);border:2px solid #fff;border-radius:50%;color:#fff;font-size:10px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:4;line-height:1;pointer-events:auto;padding:0}
.rh{position:absolute;width:9px;height:9px;background:var(--accent);border:2px solid #fff;border-radius:50%;z-index:3;box-shadow:0 1px 4px rgba(0,0,0,.5);pointer-events:auto;touch-action:none}
.rh.nw{top:-5px;left:-5px;cursor:nw-resize}.rh.n{top:-5px;left:calc(50% - 5px);cursor:n-resize}
.rh.ne{top:-5px;right:-5px;cursor:ne-resize}.rh.e{top:calc(50% - 5px);right:-5px;cursor:e-resize}
.rh.se{bottom:-5px;right:-5px;cursor:se-resize}.rh.s{bottom:-5px;left:calc(50% - 5px);cursor:s-resize}
.rh.sw{bottom:-5px;left:-5px;cursor:sw-resize}.rh.w{top:calc(50% - 5px);left:-5px;cursor:w-resize}
#textEditor{position:absolute;z-index:30;font-family:var(--ui-font);color:#1a1a1a;border:1.5px solid var(--accent);border-radius:2px;outline:none;resize:none;overflow:hidden;white-space:pre;line-height:1.3;transform-origin:0 0;box-shadow:0 0 0 3px rgba(124,106,247,.25)}
#textEditor.hidden{display:none}
.drop-zone{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:50}
.drop-zone.hidden{display:none}
.drop-inner{border:2px dashed var(--border);border-radius:18px;padding:56px 72px;display:flex;flex-direction:column;align-items:center;gap:14px;transition:border-color .2s,background .2s;text-align:center}
.drop-inner.dragover{border-color:var(--accent);background:var(--accent-glow)}
.drop-icon{font-size:52px}.drop-title{font-size:20px;font-weight:700}.drop-sub{font-size:13px;color:var(--muted);max-width:320px;line-height:1.6}
.right-panel{width:215px;background:var(--surface);border-left:1px solid var(--border);display:flex;flex-direction:column;flex-shrink:0;overflow-y:auto}
.right-panel::-webkit-scrollbar{width:3px}.right-panel::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}
.prop-sec{padding:13px;border-bottom:1px solid var(--border)}
.prop-sec h3{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:var(--muted);margin-bottom:11px}
.prop-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:9px;gap:6px}
.prop-lbl{font-size:12px;color:var(--muted);flex-shrink:0}
.prop-lbl.strong{font-size:11px;font-weight:600;color:var(--text)}
.val{font-size:11px;color:var(--muted);font-family:var(--mono);min-width:32px}
.prop-num{background:var(--surface3);border:1px solid var(--border);color:var(--text);border-radius:6px;padding:3px 7px;font-size:12px;width:64px;font-family:var(--ui-font)}
.prop-num:focus{outline:none;border-color:var(--accent)}
.color-row{display:flex;gap:5px;flex-wrap:wrap;align-items:center}
.sw{width:22px;height:22px;border-radius:5px;border:2px solid transparent;cursor:pointer;transition:transform .1s,border-color .1s;flex-shrink:0;position:relative}
.sw-transparent{background:#252535}.sw-transparent svg{position:absolute;inset:0;margin:auto}
.sw:hover{transform:scale(1.15)}.sw.on{border-color:#fff}
input[type=color]{width:26px;height:22px;border:none;border-radius:5px;cursor:pointer;padding:0;background:none}
input[type=range]{cursor:pointer}
.panel-mode{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:var(--muted);margin-bottom:4px}
.panel-hint{font-size:11px;color:var(--muted);line-height:1.5}
#panelMode.editing{color:var(--accent)}
.info{font-size:12px;color:var(--muted);line-height:2}.info span{color:var(--text)}
.help{font-size:11px;color:var(--muted);line-height:1.9}.help b{color:var(--text)}
#toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%) translateY(60px);background:var(--surface3);border:1px solid var(--border);border-radius:9px;padding:9px 18px;font-size:13px;color:var(--text);z-index:999;transition:transform .22s ease;box-shadow:0 4px 24px rgba(0,0,0,.5);pointer-events:none;max-width:70vw}
#toast.show{transform:translateX(-50%) translateY(0)}
#toast.err{border-color:var(--danger)}

/* 第二梯隊 */
#selBox.line-sel{border-color:transparent}
#selBox .ep{display:none;position:absolute;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:50%;background:var(--accent);border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.5);pointer-events:auto;cursor:move;touch-action:none;z-index:3}
#selBox.line-sel .ep{display:block}
.side-actions{display:flex;gap:2px;padding:6px;border-top:1px solid var(--border);flex-wrap:wrap}
.side-actions .btn{font-size:11px;padding:3px 7px}
.thumb-item.dragging{opacity:.35}
.thumb-item.drop-before{box-shadow:inset 0 3px 0 var(--accent)}
.thumb-item.drop-after{box-shadow:inset 0 -3px 0 var(--accent)}
.tog-row{display:flex;gap:4px}
.tog{width:28px;height:26px;border:1px solid var(--border);border-radius:6px;background:var(--surface3);color:var(--muted);cursor:pointer;font-size:13px;font-family:var(--ui-font)}
.tog.on{background:var(--accent-glow);color:var(--accent);border-color:var(--accent)}
.sig-modal{width:540px;max-width:92vw}
.sig-tabs{display:flex;gap:4px;margin-bottom:12px;border-bottom:1px solid var(--border)}
.sig-tab{background:none;border:none;color:var(--muted);padding:6px 12px;cursor:pointer;font-family:var(--ui-font);font-size:13px;border-bottom:2px solid transparent;margin-bottom:-1px}
.sig-tab.active{color:var(--accent);border-bottom-color:var(--accent)}
.sig-pane{display:flex;flex-direction:column;gap:10px}
.sig-pane.hidden{display:none}
#sigCanvas,#sigTypeCanvas{width:100%;height:auto;background:#fff;border:1px solid var(--border);border-radius:8px;cursor:crosshair;touch-action:none;display:block}
.sig-row{display:flex;align-items:center;gap:8px}
.sig-input{background:var(--surface3);border:1px solid var(--border);color:var(--text);border-radius:8px;padding:8px 10px;font-size:15px;font-family:var(--ui-font)}
.sig-input:focus{outline:none;border-color:var(--accent)}
.sig-preview{max-height:160px;object-fit:contain;background:#fff;border-radius:8px;border:1px solid var(--border);align-self:flex-start}
.sig-preview.hidden{display:none}
.sig-saved{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;min-height:60px}
.sig-saved .empty{grid-column:1/-1;color:var(--muted);font-size:12px;text-align:center;padding:20px}
.sig-item{position:relative;background:#fff;border:1px solid var(--border);border-radius:8px;height:70px;cursor:pointer;display:flex;align-items:center;justify-content:center;overflow:hidden}
.sig-item:hover{border-color:var(--accent)}
.sig-item img{max-width:90%;max-height:80%;object-fit:contain}
.sig-item .x{position:absolute;top:3px;right:3px;width:16px;height:16px;border-radius:50%;background:var(--danger);color:#fff;border:none;font-size:10px;cursor:pointer;display:none;align-items:center;justify-content:center;padding:0}
.sig-item:hover .x{display:flex}
.sig-remember{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:5px}
@media (max-width:1180px){.toolbar .btn{padding:5px 8px}}

/* 圖層面板 */
.layer-list{max-height:190px;overflow-y:auto;display:flex;flex-direction:column;gap:2px;margin-top:2px}
.layer-list::-webkit-scrollbar{width:3px}.layer-list::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}
.layer-item{font-size:11px;padding:4px 7px;border-radius:5px;cursor:pointer;color:var(--muted);display:flex;gap:6px;align-items:center}
.layer-item:hover{background:var(--surface3);color:var(--text)}
.layer-item.on{background:var(--accent-glow);color:var(--accent)}
.layer-item .sw-mini{width:10px;height:10px;border-radius:2px;border:1px solid var(--border);flex-shrink:0}
.layer-item .nm{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.layer-item .idx{font-family:var(--mono);font-size:10px;opacity:.6}
.layer-item.base{opacity:.6;cursor:default}
.layer-empty{font-size:11px;color:var(--muted);padding:6px 7px}
.tog:disabled{opacity:.35;cursor:not-allowed}

/* 功能閘門：目前環境不支援的功能整個藏起來（含相鄰分隔線由 JS 不處理，按鈕本身隱藏即可） */
.gated{display:none!important}
