/* Project controls and editing tools share the existing theme tokens. */
.wb-projectbar{display:flex;align-items:center;gap:8px;padding:8px 16px;min-height:49px;
  background:var(--surf);border-bottom:1px solid var(--line);flex:0 0 auto}
.wb-projectbar > .ui-icon{color:var(--dim)}
.wb-projectbar select{width:190px;max-width:26%;height:32px;padding:4px 26px 4px 9px;font-size:12px}
.wb-projectbar .mini{height:32px;font-size:12px}
.wb-projectbar .iconbtn{width:30px;height:32px}
.wb-primary{background:var(--acc);color:var(--on-accent);border-color:var(--acc)}
.wb-primary:hover{color:var(--on-accent);filter:brightness(.95)}
.wb-primary:disabled{background:var(--hole);color:var(--ph);border-color:var(--line);filter:none}
.wb-save{font-size:11px;color:var(--dim);white-space:nowrap;max-width:180px;overflow:hidden;text-overflow:ellipsis}
.wb-save[data-state="dirty"],.wb-save[data-state="saving"]{color:var(--warn)}
.wb-save[data-state="error"],.wb-save[data-state="conflict"]{color:var(--bad)}
.wb-library-tools{display:grid;grid-template-columns:1fr;gap:8px}
.wb-library-tools input,.wb-library-tools select{width:100%;height:32px;border:1px solid var(--line);border-radius:5px;
  background:var(--bg);color:var(--fg);padding:5px 9px;font:inherit;font-size:12px;box-shadow:none}
.wb-canvas-tools{display:flex;align-items:center;gap:6px;margin-left:10px}
.wb-canvas-tools input,.wb-canvas-tools select{height:30px;padding:4px 8px;border:1px solid var(--line);border-radius:5px;
  background:var(--surf);color:var(--fg);font:inherit;font-size:11px;box-shadow:none}
.wb-canvas-tools input{width:140px}
.wb-canvas-tools select{width:88px}
.wb-canvas-tools .mini{font-size:11px;padding:4px 8px}
.wb-asset-edit{position:absolute;left:4px;bottom:23px;display:grid;place-items:center;width:27px;height:27px;
  color:var(--fg);background:var(--surf);border:1px solid var(--line);border-radius:5px;cursor:pointer;opacity:0}
.ing:hover .wb-asset-edit,.ing:focus-within .wb-asset-edit{opacity:1}
.wb-asset-edit .ui-icon{width:14px;height:14px}
.wb-clip-tools{position:absolute;top:6px;right:6px;z-index:2;display:flex;gap:4px}
.wb-clip-tools button{width:28px;height:28px;display:grid;place-items:center;padding:0;border:1px solid var(--line);
  border-radius:5px;background:var(--surf);color:var(--dim);cursor:pointer}
.wb-clip-tools button[aria-pressed="true"]{color:var(--warn)}
.wb-version{padding:0;border:0;background:transparent;font:inherit;font-size:10px;color:var(--acc);cursor:pointer}
.clip.wb-picked{box-shadow:0 0 0 3px var(--acc)}
.wb-selecting{cursor:crosshair}
.wb-selection{position:absolute;border:1px solid var(--acc);background:color-mix(in srgb,var(--acc) 12%,transparent);pointer-events:none;z-index:6}
.wb-ready .fw-scene-hd button:has(.ui-icon){width:30px;height:28px;display:grid;place-items:center;padding:0}
.wb-ready .fw-scene-row{align-items:flex-start}
.wb-sc{position:relative;width:108px;flex:0 0 108px;border:1px solid var(--line);border-radius:6px;overflow:hidden;
  background:var(--hole);cursor:grab}
