/* ── 素材預覽（點開素材後）2026-10-08 重做 ─────────────────────────────
   放大鏡（The Neutral Loupe Rule）：整個預覽是中性黑，看圖顏色不被介面染色。
   結構：頂列（位置）／舞台（作品＋同列表片條）／右側資料欄（規格表、狀態、生成紀錄、來源、位置、編輯）／底部動作列。
   只有一顆亮的按鈕（下載原檔）。動態：切換時作品從那一側滑入顯影、生成紀錄像相紙顯影浮出、放大跟著游標。
   全部只動 transform／opacity／filter，prefers-reduced-motion 時關閉。 */

#viewer.vw{
  --vw-bg:#0b0b0b;--vw-panel:#121212;--vw-raise:#181818;--vw-raise-2:#202020;--vw-well:#0e0e0e;
  --ink:#eeeeec;--soft:#b6b6b2;--faint:#8f8f8b;--line:rgba(255,255,255,.08);--line-strong:rgba(255,255,255,.15);
  --vw-ease:cubic-bezier(.16,1,.3,1);--vw-panel-w:384px;--vw-strip-h:84px;
  position:fixed;inset:0;width:100vw;max-width:none;height:100dvh;max-height:none;margin:0;padding:0;border:0;border-radius:0;
  background:var(--vw-bg);color:var(--ink);overflow:hidden;
}
#viewer.vw[open]{display:grid;grid-template-rows:auto minmax(0,1fr) auto;animation:vw-open .32s var(--vw-ease) both}
@keyframes vw-open{from{opacity:0}to{opacity:1}}
#viewer.vw ::selection{background:rgba(229,87,63,.32);color:#fff}
#viewer.vw *{scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.16) transparent}
#viewer.vw ::-webkit-scrollbar{width:8px;height:8px}
#viewer.vw ::-webkit-scrollbar-thumb{background:rgba(255,255,255,.14);border-radius:8px;border:2px solid transparent;background-clip:padding-box}
#viewer.vw ::-webkit-scrollbar-track{background:transparent}
#viewer.vw .icon{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;flex:none}
#viewer.vw .icon.filled{fill:currentColor}
#viewer.vw :focus-visible{outline:2px solid var(--marker,#e5573f);outline-offset:2px}

