/* =========================================================================
   全能照相馆 · 设计系统  (t-j.fun Photo Studio · design system)
   暖白纸感 · 墨黑字 · 靛蓝主操作 · AI 功能专属魔法渐变
   ========================================================================= */

/* ---- Tokens ---------------------------------------------------------- */
:root{
  /* ink / paper */
  --ink:#12131A;          /* 主文字 */
  --ink-2:#3B404D;        /* 次文字 */
  --ink-3:#71757F;        /* 弱文字 */
  --ink-4:#9aa0a8;        /* 占位 */
  --line:#E9E6DE;         /* 发丝线 */
  --line-2:#F0EDE6;
  --paper:#FBFAF6;        /* 页面底 暖白 */
  --surface:#FFFFFF;      /* 卡片 */
  --surface-2:#F5F3EC;    /* 浅面板 */
  --surface-3:#EFECE3;

  /* accent — indigo 主操作 */
  --accent:#4F46E5;
  --accent-press:#4035C7;
  --accent-soft:#ECEDFF;
  --accent-ink:#2B2785;

  /* AI 魔法渐变(只给 AI 功能用) */
  --magic-1:#6D5BF6;
  --magic-2:#A855F7;
  --magic-3:#EC4899;
  --magic:linear-gradient(110deg,var(--magic-1) 0%,var(--magic-2) 52%,var(--magic-3) 100%);
  --magic-soft:linear-gradient(110deg,#F1EDFF 0%,#FBEAF6 100%);

  /* status */
  --ok:#0FA968; --ok-soft:#E4F7EE;
  --warn:#E0890B; --warn-soft:#FCF1DD;
  --danger:#E5484D; --danger-soft:#FCEBEC;

  /* radius */
  --r-xs:8px; --r-sm:12px; --r-md:16px; --r-lg:22px; --r-xl:30px; --r-full:999px;

  /* shadow */
  --sh-1:0 1px 2px rgba(18,19,26,.04), 0 1px 3px rgba(18,19,26,.06);
  --sh-2:0 4px 12px rgba(18,19,26,.06), 0 2px 6px rgba(18,19,26,.04);
  --sh-3:0 14px 40px rgba(18,19,26,.10), 0 6px 16px rgba(18,19,26,.06);
  --sh-pop:0 24px 70px rgba(18,19,26,.16);
  --sh-accent:0 10px 30px rgba(79,70,229,.28);
  --sh-magic:0 12px 34px rgba(135,75,221,.30);

  /* type */
  --font:"PingFang SC","Microsoft YaHei UI","Microsoft YaHei",-apple-system,
         BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",sans-serif;
  --font-display:"Sora","Space Grotesk",var(--font);
  --font-num:"Space Grotesk","Sora",var(--font);

  /* motion */
  --ease:cubic-bezier(.22,.61,.36,1);
  --ease-out:cubic-bezier(.16,1,.3,1);
  --spring:cubic-bezier(.34,1.56,.64,1);

  /* layout */
  --nav-h:62px;
  --maxw:1180px;
}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{
  font-family:var(--font);
  color:var(--ink);
  background:var(--paper);
  line-height:1.6;
  font-size:15.5px;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  overflow-x:hidden;
}
img,svg,video{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;border:none;background:none}
::selection{background:var(--accent);color:#fff}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}

/* ---- Type ------------------------------------------------------------ */
h1,h2,h3,h4{font-family:var(--font-display);line-height:1.12;letter-spacing:-.02em;font-weight:700}
.display{font-size:clamp(34px,6.4vw,68px);font-weight:800;letter-spacing:-.035em;line-height:1.04}
.h1{font-size:clamp(28px,4.4vw,46px);font-weight:800;letter-spacing:-.03em}
.h2{font-size:clamp(23px,3vw,33px);font-weight:750}
.h3{font-size:20px;font-weight:700}
.lead{font-size:clamp(16px,2vw,19px);color:var(--ink-2);line-height:1.66}
.muted{color:var(--ink-3)}
.mono{font-family:var(--font-num);font-variant-numeric:tabular-nums}
.grad-text{background:var(--magic);-webkit-background-clip:text;background-clip:text;color:transparent}

/* ---- Layout ---------------------------------------------------------- */
.container{width:100%;max-width:var(--maxw);margin-inline:auto;padding-inline:20px}
.section{padding-block:clamp(48px,8vw,96px)}
.stack{display:flex;flex-direction:column}
.row{display:flex;align-items:center}
.wrap{flex-wrap:wrap}
.gap-2{gap:8px}.gap-3{gap:12px}.gap-4{gap:16px}.gap-6{gap:24px}
.center{align-items:center;justify-content:center}
.between{justify-content:space-between}
.eyebrow{font-size:12.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}
.hr{height:1px;background:var(--line);border:0}

/* ---- Buttons --------------------------------------------------------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  height:46px;padding:0 22px;border-radius:var(--r-full);
  font-weight:650;font-size:15px;white-space:nowrap;
  transition:transform .18s var(--spring),box-shadow .2s,background .2s,color .2s,border-color .2s;
  user-select:none;
}
.btn:active{transform:scale(.96)}
.btn-primary{background:var(--accent);color:#fff;box-shadow:var(--sh-accent)}
.btn-primary:hover{background:var(--accent-press)}
.btn-magic{background:var(--magic);color:#fff;box-shadow:var(--sh-magic);background-size:160% 160%}
.btn-magic:hover{animation:magicShift 3s var(--ease) infinite}
.btn-ghost{background:var(--surface);color:var(--ink);box-shadow:var(--sh-1);border:1px solid var(--line)}
.btn-ghost:hover{background:var(--surface-2)}
.btn-soft{background:var(--accent-soft);color:var(--accent-ink)}
.btn-soft:hover{background:#e3e4ff}
.btn-line{background:transparent;border:1px solid var(--line);color:var(--ink-2)}
.btn-line:hover{border-color:var(--ink-3);color:var(--ink)}
.btn-lg{height:54px;padding:0 30px;font-size:16.5px}
.btn-sm{height:38px;padding:0 16px;font-size:14px}
.btn-block{width:100%}
.btn[disabled]{opacity:.5;pointer-events:none}
@keyframes magicShift{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}

/* ---- Header ---------------------------------------------------------- */
/* 注意:不要用 backdrop-filter——Chrome 合成器在宽屏/缩放下会留下白色幽灵块残影(已实测踩坑) */
.nav{position:sticky;top:0;z-index:50;height:var(--nav-h);
  background:rgba(251,250,246,.97);
  border-bottom:1px solid transparent;transition:border-color .3s,background .3s}
.nav.scrolled{border-color:var(--line)}
.nav .container{height:100%;display:flex;align-items:center;justify-content:space-between;gap:16px}
.brand{display:flex;align-items:center;gap:10px;font-family:var(--font-display);font-weight:800;font-size:18px;letter-spacing:-.02em}
.brand .mark{width:30px;height:30px;flex:0 0 auto}
.nav-links{display:flex;align-items:center;gap:4px}
.nav-links a{padding:8px 13px;border-radius:var(--r-full);font-size:14.5px;font-weight:550;color:var(--ink-2);transition:background .2s,color .2s}
.nav-links a:hover{background:var(--surface-2);color:var(--ink)}
@media(max-width:860px){.nav-links{display:none}}
.nav-right{display:flex;align-items:center;gap:12px}
.lang-switch{display:inline-flex;background:var(--surface-2);border-radius:var(--r-full);padding:3px;gap:1px}
.lang-switch button{padding:5px 10px;border-radius:var(--r-full);font-size:13px;font-weight:650;color:var(--ink-3);line-height:1;transition:background .18s,color .18s;white-space:nowrap}
.lang-switch button.on{background:var(--surface);color:var(--ink);box-shadow:var(--sh-1)}
@media(max-width:560px){.lang-switch button{padding:5px 7px;font-size:12px}}

/* ---- Cards / Tool grid ---------------------------------------------- */
.bento{display:grid;grid-template-columns:repeat(12,1fr);gap:16px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-1)}
.tool-card{
  position:relative;grid-column:span 3;display:flex;flex-direction:column;
  border-radius:var(--r-lg);background:var(--surface);border:1px solid var(--line);
  box-shadow:var(--sh-1);overflow:hidden;
  transition:transform .28s var(--ease-out),box-shadow .28s,border-color .28s;
}
.tool-card:hover{transform:translateY(-6px);box-shadow:var(--sh-3);border-color:transparent}
.tc-thumb{position:relative;aspect-ratio:4/3;overflow:hidden;background:var(--surface-2)}
.tc-thumb img{width:100%;height:100%;object-fit:cover;object-position:50% 28%;transition:transform .55s var(--ease)}
.tool-card:hover .tc-thumb img{transform:scale(1.07)}
.tc-thumb::after{content:"";position:absolute;inset:0;background:linear-gradient(to top,rgba(18,19,26,.14),transparent 36%)}
.tool-card .tag{position:absolute;top:10px;right:10px;z-index:2;font-size:11px;font-weight:700;letter-spacing:.03em;padding:4px 9px;border-radius:var(--r-full)}
.tag-free{background:rgba(255,255,255,.94);color:var(--ok);box-shadow:var(--sh-1)}
.tag-ai{background:var(--magic);color:#fff;box-shadow:var(--sh-magic)}
.tc-hot{position:absolute;top:10px;left:10px;z-index:2;font-size:11px;font-weight:700;padding:4px 9px;border-radius:var(--r-full);background:rgba(18,19,26,.72);color:#fff}
.tc-ov{position:absolute;left:10px;bottom:10px;z-index:2;font-size:11.5px;font-weight:700;font-family:var(--font-num);padding:4px 9px;border-radius:var(--r-full);background:rgba(255,255,255,.94);color:var(--ink);box-shadow:var(--sh-1)}
.tc-body{padding:13px 15px 15px}
.tc-body h3{font-size:16px;display:flex;align-items:center;gap:7px}
.tc-body h3 .ic{width:23px;height:23px;flex:0 0 auto;border-radius:7px;display:grid;place-items:center;background:var(--accent-soft);color:var(--accent)}
.tc-body h3 .ic svg{width:14px;height:14px}
.tool-card.ai .tc-body h3 .ic{background:var(--magic-soft);color:var(--magic-2)}
.tc-body p{font-size:12.8px;color:var(--ink-3);line-height:1.5;margin-top:3px}
.tc-body .go{margin-top:9px;font-size:13px;font-weight:650;color:var(--accent)}
.tool-card.ai .tc-body .go{color:var(--magic-2)}
@media(max-width:980px){.tool-card{grid-column:span 4}}
@media(max-width:680px){.tool-card{grid-column:span 6}}
@media(max-width:430px){.bento{gap:12px}}

/* ---- Badge / chips --------------------------------------------------- */
.badge{display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 12px;border-radius:var(--r-full);
  font-size:13px;font-weight:600;background:var(--surface);border:1px solid var(--line);box-shadow:var(--sh-1)}
.badge .dot{width:7px;height:7px;border-radius:50%;background:var(--ok)}
.chip{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 14px;border-radius:var(--r-full);
  font-size:13.5px;font-weight:600;background:var(--surface-2);color:var(--ink-2);cursor:pointer;
  border:1px solid transparent;transition:all .18s}
.chip:hover{background:var(--surface-3)}
.chip.on{background:var(--accent);color:#fff;box-shadow:var(--sh-accent)}

/* ---- Hero ------------------------------------------------------------ */
.hero{position:relative;padding-top:clamp(40px,7vw,84px);padding-bottom:clamp(36px,5vw,60px);overflow:hidden}
.hero .halo{position:absolute;z-index:0;filter:blur(60px);opacity:.5;border-radius:50%}
.hero .halo.a{width:520px;height:520px;background:radial-gradient(circle,rgba(109,91,246,.5),transparent 65%);top:-160px;right:-120px}
.hero .halo.b{width:440px;height:440px;background:radial-gradient(circle,rgba(236,72,153,.32),transparent 65%);top:60px;left:-160px}
.hero .container{position:relative;z-index:1}

/* ---- Before / After slider ------------------------------------------ */
.ba{position:relative;width:100%;aspect-ratio:4/3;border-radius:var(--r-lg);overflow:hidden;
  box-shadow:var(--sh-3);background:var(--surface-2);user-select:none;touch-action:none}
.ba img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;pointer-events:none}
.ba .after{clip-path:inset(0 0 0 var(--split,50%))}
.ba .handle{position:absolute;top:0;bottom:0;left:var(--split,50%);width:2px;background:#fff;
  box-shadow:0 0 0 1px rgba(0,0,0,.06);transform:translateX(-1px);z-index:3}
.ba .knob{position:absolute;top:50%;left:var(--split,50%);transform:translate(-50%,-50%);
  width:42px;height:42px;border-radius:50%;background:#fff;box-shadow:var(--sh-2);display:grid;place-items:center;z-index:4;cursor:ew-resize}
.ba .knob svg{width:20px;height:20px;color:var(--ink-2)}
.ba .lbl{position:absolute;bottom:12px;padding:4px 11px;border-radius:var(--r-full);font-size:12px;font-weight:700;
  background:rgba(18,19,26,.72);color:#fff;z-index:3}
.ba .lbl.l{left:12px}.ba .lbl.r{right:12px;background:var(--magic)}

/* ---- Dropzone / uploader -------------------------------------------- */
/* display:block 是命根子:label 默认 inline,inline 盒会被块级子元素切成多个行片段,
   首尾空片段各自画出"白底+虚线+圆角"的幽灵竖条(全站反复出现的鬼框真凶,勿删) */
.drop{display:block;position:relative;border:2px dashed var(--line);border-radius:var(--r-lg);background:var(--surface);
  padding:clamp(28px,5vw,52px);text-align:center;transition:border-color .2s,background .2s;cursor:pointer}
.drop:hover,.drop.over{border-color:var(--accent);background:var(--accent-soft)}
.drop .di{width:62px;height:62px;border-radius:18px;background:var(--accent-soft);color:var(--accent);
  display:grid;place-items:center;margin:0 auto 16px}
.drop.over .di{transform:scale(1.06)}
.drop h3{font-size:18px;margin-bottom:6px}
.drop p{color:var(--ink-3);font-size:14px}
/* 文件选择控件用 sr-only 式彻底隐藏:input 这类控件不会被 inset:0 拉伸,
   会变成竖长条且在高对比/强制颜色模式下渲染出虚线框;点击由外层 label 转发,拖拽挂在 label 上 */
.drop input[type=file]{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);border:0;padding:0;margin:-1px;white-space:nowrap}

/* ---- Workbench shell (tool pages) ----------------------------------- */
.work{display:grid;grid-template-columns:1fr 340px;gap:20px;align-items:start}
@media(max-width:900px){.work{grid-template-columns:1fr}}
.canvas-wrap{position:relative;background:
  conic-gradient(from 45deg,#f3f1ea 25%,#fbfaf6 0 50%,#f3f1ea 0 75%,#fbfaf6 0) 0 0/22px 22px;
  border:1px solid var(--line);border-radius:var(--r-lg);min-height:360px;
  display:grid;place-items:center;overflow:hidden;box-shadow:var(--sh-1)}
.canvas-wrap canvas,.canvas-wrap img{max-width:100%;max-height:72vh;border-radius:6px}
.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:18px;box-shadow:var(--sh-1)}
.panel + .panel{margin-top:16px}
.panel .ph{font-size:13px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3);margin-bottom:12px}
.field{margin-bottom:14px}
.field label{display:block;font-size:13.5px;font-weight:600;color:var(--ink-2);margin-bottom:7px}

/* segmented */
.seg{display:inline-flex;background:var(--surface-2);border-radius:var(--r-full);padding:4px;gap:2px;width:100%}
.seg button{flex:1;height:36px;border-radius:var(--r-full);font-size:13.5px;font-weight:600;color:var(--ink-3);transition:all .18s}
.seg button.on{background:var(--surface);color:var(--ink);box-shadow:var(--sh-1)}

/* swatches */
.swatches{display:flex;gap:9px;flex-wrap:wrap}
.sw{width:34px;height:34px;border-radius:50%;cursor:pointer;border:2px solid var(--surface);
  box-shadow:0 0 0 1px var(--line);transition:transform .15s}
.sw:hover{transform:scale(1.1)}
.sw.on{box-shadow:0 0 0 2px var(--accent);transform:scale(1.1)}

/* range */
input[type=range]{-webkit-appearance:none;width:100%;height:4px;border-radius:4px;background:var(--surface-3);outline:none}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:20px;height:20px;border-radius:50%;
  background:var(--accent);box-shadow:var(--sh-2);cursor:pointer;border:3px solid #fff}

/* inputs */
.inp{width:100%;height:44px;padding:0 14px;border-radius:var(--r-sm);border:1px solid var(--line);
  background:var(--surface);transition:border-color .2s,box-shadow .2s;font-size:15px}
.inp:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft);outline:none}

/* sticky mobile action bar */
.actionbar{position:sticky;bottom:0;z-index:30;display:flex;gap:10px;padding:12px;margin-top:16px;
  background:rgba(251,250,246,.97);
  border-top:1px solid var(--line);border-radius:var(--r-lg) var(--r-lg) 0 0}

/* ---- Spinner / progress --------------------------------------------- */
.spin{width:20px;height:20px;border-radius:50%;border:2.5px solid rgba(255,255,255,.35);border-top-color:#fff;animation:spin .7s linear infinite}
.spin.dark{border-color:var(--surface-3);border-top-color:var(--accent)}
@keyframes spin{to{transform:rotate(360deg)}}
.progress{height:6px;border-radius:6px;background:var(--surface-3);overflow:hidden}
.progress i{display:block;height:100%;background:var(--magic);width:0;transition:width .3s var(--ease);border-radius:6px}

/* ---- Toast ----------------------------------------------------------- */
.toasts{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);z-index:200;display:flex;flex-direction:column;gap:10px;align-items:center;pointer-events:none}
.toast{background:var(--ink);color:#fff;padding:12px 18px;border-radius:var(--r-full);font-size:14px;font-weight:550;
  box-shadow:var(--sh-pop);display:flex;align-items:center;gap:9px;animation:toastIn .4s var(--spring)}
.toast.ok{background:var(--ok)}.toast.err{background:var(--danger)}
@keyframes toastIn{from{opacity:0;transform:translateY(14px) scale(.96)}to{opacity:1;transform:none}}

/* ---- Footer ---------------------------------------------------------- */
.foot{border-top:1px solid var(--line);background:var(--surface);padding-block:44px;margin-top:40px}
.foot .container{display:flex;flex-wrap:wrap;gap:28px;justify-content:space-between}
.foot a{color:var(--ink-3);font-size:14px;transition:color .2s}
.foot a:hover{color:var(--ink)}
.foot .cols{display:flex;gap:54px;flex-wrap:wrap}
.foot .col h4{font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-4);margin-bottom:12px;font-family:var(--font)}
.foot .col a{display:block;margin-bottom:8px}

/* ---- Reveal animation ----------------------------------------------- */
.reveal{opacity:0;transform:translateY(20px);transition:opacity .7s var(--ease-out),transform .7s var(--ease-out)}
.reveal.in{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important}.reveal{opacity:1;transform:none}}

/* ---- util ------------------------------------------------------------ */
.hide{display:none!important}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.pill-row{display:flex;gap:8px;flex-wrap:wrap}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.text-c{text-align:center}
.mt-2{margin-top:8px}.mt-3{margin-top:12px}.mt-4{margin-top:16px}.mt-6{margin-top:24px}.mt-8{margin-top:32px}
.mb-2{margin-bottom:8px}.mb-4{margin-bottom:16px}.mb-6{margin-bottom:24px}