.wb-sc.missing{border-color:var(--bad)}
.wb-sc-open{display:block;width:100%;padding:0;border:0;background:transparent;color:var(--fg);cursor:pointer}
.wb-sc img,.wb-sc video{display:block;width:100%;height:60px;object-fit:cover;background:var(--hole);pointer-events:none}
.wb-sc-number{position:absolute;left:4px;top:4px;min-width:19px;height:18px;line-height:18px;
  background:rgba(0,0,0,.6);color:white;font-size:10px;border-radius:3px}
.wb-sc-duration{display:block;font-size:10px;padding:3px 4px;color:var(--dim)}
.wb-sc-remove{position:absolute;top:3px;right:3px;width:22px;height:22px;padding:0;border:0;border-radius:4px;
  display:grid;place-items:center;background:rgba(0,0,0,.6);color:white;cursor:pointer}
.wb-sc-remove .ui-icon{width:13px;height:13px}
.wb-missing{height:60px;display:grid;place-items:center;font-size:11px;color:var(--bad)}
.wb-dialog{width:min(560px,calc(100vw - 32px));max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px);
  padding:24px;margin:auto;background:var(--surf);color:var(--fg);border:1px solid var(--line);border-radius:8px;
  font:inherit;box-shadow:0 20px 64px rgba(0,0,0,.22);overflow:auto;overscroll-behavior:contain}
.wb-dialog.wide{width:min(1060px,calc(100vw - 32px))}
.wb-dialog::backdrop{background:rgba(10,16,12,.55);backdrop-filter:blur(4px)}
.wb-dialog-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:18px}
.wb-dialog-heading h2{margin:0;font-size:17px;font-weight:650}
.wb-dialog input:not([type="checkbox"]):not([type="range"]),.wb-dialog textarea,.wb-dialog select{width:100%;
  padding:9px 10px;background:var(--bg);color:var(--fg);border:1px solid var(--line);border-radius:5px;box-shadow:none;font:inherit;font-size:13px}