/* 按鈕基底：覆蓋舊主題的 #viewer button */
#viewer.vw button,#viewer.vw a.primary{font:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}
#viewer.vw .vw-icon{display:inline-grid;place-items:center;width:40px;height:40px;min-width:40px;padding:0;border:0;border-radius:10px;background:transparent;color:var(--soft);transition:background .18s,color .18s}
#viewer.vw .vw-icon:disabled{opacity:.3;cursor:default}
@media(hover:hover) and (pointer:fine){#viewer.vw .vw-icon:not(:disabled):hover{background:var(--vw-raise-2);color:var(--ink)}}
#viewer.vw #favorite .icon.filled{color:var(--marker,#e5573f)}

/* ── 頂列 ── */
#viewer.vw .vw-bar{display:flex;align-items:center;gap:12px;height:52px;padding:0 10px 0 20px;border-bottom:1px solid var(--line);background:var(--vw-bg)}
#viewer.vw .vw-where{display:flex;align-items:baseline;gap:12px;min-width:0;flex:1}
#viewer.vw .vw-count{font-family:var(--mono);font-size:12px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;letter-spacing:.02em;white-space:nowrap}
#viewer.vw .vw-crumb{font-size:12px;color:var(--faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
#viewer.vw .vw-crumb b{color:var(--soft);font-weight:600}
#viewer.vw .vw-bar-tools{display:flex;gap:2px;flex:none}
#viewer.vw .mobile-viewer-nav{display:none}
#viewer.vw #details[aria-expanded="true"]{color:var(--ink)}

/* ── 主體：舞台＋資料欄 ── */
#viewer.vw .vw-body{display:grid;grid-template-columns:minmax(0,1fr) var(--vw-panel-w);min-height:0;position:relative}
#viewer.vw.vw-collapsed .vw-body{grid-template-columns:minmax(0,1fr) 0}
#viewer.vw.vw-collapsed .vw-panel{visibility:hidden}

#viewer.vw .vw-stage-wrap{position:relative;min-width:0;min-height:0;overflow:hidden;background:#090909;isolation:isolate}
/* 作品自己的光透到桌面：模糊的縮圖鋪在後面，裁在舞台裡，不再撐出捲軸（舊版 bug：scale 1.15 溢出造成兩條捲軸）。 */
#viewer.vw .vw-ambient{position:absolute;inset:-12%;z-index:-1;background:var(--thumb,none) center/cover no-repeat;filter:blur(70px) saturate(1.3);opacity:0;transition:opacity .6s ease;pointer-events:none}
#viewer.vw.vw-lit .vw-ambient{opacity:.28}
#viewer.vw #stage{position:absolute;inset:0 0 var(--vw-strip-h) 0;display:flex;align-items:center;justify-content:center;padding:28px 72px;overflow:hidden;background:transparent;min-height:0}
#viewer.vw.vw-no-strip #stage{bottom:0}
#viewer.vw #stage img{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain;border-radius:3px;box-shadow:0 30px 80px -30px rgba(0,0,0,.9),0 0 0 1px rgba(255,255,255,.04);cursor:zoom-in;transform-origin:50% 50%;transition:transform .45s var(--vw-ease);will-change:transform;user-select:none;-webkit-user-drag:none;touch-action:none}
#viewer.vw #stage img.zoomed{cursor:grab;max-width:100%;max-height:100%;align-self:center}
#viewer.vw #stage img.dragging{cursor:grabbing;transition:none}
#viewer.vw #stage video{width:100%;height:100%;object-fit:contain;border-radius:3px;outline:none;background:transparent}
#viewer.vw #stage audio{width:min(560px,100%)}
#viewer.vw .vw-audio{display:grid;justify-items:center;gap:22px;width:min(560px,100%)}
#viewer.vw .vw-audio .vw-audio-glyph{width:96px;height:96px;border-radius:24px;display:grid;place-items:center;background:var(--vw-raise);border:1px solid var(--line);color:var(--tape,#e8b54c)}
#viewer.vw .vw-audio .vw-audio-glyph .icon{width:40px;height:40px}
#viewer.vw .preview-message{color:var(--soft);font-size:14px;line-height:1.8;text-align:center;max-width:32em}

/* 切換：作品從那一側滑入，像片子推進燈箱、從模糊對焦（只在左右切換時，--dir = ±1）。 */
#viewer.vw #stage.vw-enter>:is(img,video,.vw-audio){animation:vw-slide .5s var(--vw-ease) backwards}
@keyframes vw-slide{from{opacity:0;transform:translateX(calc(var(--dir,0) * 36px)) scale(.985);filter:blur(10px)}to{opacity:1;transform:none;filter:none}}

/* 左右大熱區：桌機滑過才出現 */
#viewer.vw .vw-edge{position:absolute;top:0;bottom:var(--vw-strip-h);width:84px;border:0;border-radius:0;padding:0;background:transparent;color:var(--ink);display:flex;align-items:center;opacity:0;transition:opacity .25s;z-index:2}
#viewer.vw.vw-no-strip .vw-edge{bottom:0}
#viewer.vw .vw-edge-prev{left:0;justify-content:flex-start;padding-left:18px}
#viewer.vw .vw-edge-next{right:0;justify-content:flex-end;padding-right:18px}
#viewer.vw .vw-edge .icon{width:44px;height:44px;padding:11px;border-radius:50%;background:rgba(12,12,12,.62);border:1px solid rgba(255,255,255,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);box-shadow:0 10px 30px -10px rgba(0,0,0,.8);transition:transform .3s var(--vw-ease)}
#viewer.vw .vw-edge:disabled{display:none}
@media(hover:hover) and (pointer:fine){
  #viewer.vw .vw-stage-wrap:hover .vw-edge{opacity:.55}
  #viewer.vw .vw-edge:hover{opacity:1!important}
  #viewer.vw .vw-edge-prev:hover .icon{transform:translateX(-3px)}
  #viewer.vw .vw-edge-next:hover .icon{transform:translateX(3px)}
}
#viewer.vw.document-view .vw-edge{display:none}

#viewer.vw .vw-zoom{position:absolute;left:50%;top:16px;transform:translateX(-50%);z-index:3;padding:5px 12px;border-radius:999px;background:rgba(12,12,12,.7);border:1px solid rgba(255,255,255,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);font-family:var(--mono);font-size:12px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums;pointer-events:none;animation:vw-pop .25s var(--vw-ease)}
@keyframes vw-pop{from{opacity:0;transform:translate(-50%,-4px)}to{opacity:1;transform:translateX(-50%)}}

/* 同列表片條：印樣片條的縮小版，目前那格紅筆框 */
#viewer.vw .vw-strip{position:absolute;left:0;right:0;bottom:0;height:var(--vw-strip-h);display:flex;align-items:center;gap:6px;padding:0 20px;overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth;background:linear-gradient(to top,rgba(9,9,9,.96),rgba(9,9,9,.6));border-top:1px solid var(--line);-webkit-mask-image:linear-gradient(90deg,transparent,#000 40px,#000 calc(100% - 40px),transparent);mask-image:linear-gradient(90deg,transparent,#000 40px,#000 calc(100% - 40px),transparent);scrollbar-width:none}
#viewer.vw .vw-strip::-webkit-scrollbar{display:none}
#viewer.vw.vw-no-strip .vw-strip{display:none}
#viewer.vw .vw-strip button{flex:none;position:relative;width:52px;height:52px;padding:0;border:0;border-radius:6px;background:var(--vw-raise);overflow:hidden;opacity:.5;transition:opacity .2s,transform .35s var(--vw-ease)}
#viewer.vw .vw-strip button img{width:100%;height:100%;object-fit:cover;display:block}
#viewer.vw .vw-strip button span{display:grid;place-items:center;height:100%;font-family:var(--mono);font-size:11px;font-weight:600;color:var(--faint);letter-spacing:.02em}
#viewer.vw .vw-strip button[aria-current="true"]{opacity:1;transform:translateY(-3px);box-shadow:0 0 0 2px var(--vw-bg),0 0 0 4px var(--marker,#e5573f),0 12px 24px -10px rgba(0,0,0,.9)}
@media(hover:hover) and (pointer:fine){#viewer.vw .vw-strip button:hover{opacity:.95}}

/* ── 資料欄 ── */
#viewer.vw .vw-panel{position:relative;min-width:0;min-height:0;background:var(--vw-panel);border-left:1px solid var(--line);display:flex;flex-direction:column}
#viewer.vw .vw-grab{display:none}
#viewer.vw .vw-scroll{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:24px 24px 40px}
#viewer.vw .vw-head h2{margin:0;font-family:var(--sans);font-size:18px;font-weight:700;line-height:1.38;letter-spacing:-.015em;color:var(--ink);overflow-wrap:anywhere;text-wrap:balance}
#viewer.vw .vw-file{display:flex;align-items:center;gap:6px;max-width:100%;margin:8px 0 0;padding:0;border:0;background:transparent;color:var(--faint);font-family:var(--mono);font-size:12px;font-weight:500;letter-spacing:.01em;text-align:left;min-height:24px}
#viewer.vw .vw-file span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
#viewer.vw .vw-file .icon{width:14px;height:14px;opacity:0;transition:opacity .15s}
#viewer.vw .vw-file:is(:hover,:focus-visible){color:var(--soft)}
#viewer.vw .vw-file:is(:hover,:focus-visible) .icon{opacity:1}
#viewer.vw .vw-file.same{display:none}

/* 規格表：左標籤、右數值、細線分隔（取自 Are.na 的資料欄，數字等寬好比對） */
#viewer.vw .vw-facts{display:grid;grid-template-columns:auto 1fr;margin:18px 0 0;border-top:1px solid var(--line)}
#viewer.vw .vw-facts:empty{display:none}
#viewer.vw .vw-facts dt,#viewer.vw .vw-facts dd{margin:0;padding:9px 0;border-bottom:1px solid var(--line);font-size:12px;line-height:1.5}
#viewer.vw .vw-facts dt{color:var(--faint);padding-right:16px;white-space:nowrap}
#viewer.vw .vw-facts dd{color:var(--ink);text-align:right;font-family:var(--mono);font-weight:500;font-variant-numeric:tabular-nums;letter-spacing:.01em;overflow-wrap:anywhere}
#viewer.vw .vw-facts dd.cjk{font-family:var(--sans);font-weight:600}
#viewer.vw .vw-facts dd .vw-stamp{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:3px;font-family:var(--sans);font-size:11px;font-weight:650;background:rgba(255,255,255,.08);color:var(--soft)}

#viewer.vw .vw-sec{margin-top:28px}
#viewer.vw .vw-h{margin:0 0 10px;font-family:var(--sans);font-size:12px;font-weight:650;letter-spacing:.02em;color:var(--soft);display:flex;align-items:center;justify-content:space-between;gap:10px}
#viewer.vw .vw-h small{font-weight:500;color:var(--faint);font-size:12px}

/* 狀態：一條分段軌道（沿用燈箱主題的規則，這裡只收邊） */
#viewer.vw .stage-row{display:grid!important;grid-template-columns:repeat(4,minmax(0,1fr));gap:3px;padding:4px;border:1px solid var(--line);border-radius:12px;background:var(--vw-well)}
#viewer.vw .stage-pick{position:relative;min-width:0!important;min-height:36px;margin:0;width:auto;padding:6px 4px;border:0!important;border-radius:8px;background:transparent;color:var(--soft);font-size:12.5px;font-weight:600;transition:background .2s,color .2s}
#viewer.vw .stage-pick.active{background:var(--vw-raise-2)!important;color:#fff!important}
#viewer.vw .stage-pick.stage-approved.active{box-shadow:inset 0 0 0 1.5px var(--marker,#e5573f)}
#viewer.vw .stage-pick.redo-pick{grid-column:1/-1;background:rgba(255,255,255,.025)}
#viewer.vw .stage-pick.redo-pick.active{background:rgba(232,181,76,.16)!important;color:#f6d58f!important}
#viewer.vw .stage-note{margin:8px 0 0;font-size:12px;line-height:1.6;color:var(--faint)}

/* 生成紀錄：模型、成本、設定、提示詞。資料到了才像相紙顯影一樣浮出來。 */
#viewer.vw .vw-gen:empty{display:none}
#viewer.vw .vw-gen-card{border:1px solid var(--line);border-radius:14px;background:linear-gradient(180deg,#171717,#131313);padding:16px 16px 14px;animation:vw-develop .7s var(--vw-ease) backwards}
@keyframes vw-develop{from{opacity:0;filter:blur(6px) brightness(1.6);transform:translateY(6px)}to{opacity:1;filter:none;transform:none}}
#viewer.vw .vw-gen-top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
#viewer.vw .vw-gen-model{min-width:0}
#viewer.vw .vw-gen-model strong{display:block;font-size:14px;font-weight:700;color:var(--ink);letter-spacing:-.01em}
#viewer.vw .vw-gen-model span{display:block;margin-top:2px;font-size:12px;color:var(--faint)}
#viewer.vw .vw-gen-cost{text-align:right;flex:none}
#viewer.vw .vw-gen-cost b{display:block;font-family:var(--mono);font-size:24px;font-weight:600;line-height:1.1;color:var(--ink);font-variant-numeric:tabular-nums;letter-spacing:-.01em}
#viewer.vw .vw-gen-cost b small{font-size:13px;color:var(--soft);font-weight:500;margin-right:3px}
#viewer.vw .vw-gen-cost span{display:inline-block;margin-top:5px;font-size:12px;color:var(--faint)}
#viewer.vw .vw-gen-cost .vw-est{margin-left:6px;padding:1px 6px;border-radius:3px;background:rgba(255,255,255,.08);color:var(--soft);font-weight:650}
#viewer.vw .vw-gen-tags{display:flex;flex-wrap:wrap;gap:5px;margin-top:14px}
#viewer.vw .vw-gen-tags span{padding:3px 8px;border-radius:6px;background:var(--vw-raise-2);border:1px solid var(--line);font-family:var(--mono);font-size:11.5px;font-weight:500;color:var(--soft);font-variant-numeric:tabular-nums}
#viewer.vw .vw-gen-basis{margin:12px 0 0;font-size:12px;line-height:1.65;color:var(--faint)}
#viewer.vw .vw-gen-batch{margin:4px 0 0;font-size:12px;color:var(--faint)}
#viewer.vw .vw-prompt{margin-top:14px;border-radius:10px;background:var(--vw-well);border:1px solid var(--line);overflow:hidden}
#viewer.vw .vw-prompt pre{margin:0;padding:12px 14px;font-family:var(--mono);font-size:12px;line-height:1.75;color:#dcdcd8;white-space:pre-wrap;overflow-wrap:anywhere;max-height:9.6em;overflow:hidden;-webkit-mask-image:linear-gradient(#000 70%,transparent);mask-image:linear-gradient(#000 70%,transparent);transition:max-height .45s var(--vw-ease)}
#viewer.vw .vw-prompt.open pre{max-height:2000px;-webkit-mask-image:none;mask-image:none;overflow:auto}
#viewer.vw .vw-prompt-actions{display:flex;gap:6px;padding:8px;border-top:1px solid var(--line)}
#viewer.vw .vw-gen-id{display:flex;align-items:center;gap:8px;margin-top:12px;font-family:var(--mono);font-size:11.5px;color:var(--faint);min-width:0}
#viewer.vw .vw-gen-id code{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;font:inherit}
#viewer.vw .vw-gen-empty{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;border:1px dashed var(--line-strong);border-radius:14px;color:var(--faint);font-size:12px;line-height:1.65}
#viewer.vw .vw-gen-empty strong{display:block;color:var(--soft);font-size:13px;font-weight:650;margin-bottom:2px}
#viewer.vw .vw-gen-empty .icon{margin-top:1px;color:var(--faint)}

/* 小型按鈕（提示詞、路徑） */
#viewer.vw .vw-chip{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:34px;width:auto;margin:0;padding:6px 11px;border:1px solid var(--line-strong);border-radius:8px;background:var(--vw-raise);color:var(--ink);font-size:12px;font-weight:600;white-space:nowrap;transition:background .18s,border-color .18s}
#viewer.vw .vw-chip .icon{width:15px;height:15px}
@media(hover:hover) and (pointer:fine){#viewer.vw .vw-chip:hover{background:var(--vw-raise-2);border-color:rgba(255,255,255,.22)}}
#viewer.vw .vw-chip.flashed,#viewer.vw .vw-chip.copied{border-color:rgba(255,233,196,.5)}

/* 來源提示詞卡（沿用 ui2 的 source-card，換成中性） */
#viewer.vw .source-card{border:1px solid var(--line);border-radius:12px;background:var(--vw-raise);padding:12px 14px;margin:0 0 10px}
#viewer.vw .source-actions button{min-height:34px;border-radius:8px;background:var(--vw-raise-2);border:1px solid var(--line-strong);color:var(--ink);font-size:12px}

/* 位置 */
#viewer.vw #filepath{margin:0;font-family:var(--mono);font-size:12px;line-height:1.7;color:var(--soft);overflow-wrap:anywhere;word-break:break-all}
#viewer.vw #filepath b{color:var(--ink);font-weight:600}
#viewer.vw .vw-loc-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:10px}
#viewer.vw #asset-id{margin:0 0 0 auto;font-family:var(--mono);font-size:11px;color:var(--faint);letter-spacing:.02em}

/* 編輯 */
#viewer.vw .inspector-edit{border-top:1px solid var(--line);padding-top:4px}
#viewer.vw .inspector-edit>summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;min-height:44px;color:var(--soft);font-size:13px;font-weight:600}
#viewer.vw .inspector-edit>summary::-webkit-details-marker{display:none}
#viewer.vw .inspector-edit>summary::after{content:'';width:9px;height:9px;border-right:1.6px solid currentColor;border-bottom:1.6px solid currentColor;transform:rotate(45deg) translate(-2px,-2px);transition:transform .3s var(--vw-ease)}
#viewer.vw .inspector-edit[open]>summary::after{transform:rotate(-135deg) translate(-2px,-2px)}
#viewer.vw .inspector-edit label{display:block;margin:14px 0 6px;font-size:12px;color:var(--faint)}
#viewer.vw .inspector-edit input,#viewer.vw .inspector-edit textarea{width:100%;padding:10px 12px;border:1px solid var(--line-strong);border-radius:9px;background:var(--vw-well);color:var(--ink);font:inherit;font-size:13px;line-height:1.6}
#viewer.vw .inspector-edit input:focus,#viewer.vw .inspector-edit textarea:focus{outline:none;border-color:rgba(255,233,196,.5);box-shadow:0 0 0 3px rgba(255,233,196,.07)}
#viewer.vw #save-metadata{width:100%;margin-top:14px;min-height:40px;border:1px solid var(--line-strong);border-radius:9px;background:var(--vw-raise-2);color:var(--ink);font-weight:600}
#viewer.vw #metadata-status{font-size:12px;color:var(--soft);margin:8px 0 0}

/* 進場：資料欄各區塊依序浮上（只在打開預覽那一次，左右切換不重播） */
#viewer.vw.vw-arrive .vw-scroll>*{animation:vw-rise .55s var(--vw-ease) backwards}
#viewer.vw.vw-arrive .vw-scroll>:nth-child(2){animation-delay:.04s}
#viewer.vw.vw-arrive .vw-scroll>:nth-child(3){animation-delay:.08s}
#viewer.vw.vw-arrive .vw-scroll>:nth-child(4){animation-delay:.12s}
#viewer.vw.vw-arrive .vw-scroll>:nth-child(5){animation-delay:.16s}
#viewer.vw.vw-arrive .vw-scroll>:nth-child(n+6){animation-delay:.2s}
@keyframes vw-rise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
#viewer.vw .vw-head.vw-swap{animation:vw-fade .35s ease both}
@keyframes vw-fade{from{opacity:.25}to{opacity:1}}

/* ── 底部動作列 ── */
#viewer.vw .vw-dock{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:64px;padding:10px 16px max(10px,env(safe-area-inset-bottom)) 14px;border-top:1px solid var(--line);background:#101010;position:relative}
#viewer.vw .vw-nav{display:flex;align-items:center;gap:4px;min-width:0}
#viewer.vw .vw-keys{margin-left:12px;font-size:12px;color:var(--faint);white-space:nowrap}
#viewer.vw .vw-keys kbd{display:inline-block;min-width:20px;padding:1px 5px;margin:0 1px;border:1px solid var(--line-strong);border-bottom-width:2px;border-radius:5px;font-family:var(--mono);font-size:11px;color:var(--soft);text-align:center;background:transparent}
#viewer.vw .vw-actions{display:flex;align-items:center;gap:8px}
#viewer.vw .vw-actions>button:not(.vw-icon),#viewer.vw .vw-actions>a{display:inline-flex;align-items:center;gap:8px;min-height:42px;margin:0;padding:0 15px;border:1px solid var(--line-strong);border-radius:10px;background:var(--vw-raise);color:var(--ink);font-size:13px;font-weight:600;white-space:nowrap;text-decoration:none;transition:background .18s,border-color .18s,transform .18s}
#viewer.vw .vw-actions>button[hidden]{display:none}
#viewer.vw .vw-actions .icon{width:17px;height:17px}
@media(hover:hover) and (pointer:fine){#viewer.vw .vw-actions>button:not(.vw-icon):hover{background:var(--vw-raise-2);border-color:rgba(255,255,255,.22)}}
#viewer.vw .vw-actions>button:active,#viewer.vw .vw-actions>a:active{transform:scale(.97)}
#viewer.vw #add-to-tray.in-tray{border-color:rgba(232,181,76,.55);color:#f6d58f}
#viewer.vw #add-to-tray.in-tray .icon{color:var(--tape,#e8b54c)}
#viewer.vw .vw-actions>a.primary{background:var(--backlight,#e9e4da);border-color:var(--backlight,#e9e4da);color:var(--backlight-ink,#17140f);font-weight:680}
@media(hover:hover) and (pointer:fine){#viewer.vw .vw-actions>a.primary:hover{background:var(--primary-hover,#fffaf1)}}
#viewer.vw .vw-more-wrap{position:relative}
#viewer.vw .vw-menu{position:absolute;right:0;bottom:calc(100% + 10px);z-index:10;width:220px;padding:6px;border:1px solid var(--line-strong);border-radius:12px;background:#1a1a1a;box-shadow:0 24px 60px -20px rgba(0,0,0,.85);animation:vw-menu .2s var(--vw-ease)}
#viewer.vw .vw-menu[hidden]{display:none}
@keyframes vw-menu{from{opacity:0;transform:translateY(4px) scale(.98)}to{opacity:1;transform:none}}
#viewer.vw .vw-menu button{display:flex;align-items:center;width:100%;min-height:40px;margin:0;padding:0 12px;border:0;border-radius:8px;background:transparent;color:var(--ink);font-size:13px;font-weight:550;text-align:left}
#viewer.vw .vw-menu button[hidden]{display:none}
#viewer.vw .vw-menu .danger{color:#ffb8bb}
@media(hover:hover) and (pointer:fine){#viewer.vw .vw-menu button:hover{background:var(--vw-raise-2)}}
/* 桌機：「複製圖片」已在列上，選單裡不重複 */
@media(min-width:761px){#viewer.vw #viewer-more-copy-image{display:none}}

/* ── 文件：閱讀欄置中 ── */
#viewer.vw.document-view #stage{display:block;overflow-y:auto;padding:0 40px 48px}
#viewer.vw.document-view .doc-view{max-width:880px;margin:0 auto}
#viewer.vw.document-view .doc-toolbar{position:sticky;top:0;z-index:2;background:linear-gradient(#090909 75%,transparent)!important;border:0!important;padding:16px 0 18px}

/* ── 中等寬度 ── */
@media(max-width:1280px){#viewer.vw{--vw-panel-w:340px}#viewer.vw .vw-keys{display:none}}
@media(max-width:1050px){
  #viewer.vw{--vw-panel-w:320px}
  #viewer.vw #stage{padding:20px 56px}
  #viewer.vw .vw-actions>button:not(.vw-icon),#viewer.vw .vw-actions>a{padding:0 12px}
  #viewer.vw #copy-image{display:none}
  #viewer.vw #viewer-more-copy-image{display:flex}
}
@media(max-width:900px) and (min-width:761px){#viewer.vw .vw-actions .vw-label{font-size:12px}}

/* ── 手機：舞台滿版，資料欄變成可拉起的底部抽屜 ── */
@media(max-width:760px){
  #viewer.vw{--vw-peek:112px}
  #viewer.vw .vw-bar{height:auto;min-height:52px;padding:max(6px,var(--safe-top,env(safe-area-inset-top))) 6px 6px 16px}
  #viewer.vw .vw-crumb{display:none}
  #viewer.vw .mobile-viewer-nav{display:flex;gap:0}
  #viewer.vw .vw-icon{width:44px;height:44px;min-width:44px}
  #viewer.vw .vw-body{display:block}
  #viewer.vw .vw-stage-wrap{position:absolute;inset:0}
  #viewer.vw #stage{inset:0 0 var(--vw-peek) 0;padding:10px}
  #viewer.vw.vw-collapsed #stage{bottom:var(--vw-peek)}
  #viewer.vw .vw-strip,#viewer.vw .vw-edge{display:none}
  #viewer.vw .vw-panel{position:absolute;left:0;right:0;bottom:0;height:min(78dvh,680px);border:0;border-top:1px solid var(--line-strong);border-radius:18px 18px 0 0;box-shadow:0 -24px 60px -20px rgba(0,0,0,.85);transform:translateY(calc(100% - var(--vw-peek)));transition:transform .5s var(--vw-ease);z-index:4;visibility:visible!important}
  #viewer.vw.vw-sheet .vw-panel{transform:none}
  #viewer.vw .vw-grab{display:grid;place-items:center;position:absolute;top:0;left:0;right:0;height:26px;width:100%;padding:0;border:0;background:transparent;z-index:2;border-radius:18px 18px 0 0}
  #viewer.vw .vw-grab i{width:38px;height:4px;border-radius:4px;background:rgba(255,255,255,.22)}
  #viewer.vw .vw-scroll{padding:26px 18px calc(28px + env(safe-area-inset-bottom));overflow-y:hidden}
  #viewer.vw.vw-sheet .vw-scroll{overflow-y:auto}
  #viewer.vw .vw-head h2{font-size:16px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  #viewer.vw.vw-sheet .vw-head h2{display:block}
  #viewer.vw .vw-sec{margin-top:24px}
  #viewer.vw .stage-pick{min-height:44px;font-size:13px}
  #viewer.vw .vw-chip{min-height:44px;padding:8px 12px}
  #viewer.vw .vw-dock{display:block;min-height:0;padding:8px 10px max(8px,env(safe-area-inset-bottom));z-index:5}
  #viewer.vw .vw-nav{display:none}
  #viewer.vw .vw-actions{display:grid;grid-template-columns:1fr 1fr 1.15fr 48px;gap:6px}
  #viewer.vw .vw-actions>#download{order:3}
  #viewer.vw .vw-actions>.vw-more-wrap{order:4}
  #viewer.vw .vw-actions>button:not(.vw-icon),#viewer.vw .vw-actions>a{justify-content:center;min-height:48px;padding:0 8px;font-size:12.5px;gap:6px}
  #viewer.vw #copy-image{display:none}
  #viewer.vw .vw-more-wrap .vw-icon{width:48px;height:48px;border:1px solid var(--line-strong);background:var(--vw-raise);color:var(--ink)}
  #viewer.vw #viewer-more-copy-image{display:flex}
  #viewer.vw .vw-menu{width:min(240px,calc(100vw - 24px))}
  #viewer.vw.document-view #stage{padding:0 14px 24px}
  #viewer.vw #stage.vw-dragging>img{transition:none}
}
@media(max-width:380px){#viewer.vw .vw-actions{grid-template-columns:1fr 1fr 1fr 48px}#viewer.vw .vw-actions .icon{display:none}}

@media(prefers-reduced-motion:reduce){
  #viewer.vw[open],#viewer.vw #stage.vw-enter>*,#viewer.vw .vw-gen-card,#viewer.vw.vw-arrive .vw-scroll>*,#viewer.vw .vw-head.vw-swap,#viewer.vw .vw-menu,#viewer.vw .vw-zoom{animation:none!important}
  #viewer.vw #stage img,#viewer.vw .vw-panel,#viewer.vw .vw-prompt pre,#viewer.vw .vw-strip button,#viewer.vw .vw-ambient{transition:none!important}
  #viewer.vw .vw-strip{scroll-behavior:auto}
}

/* 時間點意見（2026-10-12）：黃膠帶＝還要處理的事，跟「待生成」同一個語意。時間碼一律等寬好對齊。 */
#viewer.vw .vw-notes[hidden]{display:none}
#viewer.vw .vw-note-form{display:grid;gap:8px}
#viewer.vw .vw-note-form textarea{width:100%;min-height:60px;resize:vertical;margin:0;padding:10px 12px;border:1px solid var(--line-strong);border-radius:10px;background:var(--vw-well);color:var(--ink);font:inherit;font-size:14px;line-height:1.6}
#viewer.vw .vw-note-form textarea:focus{border-color:rgba(232,181,76,.6);outline:0}
#viewer.vw .vw-note-row{display:flex;align-items:center;justify-content:space-between;gap:8px}
#viewer.vw .vw-clip{display:grid;gap:8px;margin-bottom:16px}
#viewer.vw .vw-clip-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
#viewer.vw .vw-clip input,#viewer.vw .vw-clip select{width:100%;min-height:36px;font:inherit;color:inherit;background:transparent;border:1px solid currentColor;border-radius:6px;padding:0 8px;opacity:.85}
#viewer.vw .vw-clip .primary:disabled{opacity:.45}
#viewer.vw .vw-note-stamp{min-height:36px;padding:6px 12px;border:1px dashed rgba(232,181,76,.45);border-radius:8px;background:transparent;color:var(--tape,#e8b54c);font-family:var(--mono);font-size:14px;font-variant-numeric:tabular-nums}
#viewer.vw .vw-note-stamp.held{border-style:solid;background:rgba(232,181,76,.1)}
#viewer.vw .vw-note-form .primary{min-height:36px;padding:6px 18px;border:0;border-radius:8px;background:var(--tape,#e8b54c);color:var(--tape-ink,#2b1f05);font-weight:650}
#viewer.vw .vw-note-form .primary:disabled{opacity:.5}
#viewer.vw .vw-note-list{list-style:none;margin:14px 0 0;padding:0;display:grid;gap:2px}
#viewer.vw .vw-note{display:grid;grid-template-columns:auto minmax(0,1fr);gap:10px;padding:10px 0;border-top:1px solid var(--line)}
#viewer.vw .vw-note-tc{align-self:start;min-width:58px;padding:3px 8px;border:0;border-radius:6px;background:rgba(232,181,76,.14);color:var(--tape,#e8b54c);font-family:var(--mono);font-size:13px;font-variant-numeric:tabular-nums;text-align:right}
#viewer.vw .vw-note-text{margin:2px 0 0;font-size:14px;line-height:1.6;color:var(--ink);overflow-wrap:anywhere;white-space:pre-wrap}
#viewer.vw .vw-note-reply{margin:6px 0 0;padding-left:10px;border-left:2px solid var(--line-strong);font-size:13px;line-height:1.6;color:var(--soft);overflow-wrap:anywhere}
#viewer.vw .vw-note-acts{display:flex;gap:6px;margin-top:8px}
#viewer.vw .vw-note.done .vw-note-tc{background:var(--vw-raise);color:var(--faint)}
#viewer.vw .vw-note.done .vw-note-text{color:var(--faint);text-decoration:line-through;text-decoration-color:rgba(255,255,255,.25)}
#viewer.vw .vw-note-del[data-armed]{border-color:rgba(229,87,63,.6);color:var(--marker,#e5573f)}
#viewer.vw #stage .vw-note-fab{position:absolute;top:12px;left:12px;z-index:2;display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:6px 14px 6px 10px;border:1px solid rgba(232,181,76,.5);border-radius:999px;background:rgba(10,10,10,.62);color:var(--tape,#e8b54c);font-size:13px;font-weight:600;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
#viewer.vw #stage .vw-note-fab .icon{width:16px;height:16px}
#viewer.vw .vw-note-left{display:flex;align-items:center;gap:8px;min-width:0}
#viewer.vw .vw-note-mark{min-height:36px;padding:6px 12px;border:1px dashed rgba(229,87,63,.5);border-radius:8px;background:transparent;color:var(--marker,#e5573f);font-size:13px;white-space:nowrap}
#viewer.vw .vw-note-mark.held{border-style:solid;background:rgba(229,87,63,.12)}
#viewer.vw .vw-note-mark[hidden]{display:none}
#viewer.vw .vw-note-tc{position:relative}
#viewer.vw .vw-note-pin{position:absolute;top:-3px;left:-3px;width:9px;height:9px;border-radius:50%;background:var(--marker,#e5573f);box-shadow:0 0 0 2px var(--vw-panel,#141312)}
#viewer.vw #stage .vw-mark-layer{position:absolute;z-index:1;pointer-events:none;touch-action:none}
#viewer.vw #stage .vw-mark-layer.on{pointer-events:auto;cursor:crosshair;box-shadow:inset 0 0 0 2px rgba(229,87,63,.55)}
#viewer.vw #stage .vw-mark{position:absolute;border:2px solid var(--marker,#e5573f);border-radius:4px;box-shadow:0 0 0 1px rgba(0,0,0,.7),inset 0 0 0 1px rgba(0,0,0,.5);pointer-events:none}
#viewer.vw #stage .vw-mark.pt{width:26px;height:26px;margin:-13px 0 0 -13px;border-radius:50%;border-width:3px}
#viewer.vw #stage .vw-mark.pt::after{content:"";position:absolute;left:50%;top:50%;width:4px;height:4px;margin:-2px 0 0 -2px;border-radius:50%;background:var(--marker,#e5573f)}
#viewer.vw #stage .vw-mark-hint{display:none;position:absolute;left:50%;top:10px;transform:translateX(-50%);align-items:center;gap:10px;max-width:calc(100% - 16px);padding:6px 6px 6px 14px;border-radius:999px;background:rgba(10,10,10,.72);color:#ece8e1;font-size:13px;white-space:nowrap;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);cursor:default}
#viewer.vw #stage .vw-mark-layer.on .vw-mark-hint{display:flex}
#viewer.vw #stage:has(.vw-mark-layer.on) .vw-note-fab{display:none}
#viewer.vw #stage .vw-mark-say{overflow:hidden;text-overflow:ellipsis}
#viewer.vw #stage .vw-mark-go{flex:none;min-height:32px}
@media(pointer:coarse){#viewer.vw .vw-note-mark,#viewer.vw #stage .vw-mark-go{min-height:44px}}
@media(pointer:coarse){#viewer.vw .vw-note-stamp,#viewer.vw .vw-note-form .primary,#viewer.vw #stage .vw-note-fab,#viewer.vw .vw-note-acts .vw-chip,#viewer.vw .vw-note-tc{min-height:44px}}

/* 剪輯時間軸入口：同資料夾有 edit.json 的影片才出現 */
#viewer.vw .vw-edit-link{display:flex;flex-direction:column;gap:2px;margin-top:12px;padding:12px 14px;border:1px solid rgba(232,181,76,.45);border-radius:10px;background:rgba(232,181,76,.08);color:var(--tape,#e8b54c);font-weight:650;text-decoration:none}
#viewer.vw .vw-edit-link[hidden]{display:none}
#viewer.vw .vw-edit-link span{font-size:12px;font-weight:500;color:var(--soft)}

/* 劇本審稿：每集時長條、提醒、逐場表、台詞本 */
.review{display:flex;flex-direction:column;gap:22px;padding-top:14px;color:var(--ink)}
.review-sum{margin:0;color:var(--soft);font-size:13px;font-variant-numeric:tabular-nums}
.review-part{display:flex;flex-direction:column;gap:10px}
.review-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;border-bottom:1px solid var(--line);padding-bottom:6px}
.review-head h3{margin:0;font-size:15px}.review-head span{font-size:12px;color:var(--faint)}
.review-ep{display:grid;grid-template-columns:48px 1fr auto;align-items:center;gap:12px;font-variant-numeric:tabular-nums}
.review-ep strong{font-size:13px}.review-num{font-size:12px;color:var(--soft);white-space:nowrap}
.review-track{position:relative;height:10px;border-radius:5px;background:rgba(255,255,255,.05);overflow:hidden}
.review-band{position:absolute;top:0;bottom:0;background:rgba(87,176,127,.22)}
.review-fill{position:absolute;left:0;top:2px;bottom:2px;border-radius:3px;background:var(--backlight,#e9e4da)}
.review-fill.off{background:var(--marker,#e5573f)}
.review-ok{margin:0;font-size:13px;color:var(--soft)}
.review-warn{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:6px;font-size:13px;line-height:1.6;color:var(--soft)}
.review-warn .w-tight,.review-warn .w-sum-off{color:var(--ink)}
.review-scenes summary{cursor:pointer;font-size:13px;padding:6px 0}
.review-table{overflow-x:auto}
.review-table table{width:100%;border-collapse:collapse;font-size:12.5px;font-variant-numeric:tabular-nums}
.review-table th,.review-table td{padding:7px 8px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}
.review-table td:first-child{white-space:normal;min-width:180px}
.review-table th{color:var(--faint);font-weight:500}
.review-table tr.tight td:nth-child(3){color:var(--marker,#e5573f);font-weight:600}
.review-book{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
.review-voice{border:1px solid var(--line);border-radius:10px;padding:12px;background:rgba(255,255,255,.02)}
.review-voice.unknown{opacity:.75}
.review-voice-head{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.review-voice-head span{flex:1;font-size:12px;color:var(--faint)}
.review-voice ol{margin:0;padding:0;list-style:none;max-height:260px;overflow-y:auto;display:flex;flex-direction:column;gap:8px}
.review-voice li{display:flex;flex-direction:column;gap:2px;font-size:14px;line-height:1.55}
.review-where{font-size:11px;color:var(--faint)}
@media(max-width:760px){.review-ep{grid-template-columns:40px 1fr}.review-num{grid-column:2}.review-book{grid-template-columns:1fr}}
