/* ===== Haha Photo Lab — clean, elegant, dark ===== */
@font-face{
  font-family:"Caveat";src:url("fonts/caveat.woff2") format("woff2");
  font-weight:700;font-style:normal;font-display:swap
}
:root{
  --bg:#0d0f14; --bg2:#12151d; --panel:#161a24; --card:#1b2030;
  --line:#262c3d; --txt:#e8ebf4; --txt2:#98a0b8; --txt3:#5d6580;
  --acc:#7c5cff; --acc2:#ff5c8a; --grad:linear-gradient(135deg,#7c5cff,#ff5c8a);
  --ok:#3ddc97; --warn:#ffb84d; --err:#ff6b6b;
  --r:14px; --rs:10px;
  --font:"SF Pro Display",-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,Roboto,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{background:var(--bg);color:var(--txt);font-family:var(--font);font-size:14px;line-height:1.55;
  -webkit-font-smoothing:antialiased;overflow:hidden}
#app{height:100vh;display:flex;flex-direction:column}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}
input,select{font-family:inherit}
::selection{background:#7c5cff55}

/* ---------- Landing ---------- */
#landing{overflow-y:auto;height:100vh}
.hero{max-width:980px;margin:0 auto;padding:56px 24px 80px;text-align:center}
.logo-big{display:flex;align-items:center;justify-content:center;gap:14px;margin-bottom:18px}
.logo-big h1{font-size:40px;font-weight:800;letter-spacing:-.5px;
  background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.tagline{color:var(--txt2);font-size:17px;margin-bottom:30px}
.tagline b{color:var(--txt)}
.dropzone{border:2px dashed #3a4260;border-radius:20px;padding:44px 20px;cursor:pointer;transition:.25s;
  background:radial-gradient(60% 120% at 50% 0%,#1a1f3066,transparent);color:var(--txt2)}
.dropzone:hover,.dropzone.drag{border-color:var(--acc);background:#1a1f30aa;color:var(--txt);transform:translateY(-2px)}
.dropzone svg{color:var(--acc);margin-bottom:8px}
.dz-main{font-size:19px;font-weight:700;color:var(--txt)}
.dz-sub{font-size:13px;margin-top:5px;color:var(--txt3)}
.privacy-chip{display:inline-block;margin-top:18px;padding:7px 16px;border-radius:999px;
  background:#15201866;border:1px solid #1f3a2e;color:var(--ok);font-size:12.5px}
.feature-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(158px,1fr));gap:12px;margin-top:38px;text-align:left}
.feature-grid .fcard{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:14px;transition:.2s}
.feature-grid .fcard:hover{border-color:#3d466b;transform:translateY(-2px)}
.fcard .fi{width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  background:#232a44;color:#c3b5ff;margin-bottom:9px}
.fcard b{display:block;font-size:13.5px}
.fcard span{font-size:11.5px;color:var(--txt3);line-height:1.4;display:block;margin-top:2px}
.fcard .cloud{font-size:9.5px;color:var(--warn);border:1px solid #4a3a20;border-radius:5px;padding:0 5px;float:right}

/* ---------- Editor layout ---------- */
#editor{display:flex;flex-direction:column;height:100vh}
#topbar{display:flex;align-items:center;gap:14px;padding:10px 16px;border-bottom:1px solid var(--line);background:var(--bg2)}
.brand{display:flex;align-items:center;gap:8px;font-weight:700;font-size:15px}
.file-name{color:var(--txt3);font-size:12px;flex:1;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.top-actions{display:flex;gap:8px}
.tb{padding:8px 14px;border-radius:var(--rs);background:var(--card);border:1px solid var(--line);font-size:13px;font-weight:600;transition:.15s}
.tb:hover{border-color:#414c76}
.tb.primary{background:var(--grad);border:none;color:#fff}
.tb.primary:hover{filter:brightness(1.12)}
.tb.ghost{background:transparent}
.tb.small{padding:5px 10px;font-size:12px}
.tb:disabled{opacity:.35;cursor:default}
#main{flex:1;display:flex;min-height:0}

/* tool rail */
#toolrail{width:78px;border-right:1px solid var(--line);background:var(--bg2);display:flex;flex-direction:column;
  align-items:center;padding:10px 0;gap:4px;overflow-y:auto;scrollbar-width:none}
#toolrail::-webkit-scrollbar{display:none}
.tool{width:60px;padding:8px 0 7px;border-radius:var(--rs);display:flex;flex-direction:column;align-items:center;gap:4px;
  color:var(--txt2);transition:.15s;font-size:9.5px;font-weight:600;text-align:center;line-height:1.2}
.tool svg{width:21px;height:21px}
.tool:hover{background:#1d2438;color:var(--txt)}
.tool.active{background:linear-gradient(#2a2f52,#241f3f);color:#fff;box-shadow:inset 0 0 0 1px #3d466b}
.tool .clouddot{width:5px;height:5px;border-radius:50%;background:var(--warn);margin-top:-2px}
.tool-sep{width:44px;height:1px;background:var(--line);margin:6px 0}

/* stage */
#stagewrap{flex:1;position:relative;display:flex;align-items:center;justify-content:center;min-width:0;
  background:
   radial-gradient(50% 60% at 50% 0%,#141828,transparent),
   repeating-conic-gradient(#0e1017 0 25%,#111420 0 50%) 0 0/28px 28px}
#stage{max-width:calc(100% - 48px);max-height:calc(100% - 48px);border-radius:8px;box-shadow:0 18px 60px #0009;transition:opacity .2s}
.progress{position:absolute;bottom:22px;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:10px;
  background:#10131dee;border:1px solid var(--line);padding:10px 18px;border-radius:999px;font-size:13px;z-index:30}
.spinner{width:16px;height:16px;border-radius:50%;border:2px solid #333c5e;border-top-color:var(--acc);animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.compare-wrap{position:absolute;top:16px;right:16px;width:150px;border-radius:10px;overflow:hidden;border:1px solid var(--line);
  background:#10131d;z-index:20;display:flex;flex-direction:column}
.compare-wrap img{width:100%;display:block}
.compare-label{font-size:10px;padding:3px 8px;background:#0009;color:var(--txt2)}
.compare-label.after{position:absolute;bottom:0;right:0}

/* panel */
#panel{width:292px;border-left:1px solid var(--line);background:var(--panel);display:flex;flex-direction:column;min-height:0}
#panelTitle{padding:16px 18px 4px;font-size:15.5px;font-weight:750;display:flex;align-items:center;gap:8px}
#panelTitle .sub{font-size:11.5px;color:var(--txt3);font-weight:500;display:block;margin-top:2px}
#panelBody{flex:1;overflow-y:auto;padding:12px 18px 18px;display:flex;flex-direction:column;gap:14px}
.ctl{display:flex;flex-direction:column;gap:6px}
.ctl label{font-size:12.5px;font-weight:650;color:var(--txt2);display:flex;justify-content:space-between}
.ctl label output{color:var(--txt);font-weight:500}
input[type=range]{-webkit-appearance:none;width:100%;height:22px;background:none}
input[type=range]::-webkit-slider-runnable-track{height:5px;border-radius:4px;background:#252b40}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;margin-top:-5.5px;border-radius:50%;
  background:var(--grad);box-shadow:0 0 0 4px #7c5cff22;cursor:grab}
.btnrow{display:flex;gap:8px;flex-wrap:wrap}
.btn{flex:1;padding:10px 12px;border-radius:var(--rs);font-weight:650;font-size:13px;text-align:center;transition:.15s;border:1px solid var(--line);background:var(--card)}
.btn:hover{border-color:#414c76}
.btn.grad{background:var(--grad);border:none;color:#fff}
.btn.grad:hover{filter:brightness(1.1)}
.btn.warn{border-color:#4a3a20;color:var(--warn)}
.btn[disabled]{opacity:.4;cursor:wait}
.chiprow{display:flex;gap:6px;flex-wrap:wrap}
.chip{padding:6px 11px;border-radius:999px;border:1px solid var(--line);font-size:12px;font-weight:600;color:var(--txt2);transition:.13s;background:var(--card)}
.chip:hover{border-color:#414c76;color:var(--txt)}
.chip.on{background:linear-gradient(#2a2f52,#241f3f);color:#fff;border-color:#4a537d}
.swatchrow{display:flex;gap:8px}
.swatch{width:26px;height:26px;border-radius:50%;border:2px solid transparent;cursor:pointer;transition:.12s}
.swatch.on{border-color:#fff;transform:scale(1.14)}
.hintbox{font-size:11.5px;color:var(--txt3);background:#14182466;border:1px solid var(--line);border-radius:var(--rs);padding:9px 11px;line-height:1.5}
.hintbox b{color:var(--txt2)}
.quota-chip{margin:0 18px 14px;padding:9px 12px;border-radius:var(--rs);font-size:11.5px;text-align:center;
  background:#14182466;border:1px solid var(--line);color:var(--txt2)}
.quota-chip b{color:var(--warn)}
select.styled,textarea.styled{width:100%;background:var(--card);border:1px solid var(--line);color:var(--txt);
  border-radius:var(--rs);padding:9px 11px;font-size:13px;outline:none}
textarea.styled{resize:vertical;min-height:64px}
select.styled:focus,textarea.styled:focus{border-color:var(--acc)}

/* statusbar */
#statusbar{display:flex;justify-content:space-between;padding:6px 16px;border-top:1px solid var(--line);
  background:var(--bg2);font-size:11.5px;color:var(--txt3)}

/* ---------- Batch studio ---------- */
#batch{display:flex;flex-direction:column;height:100vh}
#topbarBatch{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;border-bottom:1px solid var(--line);background:var(--bg2)}
#batchMain{flex:1;overflow-y:auto;padding:26px;display:flex;flex-direction:column;gap:18px;align-items:center}
.batch-drop{width:min(760px,100%);border:2px dashed #3a4260;border-radius:18px;padding:44px 20px;text-align:center;cursor:pointer;transition:.2s;color:var(--txt2)}
.batch-drop:hover,.batch-drop.drag{border-color:var(--acc);color:var(--txt)}
.batch-drop b{display:block;font-size:17px;color:var(--txt);margin-bottom:6px}
.batch-drop span{font-size:12.5px;color:var(--txt3)}
#batchControls{display:flex;gap:16px;align-items:center;font-size:12.5px;color:var(--txt2)}
#batchControls input[type=range]{width:140px}
#batchStats{color:var(--txt3)}
#batchGrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px;width:min(1300px,100%)}
.bcell{position:relative;border-radius:var(--r);overflow:hidden;background:var(--card);border:1px solid var(--line);cursor:pointer;transition:.15s}
.bcell:hover{transform:translateY(-3px);border-color:#414c76}
.bcell img{width:100%;aspect-ratio:1;object-fit:cover;display:block}
.bcell .badge{position:absolute;top:7px;left:7px;font-size:10px;font-weight:800;padding:3px 7px;border-radius:6px;background:var(--grad);color:#fff}
.bcell .score{position:absolute;bottom:0;left:0;right:0;padding:14px 8px 6px;font-size:11px;color:#fff;
  background:linear-gradient(transparent,#000c);display:flex;justify-content:space-between}
.bcell .pick{position:absolute;top:7px;right:7px;width:22px;height:22px;border-radius:50%;border:1.6px solid #ffffff88;
  display:flex;align-items:center;justify-content:center;color:transparent;font-size:12px}
.bcell.picked .pick{background:var(--grad);border-color:transparent;color:#fff}
.bcell .vtag{position:absolute;top:7px;right:36px;font-size:9px;background:#000a;padding:2px 6px;border-radius:5px;color:var(--txt2)}

/* toast */
#toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%);z-index:99;background:#171c2b;
  border:1px solid var(--line);padding:12px 22px;border-radius:12px;font-size:13.5px;box-shadow:0 10px 40px #000a;
  animation:pop .25s;max-width:82vw;text-align:center}
@keyframes pop{from{opacity:0;transform:translate(-50%,8px)}}
#toast.err{border-color:#5b2626;color:#ffb3b3}

/* scrollbars */
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:#28304a;border-radius:6px;border:2px solid var(--bg2)}

/* brush cursor overlay */
#overlayCanvasWrap{position:absolute;pointer-events:none}
#overlayCanvasWrap canvas{position:absolute;border-radius:8px}
.brushcursor{cursor:none}

@media (max-width:860px){
  #panel{position:fixed;right:0;top:52px;bottom:34px;z-index:40;transform:translateX(100%);transition:.25s;box-shadow:-20px 0 60px #000a}
  #panel.open{transform:none}
  #toolrail{width:60px}.tool{width:48px;font-size:8.5px}
  .file-name{display:none}
}
