:root{
  color-scheme:light;
  --bg:#fff;--surface:#fff;--surface-2:#f6f6f6;--text:#0a0a0a;--muted:#6b6b6b;--line:#dedede;
  --primary:#0a0a0a;--primary-text:#fff;--danger:#9b1c1c;--shadow:0 8px 24px rgba(0,0,0,.06);
}
:root[data-theme="dark"]{color-scheme:dark;--bg:#000;--surface:#0a0a0a;--surface-2:#111;--text:#fff;--muted:#a1a1a1;--line:#2a2a2a;--primary:#fff;--primary-text:#000;--danger:#ff8b8b;--shadow:0 8px 24px rgba(0,0,0,.35)}
*{box-sizing:border-box}
[hidden]{display:none!important}
html{background:var(--bg)}
body{margin:0;min-height:100vh;background:var(--bg);color:var(--text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased}
button,input{font:inherit}button,a,label{touch-action:manipulation}
.site-header{height:64px;position:sticky;top:0;z-index:40;display:flex;align-items:center;justify-content:space-between;padding:0 max(18px,calc((100vw - 1040px)/2));background:color-mix(in srgb,var(--bg) 94%,transparent);backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}
.brand{display:flex;align-items:center;gap:10px;color:var(--text);text-decoration:none;font-weight:800;letter-spacing:-.03em;font-size:20px}.brand-mark{display:grid;place-items:center;width:30px;height:30px;border-radius:8px;background:var(--primary);color:var(--primary-text);font-size:18px}
.icon-btn{width:38px;height:38px;border:1px solid var(--line);background:var(--surface);color:var(--text);border-radius:10px;cursor:pointer}
.app-shell{width:min(1040px,calc(100% - 32px));margin:0 auto;min-height:calc(100vh - 128px)}
.empty-state{min-height:620px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:24px}.empty-state h1{font-size:42px;letter-spacing:-.06em;margin:0}
.choose-box{width:min(520px,100%);height:148px;border:1px dashed var(--line);border-radius:18px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;background:var(--surface-2);cursor:pointer;transition:.15s ease}.choose-box:hover{border-color:var(--text);transform:translateY(-1px)}.choose-icon{font-size:28px;line-height:1}.choose-box>span:nth-child(2){font-weight:750}.choose-box small{color:var(--muted)}
.quality-card{border:1px solid var(--line);border-radius:14px;background:var(--surface);padding:13px 14px}.compact-quality{width:min(520px,100%)}.quality-row{display:flex;justify-content:space-between;gap:16px;margin-bottom:10px;font-size:14px}.quality-row label{font-weight:700}.quality-row output{color:var(--muted);font-variant-numeric:tabular-nums}
input[type="range"]{--p:77.78%;appearance:none;width:100%;height:4px;border-radius:99px;background:linear-gradient(to right,var(--text) 0 var(--p),var(--line) var(--p) 100%);outline:none}
input[type="range"]::-webkit-slider-thumb{appearance:none;width:18px;height:18px;border-radius:50%;background:var(--text);border:3px solid var(--surface);box-shadow:0 0 0 1px var(--text);cursor:pointer}
input[type="range"]::-moz-range-thumb{width:12px;height:12px;border-radius:50%;background:var(--text);border:3px solid var(--surface);box-shadow:0 0 0 1px var(--text);cursor:pointer}
.work-area{padding-bottom:44px}
.sticky-controls{position:sticky;top:64px;z-index:30;margin:18px 0 20px;padding:12px 14px;border:1px solid var(--line);border-radius:16px;background:color-mix(in srgb,var(--bg) 96%,transparent);backdrop-filter:blur(14px);box-shadow:var(--shadow);display:grid;gap:10px}
.toolbar-main{display:grid;grid-template-columns:auto minmax(220px,1fr) auto;align-items:center;gap:14px}
.toolbar-quality{min-width:0;height:38px;display:grid;grid-template-columns:auto minmax(120px,1fr) auto;align-items:center;gap:10px;padding:0 11px;border:1px solid var(--line);border-radius:10px;background:var(--surface)}.toolbar-quality label{font-size:13px;font-weight:750;line-height:1}.toolbar-quality output{min-width:34px;color:var(--muted);font-size:13px;line-height:1;text-align:right;font-variant-numeric:tabular-nums}.toolbar-quality input[type="range"]{min-width:0}
.toolbar-status{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-top:9px;border-top:1px solid var(--line)}
.button{appearance:none;border:1px solid var(--primary);border-radius:10px;min-height:38px;padding:0 14px;display:inline-flex;align-items:center;justify-content:center;gap:8px;font-weight:750;cursor:pointer;text-decoration:none;background:var(--primary);color:var(--primary-text);white-space:nowrap}.button.secondary{background:var(--surface);color:var(--text);border-color:var(--line)}.button.ghost{background:transparent;color:var(--text);border-color:var(--line)}.button.danger{background:transparent;color:var(--danger);border-color:color-mix(in srgb,var(--danger) 35%,var(--line))}.button:disabled{opacity:.45;cursor:not-allowed}.compact{height:38px;min-height:38px}
.engine-pill{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:12px;min-width:0}.engine-dot{width:7px;height:7px;border-radius:50%;background:#888;flex:0 0 auto}.engine-dot.ready{background:#1d9a4b}.engine-dot.busy{background:#c58a00}.engine-dot.error{background:#d14343}
.summary{display:flex;flex-direction:column;gap:2px;min-width:110px}.summary strong{font-size:13px}.summary span{font-size:12px;color:var(--muted)}
.actions{display:flex;align-items:center;justify-content:flex-end;gap:7px;flex-wrap:wrap}
.notice-area:empty{display:none}.notice-area{margin-bottom:14px;display:grid;gap:8px}.notice{border:1px solid var(--line);background:var(--surface-2);border-radius:12px;padding:11px 13px;color:var(--muted);font-size:13px}.notice.warn{color:var(--text)}
.file-list{display:grid;gap:10px}.file-card{display:grid;grid-template-columns:76px minmax(0,1fr) auto;gap:14px;align-items:center;padding:12px;border:1px solid var(--line);background:var(--surface);border-radius:16px}.thumb{width:76px;height:76px;border-radius:10px;object-fit:cover;background:var(--surface-2);border:1px solid var(--line)}.file-main{min-width:0}.file-name{font-weight:750;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-meta{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:6px;color:var(--muted);font-size:13px}.delta.good{color:#23864d}.delta.bad{color:#b64b4b}.status-line{margin-top:10px;display:flex;align-items:center}.progress-track{height:4px;flex:1;background:var(--line);border-radius:99px;overflow:hidden}.progress-fill{height:100%;width:0;background:var(--text);border-radius:inherit;transition:width .12s linear}.file-actions{display:flex;gap:7px;align-items:center}.file-actions .icon-btn{width:36px;height:36px}.download-link{height:36px;min-height:36px;padding:0 11px}
.drop-overlay{position:fixed;inset:0;z-index:100;background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:blur(8px);display:grid;place-items:center}.drop-overlay>div{width:min(540px,calc(100% - 40px));height:220px;border:2px dashed var(--text);border-radius:22px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;background:var(--surface)}.drop-overlay strong{font-size:26px}.drop-overlay span{color:var(--muted)}
.legal-view{padding:48px 0 80px;max-width:760px;margin:0 auto}.legal-view h1{font-size:38px;letter-spacing:-.04em}.legal-view h2{margin-top:34px;font-size:20px}.legal-view p,.legal-view li{color:var(--muted);line-height:1.75}.legal-view a{color:var(--text)}.legal-back{margin-bottom:22px}
.footer{min-height:64px;border-top:1px solid var(--line);width:min(1040px,calc(100% - 32px));margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:16px;color:var(--muted);font-size:12px}.footer nav{display:flex;gap:16px}.footer a{color:var(--muted);text-decoration:none}.footer a:hover{color:var(--text)}
@media(max-width:820px){
  .toolbar-main{grid-template-columns:auto minmax(160px,1fr)}
  .actions{grid-column:1/-1;justify-content:flex-end;border-top:1px solid var(--line);padding-top:10px}
}
@media(max-width:700px){
  .site-header{height:58px;padding:0 16px}.app-shell{width:min(100% - 20px,1040px)}.empty-state{min-height:calc(100vh - 122px);gap:18px}.empty-state h1{font-size:34px}.choose-box{height:142px}
  .sticky-controls{top:58px;margin:10px 0 14px;border-radius:14px;padding:10px;gap:9px}
  .toolbar-main{grid-template-columns:auto minmax(0,1fr);gap:10px}.toolbar-quality{height:36px;grid-template-columns:auto minmax(88px,1fr) auto;padding:0 9px;gap:8px}.toolbar-quality label,.toolbar-quality output{font-size:12px}
  .actions{gap:6px;padding-top:9px;justify-content:stretch}.actions .button{flex:1 1 auto}
  .toolbar-status{padding-top:8px}.engine-pill{font-size:11px}
  .button{min-height:36px;height:36px;padding:0 11px;font-size:13px}
  .file-card{grid-template-columns:58px minmax(0,1fr);gap:10px;padding:10px}.thumb{width:58px;height:58px}.file-actions{grid-column:1/-1;justify-content:flex-end;border-top:1px solid var(--line);padding-top:9px}.file-main{align-self:start}
  .footer{min-height:82px;flex-direction:column;justify-content:center}.legal-view{padding-top:30px}.legal-view h1{font-size:32px}
}
@media(max-width:430px){
  .toolbar-main{grid-template-columns:1fr}.add-images-button{width:100%}.toolbar-quality{width:100%;grid-template-columns:auto minmax(0,1fr) auto}.actions{grid-column:auto}.engine-pill span:last-child{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.summary{min-width:72px}.actions .button{padding:0 9px}.file-meta{font-size:12px}
}

/* Performance safeguards for long lists and low-end devices */
.file-card{content-visibility:auto;contain:layout paint style;contain-intrinsic-size:102px}
.thumb{contain:strict}
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}
}
@media (max-width:700px){.file-card{contain-intrinsic-size:145px}}

/* ZIP progress is rendered inside the action itself, so long batches feel responsive. */
.zip-progress-button{
  position:relative;overflow:hidden;isolation:isolate;min-width:210px;
  cursor:default;user-select:none;font-variant-numeric:tabular-nums;
}
.zip-progress-fill{
  position:absolute;z-index:-1;inset:0 auto 0 0;width:var(--zip-progress,0%);
  background:color-mix(in srgb,var(--text) 12%,transparent);
  transition:width .15s linear;pointer-events:none;
}
.zip-progress-label{position:relative;z-index:1}
:root[data-theme="dark"] .zip-progress-fill{background:color-mix(in srgb,var(--text) 16%,transparent)}
@media(max-width:700px){.zip-progress-button{min-width:0;flex:2 1 190px}}


/* Keep long filenames from widening cards or pushing actions off-screen. */
.file-card{width:100%;min-width:0;max-width:100%;overflow:hidden}
.file-main{min-width:0;max-width:100%;overflow:hidden}
.file-name{display:block;min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.file-actions{min-width:0;max-width:100%}
.download-link{flex:0 0 auto;max-width:100%}
@media(max-width:700px){
  .file-card>*{min-width:0}
  .file-actions{width:100%;overflow:hidden}
  .file-actions .download-link{margin-left:auto}
}


/* Avoid costly translucent-blur repainting on small/mobile screens. */
@media(max-width:700px){
  .site-header,.sticky-controls{backdrop-filter:none;background:var(--bg)}
  .drop-overlay{backdrop-filter:none}
}

/* Smooth theme changes without animating every card in large batches.
   The browser cross-fades a single page snapshot when View Transitions are available. */
::view-transition-old(root),::view-transition-new(root){
  animation-duration:.14s;
  animation-timing-function:ease-out;
}
::view-transition-old(root){animation-name:towebp-theme-out}
::view-transition-new(root){animation-name:towebp-theme-in}
@keyframes towebp-theme-out{to{opacity:0}}
@keyframes towebp-theme-in{from{opacity:0}}
@media(prefers-reduced-motion:reduce){
  ::view-transition-old(root),::view-transition-new(root){animation-duration:.001ms!important}
}
