/* 빈티지 필름 사진 생성기 전용 CSS (2026-10-20). 막대 → 무대(어두운 라이트 테이블) → 밀착 인화(18칸, 6칸 × 3줄, 좁으면 3칸) → 패널(필름 카드+색 곡선 | 조정 | 마감).
   공용 부품은 assets/v2.css. 배치는 툴 폭 컨테이너 쿼리(@container vf)로 나눈다. 무대·필름 띠는 테마와 상관없이 어두운 바탕(사진이 돋보이게). */
.vf-work{container:vf / inline-size;--vf-r:#c8402c;--vf-g:#2f8a41;--vf-b:#2f62c4}
:root[data-theme="dark"] .vf-work{--vf-r:#f07a62;--vf-g:#6fcf7c;--vf-b:#79a6ff}
@media (prefers-color-scheme:dark){ :root:not([data-theme="light"]) .vf-work{--vf-r:#f07a62;--vf-g:#6fcf7c;--vf-b:#79a6ff} }
.vf-file{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden}
/* 막대 */
.vf-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;padding:10px 16px;border-bottom:1px solid var(--soft)}
.vf-pick{cursor:pointer}
.vf-file:focus-visible + .vf-pick{outline:2px solid var(--accent);outline-offset:2px}
.vf-src{flex:1 1 200px;min-width:0;display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 10px;margin:0;font-family:var(--sans);font-size:12.5px}
.vf-src b{min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:700;color:var(--ink)}
.vf-src span{font-family:var(--mono);font-size:12px;color:var(--muted);white-space:nowrap}
.vf-acts{display:flex;flex-wrap:wrap;gap:6px}
@container vf (max-width:520px){ .vf-src{order:3;flex-basis:100%} .vf-hint{font-size:11.5px} }
/* 무대 */
.vf-view{padding:14px 16px 10px;background:#1d1813;color:#d8ccb4}
.vf-stage{position:relative;margin:0 auto;max-width:100%;background:#2a231b;box-shadow:0 2px 14px rgba(0,0,0,.5);touch-action:pan-y;cursor:ew-resize;user-select:none;-webkit-user-select:none}
.vf-raw,.vf-cv{position:absolute;inset:0;width:100%;height:100%;display:block}
.vf-dev{position:absolute;inset:0;background:#efe4cc;opacity:0;pointer-events:none}
.vf-dev.is-on{animation:vfDev .9s cubic-bezier(.2,.7,.3,1) both}
@keyframes vfDev{from{opacity:.8}to{opacity:0}}
@media (prefers-reduced-motion:reduce){ .vf-dev{display:none} }
.vf-handle{position:absolute;top:0;bottom:0;left:0;width:0;pointer-events:none}
.vf-handle i{position:absolute;top:0;bottom:0;left:-1px;width:2px;background:#fff;box-shadow:0 0 0 1px rgba(0,0,0,.35)}
.vf-handle i::after{content:"\25C2\25B8";position:absolute;top:50%;left:50%;width:26px;height:26px;margin:-13px 0 0 -13px;border-radius:50%;background:#fff;box-shadow:0 1px 5px rgba(0,0,0,.45);font:700 9px/26px var(--sans);letter-spacing:-1px;text-align:center;color:#3a3026}
.vf-tag{position:absolute;top:8px;padding:2px 7px;border-radius:999px;background:rgba(0,0,0,.62);font-family:var(--sans);font-size:11px;font-weight:700;line-height:1.4;color:#fff;white-space:nowrap}
.vf-tag--o{right:8px}
.vf-tag--f{left:8px}
.vf-handle.is-edge i{background:none;box-shadow:none}
.vf-handle.is-edge .vf-tag,.vf-handle.no-o .vf-tag--o,.vf-handle.no-f .vf-tag--f{display:none}
.vf-busy{position:absolute;left:50%;top:50%;margin:0;padding:6px 12px;transform:translate(-50%,-50%);border-radius:var(--radius);background:rgba(0,0,0,.7);font-family:var(--sans);font-size:12px;color:#fff}
.vf-busy[hidden]{display:none}
.vf-stage:focus-visible{outline:2px solid #ffb27a;outline-offset:3px}
.vf-work.is-over .vf-stage{outline:2px dashed #ffb27a;outline-offset:4px}
.vf-hint{margin:8px 0 0;font-family:var(--sans);font-size:12px;line-height:1.5;text-align:center;color:#bfb196}
/* 밀착 인화: 롤마다 가장자리 글씨 + 위아래 구멍, 롤 하나 = 6칸 한 줄(좁으면 3칸 두 줄) */
.vf-films{padding:12px 16px 12px;border-bottom:1px solid var(--soft)}
.vf-fhead{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;margin:0 0 8px}
.vf-fhint{flex:1 1 auto;font-family:var(--sans);font-size:12px;line-height:1.5;color:var(--muted)}
.vf-strip{display:grid;gap:6px}
.vf-roll{display:flex;flex-direction:column;min-width:0;padding:0 6px;border-radius:3px;background:#16120d}
.vf-edge{margin:0;padding:5px 2px 0;font-family:var(--mono);font-size:10.5px;font-weight:700;line-height:1.2;letter-spacing:.06em;color:#e2a64a;white-space:nowrap}
.vf-frames{list-style:none;display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:6px;margin:0;padding:13px 0 13px;
  background:repeating-linear-gradient(90deg,#efe6d2 0 7px,transparent 7px 15px) 1px 3px / calc(100% - 2px) 6px no-repeat,
             repeating-linear-gradient(90deg,#efe6d2 0 7px,transparent 7px 15px) 1px calc(100% - 3px) / calc(100% - 2px) 6px no-repeat}
.vf-frames li{display:block;min-width:0}
.vf-fr{display:flex;flex-direction:column;gap:4px;width:100%;padding:0;border:0;background:none;color:#efe6d2;text-align:left;cursor:pointer}
.vf-fr canvas{display:block;width:100%;height:auto;aspect-ratio:3 / 2;outline:2px solid transparent;outline-offset:1px;transition:outline-color var(--ease)}
.vf-fr span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--sans);font-size:11.5px;font-weight:600;line-height:1.3;color:#d6c9b0}
.vf-fr:hover canvas{outline-color:rgba(239,230,210,.55)}
.vf-fr[aria-pressed="true"] canvas{outline-color:#ff8a4c}
.vf-fr[aria-pressed="true"] span{color:#fff}
.vf-fr:focus-visible{outline:2px solid #fff;outline-offset:3px}
@container vf (max-width:520px){ .vf-frames{grid-template-columns:repeat(3,minmax(0,1fr))} .vf-fr span{white-space:normal;overflow-wrap:anywhere} } /* 좁으면 칸이 좁아 긴 이름을 두 줄로 */
/* 패널: 넓으면 세 칸(카드 | 조정 | 마감), 좁으면 쌓기 */
.vf-panel{display:grid;grid-template-columns:minmax(0,1fr)}
.vf-panel > div{min-width:0;padding:14px 16px}
.vf-panel > div + div{border-top:1px solid var(--soft)}
@container vf (min-width:700px){
  .vf-panel{grid-template-columns:minmax(0,1.1fr) minmax(0,1.15fr) minmax(0,.85fr)}
  .vf-panel > div + div{border-top:0;border-left:1px solid var(--soft)}
}
.vf-card{display:grid;grid-template-columns:88px minmax(0,1fr);gap:12px;align-items:start}
.vf-curve{display:block;width:88px;height:88px;overflow:visible}
.vf-cbox{fill:var(--paper);stroke:var(--line);stroke-width:.8}
.vf-cgrid{fill:none;stroke:var(--soft);stroke-width:.6}
.vf-cdiag{fill:none;stroke:var(--line);stroke-width:.8;stroke-dasharray:2 2}
.vf-cr,.vf-cg,.vf-cb{fill:none;stroke-width:2.2;stroke-linejoin:round;stroke-linecap:round}
.vf-cr{stroke:var(--vf-r)}.vf-cg{stroke:var(--vf-g)}.vf-cb{stroke:var(--vf-b)}
.vf-curve.is-mono .vf-cr,.vf-curve.is-mono .vf-cg{display:none}
.vf-curve.is-mono .vf-cb{stroke:var(--ink)}
.vf-kind{margin:0;font-family:var(--sans);font-size:11.5px;font-weight:600;line-height:1.4;color:var(--muted);overflow-wrap:anywhere}
.vf-name{margin:2px 0 4px;font-family:var(--sans);font-size:18px;font-weight:800;line-height:1.25;color:var(--ink);overflow-wrap:anywhere}
.vf-desc{margin:0;font-family:var(--sans);font-size:12.5px;line-height:1.55;color:var(--ink)}
.vf-cap{margin:6px 0 0;font-family:var(--sans);font-size:11.5px;line-height:1.45;color:var(--muted);font-variant-numeric:tabular-nums}
.vf-ph{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 0 6px;grid-column:1 / -1}
.vf-reset{display:inline-flex;align-items:center;gap:4px;padding:2px 0;border:0;background:none;font-family:var(--sans);font-size:12px;font-weight:600;color:var(--muted);cursor:pointer}
.vf-reset .i{width:13px;height:13px}
.vf-reset:hover{color:var(--ink)}
.vf-reset:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
/* 조정: 라벨 | 막대 | 값 세 칸을 줄마다 맞춘다(라벨 열 = 가장 긴 라벨) */
.vf-adj{display:grid;grid-template-columns:max-content minmax(0,1fr) 3.2em;align-items:center;gap:2px 10px}
.vf-sl{display:contents}
.vf-sl label{font-family:var(--sans);font-size:12px;font-weight:600;line-height:1.3;color:var(--ink)}
.vf-sl input{width:100%;min-width:0;height:28px;margin:0;accent-color:var(--ink)}
.vf-sl output{font-family:var(--mono);font-size:12px;font-weight:600;text-align:right;color:var(--ink);font-variant-numeric:tabular-nums}
@container vf (min-width:470px) and (max-width:699px){ .vf-adj{grid-template-columns:max-content minmax(0,1fr) 3.2em max-content minmax(0,1fr) 3.2em;column-gap:10px} }
/* 마감 */
.vf-fin{display:flex;flex-direction:column;align-items:flex-start;gap:12px}
.vf-fg{display:flex;flex-direction:column;align-items:flex-start;gap:8px;min-width:0;max-width:100%}
@container vf (min-width:470px) and (max-width:699px){ .vf-fin{flex-direction:row;flex-wrap:wrap;gap:12px 32px} .vf-fin > .vf-ph{flex-basis:100%;margin:0} }
.vf-daterow{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;max-width:100%}
.vf-date{height:var(--v2-ctl,42px);min-width:0;max-width:100%;padding:0 10px;border:1px solid var(--line);border-radius:var(--radius);background:var(--paper);font-family:var(--mono);font-size:14px;color:var(--ink)}
.vf-date:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.vf-date:disabled{opacity:.45}
.vf-dsrc{font-family:var(--sans);font-size:12px;line-height:1.45;color:var(--muted)}
.vf-status{margin:0;padding:0 16px}
.vf-status:not(:empty){padding:10px 16px 12px;border-top:1px solid var(--soft)}
