:root{
    --bg-0:#0a0a0c;
    --bg-1:#131316;
    --bg-2:#1c1c20;
    --bg-3:#26262b;
    --line:#323238;
    --text-0:#f2f1ee;
    --text-1:#b9b8bd;
    --text-2:#7c7b81;
    --amber:#e0a458;
    --amber-dim:#8a6a3c;
    --accent-grad: linear-gradient(135deg,#e8b878 0%,#c9834a 100%);
    --danger:#e0685a;
    --radius-lg:22px;
    --radius-md:14px;
    --radius-sm:9px;
    --safe-b: env(safe-area-inset-bottom, 0px);
    --safe-t: env(safe-area-inset-top, 0px);
  }
  *{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
  html,body{
    margin:0;padding:0;height:100%;
    background:var(--bg-0);
    color:var(--text-0);
    font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",Roboto,Helvetica,Arial,sans-serif;
    overscroll-behavior-y:none;
  }
  @media (prefers-reduced-motion: reduce){
    *{animation-duration:0.001ms !important;transition-duration:0.001ms !important;}
  }
  button{font-family:inherit;}
  ::selection{background:var(--amber-dim);color:#fff;}

  .app{
    max-width:560px;
    margin:0 auto;
    min-height:100%;
    display:flex;
    flex-direction:column;
    padding-top:calc(var(--safe-t) + 14px);
  }

  /* ---------- Header ---------- */
  .topbar{
    display:flex;
    align-items:baseline;
    justify-content:space-between;
    gap:10px;
    padding:0 18px 12px;
  }
  .topbar h1{
    font-size:17px;
    font-weight:650;
    letter-spacing:-0.01em;
    margin:0;
    line-height:1.25;
  }
  .topbar .sub{
    font-size:11.5px;
    color:var(--text-2);
    font-weight:500;
    letter-spacing:.01em;
  }
  .reset-btn{
    background:none;border:none;color:var(--text-1);
    font-size:14px;font-weight:600;padding:6px 4px;
    cursor:pointer;display:flex;align-items:center;gap:5px;
    transition:color .15s ease, opacity .15s ease;
    flex:0 0 auto;
  }
  .reset-btn:active{opacity:.5;}
  .reset-btn[disabled]{opacity:.3;pointer-events:none;}

  /* ---------- Preview ---------- */
  .stage-wrap{
    padding:0 14px;
  }
  .stage{
    position:relative;
    width:100%;
    border-radius:var(--radius-lg);
    overflow:hidden;
    background:
      repeating-conic-gradient(#161618 0% 25%, #131315 0% 50%) 50% / 22px 22px;
    display:flex;
    align-items:center;
    justify-content:center;
    min-height:260px;
    touch-action:none;
    user-select:none;
    border:1px solid var(--line);
  }
  .stage canvas{
    display:block;
    max-width:100%;
    max-height:70vh;
    width:auto;height:auto;
    position:relative;
  }
  #canvasAfter{position:relative;z-index:2;}
  #canvasBefore{
    position:absolute;top:0;left:0;
    z-index:1;
    max-width:100%;max-height:70vh;
    display:none;
  }
  .empty-state{
    position:absolute;inset:0;
    display:flex;flex-direction:column;align-items:center;justify-content:center;
    gap:12px;color:var(--text-2);text-align:center;padding:30px;
  }
  .empty-state .glyph{
    font-size:38px;opacity:.7;
  }
  .empty-state p{margin:0;font-size:13.5px;line-height:1.5;max-width:230px;color:var(--text-2);}

  .compare-handle{
    position:absolute;top:0;bottom:0;
    width:2px;background:rgba(255,255,255,.85);
    left:50%;
    z-index:5;
    display:none;
    pointer-events:none;
    box-shadow:0 0 8px rgba(0,0,0,.4);
  }
  .compare-handle::before{
    content:"";
    position:absolute;top:50%;left:50%;
    transform:translate(-50%,-50%);
    width:34px;height:34px;border-radius:50%;
    background:rgba(20,20,22,.9);
    border:1.5px solid rgba(255,255,255,.85);
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M8 7l-5 5 5 5M16 7l5 5-5 5'/></svg>");
    background-repeat:no-repeat;background-position:center;background-size:20px;
  }
  .compare-tag{
    position:absolute;top:10px;
    font-size:10.5px;font-weight:700;letter-spacing:.04em;
    background:rgba(10,10,12,.55);backdrop-filter:blur(6px);
    color:#fff;padding:4px 9px;border-radius:20px;
    z-index:4;display:none;
  }
  .compare-tag.left{left:10px;}
  .compare-tag.right{right:10px;}

  .stage.comparing .compare-handle,
  .stage.comparing .compare-tag{display:block;}

  .quick-dl{
    position:absolute;
    top:10px;right:10px;
    z-index:6;
    display:none;
    align-items:center;justify-content:center;
    width:38px;height:38px;
    border-radius:50%;
    border:1px solid rgba(255,255,255,.14);
    background:rgba(12,12,14,.55);
    backdrop-filter:blur(8px);
    color:#fff;
    font-size:16px;
    cursor:pointer;
    transition:transform .12s ease, background .15s ease;
  }
  .quick-dl:active{transform:scale(.9);background:rgba(12,12,14,.8);}
  .quick-dl.busy{pointer-events:none;}

  /* Before/After buttons row */
  .ba-row{
    display:flex;align-items:center;justify-content:center;gap:8px;
    padding:10px 14px 2px;
  }
  .ba-btn{
    border:1px solid var(--line);
    background:var(--bg-2);
    color:var(--text-1);
    font-size:12.5px;font-weight:600;
    padding:7px 14px;border-radius:20px;
    cursor:pointer;
    transition:all .15s ease;
  }
  .ba-btn.active{
    background:var(--text-0);color:#111;border-color:var(--text-0);
  }
  .ba-btn:active{transform:scale(.96);}

  /* ---------- Mode toggle ---------- */
  .mode-toggle{
    display:flex;
    margin:16px 14px 4px;
    background:var(--bg-2);
    border-radius:14px;
    padding:4px;
    border:1px solid var(--line);
  }
  .mode-toggle button{
    flex:1;
    border:none;background:transparent;
    color:var(--text-1);
    font-size:14px;font-weight:650;
    padding:11px 6px;border-radius:11px;
    cursor:pointer;
    display:flex;align-items:center;justify-content:center;gap:6px;
    transition:background .2s ease, color .2s ease;
  }
  .mode-toggle button.active{
    background:var(--bg-3);
    color:var(--text-0);
    box-shadow:0 1px 0 rgba(255,255,255,.03) inset, 0 4px 10px rgba(0,0,0,.25);
  }

  /* ---------- Section titles ---------- */
  .section{
    padding:16px 14px 0;
  }
  .section-head{
    display:flex;align-items:center;justify-content:space-between;
    margin-bottom:10px;
  }
  .section-head h2{
    font-size:12.5px;font-weight:700;
    color:var(--text-2);
    letter-spacing:.02em;
    margin:0;
  }
  .link-btn{
    background:none;border:none;color:var(--amber);
    font-size:12.5px;font-weight:650;cursor:pointer;padding:4px;
  }
  .link-btn:active{opacity:.6;}

  /* ---------- Filter strip ---------- */
  .filter-strip{
    display:flex;gap:12px;
    overflow-x:auto;
    padding:2px 14px 6px;
    margin:0 -14px;
    scroll-snap-type:x proximity;
    -webkit-overflow-scrolling:touch;
  }
  .filter-strip::-webkit-scrollbar{display:none;}
  .filter-item{
    flex:0 0 auto;
    display:flex;flex-direction:column;align-items:center;gap:6px;
    scroll-snap-align:start;
    cursor:pointer;
    background:none;border:none;color:var(--text-1);
    padding:0;
  }
  .filter-thumb{
    width:64px;height:64px;border-radius:14px;
    background-size:cover;background-position:center;
    background-color:#222;
    border:2px solid transparent;
    transition:border-color .18s ease, transform .12s ease;
    position:relative;
    overflow:hidden;
  }
  .filter-item.active .filter-thumb{
    border-color:var(--amber);
  }
  .filter-item:active .filter-thumb{transform:scale(.94);}
  .filter-item span{
    font-size:11px;font-weight:600;color:var(--text-2);
    max-width:70px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  }
  .filter-item.active span{color:var(--text-0);}

  /* ---------- Generate camera button ---------- */
  .generate-wrap{padding:14px 14px 4px;}
  .generate-btn{
    width:100%;
    border:none;border-radius:18px;
    padding:18px 16px;
    font-size:16.5px;font-weight:700;
    color:#1a1204;
    background:var(--accent-grad);
    display:flex;align-items:center;justify-content:center;gap:9px;
    cursor:pointer;
    box-shadow:0 8px 22px -6px rgba(224,164,88,.45);
    transition:transform .12s ease, box-shadow .12s ease;
  }
  .generate-btn:active{transform:scale(.98);box-shadow:0 4px 14px -6px rgba(224,164,88,.4);}
  .generate-hint{
    text-align:center;font-size:11.5px;color:var(--text-2);
    margin-top:9px;padding:0 20px;line-height:1.5;
  }

  /* ---------- Adjustments ---------- */
  .adjust-panel{
    display:none;
  }
  .adjust-panel.open{display:block;}
  .slider-row{
    padding:10px 0;
    border-bottom:1px solid var(--line);
  }
  .slider-row:last-child{border-bottom:none;}
  .slider-top{
    display:flex;justify-content:space-between;align-items:center;
    margin-bottom:6px;
  }
  .slider-top label{font-size:13.5px;font-weight:560;color:var(--text-0);}
  .slider-val{font-size:12.5px;color:var(--text-2);font-variant-numeric:tabular-nums;min-width:30px;text-align:right;}
  input[type=range]{
    -webkit-appearance:none;appearance:none;
    width:100%;height:30px;background:transparent;margin:0;cursor:pointer;
  }
  input[type=range]::-webkit-slider-runnable-track{
    height:5px;border-radius:3px;
    background:var(--bg-3);
  }
  input[type=range]::-webkit-slider-thumb{
    -webkit-appearance:none;appearance:none;
    width:21px;height:21px;border-radius:50%;
    background:#fff;
    margin-top:-8px;
    box-shadow:0 1px 4px rgba(0,0,0,.5), 0 0 0 1px rgba(0,0,0,.15);
    transition:transform .1s ease;
  }
  input[type=range]:active::-webkit-slider-thumb{transform:scale(1.15);}
  input[type=range]::-moz-range-track{height:5px;border-radius:3px;background:var(--bg-3);}
  input[type=range]::-moz-range-thumb{
    width:19px;height:19px;border-radius:50%;background:#fff;border:none;
    box-shadow:0 1px 4px rgba(0,0,0,.5);
  }
  .zero-marker{position:relative;}

  /* ---------- Save ---------- */
  .save-card{
    margin:18px 14px 0;
    background:var(--bg-1);
    border:1px solid var(--line);
    border-radius:var(--radius-lg);
    padding:14px;
  }
  .format-row{
    display:flex;gap:8px;margin-bottom:12px;
  }
  .format-btn{
    flex:1;padding:10px 6px;border-radius:12px;
    border:1px solid var(--line);background:var(--bg-2);
    color:var(--text-1);font-size:13px;font-weight:650;
    cursor:pointer;transition:all .15s ease;
  }
  .format-btn.active{background:var(--bg-3);color:var(--text-0);border-color:#4a4a52;}
  .save-btn{
    width:100%;border:none;border-radius:14px;
    padding:15px;font-size:15px;font-weight:700;
    background:var(--text-0);color:#111;
    cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px;
    transition:transform .12s ease;
  }
  .save-btn:active{transform:scale(.98);}
  .save-btn[disabled]{opacity:.35;pointer-events:none;}

  .toast{
    position:fixed;left:50%;bottom:calc(24px + var(--safe-b));
    transform:translate(-50%,10px);
    background:rgba(24,24,27,.92);
    backdrop-filter:blur(10px);
    color:#fff;font-size:13.5px;font-weight:600;
    padding:12px 20px;border-radius:14px;
    border:1px solid var(--line);
    opacity:0;pointer-events:none;
    transition:opacity .25s ease, transform .25s ease;
    z-index:50;
    box-shadow:0 10px 30px rgba(0,0,0,.4);
    max-width:80vw;text-align:center;
  }
  .toast.show{opacity:1;transform:translate(-50%,0);}

  footer{
    text-align:center;
    padding:26px 14px calc(28px + var(--safe-b));
    color:var(--text-2);
    font-size:10.5px;
    letter-spacing:.06em;
    font-weight:700;
  }

  input[type=file]{display:none;}
  .file-label{
    display:flex;align-items:center;justify-content:center;gap:8px;
    background:var(--bg-2);border:1px dashed var(--line);
    border-radius:16px;padding:15px;
    color:var(--text-0);font-size:14px;font-weight:650;
    cursor:pointer;margin:0 14px;
    transition:background .15s ease, border-color .15s ease;
  }
  .file-label:active{background:var(--bg-3);}
  .file-label.small{
    margin:0;padding:9px 14px;border-radius:20px;border-style:solid;
    font-size:12.5px;
  }

  .hidden{display:none !important;}
  .spin{
    display:inline-block;width:15px;height:15px;
    border:2px solid rgba(0,0,0,.25);border-top-color:#1a1204;
    border-radius:50%;animation:spin .7s linear infinite;
  }
  @keyframes spin{to{transform:rotate(360deg);}}