.wb-dialog input[type="number"]{min-height:36px}
.wb-dialog textarea{min-height:84px;max-height:240px}
.wb-dialog label{color:var(--dim);font-size:12px}
.wb-dialog p{font-size:13px;line-height:1.7;overflow-wrap:anywhere}
.wb-dialog .wb-error{color:var(--bad);font-size:12px}
.wb-muted{color:var(--dim);font-size:12px;line-height:1.6;overflow-wrap:anywhere}
.wb-dialog .wb-muted{font-size:12px}
.wb-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap;margin-top:18px}
.wb-actions a{text-decoration:none}
.wb-dialog .wb-check{display:flex;align-items:center;gap:7px;margin:12px 0;font-weight:400}
.wb-check input{width:16px;height:16px;accent-color:var(--acc);margin:0}
.wb-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.wb-fields.five{grid-template-columns:repeat(6,minmax(0,1fr));gap:10px}
.wb-fields.five label{margin:10px 0 0}
.wb-fields.five input{margin-top:6px}
.wb-range{display:flex;align-items:center;gap:12px}
.wb-range input{flex:1;accent-color:var(--acc)}
.wb-range output{width:42px;font-size:12px;font-variant-numeric:tabular-nums}
.wb-link{border:0;padding:6px 0;background:transparent;color:var(--acc);font:inherit;font-size:11px;cursor:pointer}
.wb-inspect{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(250px,1fr);gap:24px;align-items:start}
.wb-media-column{min-width:0}
.wb-media-column video{display:block;width:100%;max-height:58vh;background:#0d0f0e;object-fit:contain;border-radius:5px}
.wb-media-column audio{width:100%;display:block}
.wb-asset-preview{display:block;margin:auto;max-width:100%;max-height:42vh;object-fit:contain;border-radius:5px}
.wb-dialog video.wb-asset-preview{width:100%;background:#0d0f0e}
.wb-dialog audio.wb-asset-preview{width:100%}
.wb-history-search{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.wb-history-search input{flex:1}
.wb-history-search select{max-width:125px}
.wb-dialog .wb-history-item{display:flex;align-items:center;gap:12px;margin:0;padding:12px 0;border-bottom:1px solid var(--line);cursor:pointer}
.wb-history-item input{width:16px;height:16px;flex:0 0 auto;accent-color:var(--acc)}
.wb-history-item span{flex:1;min-width:0}
.wb-history-item b{display:block;font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wb-history-item small{display:block;color:var(--dim);margin-top:4px;font-size:11px}
.wb-compare{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}
.wb-compare article{padding-bottom:16px;border-bottom:1px solid var(--line)}
.wb-compare h3{font-size:13px;margin:0 0 10px}
.wb-compare video,.wb-compare audio{display:block;width:100%;max-height:320px;background:var(--hole);border-radius:5px}
.wb-compare p{font-size:12px;max-height:80px;overflow:auto}
.wb-audio-add{display:flex;gap:8px;align-items:center}
.wb-audio-add select{flex:1;min-width:0}
.wb-audio-row{padding:18px 0;border-bottom:1px solid var(--line)}
.wb-audio-heading{display:flex;align-items:center;gap:12px}
.wb-audio-heading b{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:13px}
.wb-audio-heading .wb-check{margin:0}
.wb-audio-bottom{display:flex;align-items:center;gap:24px;margin-top:10px}
.wb-dialog .wb-volume-label{display:flex;align-items:center;gap:10px;flex:1;margin:0}
.wb-volume-label input{flex:1;accent-color:var(--acc)}
.wb-volume-label output{width:40px;text-align:right;font-variant-numeric:tabular-nums}
#wb-scene-player{width:100%;max-height:62vh;display:block;background:#0d0f0e;object-fit:contain}
.wb-playback{display:flex;align-items:center;gap:10px;margin-top:12px;font-size:12px;font-variant-numeric:tabular-nums}
.wb-playback input{flex:1;accent-color:var(--acc)}
.wb-preview-strip{display:flex;gap:8px;margin-top:14px;overflow-x:auto;padding-bottom:5px}
.wb-preview-strip .on{background:var(--soft);border-color:var(--acc);color:var(--acc)}
.wb-export-job{display:flex;align-items:center;gap:12px;padding:16px 0;border-top:1px solid var(--line)}
.wb-export-job > div{flex:1}
.wb-export-job b{font-size:13px}
.wb-export-job small{display:block;font-size:11px;color:var(--dim)}
.wb-export-job progress{display:block;width:100%;height:6px;margin-top:8px;accent-color:var(--acc)}
.wb-export-job a{text-decoration:none}
.wb-image-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.wb-image-toolbar .wb-brush-label{display:flex;align-items:center;gap:8px;margin:0;flex:1}
.wb-brush-label input{width:100px;max-width:100%;accent-color:var(--acc)}
.wb-image-stage{position:relative;margin:16px auto;max-width:100%;line-height:0}
.wb-image-stage img{display:block;width:100%;height:auto}
.wb-image-stage canvas{position:absolute;inset:0;width:100%;height:100%;opacity:.38;cursor:crosshair;touch-action:none}
.wb-image-toolbar [aria-pressed="true"]{color:var(--acc);background:var(--soft)}
.wb-image-tools{display:flex;align-items:center;gap:8px;flex:1;flex-wrap:wrap}
.wb-image-tools[hidden]{display:none}
.wb-image-stage img{user-select:none;-webkit-user-drag:none}
/* 裁剪：框外压暗、框内三分线、八个把手。框用百分比摆，坐标全程按原图像素算（见 image-edit.js） */
.wb-crop{position:absolute;inset:0;overflow:hidden;cursor:crosshair;touch-action:none}
.wb-crop-box{position:absolute;box-shadow:0 0 0 9999px #000000a0;outline:1px solid #fff;cursor:move}
.wb-crop-box:focus-visible{outline:2px solid var(--acc)}
.wb-crop-box::before,.wb-crop-box::after{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .15s;
  border:solid #ffffff70;border-width:0 1px}
.wb-crop-box::before{left:33.33%;right:33.33%}
.wb-crop-box::after{top:33.33%;bottom:33.33%;border-width:1px 0}
.wb-crop.dragging .wb-crop-box::before,.wb-crop.dragging .wb-crop-box::after{opacity:1}
.wb-crop-box i{position:absolute;width:14px;height:14px;background:#fff;border-radius:3px;box-shadow:0 1px 4px #0008}
/* 把手收在框内侧：框贴着图片边缘时，外伸的一半会被 .wb-crop 的 overflow 切掉，鼠标点不中 */
.wb-crop-box i[data-h="nw"]{left:-1px;top:-1px;cursor:nwse-resize}.wb-crop-box i[data-h="se"]{right:-1px;bottom:-1px;cursor:nwse-resize}
.wb-crop-box i[data-h="ne"]{right:-1px;top:-1px;cursor:nesw-resize}.wb-crop-box i[data-h="sw"]{left:-1px;bottom:-1px;cursor:nesw-resize}
.wb-crop-box i[data-h="n"],.wb-crop-box i[data-h="s"]{left:50%;width:26px;height:6px;margin-left:-13px;cursor:ns-resize}
.wb-crop-box i[data-h="n"]{top:-1px}.wb-crop-box i[data-h="s"]{bottom:-1px}
.wb-crop-box i[data-h="e"],.wb-crop-box i[data-h="w"]{top:50%;width:6px;height:26px;margin-top:-13px;cursor:ew-resize}
.wb-crop-box i[data-h="e"]{right:-1px}.wb-crop-box i[data-h="w"]{left:-1px}
.wb-crop-ratios{display:flex;flex-wrap:wrap;gap:4px}
.wb-crop-ratios button{height:30px;padding:0 10px;border:1px solid var(--line);border-radius:8px;background:transparent;color:var(--dim);font:inherit;font-size:12px;cursor:pointer}
.wb-crop-ratios button:hover{color:var(--fg)}
.wb-crop-ratios button[aria-pressed="true"]{color:var(--fg);border-color:var(--fg);background:var(--hole)}
#wb-crop-reset{margin-left:auto;display:inline-flex;align-items:center;gap:5px}
#wb-crop-reset .ui-icon{width:13px;height:13px}
.wb-crop-size{margin:0 0 4px;color:var(--dim);font-size:12px;text-align:center;font-variant-numeric:tabular-nums}
.wb-ready .fw-opts .fw-kgrp{flex-wrap:wrap}
.wb-ready .fw-est{max-width:100%;overflow:hidden;text-overflow:ellipsis}
#wb-extra-settings .sw2{flex:1}
#wb-extra-settings select{font-size:12px;padding:7px 9px;min-height:34px}
@media(max-width:1100px){
  .wb-canvas-tools input{width:100px}
  .wb-canvas-tools{margin-left:2px}
  .wb-projectbar{gap:6px;padding-inline:12px}
  .wb-projectbar select{width:150px}
  .wb-save{max-width:82px}
}
@media(max-width:760px){
  .wb-inspect{grid-template-columns:1fr}
  .wb-fields.five{grid-template-columns:repeat(3,minmax(0,1fr))}
  .wb-dialog{padding:18px}
  .wb-canvas-tools input{width:90px}
  .wb-canvas-tools select{width:64px}
}
@media(max-width:600px){
  .wb-projectbar{display:grid;grid-template-columns:minmax(0,1fr) 30px 30px auto;gap:6px;padding:8px 12px}
  .wb-projectbar > .ui-icon,.wb-projectbar > .spacer{display:none}
  .wb-projectbar select{grid-column:1;grid-row:1;width:100%;max-width:none}
  #wb-new{grid-column:2;grid-row:1} #wb-project-menu{grid-column:3;grid-row:1}
  .wb-save{grid-column:4;grid-row:1;text-align:right;max-width:100px}
  #wb-undo{grid-column:2;grid-row:2} #wb-redo{grid-column:3;grid-row:2}
  #wb-history{grid-column:1;grid-row:2;justify-self:start} #wb-export{grid-column:4;grid-row:2}
  #wb-retry{grid-column:1/-1;grid-row:3}
  .wb-projectbar .mini{padding:5px 8px;font-size:11px}
  .wb-ready .fw-toolbar{flex-wrap:wrap;flex-basis:auto;min-height:46px;padding:5px 10px;gap:5px}
  .wb-ready .fw-toolbar > h2,.wb-ready .fw-toolbar > .fw-count{display:none}
  .wb-canvas-tools{flex:1;gap:4px}
  .wb-canvas-tools input{width:80px;flex:1;max-width:150px}
  .wb-canvas-tools select{width:58px;font-size:10px}
  .wb-canvas-tools .iconbtn{width:28px}
  .wb-ready .fw-zoom{margin-left:auto}
  .wb-ready .fw-zoom .fw-divider{display:none}
  .wb-ready .fw-zoom button{width:26px}
  .wb-ready #fw-scale{width:36px;font-size:10px}
  .wb-ready #fw-opt-video{display:grid;grid-template-columns:1.35fr 1fr 1.1fr 1fr;gap:5px}
  #wb-variants-wrap{grid-column:1/3} #wb-camera-wrap{grid-column:3/5}
  .wb-ready .fw-dock{max-height:calc(100% - 145px);overflow:auto}
  .wb-compare{grid-template-columns:1fr}
  .wb-audio-add{flex-wrap:wrap}
  .wb-audio-add select{flex-basis:100%}
  .wb-fields.five{grid-template-columns:repeat(2,minmax(0,1fr))}
  .wb-audio-bottom{gap:12px}
  .wb-dialog .wb-volume-label{gap:6px}
  .wb-playback{gap:5px;font-size:10px}
  .wb-playback .iconbtn{width:28px}
  .wb-sc{width:96px;flex-basis:96px}
  .wb-sc img,.wb-sc video{height:54px}
  .wb-image-toolbar .wb-brush-label{flex-basis:100%}
  .wb-image-toolbar input{flex:1}
}
@media(hover:none){.wb-asset-edit{opacity:1}}

.wb-loading::before{content:"";display:inline-block;width:12px;height:12px;margin-right:8px;vertical-align:-2px;
  border:2px solid var(--line);border-top-color:var(--acc);border-radius:50%;animation:sp 1s linear infinite}
/* 写作技能管理（js/skills.js） */
.sk-intro{margin:0 0 14px;color:var(--dim)}
.sk-actions{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.sk-actions .ui-icon{width:14px;height:14px;margin-right:4px;vertical-align:-2px}
.sk-list{max-height:min(52vh,460px);overflow-y:auto}
.sk-list h4{margin:18px 0 6px;font-size:12px;font-weight:600;color:var(--dim)}
.sk-list ul{list-style:none;margin:0;padding:0}
.sk-item{display:flex;align-items:center;gap:8px;padding:9px 0;border-top:1px solid var(--line)}
.sk-item>div{flex:1;min-width:0}
.sk-item b{display:block;font-size:13px;font-weight:550}
.sk-item span{display:block;margin-top:2px;font-size:12px;color:var(--dim);line-height:1.5}
.sk-item em{font-style:normal;font-size:11px;color:var(--dim);padding:2px 8px;border:1px solid var(--line);border-radius:10px}
.wb-dialog .sk-empty{margin:4px 0;color:var(--dim);font-size:12px}
.sk-form label{display:block;margin:12px 0 6px}
.sk-form label:first-child{margin-top:0}
.wb-dialog .sk-form textarea{min-height:260px;max-height:50vh;font-family:ui-monospace,Consolas,monospace;font-size:12px;line-height:1.6}
