/* ===== 365Lab — Design System ===== */
:root{
  --ink:#0f0f1a;
  --ink-2:#171727;
  --panel:#1e1e30;
  --panel-2:#262640;
  --panel-3:#2a2a4a;
  --line:rgba(255,255,255,.09);
  --line-2:rgba(255,255,255,.16);
  --border:var(--line-2);
  --bd:var(--line-2);
  --app-split:var(--line);
  --app-border:var(--line-2);
  --text:#f4f4fb;
  --text-1:#f4f4fb;
  --text-2:#a7a7c2;
  --text-3:#8585a8;
  --fg:#f4f4fb;
  --fg2:#a7a7c2;
  --muted:#a7a7c2;
  --app-text-primary:#f4f4fb;
  --app-text-secondary:#a7a7c2;
  --app-text-muted:#6f6f8f;
  --accent:#ff5e3a;
  --accent-2:#ffb347;
  --accent-soft:rgba(255,94,58,.14);
  --accent-glow:rgba(255,94,58,.45);
  --violet:#7c6cff;
  --violet-soft:rgba(124,108,255,.16);
  --blue:#5b8def;
  --ok:#34d399;
  --ok-soft:rgba(52,211,153,.14);
  --warn:#ffb347;
  --danger:#ff5e3a;
  --radius:16px;
  --radius-sm:10px;
  --radius-lg:22px;
  --shadow:0 20px 60px -20px rgba(0,0,0,.6);
  --shadow-sm:0 6px 22px -10px rgba(0,0,0,.5);
  --shadow-lg:0 32px 80px -28px rgba(0,0,0,.7);
  --shadow-glow:0 12px 36px -10px var(--accent-glow);
  --app-shadow:0 2px 12px rgba(0,0,0,.4);
  --app-bg:var(--ink);
  --app-surface:var(--panel);
  --app-surface2:var(--panel-2);
  --section-bg:var(--ink-2);
  --ease-out:cubic-bezier(.2,.7,.3,1);
  --ease-spring:cubic-bezier(.34,1.3,.64,1);
  --ease-smooth:cubic-bezier(.4,0,.2,1);
  --font-display:'Sora','Noto Sans SC',system-ui,sans-serif;
  --font-body:'Noto Sans SC','Sora',system-ui,sans-serif;
  --font-mono:'SF Mono','Consolas',monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;text-size-adjust:100%;overscroll-behavior-y:none}
body{
  font-family:var(--font-body);
  background:var(--ink);
  color:var(--text);
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  text-rendering:optimizeLegibility;
  -webkit-tap-highlight-color:transparent;
  overflow-x:hidden;
}
/* 兼容性/响应式：媒体元素默认不溢出，避免移动端横向滚动 */
img,svg,video,canvas{max-width:100%}
/* 全局背景纹理 — 添加微妙的色彩层次，提升整体氛围感 */
body::before{
  content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;
  background:
    radial-gradient(40% 30% at 12% 8%,rgba(124,108,255,.05),transparent 60%),
    radial-gradient(35% 28% at 92% 92%,rgba(255,94,58,.04),transparent 60%);
}
:lang(en) body,[data-lang-active="en"] body{--font-body:'Sora',system-ui,sans-serif}
a{color:inherit;text-decoration:none;transition:color .2s var(--ease-smooth)}
.copy-email{cursor:pointer}
h1,h2,h3{font-family:var(--font-display);line-height:1.1;letter-spacing:-.02em}
img{max-width:100%;display:block}
/* 统一焦点态 — 无障碍 */
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}
/* 统一选中态 */
::selection{background:var(--accent);color:#fff}
/* 统一滚动条 */
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:8px;border:2px solid transparent;background-clip:padding-box}
::-webkit-scrollbar-thumb:hover{background:var(--text-3);background-clip:padding-box;border:2px solid transparent}
/* Firefox 滚动条支持 */
*{scrollbar-width:thin;scrollbar-color:var(--line-2) transparent}

/* ===== Buttons ===== */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:.5em;
  font-family:var(--font-display);font-weight:700;font-size:15px;
  padding:13px 24px;border-radius:999px;border:1px solid transparent;
  cursor:pointer;transition:transform .22s var(--ease-spring),box-shadow .22s var(--ease-out),background .22s var(--ease-smooth),border-color .22s var(--ease-smooth),color .22s var(--ease-smooth);
  white-space:nowrap;position:relative;overflow:hidden;
}
.btn::before{
  content:"";position:absolute;inset:0;background:linear-gradient(120deg,transparent 30%,rgba(255,255,255,.18) 50%,transparent 70%);
  transform:translateX(-100%);transition:transform .6s var(--ease-smooth);pointer-events:none;
}
.btn:hover::before{transform:translateX(100%)}
.btn:active{transform:translateY(1px) scale(.99)}
.btn-sm{padding:9px 16px;font-size:14px}
.btn-lg{padding:16px 32px;font-size:16px}
.btn-primary{
  background:linear-gradient(135deg,var(--accent),#ff7a45);color:#fff;
  box-shadow:0 8px 24px -8px var(--accent-glow),inset 0 1px 0 rgba(255,255,255,.22);
}
.btn-primary:hover{
  background:linear-gradient(135deg,#ff7154,#ff8a5c);
  box-shadow:0 14px 32px -8px var(--accent-glow),0 0 0 1px rgba(255,94,58,.3),inset 0 1px 0 rgba(255,255,255,.28);
  transform:translateY(-2px);
}
.btn-ghost{background:rgba(255,255,255,.02);color:var(--text);border-color:var(--line-2)}
.btn-ghost:hover{background:rgba(255,255,255,.07);border-color:var(--text-2);transform:translateY(-2px)}

/* ===== Header ===== */
.site-header{
  position:sticky;top:0;z-index:50;
  display:flex;align-items:center;gap:22px;
  padding:14px clamp(16px,4vw,44px);
  background:rgba(15,15,26,.78);backdrop-filter:blur(18px) saturate(180%);-webkit-backdrop-filter:blur(18px) saturate(180%);
  border-bottom:1px solid var(--line);
  box-shadow:0 1px 0 rgba(255,255,255,.03) inset,0 8px 28px -16px rgba(0,0,0,.6);
  transition:box-shadow .25s var(--ease-smooth);
}
.site-header.scrolled{box-shadow:0 1px 0 rgba(255,255,255,.03) inset,0 8px 24px -12px rgba(0,0,0,.5)}
.brand{display:flex;align-items:center;gap:10px;font-family:var(--font-display);font-weight:800;font-size:20px;letter-spacing:-.01em}
.brand-name em{color:var(--accent);font-style:normal}
.brand-mark{
  width:32px;height:32px;display:grid;place-items:center;
  border-radius:10px;overflow:hidden;
  transition:transform .3s var(--ease-spring);
}
.brand:hover .brand-mark{transform:scale(1.06)}
.brand-mark img{width:100%;height:100%;object-fit:cover;display:block;border-radius:10px}
.site-nav{display:flex;gap:28px;margin-left:16px}
.site-nav a{
  color:var(--text-2);font-size:15px;font-weight:500;
  transition:color .22s var(--ease-smooth);position:relative;padding:4px 0;
}
.site-nav a::after{
  content:"";position:absolute;left:50%;right:50%;bottom:-2px;height:2px;border-radius:2px;
  background:linear-gradient(90deg,var(--accent),#ffb347);
  transition:left .28s var(--ease-out),right .28s var(--ease-out),opacity .28s;
  opacity:0;
}
.site-nav a:hover{color:var(--text)}
.site-nav a:hover::after{left:0;right:0;opacity:.6}
.site-nav a.active{color:var(--text)}
.site-nav a.active::after{content:"";position:absolute;left:0;right:0;bottom:-2px;height:2px;border-radius:2px;background:linear-gradient(90deg,var(--accent),#ffb347);opacity:1;box-shadow:0 0 8px var(--accent-glow)}
.header-actions{margin-left:auto;display:flex;align-items:center;gap:12px}
.nav-toggle{display:none;flex-direction:column;justify-content:center;gap:5px;width:42px;height:38px;border:1px solid var(--line-2);border-radius:10px;background:transparent;cursor:pointer;padding:0 9px;transition:background .2s,border-color .2s}
.nav-toggle:hover{background:rgba(255,255,255,.06);border-color:var(--text-2)}
.nav-toggle span{display:block;height:2px;border-radius:2px;background:var(--text);transition:transform .3s var(--ease-spring),opacity .25s}
.nav-toggle[aria-expanded="true"] span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.nav-toggle[aria-expanded="true"] span:nth-child(2){opacity:0}
.nav-toggle[aria-expanded="true"] span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
.mobile-menu{display:none;flex-direction:column;gap:4px;padding:10px clamp(16px,4vw,44px) 16px;background:rgba(15,15,26,.96);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);border-bottom:1px solid var(--line);position:sticky;top:64px;z-index:49}
.mobile-menu a:not(.btn){padding:13px 10px;color:var(--text-2);font-size:16px;font-weight:600;border-radius:10px;transition:background .18s,color .18s,padding-left .18s}
.mobile-menu a:not(.btn):hover{background:var(--panel-2);color:var(--text);padding-left:14px}
.mobile-menu .mobile-cta{margin-top:8px;text-align:center;justify-content:center}
.lang-toggle{
  width:42px;height:38px;border-radius:10px;border:1px solid var(--line-2);
  background:transparent;color:var(--text);font-weight:700;cursor:pointer;font-family:var(--font-display);
  transition:background .22s var(--ease-smooth),border-color .22s var(--ease-smooth),transform .22s var(--ease-spring);
}
.lang-toggle:hover{background:rgba(255,255,255,.07);border-color:var(--text-2);transform:translateY(-1px)}
.lang-toggle [data-lang]{display:none}
[data-lang-active="zh"] .lang-toggle [data-lang="zh"]{display:inline}
[data-lang-active="en"] .lang-toggle [data-lang="en"]{display:inline}

/* ===== Hero animations ===== */
@keyframes heroFadeUp{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:translateY(0)}}
@keyframes heroFadeIn{from{opacity:0}to{opacity:1}}
@keyframes shimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}
@keyframes pulseGlow{0%,100%{opacity:.4}50%{opacity:.7}}
@keyframes floatCard{0%,100%{transform:translateY(0) rotate(var(--r,0deg))}50%{transform:translateY(-14px) rotate(var(--r,0deg))}}
@keyframes gradientShift{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}
.hero-title .hl{
  background:linear-gradient(90deg,var(--accent),#ffb347,var(--accent));
  background-size:200% auto;
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:transparent;
  animation:gradientShift 4s ease infinite;
  position:relative;white-space:nowrap
}
.hero-inner>*{animation:heroFadeUp .7s cubic-bezier(.2,.8,.2,1) backwards}
.hero-inner>*:nth-child(1){animation-delay:.05s}
.hero-inner>*:nth-child(2){animation-delay:.15s}
.hero-inner>*:nth-child(3){animation-delay:.25s}
.hero-inner>*:nth-child(4){animation-delay:.35s}
.hero-inner>*:nth-child(5){animation-delay:.45s}
/* .eyebrow / .hero-glow / .preview-card 的 animation 已合并至下方主样式 */

/* ===== Resume banner — 编辑器内浮动通知 ===== */
.resume-banner[hidden]{display:none!important}
.resume-banner{
  position:absolute;top:72px;left:50%;transform:translateX(-50%);
  z-index:30;
  display:flex;align-items:center;gap:14px;
  padding:13px 18px;border-radius:14px;
  background:linear-gradient(135deg,rgba(124,108,255,.24),rgba(255,94,58,.20));
  border:1px solid var(--line-2);
  box-shadow:0 20px 48px -14px rgba(0,0,0,.55),0 0 0 1px rgba(255,255,255,.04),inset 0 1px 0 rgba(255,255,255,.1);
  backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);
  animation:resumeIn .35s var(--ease-spring);
  max-width:min(540px,calc(100% - 32px));
}
@keyframes resumeIn{from{opacity:0;transform:translateX(-50%) translateY(-14px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}
.resume-banner .resume-info{display:flex;flex-direction:column;gap:3px;min-width:0}
.resume-banner .resume-info strong{font-size:14px;color:var(--text);font-weight:700;white-space:nowrap}
.resume-banner .resume-info span{font-size:12px;color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.resume-banner .resume-actions{display:flex;gap:8px;flex-shrink:0}
.resume-banner .btn-sm{border-radius:9px;padding:8px 15px;font-size:13px}
@media (max-width:600px){
  .resume-banner{flex-direction:column;align-items:stretch;gap:10px;text-align:center;max-width:calc(100% - 24px);top:68px}
  .resume-banner .resume-info strong,.resume-banner .resume-info span{white-space:normal}
}
.hero{position:relative;padding:clamp(60px,9vw,120px) clamp(16px,4vw,44px) clamp(50px,7vw,90px);overflow:hidden}
.hero-glow{position:absolute;inset:0;background:
  radial-gradient(60% 55% at 18% 12%,rgba(124,108,255,.32),transparent 60%),
  radial-gradient(55% 50% at 90% 20%,rgba(255,94,58,.28),transparent 60%),
  radial-gradient(50% 60% at 60% 100%,rgba(255,179,71,.16),transparent 60%);
  filter:blur(8px);pointer-events:none;animation:pulseGlow 6s ease-in-out infinite}
/* Hero 装饰网格背景 */
.hero::after{
  content:"";position:absolute;inset:0;pointer-events:none;opacity:.4;
  background-image:radial-gradient(var(--line) 1px,transparent 1px);
  background-size:32px 32px;
  mask-image:radial-gradient(ellipse at 50% 50%,#000 0%,transparent 70%);
  -webkit-mask-image:radial-gradient(ellipse at 50% 50%,#000 0%,transparent 70%);
}
.hero-inner{position:relative;max-width:1200px;z-index:1}
.eyebrow{display:inline-flex;align-items:center;gap:8px;font-weight:600;color:var(--text-2);font-size:13px;letter-spacing:.06em;margin-bottom:20px;
  padding:7px 16px;border:1px solid var(--line-2);border-radius:999px;
  background:linear-gradient(180deg,rgba(255,255,255,.04),rgba(255,255,255,.01));
  box-shadow:0 4px 16px -8px rgba(0,0,0,.3),inset 0 1px 0 rgba(255,255,255,.05);
  text-transform:uppercase;animation:heroFadeIn .8s ease .2s backwards;
}
.eyebrow::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--accent);box-shadow:0 0 8px var(--accent-glow);animation:pulseGlow 2s ease-in-out infinite}
.hero-title{font-size:clamp(38px,7vw,74px);font-weight:800;margin-bottom:22px;letter-spacing:-.025em}
.hero-sub{font-size:clamp(16px,2.2vw,20px);color:var(--text-2);max-width:640px;margin-bottom:34px;line-height:1.55}
.hero-cta{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:34px}
.hero-badges{display:flex;gap:10px 22px;flex-wrap:wrap;color:var(--text-3);font-size:14px;font-weight:500}
.hero-preview{position:absolute;top:0;right:0;bottom:0;width:42%;pointer-events:none;display:flex;align-items:center;justify-content:center;gap:14px}
@media(max-width:900px){.hero-preview{display:none}}

/* ===== Sections ===== */
.section{padding:clamp(56px,8vw,100px) clamp(16px,4vw,44px);max-width:1200px;margin:0 auto}
.section-alt{background:var(--ink-2);max-width:none}
.section-alt>*{max-width:1200px;margin-inline:auto}
.section-head{text-align:center;margin-bottom:52px}
.section-head h2{font-size:clamp(28px,4.5vw,46px);font-weight:800;margin-bottom:14px;letter-spacing:-.02em;color:var(--text)}
.section-head p{color:var(--text-2);font-size:17px;max-width:640px;margin:0 auto;line-height:1.6}

/* ===== Skip link (a11y) ===== */
.skip-link{position:absolute;left:-9999px;top:0;z-index:100;background:var(--accent);color:#fff;padding:10px 18px;border-radius:0 0 10px 0;font-weight:700;font-size:14px;text-decoration:none}
.skip-link:focus{left:0}
/* 屏幕阅读器专用：视觉隐藏但保留语义 */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* Hero badges 圆点美化 */
.hero-badges span{display:inline-flex;align-items:center;gap:8px}
.hero-badges span::before{content:"";width:7px;height:7px;border-radius:50%;background:linear-gradient(135deg,var(--accent),#ffb347);box-shadow:0 0 10px rgba(255,94,58,.5);flex-shrink:0}

/* ===== Template filters + grid ===== */
.tpl-controls{
  position:sticky;top:64px;z-index:30;
  margin-bottom:18px;padding:14px 16px;border-radius:18px;
  background:linear-gradient(180deg,rgba(38,38,64,.94),rgba(30,30,48,.88));
  border:1px solid var(--line-2);
  box-shadow:0 14px 36px -22px rgba(0,0,0,.8), inset 0 1px 0 rgba(255,255,255,.06);
  backdrop-filter:blur(18px) saturate(160%);-webkit-backdrop-filter:blur(18px) saturate(160%);
}
.tpl-toolbar{display:flex;gap:12px;align-items:center;justify-content:space-between;flex-wrap:wrap}
.tpl-filters{display:flex;gap:7px;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding-bottom:2px;-webkit-overflow-scrolling:touch}
.tpl-filters::-webkit-scrollbar{display:none}
.section-gallery .tpl-filters{margin-bottom:0;flex:1 1 auto;justify-content:flex-start}
.tpl-filters button{
  flex:0 0 auto;position:relative;display:inline-flex;align-items:center;gap:6px;
  padding:8px 14px;border-radius:999px;border:1px solid var(--line-2);background:rgba(255,255,255,.03);
  color:var(--text-2);font-weight:700;font-size:13px;cursor:pointer;
  transition:transform .2s var(--ease-spring),background .2s var(--ease-smooth),color .2s var(--ease-smooth),border-color .2s var(--ease-smooth),box-shadow .2s var(--ease-out);
  font-family:var(--font-body);white-space:nowrap;
}
.tpl-filters button .ic{font-size:14px;line-height:1;filter:grayscale(.2)}
.tpl-filters button .ct{font-size:10px;font-weight:700;padding:1px 6px;border-radius:999px;background:rgba(255,255,255,.08);color:var(--text-2);transition:.2s}
.tpl-filters button:hover{color:var(--text);border-color:var(--text-2);transform:translateY(-2px);background:rgba(255,255,255,.07)}
.tpl-filters button.active{
  background:linear-gradient(135deg,var(--accent),#ff7a45);color:#fff;border-color:transparent;
  box-shadow:0 10px 24px -10px var(--accent-glow),inset 0 1px 0 rgba(255,255,255,.25);
}
.tpl-filters button.active .ct{background:rgba(255,255,255,.22);color:#fff}
.tpl-filters button.filter-reset{display:none}

/* Size chips */
.tpl-sizes{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-top:10px}
.tpl-sizes .filter-label{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);font-weight:700;margin-right:4px}
.tpl-sizes button{
  flex:0 0 auto;background:rgba(255,255,255,.04);border:1px solid var(--line-2);color:var(--text-2);
  padding:6px 12px;border-radius:999px;font-weight:700;font-size:12px;cursor:pointer;
  transition:transform .2s var(--ease-spring),background .2s var(--ease-smooth),color .2s var(--ease-smooth),border-color .2s var(--ease-smooth),box-shadow .2s var(--ease-out);
  white-space:nowrap;
}
.tpl-sizes button:hover{color:var(--text);border-color:var(--text-2);transform:translateY(-2px)}
.tpl-sizes button.active{background:var(--accent-soft);color:var(--accent);border-color:var(--accent);box-shadow:0 0 0 1px var(--accent) inset,0 4px 12px -6px var(--accent-glow)}

.ed-select{
  font-family:var(--font-body);font-size:13px;font-weight:600;color:var(--text);
  background:var(--panel);border:1px solid var(--bd);border-radius:10px;padding:7px 12px;outline:none;cursor:pointer;transition:border-color .15s;
}
.ed-select:focus{border-color:var(--accent)}

/* ===== Size presets (★ 常用尺寸 popover) ===== */
.size-wrap{position:relative;display:inline-flex;align-items:center;flex-wrap:nowrap;gap:6px;white-space:nowrap;flex-shrink:0}
.size-wrap .ed-select{margin:0;min-width:0}
.size-wrap .ed-custom-size{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--text-2);white-space:nowrap;vertical-align:middle}

.tpl-count{text-align:center;color:var(--text-3);font-size:12px;font-weight:700;letter-spacing:.04em;margin-top:12px;text-transform:uppercase}
.tpl-count b{color:var(--accent);font-weight:800;font-size:13px}

/* ===== Grid (masonry via CSS columns) ===== */
/* 紧凑多列网格：列宽 240px 最多 5 列，首屏可见更多模板卡片；
   tall 模板通过 max-height 限制避免占据过多纵向空间。 */
.tpl-grid{columns:240px 5;column-gap:14px}
.tpl-grid .tpl-card{width:100%;margin:0 0 14px;break-inside:avoid;display:inline-block}
@media(max-width:1200px){.tpl-grid{columns:240px 4}}
@media(max-width:900px){.tpl-grid{columns:200px 3}}
@media(max-width:560px){
  .tpl-grid{columns:2;column-gap:10px}
  .tpl-grid .tpl-card{margin-bottom:10px}
}
.tpl-card{
  position:relative;border-radius:14px;overflow:hidden;cursor:pointer;
  border:1px solid var(--line);background:var(--panel);
  box-shadow:0 10px 28px -22px rgba(0,0,0,.7);
  transition:transform .3s var(--ease-out),box-shadow .3s var(--ease-out),border-color .3s var(--ease-out);
  /* Reserve exact height from the template ratio (--r) so the layout never shifts.
     The thumbnail is now rendered at the SAME ratio, so the whole preview shows.
     max-height caps very tall templates (skyscrapers) so they don't dominate. */
  aspect-ratio:var(--r,4/5);
  max-height:300px;
}
.tpl-card::after{content:"";position:absolute;inset:0;border-radius:14px;pointer-events:none;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.05),inset 0 1px 0 rgba(255,255,255,.06);transition:.3s var(--ease-out)}
.tpl-card:hover{transform:translateY(-6px);box-shadow:0 28px 50px -22px rgba(0,0,0,.85),0 0 0 1px var(--cat,var(--accent)) inset,0 0 28px -10px var(--cat,var(--accent));border-color:transparent}
.tpl-card:hover::after{box-shadow:inset 0 0 0 2px var(--cat,var(--accent)),inset 0 1px 0 rgba(255,255,255,.1)}
.tpl-card:hover .tpl-thumb img,.tpl-card:hover .tpl-thumb canvas{transform:scale(1.08)}
.tpl-thumb{width:100%;height:100%;position:relative;background:var(--panel-2);
  display:flex;align-items:center;justify-content:center;padding:0;overflow:hidden}
.tpl-thumb img,.tpl-thumb canvas{display:block;width:100%;height:100%;object-fit:contain;transition:transform .35s ease}
/* Top accent strip coloured by category */
.tpl-card .cat-accent{position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,transparent,var(--cat,var(--accent)),transparent);opacity:.9;z-index:3;transition:opacity .3s}
.tpl-card:hover .cat-accent{opacity:1}
/* Tag overlay: placement + size */
.tpl-tags{position:absolute;top:8px;left:8px;right:8px;display:flex;gap:5px;flex-wrap:wrap;pointer-events:none;z-index:4}
.tpl-tag{font-size:11px;font-weight:700;padding:3px 9px;border-radius:999px;
  background:rgba(12,12,22,.72);color:#fff;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);
  border:1px solid rgba(255,255,255,.14);opacity:0;transform:translateY(-6px);transition:opacity .25s var(--ease-out),transform .25s var(--ease-out)}
.tpl-card:hover .tpl-tag{opacity:1;transform:translateY(0)}
.tpl-tag.size{background:linear-gradient(135deg,var(--accent),#ff7a45);border-color:transparent;box-shadow:0 4px 12px -4px var(--accent-glow)}
.tpl-tag.cat-tag{background:rgba(12,12,22,.72)}
/* Gradient scrim + title + CTA */
.tpl-meta{position:absolute;left:0;right:0;bottom:0;padding:28px 12px 12px;
  background:linear-gradient(to top,rgba(0,0,0,.92) 14%,rgba(0,0,0,.5) 50%,transparent);
  display:flex;align-items:center;justify-content:space-between;gap:6px;z-index:3}
.tpl-meta b{font-family:var(--font-display);font-size:13px;font-weight:700;line-height:1.25;color:#fff;
  text-shadow:0 1px 4px rgba(0,0,0,.5);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.tpl-meta b mark.hl{background:linear-gradient(0deg,#ffd54a,#ffb347);color:#1a1430;border-radius:4px;padding:0 3px;box-shadow:0 1px 4px rgba(0,0,0,.3)}
.tpl-meta .use{font-size:11px;font-weight:700;color:var(--ink);background:#fff;padding:6px 12px;border-radius:999px;
  opacity:0;transform:translateY(8px) scale(.96);transition:opacity .25s var(--ease-out),transform .25s var(--ease-spring);white-space:nowrap;
  box-shadow:0 6px 16px -4px rgba(0,0,0,.4)}
.tpl-card:hover .use{opacity:1;transform:translateY(0) scale(1)}
.tpl-card .use::before{content:"⤢ ";font-weight:400}
.tpl-card.blank{display:grid;place-items:center;position:relative;
  background:linear-gradient(135deg,var(--panel) 0%,var(--panel-2) 100%);
  border:2px dashed var(--line-2);aspect-ratio:4/5;overflow:hidden}
.tpl-card.blank::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:repeating-linear-gradient(45deg,transparent,transparent 16px,rgba(255,255,255,.02) 16px,rgba(255,255,255,.02) 32px)}
.tpl-card.blank .plus{font-size:52px;color:var(--text-3);font-family:var(--font-display);font-weight:300;transition:transform .3s var(--ease-spring),color .25s;position:relative;z-index:1}
.tpl-card.blank:hover .plus{color:var(--accent);transform:scale(1.15) rotate(90deg)}
.tpl-card.blank b{position:absolute;bottom:18px;font-family:var(--font-display);color:var(--text-2);font-weight:700;font-size:14px;z-index:1}
.tpl-empty{grid-column:1/-1;columns:auto;text-align:center;color:var(--text-2);padding:60px 20px}
.tpl-empty .e-ico{font-size:48px;opacity:.5;margin-bottom:14px}
.tpl-empty p{font-size:16px}

/* Category accent colours (--cat set per card via inline style in JS) */
.tpl-card[data-cat="banner"]{--cat:#ff5e3a}
.tpl-card[data-cat="sidebar"]{--cat:#5b8def}
.tpl-card[data-cat="hero"]{--cat:#7c6cff}
.tpl-card[data-cat="card"]{--cat:#34d399}

/* ===== Pagination ===== */
.tpl-pager{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;align-items:center;margin:44px auto 8px}
.tpl-pager .pager-btn{
  padding:10px 16px;border-radius:999px;border:1px solid var(--line-2);
  background:linear-gradient(180deg,var(--panel),var(--panel-2));color:var(--text-2);
  font-weight:700;font-size:14px;cursor:pointer;
  transition:transform .2s var(--ease-spring),background .2s var(--ease-smooth),color .2s var(--ease-smooth),border-color .2s var(--ease-smooth),box-shadow .2s var(--ease-out);
  min-width:42px;font-family:var(--font-body);
}
.tpl-pager .pager-btn:hover:not(:disabled){color:var(--text);border-color:var(--text-2);transform:translateY(-2px);box-shadow:0 8px 18px -10px rgba(0,0,0,.5)}
.tpl-pager .pager-btn.active{background:linear-gradient(135deg,var(--accent),#ff7a45);color:#fff;border-color:transparent;cursor:default;box-shadow:0 10px 26px -10px var(--accent-glow),inset 0 1px 0 rgba(255,255,255,.25)}
.tpl-pager .pager-btn:disabled{opacity:.4;cursor:not-allowed}
.tpl-pager .pager-ellipsis{color:var(--text-3);padding:0 3px;font-size:14px}
@media(max-width:560px){
  .tpl-pager .pager-btn{padding:7px 11px;font-size:13px;min-width:34px}
}
/* ===== Steps ===== */
.steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:26px}
.step{
  position:relative;padding:38px 26px 30px;
  background:linear-gradient(180deg,var(--panel),var(--panel-2));
  border:1px solid var(--line);border-radius:var(--radius);
  transition:transform .28s var(--ease-out),box-shadow .28s var(--ease-out),border-color .28s var(--ease-out);
}
.step:hover{transform:translateY(-5px);border-color:var(--line-2);box-shadow:0 18px 40px -22px rgba(0,0,0,.6),inset 0 1px 0 rgba(255,255,255,.04)}
.step-n{position:absolute;top:-18px;left:26px;width:46px;height:46px;display:grid;place-items:center;
  background:linear-gradient(135deg,var(--accent),#ff7a45);color:#fff;font-family:var(--font-display);font-weight:800;font-size:20px;
  border-radius:14px;box-shadow:0 10px 24px -8px var(--accent-glow),inset 0 1px 0 rgba(255,255,255,.3)}
.step h3{font-size:21px;margin:14px 0 8px;letter-spacing:-.01em}
.step p{color:var(--text-2);line-height:1.6}

/* ===== Features ===== */
.feat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:22px}
.feat{
  position:relative;padding:30px 26px;
  background:linear-gradient(180deg,var(--panel),var(--panel-2));
  border:1px solid var(--line);border-radius:var(--radius);
  transition:transform .28s var(--ease-out),box-shadow .28s var(--ease-out),border-color .28s var(--ease-out);
}
.feat:hover{transform:translateY(-5px);border-color:var(--line-2);box-shadow:0 18px 40px -22px rgba(0,0,0,.6)}
.feat-ico{font-size:36px;margin-bottom:14px;display:inline-block;transition:transform .35s var(--ease-spring)}
.feat:hover .feat-ico{transform:scale(1.12) rotate(-4deg)}
.feat h3{font-size:20px;margin-bottom:8px;letter-spacing:-.01em}
.feat p{color:var(--text-2);line-height:1.6}

/* ===== FAQ ===== */
.faq{max-width:1200px;margin:0 auto;display:flex;flex-direction:column;gap:12px}
.faq details{
  background:linear-gradient(180deg,var(--panel),var(--panel-2));
  border:1px solid var(--line);border-radius:var(--radius-sm);padding:4px 22px;
  transition:border-color .22s var(--ease-smooth),box-shadow .22s var(--ease-smooth);
}
.faq details:hover{border-color:var(--line-2)}
.faq details[open]{border-color:var(--accent);box-shadow:0 8px 24px -14px var(--accent-glow)}
.faq summary{cursor:pointer;padding:18px 0;font-weight:700;font-family:var(--font-display);font-size:17px;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:16px}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{
  content:"+";color:var(--accent);font-size:22px;font-weight:400;
  width:28px;height:28px;display:grid;place-items:center;border-radius:8px;
  background:var(--accent-soft);transition:transform .25s var(--ease-spring),background .25s;
  flex-shrink:0;
}
.faq details[open] summary::after{content:"−";transform:rotate(180deg);background:var(--accent);color:#fff}
.faq details p{color:var(--text-2);padding:0 0 18px;line-height:1.7}

/* ===== About ===== */
.about-wrap{max-width:1200px;margin:0 auto;text-align:center;display:flex;flex-direction:column;align-items:stretch;gap:18px}
.about-wrap p{color:var(--text-2);font-size:16px;line-height:1.8}
.about-wrap .btn{margin-top:8px;align-self:center}
.about-wrap .about-hero,.about-wrap .about-mission,.about-wrap .about-tech-grid{width:100%}

/* ===== Footer ===== */
.site-footer{text-align:center;padding:64px 20px 44px;border-top:1px solid var(--line);background:var(--ink-2);position:relative}
.foot-brand{font-family:var(--font-display);font-weight:800;font-size:26px;margin-bottom:8px;letter-spacing:-.01em}
.foot-brand em{color:var(--accent);font-style:normal}
.site-footer p{color:var(--text-2)}
.foot-copy{color:var(--text-3);font-size:13px;margin-top:14px;letter-spacing:.02em}
.foot-nav{display:flex;flex-wrap:wrap;justify-content:center;gap:8px 18px;margin:18px 0}
.foot-nav a{color:var(--text-2);font-size:14px;text-decoration:none;transition:color .2s var(--ease-smooth),transform .2s var(--ease-smooth);position:relative}
.foot-nav a::after{content:"";position:absolute;left:0;bottom:-2px;width:0;height:1px;background:var(--accent);transition:width .22s var(--ease-out)}
.foot-nav a:hover{color:var(--accent)}
.foot-nav a:hover::after{width:100%}
.foot-contact{margin-top:12px}
.foot-contact a{color:var(--text-2);font-size:14px;text-decoration:none;transition:color .2s var(--ease-smooth)}
/* 移动端页脚自适应：收窄内边距、压缩导航间距与版权字号 */
@media(max-width:560px){
  .site-footer{padding:44px 16px 36px}
  .foot-nav{gap:6px 14px}
  .foot-copy{font-size:12px;padding:0 8px}
  .foot-brand{font-size:22px}
}
.foot-contact a:hover{color:var(--accent)}

/* ===== Editor ===== */
.editor-overlay{position:fixed;inset:0;z-index:200;background:var(--ink);display:none}
.editor-overlay.open{display:block}
/* editor.html 页面：编辑器遮罩默认就显示，避免加载期间闪现空白页面 */
.editor-page .editor-overlay{display:block}
.editor-shell{display:flex;flex-direction:column;height:100dvh;position:relative}
.ed-topbar{display:flex;align-items:center;gap:14px;padding:12px 18px;border-bottom:1px solid var(--line);background:linear-gradient(180deg,var(--ink-2),var(--ink));box-shadow:0 1px 0 rgba(255,255,255,.03) inset}
.ed-back{display:flex;align-items:center;gap:4px;background:transparent;border:none;color:var(--text-2);cursor:pointer;font-size:15px;font-weight:600;font-family:var(--font-body);padding:6px 12px 6px 8px;border-radius:10px;transition:background .15s,color .15s,transform .15s}
.ed-back span:first-child{font-size:22px}
.ed-back:hover{color:var(--text);background:var(--panel);transform:translateX(-2px)}
.ed-back:active{transform:translateX(0)}
.ed-title{font-family:var(--font-display);font-weight:700;font-size:16px}
.ed-top-actions{margin-left:auto;display:flex;align-items:center;flex-wrap:wrap;gap:6px 6px}
.ed-undo,.ed-redo{width:auto;height:40px;font-size:15px;line-height:1;display:inline-flex;align-items:center;gap:4px;padding:0 11px;border-radius:9px;transition:opacity .15s,background .15s,transform .15s}
.ed-undo .ico,.ed-redo .ico{font-size:18px;font-weight:700}
.ed-undo em,.ed-redo em{font-style:normal;font-size:12px;font-weight:700}
.ed-undo.on,.ed-redo.on,.btn.on{background:var(--accent);color:#fff;border-color:var(--accent);box-shadow:0 6px 18px -8px var(--accent)}
.ed-undo:disabled,.ed-redo:disabled{opacity:.35;cursor:not-allowed}
.ed-undo:not(:disabled):hover,.ed-redo:not(:disabled):hover{transform:translateY(-1px)}
.zoom-ctl{display:flex;align-items:center;gap:2px;background:var(--panel);border:1px solid var(--line-2);border-radius:10px;padding:3px 5px}
.zoom-ctl .zm{width:28px;height:30px;border:none;background:transparent;color:var(--text-2);font-size:17px;line-height:1;cursor:pointer;border-radius:7px;transition:transform .15s,background .15s}
.zoom-ctl .zm:hover{background:var(--accent);color:#fff;transform:scale(1.08)}
.zoom-ctl .zm:active{transform:scale(.95)}
.zoom-ctl .zm.fit{font-size:15px}
.zoom-ctl #edZoomLabel{min-width:42px;text-align:center;font-size:12px;font-weight:700;color:var(--text-2);font-variant-numeric:tabular-nums}
.zoom-ctl #edZoomLabel.zoom-reset{cursor:pointer;transition:color .15s,background .15s;border-radius:6px;padding:2px 4px}
.zoom-ctl #edZoomLabel.zoom-reset:hover{color:var(--accent);background:var(--accent-soft)}
.ed-custom-size input{width:64px;padding:7px 8px;border-radius:7px;border:1px solid var(--line-2);background:var(--panel);color:var(--text);font-family:var(--font-body);font-size:13px}
.ed-custom-size span{font-weight:600;white-space:nowrap}
.ed-custom-size .btn{margin-left:2px}

/* Unified download dropdown menu */
.download-menu{position:relative;display:inline-block}
.download-menu .btn-primary{display:inline-flex;align-items:center;gap:4px}
.download-menu .caret{margin-left:2px;transition:transform .2s var(--ease-smooth);opacity:.9}
.download-menu .btn-primary[aria-expanded="true"] .caret{transform:rotate(180deg)}
.download-dropdown{position:absolute;top:calc(100% + 8px);right:0;min-width:200px;padding:8px;background:linear-gradient(180deg,var(--panel),var(--ink-2));border:1px solid var(--line-2);border-radius:14px;box-shadow:var(--shadow-lg),0 0 0 1px rgba(255,255,255,.04),inset 0 1px 0 rgba(255,255,255,.08);backdrop-filter:blur(16px) saturate(1.2);-webkit-backdrop-filter:blur(16px) saturate(1.2);z-index:100;animation:pickerIn .24s var(--ease-spring)}
.download-dropdown[hidden]{display:none}
.download-scale-row{display:flex;align-items:center;gap:8px;margin-bottom:6px;padding:6px 8px;background:rgba(0,0,0,.12);border-radius:9px}
.download-scale-row label{font-size:12px;color:var(--text-2);white-space:nowrap;font-weight:600}
.download-scale-row .ed-select{flex:1;min-width:0}
.download-divider{height:1px;background:linear-gradient(90deg,transparent,var(--line-2),transparent);margin:5px 4px}
.download-item{display:block;width:100%;text-align:left;padding:10px 13px;background:transparent;border:none;border-radius:10px;color:var(--text);font-family:var(--font-body);font-size:13px;font-weight:500;cursor:pointer;transition:background .15s var(--ease-smooth),color .15s var(--ease-smooth),transform .15s var(--ease-smooth),box-shadow .15s var(--ease-smooth)}
.download-item:hover{background:var(--accent-soft);color:var(--accent);transform:translateX(2px);box-shadow:0 4px 10px -6px var(--accent-glow)}
.download-item:active{transform:translateX(0) scale(.99)}
.download-item:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}

.ed-body{flex:1;display:flex;min-height:0}
.ed-tools{display:flex;flex-direction:column;gap:4px;padding:14px 6px;background:var(--ink-2);border-right:1px solid var(--line);width:82px;flex-shrink:0;overflow-y:auto}
.tool-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:12px 4px;border-radius:11px;border:1px solid transparent;background:transparent;color:var(--text-2);cursor:pointer;transition:transform .18s var(--ease-spring),background .18s var(--ease-smooth),color .18s var(--ease-smooth),border-color .18s var(--ease-smooth),box-shadow .18s var(--ease-out);font-family:var(--font-body);position:relative}
.tool-btn:hover{background:var(--panel);color:var(--text);transform:translateY(-2px);box-shadow:0 6px 16px -8px rgba(0,0,0,.4);border-color:var(--line)}
.tool-btn:active{transform:translateY(0)}
.tool-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.tool-btn .ti{width:21px;height:22px;display:block;stroke-width:2;flex-shrink:0;transition:transform .18s var(--ease-spring)}
.tool-btn:hover .ti{transform:scale(1.12)}
.tool-btn em{font-style:normal;font-size:11px;font-weight:600;letter-spacing:.01em}
.tool-btn.on{background:linear-gradient(135deg,var(--accent-soft),rgba(255,179,71,.08));color:var(--accent);border-color:var(--accent);box-shadow:0 4px 14px -6px var(--accent-glow),inset 0 1px 0 rgba(255,255,255,.06);transform:translateY(-1px)}
.tool-btn.on svg{filter:drop-shadow(0 0 5px var(--accent-glow))}
.tool-btn.on .ti{transform:scale(1.08)}

/* 左侧工具栏底部图片广告位 */
.ed-tools-ads{margin-top:auto;padding-top:10px;display:flex;flex-direction:column;gap:8px;flex-shrink:0}
.ed-ad-side{display:block;border-radius:8px;overflow:hidden;border:1px solid var(--line-2);background:var(--panel);transition:transform .18s var(--ease-spring),box-shadow .18s var(--ease-smooth),border-color .18s}
.ed-ad-side:hover{transform:translateY(-2px);border-color:var(--accent);box-shadow:0 6px 16px -6px var(--accent-glow)}
.ed-ad-side img{display:block;width:100%;height:auto}

.ed-stage{flex:1;display:flex;padding:26px;overflow:auto;background-color:var(--ink);position:relative;
  background-image:radial-gradient(circle at 50% 0,rgba(124,108,255,.06),transparent 60%),radial-gradient(circle at 50% 100%,rgba(255,94,58,.04),transparent 60%),radial-gradient(var(--line) 1px,transparent 1px);background-size:100% 100%,100% 100%,24px 24px;
  outline:2px solid transparent;outline-offset:-4px;transition:outline-color .15s}
.ed-stage.drag-over{outline:2px dashed var(--accent);outline-offset:-4px}
.canvas-wrap{box-shadow:0 30px 80px -30px rgba(0,0,0,.5),0 0 0 1px var(--line);border-radius:0;overflow:hidden;background:#fff;position:relative;margin:auto;transition:box-shadow .2s,border-radius .15s}
.canvas-wrap:hover{box-shadow:0 34px 90px -30px rgba(0,0,0,.55),0 0 0 1px var(--line-2)}
.canvas-wrap canvas{display:block}
/* 透明背景画布：显示棋盘格以提示透明区域 */
.canvas-wrap.is-transparent{background-image:linear-gradient(45deg,#c8c8d0 25%,transparent 25%,transparent 75%,#c8c8d0 75%),linear-gradient(45deg,#c8c8d0 25%,transparent 25%,transparent 75%,#c8c8d0 75%);background-size:20px 20px;background-position:0 0,10px 10px;background-color:#fff}
.ed-grid{position:absolute;top:0;left:0;pointer-events:none;z-index:2}

.ed-props{width:290px;flex-shrink:0;background:var(--ink);border-left:1px solid var(--line);padding:14px;overflow-y:auto;scroll-behavior:smooth}
.ed-props::-webkit-scrollbar{width:6px}
.ed-props::-webkit-scrollbar-track{background:transparent}
.ed-props::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:4px}
.ed-props::-webkit-scrollbar-thumb:hover{background:var(--text-3)}
.props-empty{color:var(--text-3);font-size:14px;text-align:center;margin-top:48px;line-height:1.8;padding:0 12px}
.props-empty::before{content:"🎨";display:block;font-size:36px;margin-bottom:14px;opacity:.4;filter:grayscale(.3)}
.prop-row{display:flex;align-items:center;gap:10px;margin-bottom:0}
.prop-row > label { font-size: 13px; color: var(--text-2); min-width: 56px; flex-shrink: 0; }
.prop-row > input[type=text], .prop-row > input[type=number], .prop-row > select, .prop-row > textarea { flex: 1; min-width: 0; }
.prop-row > input[type=range] { flex: 1; min-width: 0; accent-color: var(--accent); }
.swatches{display:flex;flex-wrap:wrap;gap:6px}
.swatch{width:24px;height:24px;border-radius:7px;cursor:pointer;border:2px solid transparent;transition:transform .15s var(--ease-spring),box-shadow .15s,border-color .15s}
.swatch:hover{transform:scale(1.18);box-shadow:0 4px 12px -2px rgba(0,0,0,.4)}
.swatch:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.swatch.is-active{border-color:var(--text);box-shadow:0 0 0 2px var(--accent-soft),0 4px 12px -2px rgba(0,0,0,.4)}
.font-btns,.align-btns{display:flex;gap:4px;flex-wrap:wrap}
/* 字体样式按钮：B/I/U/S 字母样式 */
.style-btns .style-btn{font-family:Georgia,'Times New Roman',serif;font-size:15px;font-weight:600;padding:7px 0;min-width:0}
.style-btns .style-btn[data-style="bold"]{font-weight:800}
.style-btns .style-btn[data-style="italic"]{font-style:italic}
.style-btns .style-btn[data-style="underline"]{text-decoration:underline}
.style-btns .style-btn[data-style="strike"]{text-decoration:line-through}
.style-btns .style-btn.on{background:var(--accent-soft);color:var(--accent);border-color:var(--accent)}
.dist-btns{margin-top:6px}
.canvas-align-btns{flex:1;width:100%}
.canvas-align-btns .mini-btn{flex:1;min-width:0;padding:8px 4px;font-size:14px}
.mini-btn{flex:1;min-width:38px;background:var(--ink-2);border:1px solid var(--line-2);color:var(--text-2);border-radius:8px;padding:7px 8px;cursor:pointer;font-size:13px;transition:transform .15s var(--ease-spring),background .15s var(--ease-smooth),border-color .15s,box-shadow .15s;font-family:var(--font-body)}
.mini-btn:hover{background:var(--panel-2);color:var(--text);border-color:var(--text-3);transform:translateY(-1px);box-shadow:0 4px 10px -4px rgba(0,0,0,.3)}
.mini-btn:active{transform:translateY(0)}
.mini-btn.on{background:linear-gradient(135deg,var(--accent),#ff7a45);border-color:var(--accent);box-shadow:0 4px 12px -4px var(--accent-glow)}
.prop-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.prop-actions .mini-btn{flex:1 1 calc(33.333% - 4px);min-width:0;padding:8px 4px;font-size:12px}
.prop-actions .mini-btn.danger{flex:1 1 100%}
.prop-actions .mini-btn.danger:hover{background:#e5484d;border-color:#e5484d}

.ed-props-fab{position:fixed;right:16px;bottom:16px;z-index:210;width:54px;height:54px;border-radius:50%;background:linear-gradient(135deg,var(--accent),#ff7a45);color:#fff;border:none;font-size:22px;box-shadow:0 12px 30px -8px var(--accent);cursor:pointer;display:none;transition:transform .15s,box-shadow .15s}
.ed-props-fab:hover{transform:scale(1.08) rotate(10deg);box-shadow:0 16px 36px -8px var(--accent)}
.ed-props-fab:active{transform:scale(.95)}
@media(max-width:820px){.ed-props-fab:not([hidden]){display:grid;place-items:center;z-index:220}}

/* ===== Picker ===== */
.picker-overlay{position:fixed;inset:0;z-index:300;background:rgba(8,8,16,.72);backdrop-filter:blur(12px) saturate(1.2);-webkit-backdrop-filter:blur(12px) saturate(1.2);display:none;place-items:center;padding:20px;animation:fadeIn .28s var(--ease-smooth)}
.picker-overlay.open{display:grid}
.picker-box{
  width:min(640px,100%);max-height:84dvh;
  background:linear-gradient(180deg,var(--panel),var(--ink-2));
  border:1px solid var(--line-2);border-radius:20px;
  display:flex;flex-direction:column;overflow:hidden;
  box-shadow:var(--shadow-lg),0 0 0 1px rgba(255,255,255,.04),inset 0 1px 0 rgba(255,255,255,.08);
  animation:pickerIn .32s var(--ease-spring);
}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes pickerIn{from{opacity:0;transform:translateY(14px) scale(.94) translateZ(0)}to{opacity:1;transform:translateY(0) scale(1) translateZ(0)}}
.picker-head{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid var(--line);font-family:var(--font-display);font-weight:700;font-size:17px;letter-spacing:-.01em;background:linear-gradient(180deg,rgba(255,255,255,.04),transparent)}
.picker-head button{background:transparent;border:none;color:var(--text-2);font-size:18px;cursor:pointer;transition:color .2s,background .2s var(--ease-smooth),transform .2s var(--ease-spring);width:34px;height:34px;border-radius:10px;display:grid;place-items:center}
.picker-head button:hover{color:var(--text);background:var(--panel-2);transform:rotate(90deg) scale(1.05)}
.picker-body{padding:20px 22px;overflow-y:auto}
.icon-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px}
.icon-cell{aspect-ratio:1;display:grid;place-items:center;font-size:26px;font-family:'Segoe UI Emoji','Apple Color Emoji','Noto Color Emoji','Noto Sans Symbols','Segoe UI Symbol',emoji,sans-serif;background:linear-gradient(180deg,var(--panel-2),var(--panel));border:1px solid var(--line);border-radius:12px;cursor:pointer;transition:transform .2s var(--ease-spring),background .2s var(--ease-smooth),border-color .2s var(--ease-smooth),box-shadow .2s var(--ease-out)}
.icon-cell:hover{background:var(--accent-soft);border-color:var(--accent);transform:translateY(-3px) scale(1.04);box-shadow:0 8px 16px -6px var(--accent-glow)}
.shape-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:12px}
.shape-cell{aspect-ratio:1;display:grid;place-items:center;background:linear-gradient(180deg,var(--panel-2),var(--panel));border:1px solid var(--line);border-radius:12px;cursor:pointer;transition:transform .2s var(--ease-spring),background .2s var(--ease-smooth),border-color .2s var(--ease-smooth),box-shadow .2s var(--ease-out)}
.shape-cell:hover{border-color:var(--accent);background:var(--accent-soft);transform:translateY(-3px) scale(1.04);box-shadow:0 8px 16px -6px var(--accent-glow)}
.shape-cell svg{width:40px;height:40px;fill:#fff;transition:transform .25s var(--ease-spring)}
.shape-cell:hover svg{transform:scale(1.1)}
/* Lucide 描边类图标：覆盖 fill:#fff，使用 stroke 描边渲染 */
.lucide-cell svg{fill:none;stroke:var(--text);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.lucide-cell:hover svg{stroke:var(--accent)}
.shape-icon-cell{font-size:24px}
.picker-section-label{font-size:12px;font-weight:700;color:var(--text-2);text-transform:uppercase;letter-spacing:.06em;margin:18px 0 10px;padding:0 2px}
/* Gradient grid */
.gradient-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(38px,1fr));gap:8px}
.gradient-cell{aspect-ratio:1;border-radius:8px;cursor:pointer;border:2px solid transparent;transition:transform .2s var(--ease-spring),border-color .2s var(--ease-smooth),box-shadow .2s var(--ease-out)}
.gradient-cell:hover{transform:scale(1.18) translateY(-2px);border-color:var(--text-2);box-shadow:0 6px 14px -4px rgba(0,0,0,.4);z-index:2;position:relative}
/* 渐变块容器：纵向堆叠网格 + 自定义行 + 角度行 */
.gradient-block{display:flex;flex-direction:column;gap:10px}
.gradient-block .gradient-grid{margin:0}
.gradient-custom{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;margin:0}
.gradient-custom > label{font-size:13px;color:var(--text-2);min-width:56px;flex-shrink:0}
.grad-custom-wrap{display:flex;align-items:center;gap:6px;flex:1;min-width:0}
.grad-custom-wrap input[type=color]{width:32px;height:28px;border:1px solid var(--border);border-radius:6px;cursor:pointer;background:none;padding:0;flex-shrink:0}
.grad-custom-wrap .mini-btn{padding:5px 10px;font-size:12px;flex-shrink:0;white-space:nowrap}
.gradient-block .prop-row-range{margin:0}
/* 噪点效果控制 */
.noise-ctl{display:flex;align-items:center;gap:8px}
.noise-ctl input[type=range]{flex:1}
/* 形状面板缩略图修复 - 已合并上方 */
/* 版权提醒 - 编辑器（ed-copyright-notice 已移除） */
/* 版权提醒 - 首页 */
.copyright-notice{
  padding:clamp(40px,6vw,70px) clamp(16px,4vw,44px);
  background:linear-gradient(180deg,var(--panel),var(--panel-2));
  border-top:1px solid var(--border);border-bottom:1px solid var(--border);
  position:relative;
}
.copyright-notice .cn-inner{max-width:1200px;margin:0 auto;text-align:center}
.copyright-notice h3{font-size:18px;font-weight:700;color:var(--text-1);margin-bottom:12px;letter-spacing:-.01em}
.copyright-notice p{font-size:14px;color:var(--text-2);line-height:1.7;margin-bottom:6px}

/* ===== Toast (统一弹窗风格) ===== */
.toast{
  position:fixed;left:50%;bottom:40px;transform:translate(-50%,24px);z-index:430;
  display:inline-flex;align-items:center;gap:11px;
  background:linear-gradient(180deg,var(--panel),var(--ink-2));color:var(--text);
  border:1px solid var(--line-2);padding:14px 26px;border-radius:14px;
  font-size:14px;font-weight:600;letter-spacing:.01em;opacity:0;pointer-events:none;
  transition:opacity .3s var(--ease-smooth),transform .35s var(--ease-spring);
  box-shadow:var(--shadow-lg),0 0 0 1px rgba(255,255,255,.04),inset 0 1px 0 rgba(255,255,255,.08);
  backdrop-filter:blur(16px) saturate(1.2);-webkit-backdrop-filter:blur(16px) saturate(1.2);
  max-width:90vw;
}
.toast::before{content:"";width:8px;height:8px;border-radius:50%;background:linear-gradient(135deg,var(--accent),#ffb347);box-shadow:0 0 0 4px rgba(255,94,58,.12),0 0 12px var(--accent-glow);flex-shrink:0;animation:pulseDot 1.6s var(--ease-smooth) infinite}
@keyframes pulseDot{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.25);opacity:.75}}
.toast.show{opacity:1;transform:translate(-50%,0);animation:toastIn .4s var(--ease-spring)}
@keyframes toastIn{from{opacity:0;transform:translate(-50%,28px) scale(.92)}60%{transform:translate(-50%,-4px) scale(1.02)}to{opacity:1;transform:translate(-50%,0) scale(1)}}
.toast.error::before{background:var(--danger);box-shadow:0 0 0 4px rgba(255,94,58,.14),0 0 12px rgba(255,94,58,.6)}
.toast.success::before{background:var(--ok);box-shadow:0 0 0 4px rgba(52,211,153,.14),0 0 12px rgba(52,211,153,.6)}
.toast.error{border-color:rgba(255,94,58,.38);background:linear-gradient(180deg,rgba(255,94,58,.08),var(--ink-2))}
.toast.success{border-color:rgba(52,211,153,.38);background:linear-gradient(180deg,rgba(52,211,153,.08),var(--ink-2))}

/* ===== Confirm dialog (统一弹窗风格 - 替代原生 confirm) ===== */
.confirm-overlay{position:fixed;inset:0;z-index:380;background:rgba(8,8,16,.72);backdrop-filter:blur(12px) saturate(1.2);-webkit-backdrop-filter:blur(12px) saturate(1.2);display:none;place-items:center;padding:20px;animation:fadeIn .24s var(--ease-smooth)}
.confirm-overlay.open{display:grid}
.confirm-box{
  width:min(400px,100%);
  background:linear-gradient(180deg,var(--panel),var(--ink-2));
  border:1px solid var(--line-2);border-radius:18px;
  padding:26px 26px 22px;
  box-shadow:var(--shadow-lg),0 0 0 1px rgba(255,255,255,.04),inset 0 1px 0 rgba(255,255,255,.08);
  backdrop-filter:blur(16px) saturate(1.2);-webkit-backdrop-filter:blur(16px) saturate(1.2);
  animation:confirmIn .32s var(--ease-spring);
  display:flex;flex-direction:column;gap:18px;
}
@keyframes confirmIn{from{opacity:0;transform:translateY(16px) scale(.92)}to{opacity:1;transform:translateY(0) scale(1)}}
.confirm-icon{
  width:52px;height:52px;border-radius:14px;
  display:grid;place-items:center;flex-shrink:0;
  background:linear-gradient(135deg,rgba(255,179,71,.18),rgba(255,94,58,.14));
  color:var(--warn);border:1px solid rgba(255,179,71,.28);
  box-shadow:0 8px 20px -8px rgba(255,179,71,.3),inset 0 1px 0 rgba(255,255,255,.1);
}
.confirm-box.danger .confirm-icon{
  background:linear-gradient(135deg,rgba(255,94,58,.18),rgba(229,72,77,.14));
  color:var(--danger);border-color:rgba(255,94,58,.32);
  box-shadow:0 8px 20px -8px rgba(255,94,58,.3),inset 0 1px 0 rgba(255,255,255,.1);
}
.confirm-body{display:flex;flex-direction:column;gap:6px;min-width:0}
.confirm-title{font-family:var(--font-display);font-size:17px;font-weight:700;color:var(--text);letter-spacing:-.01em;line-height:1.3}
.confirm-msg{font-size:14px;color:var(--text-2);line-height:1.6;margin:0}
.confirm-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:2px}
.confirm-actions .btn{min-width:88px}

/* ===== 统一颜色选择弹窗 ===== */
.cp-overlay{position:fixed;inset:0;z-index:390;background:rgba(8,8,16,.78);backdrop-filter:blur(16px) saturate(1.3);-webkit-backdrop-filter:blur(16px) saturate(1.3);display:none;place-items:center;padding:20px;animation:fadeIn .26s var(--ease-smooth)}
.cp-overlay.open{display:grid}
.cp-box{
  width:min(580px,100%);max-height:calc(100vh - 40px);
  background:linear-gradient(180deg,var(--panel) 0%,var(--ink-2) 100%);
  border:1px solid var(--line-2);border-radius:20px;
  box-shadow:var(--shadow-lg),0 0 0 1px rgba(255,255,255,.05),inset 0 1px 0 rgba(255,255,255,.1);
  backdrop-filter:blur(20px) saturate(1.3);-webkit-backdrop-filter:blur(20px) saturate(1.3);
  animation:confirmIn .34s var(--ease-spring);
  display:flex;flex-direction:column;overflow:hidden;
}
.cp-head{display:flex;align-items:center;justify-content:space-between;padding:18px 22px 14px;border-bottom:1px solid var(--line);position:relative}
.cp-title{font-family:var(--font-display);font-size:17px;font-weight:700;color:var(--text);letter-spacing:-.01em;display:flex;align-items:center;gap:8px}
.cp-title::before{content:"";width:4px;height:18px;border-radius:2px;background:linear-gradient(180deg,var(--accent),var(--accent-2));box-shadow:0 0 10px var(--accent-glow)}
.cp-close{width:32px;height:32px;border-radius:9px;border:1px solid transparent;background:transparent;color:var(--text-2);cursor:pointer;font-size:15px;display:grid;place-items:center;transition:all .2s var(--ease-spring)}
.cp-close:hover{background:rgba(255,94,58,.12);color:var(--accent);border-color:var(--accent-soft);transform:rotate(90deg)}
.cp-tabs{display:flex;gap:6px;padding:12px 22px 0;border-bottom:1px solid var(--line)}
.cp-tab{padding:9px 20px;border:1px solid transparent;border-radius:11px 11px 0 0;background:transparent;color:var(--text-2);font-size:13px;font-weight:600;cursor:pointer;transition:all .2s var(--ease-smooth);font-family:var(--font-display);position:relative}
.cp-tab:hover{color:var(--text);background:rgba(255,255,255,.04)}
.cp-tab.is-active{color:var(--text);background:var(--panel-2);border-color:var(--line-2);border-bottom-color:var(--panel);margin-bottom:-1px}
.cp-tab.is-active::after{content:"";position:absolute;left:50%;bottom:-1px;transform:translateX(-50%);width:60%;height:2px;background:linear-gradient(90deg,var(--accent),var(--accent-2));border-radius:2px;box-shadow:0 0 8px var(--accent-glow)}
.cp-body{flex:1;overflow-y:auto;padding:18px 22px;min-height:240px;max-height:48vh;scrollbar-width:thin;scrollbar-color:var(--line-2) transparent}
.cp-body::-webkit-scrollbar{width:8px}
.cp-body::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:6px;border:2px solid transparent;background-clip:padding-box}
.cp-body::-webkit-scrollbar-thumb:hover{background:var(--text-3);background-clip:padding-box}
.cp-foot{display:flex;align-items:center;gap:12px;padding:14px 22px 18px;border-top:1px solid var(--line);background:linear-gradient(180deg,transparent,rgba(0,0,0,.18))}
.cp-preview{width:38px;height:38px;border-radius:10px;border:1px solid var(--line-2);box-shadow:inset 0 1px 0 rgba(255,255,255,.12),0 2px 8px -2px rgba(0,0,0,.4);flex-shrink:0;background-image:linear-gradient(45deg,var(--line) 25%,transparent 25%,transparent 75%,var(--line) 75%),linear-gradient(45deg,var(--line) 25%,transparent 25%,transparent 75%,var(--line) 75%);background-size:10px 10px;background-position:0 0,5px 5px;transition:transform .2s var(--ease-spring)}
.cp-preview:hover{transform:scale(1.08)}
.cp-preview-inner{width:100%;height:100%;border-radius:9px}
.cp-custom{display:flex;align-items:center;gap:8px;flex:1;min-width:0}
.cp-custom input[type=color]{width:36px;height:36px;border:1px solid var(--line-2);border-radius:9px;cursor:pointer;background:none;padding:0;flex-shrink:0;transition:transform .2s var(--ease-spring),border-color .2s}
.cp-custom input[type=color]:hover{transform:scale(1.08);border-color:var(--accent)}
.cp-custom input[type=text]{flex:1;min-width:0;background:var(--ink);border:1px solid var(--line-2);border-radius:9px;padding:9px 12px;font-family:var(--font-mono);font-size:13px;color:var(--text);text-transform:uppercase;outline:none;transition:all .2s var(--ease-smooth)}
.cp-custom input[type=text]:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.cp-foot .btn{margin-left:auto;min-width:84px}
/* 透明色特殊样式 */
.cp-transparent{display:flex;align-items:center;gap:10px;padding:10px 12px;margin-bottom:14px;border-radius:11px;border:1px solid var(--line-2);background:var(--panel-2);cursor:pointer;transition:all .2s var(--ease-spring)}
.cp-transparent:hover{border-color:var(--accent);background:rgba(255,94,58,.06);transform:translateY(-1px)}
.cp-transparent.is-active{border-color:var(--accent);background:var(--accent-soft);box-shadow:0 0 0 2px var(--accent-soft)}
.cp-transparent-chip{width:28px;height:28px;border-radius:7px;flex-shrink:0;background-image:linear-gradient(45deg,#aaa 25%,transparent 25%,transparent 75%,#aaa 75%),linear-gradient(45deg,#aaa 25%,transparent 25%,transparent 75%,#aaa 75%);background-size:8px 8px;background-position:0 0,4px 4px;background-color:#fff;position:relative;overflow:hidden}
.cp-transparent-chip::after{content:"";position:absolute;top:50%;left:-2px;right:-2px;height:2px;background:var(--danger);transform:rotate(-45deg);transform-origin:center}
.cp-transparent-text{flex:1;font-size:13px;font-weight:600;color:var(--text)}
.cp-transparent-hint{font-size:11px;color:var(--text-3);font-weight:400}
/* 纯色分组 */
.cp-group{margin-bottom:16px}
.cp-group:last-child{margin-bottom:0}
.cp-group-title{font-size:11px;font-weight:700;color:var(--text-3);text-transform:uppercase;letter-spacing:.1em;margin-bottom:10px;display:flex;align-items:center;gap:8px}
.cp-group-title::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--line),transparent)}
.cp-swatches{display:grid;grid-template-columns:repeat(auto-fill,minmax(30px,1fr));gap:7px}
.cp-swatch{aspect-ratio:1;border-radius:8px;cursor:pointer;border:2px solid transparent;transition:transform .18s var(--ease-spring),box-shadow .18s,border-color .18s;position:relative;box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}
.cp-swatch:hover{transform:scale(1.22) translateY(-2px);box-shadow:0 6px 14px -2px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.2);z-index:3}
.cp-swatch.is-active{border-color:var(--text);box-shadow:0 0 0 2px var(--accent),0 6px 14px -2px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.2);transform:scale(1.15)}
.cp-swatch.is-light{border-color:var(--line-2)}
/* 渐变网格 */
.cp-grad-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(52px,1fr));gap:9px}
.cp-grad{aspect-ratio:1;border-radius:10px;cursor:pointer;border:2px solid transparent;transition:transform .2s var(--ease-spring),border-color .2s,box-shadow .2s;position:relative;box-shadow:inset 0 1px 0 rgba(255,255,255,.12),0 2px 6px -2px rgba(0,0,0,.3)}
.cp-grad:hover{transform:scale(1.18) translateY(-3px);box-shadow:0 8px 18px -4px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.2);z-index:3}
.cp-grad.is-active{border-color:var(--text);box-shadow:0 0 0 2px var(--accent),0 8px 18px -4px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.2);transform:scale(1.12)}
/* 渐变自定义色与角度 */
.cp-grad-custom{margin-top:16px;padding-top:16px;border-top:1px dashed var(--line-2)}
.cp-grad-row{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.cp-grad-row:last-child{margin-bottom:0}
.cp-grad-row label{font-size:12px;color:var(--text-2);min-width:56px;flex-shrink:0;font-weight:600}
.cp-grad-row input[type=color]{width:34px;height:30px;border:1px solid var(--line-2);border-radius:7px;cursor:pointer;background:none;padding:0;flex-shrink:0;transition:transform .2s var(--ease-spring),border-color .2s}
.cp-grad-row input[type=color]:hover{transform:scale(1.1);border-color:var(--accent)}
.cp-grad-angle{display:flex;align-items:center;gap:10px;flex:1}
.cp-grad-angle input[type=range]{flex:1}
.cp-grad-angle .prop-val{font-size:12px;color:var(--text);min-width:42px;text-align:right;font-family:var(--font-mono);font-weight:600;padding:3px 7px;background:var(--panel-2);border-radius:6px;border:1px solid var(--line)}
/* 响应式 */
@media(max-width:600px){
  .cp-overlay{padding:12px}
  .cp-box{border-radius:16px}
  .cp-head{padding:14px 16px 10px}
  .cp-tabs{padding:10px 16px 0}
  .cp-body{padding:14px 16px;min-height:200px;max-height:50vh}
  .cp-foot{padding:12px 16px 14px;flex-wrap:wrap}
  .cp-foot .btn{flex:1}
  .cp-swatches{grid-template-columns:repeat(auto-fill,minmax(34px,1fr));gap:6px}
  .cp-grad-grid{grid-template-columns:repeat(auto-fill,minmax(48px,1fr));gap:7px}
}

/* ===== Responsive editor ===== */
@media(max-width:820px){
.mobile-menu:not([hidden]){display:flex}
  .site-nav{display:none}
  .nav-toggle{display:flex}
  .header-actions .btn{display:none}
  .ed-tools{flex-direction:row;width:100%;height:auto;order:3;border-right:none;border-top:1px solid var(--line);overflow-x:auto;padding:8px}
  .tool-btn{min-width:64px;flex-shrink:0}
  .ed-tools-ads{display:none}
  .ed-body{flex-direction:column}
  .ed-stage{padding:14px;order:1}
  .ed-props{position:fixed;left:0;right:0;bottom:0;top:auto;width:100%;max-height:64dvh;transform:translateY(calc(100% + 20px));transition:transform .3s var(--ease-spring);z-index:215;border-left:none;border-top:1px solid var(--line-2);border-radius:18px 18px 0 0;box-shadow:0 -4px 20px rgba(0,0,0,.3)}
  .ed-props.open{transform:translateY(0)}
  /* 移动端属性面板打开时隐藏 FAB，避免遮挡面板内容 */
  .ed-props.open ~ .ed-props-fab{display:none}
}

/* ===== Editor bottom bar ===== */
.ed-bottombar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:7px 18px;background:linear-gradient(180deg,var(--ink),var(--ink-2));border-top:1px solid var(--line-2);font-size:12px;color:var(--text-2);min-height:34px;flex-shrink:0}
.ed-bb-left,.ed-bb-center,.ed-bb-right{display:flex;align-items:center;gap:10px}
.ed-bb-center{flex:1;justify-content:center}
.ed-bb-info{white-space:nowrap;font-variant-numeric:tabular-nums;font-weight:600;font-family:var(--font-mono)}
.ed-bb-hint{display:inline-flex;align-items:center;gap:3px;opacity:.6;transition:opacity .15s}
.ed-bb-hint:hover{opacity:1}
.ed-bb-hint kbd{display:inline-block;padding:2px 6px;border:1px solid var(--line-2);border-radius:5px;font-size:10px;font-family:var(--font-mono,monospace);background:var(--panel);color:var(--fg);box-shadow:0 1px 0 var(--line-2)}
.ed-bb-ads{display:flex;align-items:center;justify-content:center;gap:18px;flex-wrap:wrap}
.ed-bb-ads a{color:var(--text-2);text-decoration:none;font-size:12px;font-weight:600;white-space:nowrap;transition:color .15s}
.ed-bb-ads a:hover{color:var(--accent);text-decoration:underline}
@media(max-width:820px){.ed-bb-ads{gap:10px;font-size:11px}.ed-bottombar{padding:4px 10px}
  .ed-top-actions .ed-select{max-width:110px;font-size:12px}
  .ed-title{display:none}
  .ed-top-actions{overflow-x:auto;max-width:100%;padding-bottom:4px;scrollbar-width:thin;gap:5px;flex-wrap:nowrap}
  .ed-top-actions::-webkit-scrollbar{height:5px}
  .ed-top-actions::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:3px}
  .ed-top-actions .btn-sm{padding:6px 9px;white-space:nowrap;font-size:12px;gap:3px}
  .ed-top-actions .btn em{display:none}
  .ed-top-actions .btn .ico{font-size:16px}
  .ed-top-actions::before{display:none}
  .zoom-ctl span#edZoomLabel{min-width:34px;text-align:center;font-size:11px}
  .zoom-ctl .zm{width:24px;height:26px}
  .download-dropdown{min-width:160px;padding:8px}
  .download-item{padding:8px 10px;font-size:12px}
  .download-scale-row{gap:6px;margin-bottom:6px}
  .download-scale-row label{font-size:11px}
  .ed-layers{max-width:220px;width:220px}
  .ed-layers-search{padding:6px 8px}
  .ed-layers-search-input{font-size:11px;padding:5px 8px 5px 24px}
  .ed-layers-toolbar{padding:6px 8px;gap:3px}
  .ed-layer-tool{padding:6px 2px;font-size:10px}
  .ed-layer{padding:7px 8px;gap:6px}
  .ed-layer-icon{width:20px;height:20px}
  .ed-layer-name{font-size:12px}
  .ed-layer-btn{width:20px;height:20px}
  .ed-layer-acts{opacity:1}
  .crop-bar{flex-wrap:wrap;gap:8px;padding:8px 10px}
  .crop-bar .crop-size{font-size:11px}
  .ed-loading-spin{width:28px;height:28px}
  .ed-topbar{padding:8px 10px;gap:8px}
  .ed-back span:last-child{display:none}
  .ed-back span:first-child{font-size:26px}
  .ed-custom-size input{width:52px;padding:6px 7px;font-size:12px}
}
@media(max-width:560px){
  .header-actions .btn{display:none}
  .ed-bb-ads{display:none}
  .hero-cta .btn{flex:1}
  .ed-top-actions #edDownCopy,
  .ed-top-actions #edDownSvg,
  .ed-top-actions #edHistory,
  .ed-top-actions #edDownJpg{display:none}
  .ed-props{max-height:55dvh}
  .tpl-controls{top:56px;padding:10px 12px;margin-bottom:14px}
  .tpl-toolbar{gap:8px}
  .tpl-filters button{padding:6px 11px;font-size:12px}
  .tpl-grid{columns:2;column-gap:10px}
  .tpl-grid .tpl-card{margin-bottom:10px}
  .tpl-meta b{font-size:12px}
}

/* ===== Placements (homepage) ===== */
.place-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:22px;margin:0 auto}
.place-card{
  background:linear-gradient(180deg,var(--panel),var(--panel-2));
  border:1px solid var(--line);border-radius:18px;padding:24px;display:flex;flex-direction:column;gap:10px;
  transition:transform .3s var(--ease-out),box-shadow .3s var(--ease-out),border-color .3s var(--ease-out);
}
.place-card:hover{transform:translateY(-6px);border-color:var(--line-2);box-shadow:0 22px 48px -22px rgba(0,0,0,.6),0 0 24px -10px var(--accent-glow)}
.place-visual{height:96px;border-radius:12px;margin-bottom:6px;position:relative;overflow:hidden;background:var(--panel-2)}
.pv-banner span{position:absolute;left:8px;right:8px;height:14px;border-radius:4px;background:linear-gradient(90deg,var(--accent),#ff5e3a)}
.pv-banner span:nth-child(1){top:18px}.pv-banner span:nth-child(2){top:42px;background:linear-gradient(90deg,#ffb347,#5b8def)}.pv-banner span:nth-child(3){top:66px;background:linear-gradient(90deg,#34d399,#7c6cff)}
.pv-sidebar{display:flex;gap:8px;padding:10px}
.pv-sidebar span{width:18px;border-radius:4px}.pv-sidebar span:nth-child(1){background:linear-gradient(180deg,var(--accent),#5b8def)}.pv-sidebar span:nth-child(2){flex:1;background:var(--panel-3);border-radius:8px}
.pv-hero span{position:absolute;inset:14px 18px;border-radius:10px;background:linear-gradient(120deg,#7c6cff,#ff5e3a)}
.pv-card{display:flex;gap:8px;padding:12px}
.pv-card span:nth-child(1){flex:1;border-radius:8px;background:linear-gradient(135deg,#5b8def,#34d399)}.pv-card span:nth-child(2){width:40px;border-radius:8px;background:linear-gradient(135deg,#ff5e3a,#ffb347)}
.place-card h3{font-size:18px;font-weight:800;letter-spacing:-.01em}
.place-card p{color:var(--text-2);font-size:13.5px;line-height:1.5;flex:1}
.place-go{color:var(--accent);font-weight:700;font-size:14px;display:inline-flex;align-items:center;gap:4px;transition:gap .22s var(--ease-out)}
.place-card:hover .place-go{gap:8px}
.place-go::after{content:"→";font-weight:600;transition:transform .22s var(--ease-out)}
.place-card:hover .place-go::after{transform:translateX(2px)}
@media(max-width:900px){.place-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:540px){.place-grid{grid-template-columns:1fr}}

/* "浏览全部模板" 按钮容器 */
.tpl-more{text-align:center;margin-top:36px}

/* ===== Templates page hero ===== */
.page-hero{
  position:relative;padding:clamp(40px,5.5vw,64px) clamp(16px,4vw,44px) clamp(24px,3vw,36px);
  max-width:1200px;margin:0 auto;text-align:center;overflow:hidden;
}
.page-hero::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(ellipse 60% 80% at 50% 0%,rgba(255,94,58,.10),transparent 70%),
    radial-gradient(ellipse 50% 60% at 50% 100%,rgba(124,108,255,.06),transparent 70%);
}
.page-hero::after{
  content:"";position:absolute;inset:0;pointer-events:none;opacity:.35;
  background-image:radial-gradient(var(--line) 1px,transparent 1px);background-size:32px 32px;
  mask-image:radial-gradient(ellipse at 50% 50%,#000 0%,transparent 60%);
  -webkit-mask-image:radial-gradient(ellipse at 50% 50%,#000 0%,transparent 60%);
}
.page-hero>*{position:relative;z-index:1}
.page-hero h1{font-size:clamp(30px,5vw,52px);font-weight:800;margin-bottom:14px;line-height:1.08;letter-spacing:-.025em}
.page-hero h1 .hl{background:linear-gradient(120deg,var(--accent),#ffb347);-webkit-background-clip:text;background-clip:text;color:transparent}
.page-hero p{color:var(--text-2);font-size:17px;max-width:580px;margin:0 auto;line-height:1.6}
.page-hero .back-home{display:inline-flex;align-items:center;gap:6px;margin-top:18px;color:var(--accent);font-weight:600;font-size:14px;text-decoration:none;padding:7px 16px;border:1px solid var(--line-2);border-radius:999px;transition:background .22s var(--ease-smooth),border-color .22s var(--ease-smooth),transform .22s var(--ease-spring)}
.page-hero .back-home:hover{background:var(--accent-soft);border-color:var(--accent);transform:translateY(-2px)}

/* Page hero visual enhancements */
.page-hero-icon{
  display:inline-flex;align-items:center;justify-content:center;width:58px;height:58px;border-radius:18px;margin-bottom:18px;font-size:28px;line-height:1;
  background:linear-gradient(135deg,var(--accent),#ff8a5c);
  box-shadow:0 14px 34px -8px var(--accent-glow),0 0 0 1px rgba(255,255,255,.08) inset;
  color:#fff;
}
.page-hero h1{
  background:linear-gradient(120deg,var(--accent) 0%,#ffb347 60%,#ffd66b 100%);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 2px 10px rgba(255,94,58,.18));
}
.page-hero-line{width:72px;height:4px;border-radius:999px;margin:0 auto 22px;background:linear-gradient(90deg,var(--accent),#ffb347);opacity:.85}
.page-hero p{font-size:clamp(16px,2.2vw,19px);line-height:1.65;opacity:.92}

/* About team section */
.about-team{margin-top:48px;padding:32px;border-radius:var(--radius-lg);background:linear-gradient(135deg,var(--panel),var(--panel-2));border:1px solid var(--line);text-align:center}
.about-team h2{margin-bottom:12px;font-size:clamp(24px,3vw,32px);font-weight:800;letter-spacing:-.02em}
.about-team p{max-width:680px;margin:0 auto 24px;color:var(--text-2);line-height:1.7}
.about-team .btn{margin-top:8px}

.section-gallery{padding:clamp(20px,3vw,32px) clamp(16px,4vw,44px) clamp(40px,6vw,70px)}
.section-gallery .tpl-sizes{margin-top:0;margin-bottom:10px}

/* Text shadow block */
.shadow-block{display:flex;flex-direction:column;gap:8px}
.shadow-block .prop-row{margin-bottom:0}
.shadow-toggle{gap:8px}
.shadow-toggle input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent);cursor:pointer}
.shadow-toggle label{font-size:13px;color:var(--text-2);min-width:auto;flex:1;cursor:pointer}
.shadow-ctl{display:flex;flex-direction:column;gap:6px}
.shadow-ctl .prop-row{margin-bottom:0}

/* ===== Layers panel ===== */
/* 统一弹窗样式（ed-layers、ctx-menu、picker-box、toast、crop-bar 共享视觉语言） */
.ed-layers{position:absolute;top:14px;right:14px;width:248px;max-height:70%;overflow:hidden;background:linear-gradient(180deg,var(--panel),var(--ink-2));border:1px solid var(--line-2);border-radius:14px;box-shadow:var(--shadow-lg),0 0 0 1px rgba(255,255,255,.04),inset 0 1px 0 rgba(255,255,255,.08);z-index:5;display:flex;flex-direction:column;backdrop-filter:blur(16px) saturate(1.2);-webkit-backdrop-filter:blur(16px) saturate(1.2);animation:pickerIn .28s var(--ease-spring)}
.ed-layers[hidden]{display:none}
.ed-layers-head{display:flex;align-items:center;justify-content:space-between;padding:13px 16px 11px;border-bottom:1px solid var(--line);font-family:var(--font-display);font-weight:700;font-size:13px;letter-spacing:-.005em;background:linear-gradient(180deg,rgba(255,255,255,.04),transparent)}
.ed-layers-title{display:inline-flex;align-items:center;gap:6px;color:var(--text)}
.ed-layers-count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 7px;border-radius:10px;background:linear-gradient(135deg,var(--accent),#ff7a45);color:#fff;font-size:11px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1;box-shadow:0 4px 10px -4px var(--accent-glow)}
.ed-layers-head button{background:transparent;border:none;color:var(--text-2);font-size:13px;cursor:pointer;line-height:1;transition:color .2s,background .2s var(--ease-smooth),transform .2s var(--ease-spring);width:26px;height:26px;border-radius:8px;display:grid;place-items:center}
.ed-layers-head button:hover{color:var(--text);background:var(--panel-2);transform:rotate(90deg) scale(1.05)}
.ed-layers-toolbar{display:flex;gap:4px;padding:8px 10px;border-bottom:1px solid var(--line);background:rgba(0,0,0,.08)}
.ed-layer-tool{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:5px;padding:7px 4px;background:transparent;border:1px solid var(--line-2);border-radius:9px;color:var(--text-2);font-size:11px;font-weight:500;cursor:pointer;transition:background .15s var(--ease-smooth),color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),transform .15s var(--ease-spring);font-family:var(--font-body)}
.ed-layer-tool:hover{background:var(--accent-soft);color:var(--accent);border-color:var(--accent);transform:translateY(-1px)}
.ed-layer-tool:active{transform:translateY(0)}
.ed-layer-tool.active{background:var(--accent-soft);color:var(--accent);border-color:var(--accent)}
.ed-layer-tool svg{flex-shrink:0}
/* 图层搜索框 */
.ed-layers-search{display:flex;align-items:center;gap:6px;padding:8px 10px;border-bottom:1px solid var(--line);position:relative}
.ed-layers-search-ico{color:var(--text-3);flex-shrink:0;pointer-events:none}
.ed-layers-search-input{flex:1;min-width:0;background:var(--panel-2);border:1px solid var(--line-2);border-radius:8px;padding:6px 10px 6px 28px;color:var(--text);font-size:12px;font-family:var(--font-body);outline:none;transition:border-color .15s var(--ease-smooth),background .15s var(--ease-smooth)}
.ed-layers-search-input:focus{border-color:var(--accent);background:var(--panel)}
.ed-layers-search-input::placeholder{color:var(--text-3)}
.ed-layers-search-clear{position:absolute;right:14px;top:50%;transform:translateY(-50%);width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;background:var(--panel-2);border:none;border-radius:50%;color:var(--text-3);font-size:10px;cursor:pointer;transition:background .15s var(--ease-smooth),color .15s var(--ease-smooth)}
.ed-layers-search-clear:hover{background:var(--accent);color:#fff}
.ed-layers-list{padding:6px;overflow-y:auto;overflow-x:hidden;flex:1;min-height:0}
.ed-layers-list::-webkit-scrollbar{width:6px}
.ed-layers-list::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:3px}
.ed-layers-list::-webkit-scrollbar-track{background:transparent}
.ed-layer{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:10px;cursor:pointer;transition:transform .18s var(--ease-out),background .18s var(--ease-smooth),border-color .18s var(--ease-smooth),opacity .15s,box-shadow .18s var(--ease-smooth);border:1px solid transparent;position:relative}
.ed-layer:hover{background:var(--panel);border-color:var(--line);transform:translateX(2px)}
.ed-layer:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.ed-layer.active{background:var(--accent-soft);border-color:var(--accent);box-shadow:0 4px 14px -6px var(--accent-glow),inset 0 1px 0 rgba(255,255,255,.04)}
.ed-layer-icon{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:6px;background:var(--panel-2);color:var(--text-2);flex-shrink:0;transition:color .15s,background .15s}
.ed-layer.active .ed-layer-icon{background:var(--accent);color:#fff}
.ed-layer.is-locked .ed-layer-icon{color:var(--text-3)}
.ed-layer-name{flex:1;min-width:0;font-size:13px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;outline:none;cursor:text}
.ed-layer-name.editing{cursor:text;background:var(--panel-2);border-radius:6px;padding:2px 6px;margin:-2px -6px;box-shadow:0 0 0 2px var(--accent)}
.ed-layer-acts{display:flex;gap:1px;flex-shrink:0;opacity:.4;transition:opacity .15s var(--ease-smooth)}
.ed-layer:hover .ed-layer-acts,.ed-layer.active .ed-layer-acts{opacity:1}
.ed-layer-btn{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;background:transparent;border:none;border-radius:5px;color:var(--text-2);cursor:pointer;transition:background .15s var(--ease-smooth),color .15s var(--ease-smooth),transform .15s var(--ease-spring)}
.ed-layer-btn:hover{background:var(--panel-2);color:var(--text);transform:scale(1.1)}
.ed-layer-btn:active{transform:scale(.95)}
.ed-layer-btn.up:hover,.ed-layer-btn.down:hover{color:var(--accent)}
/* 上移/下移改为文字按钮，更直观易懂（替代小箭头） */
.ed-layer-btn.up,.ed-layer-btn.down{width:auto;min-width:22px;height:22px;padding:0 6px;font-family:var(--font-body)}
.ed-layer-mv{display:inline-block;font-size:11px;font-weight:700;line-height:1;letter-spacing:.02em;white-space:nowrap}
.ed-layer-btn.vis.off{color:var(--text-3)}
.ed-layer-btn.lock.on{color:var(--accent)}
.ed-layer-btn.del:hover{background:#e5484d;color:#fff}
.ed-layer.dragging{opacity:.4}
.ed-layer.is-hidden{opacity:.55}
.ed-layer.is-hidden .ed-layer-name{text-decoration:line-through;color:var(--text-3)}
.ed-layer-lock-ind{display:inline-flex;align-items:center;flex-shrink:0;color:var(--text-3);opacity:.7}
.ed-layer.is-locked .ed-layer-lock-ind{color:var(--accent);opacity:1}
.ed-layer.drop-before{box-shadow:0 -2px 0 0 var(--accent),0 0 0 1px var(--accent-soft) inset}
.ed-layer.drop-after{box-shadow:0 2px 0 0 var(--accent),0 0 0 1px var(--accent-soft) inset}
.ed-layer[draggable=true]{cursor:grab}
.ed-layer[draggable=true]:active{cursor:grabbing}
.ed-layer-empty{padding:30px 16px;text-align:center}
.ed-layer-empty-ico{display:flex;justify-content:center;color:var(--text-3);opacity:.5;margin-bottom:8px}
.ed-layer-empty-ico svg{width:32px;height:32px}
.ed-layer-empty-txt{font-size:13px;color:var(--text-2);font-weight:600;margin-bottom:4px}
.ed-layer-empty-tip{font-size:11px;color:var(--text-3);line-height:1.5}

/* ===== Crop toolbar (image crop) ===== */
.crop-bar{position:absolute;left:50%;bottom:18px;transform:translateX(-50%);z-index:8;display:flex;align-items:center;gap:12px;padding:11px 18px;background:linear-gradient(180deg,var(--panel),var(--ink-2));border:1px solid var(--line-2);border-radius:14px;box-shadow:var(--shadow-lg),0 0 0 1px rgba(255,255,255,.04),inset 0 1px 0 rgba(255,255,255,.08);backdrop-filter:blur(16px) saturate(1.2);-webkit-backdrop-filter:blur(16px) saturate(1.2);animation:pickerIn .28s var(--ease-spring)}
.crop-bar[hidden]{display:none}
.crop-bar .crop-size{font-size:13px;color:var(--text-2);white-space:nowrap;padding:5px 11px;background:rgba(0,0,0,.14);border-radius:9px}
.crop-bar .crop-size i{font-style:normal;opacity:.65;margin-right:5px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em}
.crop-bar .crop-size b{font-variant-numeric:tabular-nums;color:var(--text);font-weight:700;font-size:13px}
.crop-ratio{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text-2)}
.crop-ratio i{font-style:normal;opacity:.7;font-size:12px}
.crop-ratio select{background:var(--panel);color:var(--text);border:1px solid var(--line-2);border-radius:9px;padding:6px 11px;font-family:var(--font-body);font-size:13px;font-weight:500;cursor:pointer;transition:border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-smooth)}
.crop-ratio select:hover{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.crop-ratio select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
@media(max-width:560px){
  .crop-bar{flex-wrap:wrap;justify-content:center;border-radius:14px;bottom:12px;max-width:94%;gap:8px}
  .crop-bar .crop-size{order:3;flex-basis:100%;text-align:center}
}
.preset-btns{display:flex;gap:6px;flex-wrap:wrap}
.preset-btns .mini-btn{flex:1;min-width:60px}

/* Noise button */
.noise-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 7px 14px;
  border-radius: 8px;
  border: 1px solid var(--bd);
  background: var(--panel);
  cursor: pointer;
  font-size: 13px;
  font-weight: 600;
  color: var(--fg);
  transition: transform .2s var(--ease-spring),background .2s var(--ease-smooth),color .2s var(--ease-smooth),border-color .2s var(--ease-smooth);
}
.noise-btn:hover { border-color: var(--accent); color: var(--accent); transform:translateY(-1px); }
.noise-btn.active { background: var(--accent); color: #fff; border-color: var(--accent); box-shadow:0 6px 14px -6px var(--accent-glow); }
.noise-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 8px;
  padding: 8px;
}
.noise-grid button {
  width: 100%;
  aspect-ratio: 1;
  border-radius: 6px;
  border: 1px solid var(--bd);
  cursor: pointer;
  font-size: 11px;
  font-weight: 600;
  color: var(--fg2);
  background: var(--panel);
  transition:transform .18s var(--ease-spring),border-color .18s var(--ease-smooth),background .18s var(--ease-smooth),color .18s var(--ease-smooth);
}
.noise-grid button:hover { border-color: var(--accent); color:var(--accent); transform:translateY(-1px); }
.noise-grid button.active { border-color: var(--accent); background: var(--accent); color: #fff; box-shadow:0 4px 10px -4px var(--accent-glow); }

/* ===== AdSense slots ===== */
.ad-slot{max-width:1100px;margin:16px auto;min-height:0}
.ad-slot.ad-top{margin-top:8px}
.ad-slot ins{width:100%}

/* ===== Hero preview cards (redesigned) ===== */
.preview-card{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;
  border-radius:14px;font-family:var(--font-display);font-weight:700;text-align:center;
  position:relative;overflow:hidden;
  box-shadow:0 24px 50px -20px rgba(0,0,0,.6),inset 0 1px 0 rgba(255,255,255,.15);
  animation:floatCard 6s ease-in-out infinite;
}
.preview-card::before{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at 30% 0%,rgba(255,255,255,.2),transparent 50%);pointer-events:none}
.preview-card .pc-tag{font-size:11px;font-weight:600;opacity:.75;letter-spacing:.5px}
.preview-card .pc-text{font-size:14px;font-weight:700}
.preview-card.pc1{background:linear-gradient(135deg,#5b5bd6,#5b8def);color:#fff;width:180px;height:70px;transform:rotate(-3deg)}
.preview-card.pc2{background:linear-gradient(135deg,#ff5e3a,#ff8c42);color:#fff;width:140px;height:120px;transform:rotate(4deg);z-index:2;animation-delay:1.2s}
.preview-card.pc3{background:linear-gradient(135deg,#1a2340,#2d3561);color:#fff;width:110px;height:220px;transform:rotate(-2deg);animation-delay:.6s}

/* ===== Page hero (inner pages) — 使用上方响应式 .page-hero 定义，此处不再重复 ===== */

/* ===== Tutorial page ===== */
.tutorial-content{max-width:1200px;margin:0 auto}
.step-card{
  position:relative;background:linear-gradient(180deg,var(--panel),var(--panel-2));
  border:1px solid var(--line);border-radius:16px;padding:28px 24px 24px 76px;margin-bottom:20px;
  transition:transform .28s var(--ease-out),box-shadow .28s var(--ease-out),border-color .28s var(--ease-out);
}
.step-card:hover{transform:translateY(-4px);box-shadow:0 20px 44px -22px rgba(0,0,0,.6);border-color:var(--line-2)}
.step-card .step-n{
  position:absolute;left:20px;top:24px;width:40px;height:40px;border-radius:50%;
  background:linear-gradient(135deg,var(--accent),#ff7a45);color:#fff;
  font-family:var(--font-display);font-weight:800;font-size:18px;
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 8px 22px -8px var(--accent-glow),inset 0 1px 0 rgba(255,255,255,.3);
}
.step-card h2{font-size:20px;margin:0 0 8px;letter-spacing:-.01em}
.step-card p{color:var(--text-2);line-height:1.7;margin:0}
.step-card a{color:var(--accent);text-decoration:none;font-weight:600;transition:color .2s}
.step-card a:hover{color:var(--accent-2)}
.tut-h2{
  font-size:24px;margin:40px 0 18px;font-family:var(--font-display);font-weight:800;
  letter-spacing:-.02em;color:var(--text);
}
.tut-h2:first-child{margin-top:0}
.tut-list{list-style:none;padding:0;margin:0 0 28px}
.tut-list li{padding:11px 0;border-bottom:1px solid var(--line);color:var(--text-2);line-height:1.6;transition:padding-left .2s var(--ease-out)}
.tut-list li:hover{padding-left:6px}
.tut-list li strong{color:var(--fg)}
.tut-cta{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-top:24px}

/* ===== About page ===== */
/* .about-wrap 使用首页定义（max-width + 居中 flex column），不再重复 */

/* ===== About enhanced ===== */
.about-tech-grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));
  gap:14px;margin:24px 0;width:100%;align-self:stretch;
}
.about-tech{
  display:flex;align-items:center;gap:10px;padding:16px 18px;
  background:linear-gradient(180deg,var(--panel),var(--panel-2));
  border:1px solid var(--line);border-radius:14px;
  transition:transform .25s var(--ease-out),border-color .25s var(--ease-out),box-shadow .25s var(--ease-out);
  position:relative;overflow:hidden;text-align:left;
}
.about-tech:hover{transform:translateY(-4px);border-color:var(--accent);box-shadow:0 14px 32px -18px rgba(0,0,0,.55),0 0 20px -10px var(--accent-glow)}
.about-tech .tech-ico{
  font-size:22px;line-height:1;flex-shrink:0;
  width:38px;height:38px;display:grid;place-items:center;border-radius:10px;
  background:var(--accent-soft);transition:transform .3s var(--ease-spring),background .25s;
}
.about-tech:hover .tech-ico{transform:scale(1.1) rotate(-6deg);background:var(--accent)}
.about-tech>span:not(.tech-ico){font-size:13.5px;color:var(--text);font-weight:600;line-height:1.4}
@media(max-width:560px){.about-tech-grid{grid-template-columns:1fr}}
.about-hero{display:flex;gap:40px;align-items:center;margin-bottom:40px;width:100%}
.about-hero-text{flex:1;text-align:left}
.about-hero-text p{color:var(--text-2);line-height:1.8;margin-bottom:16px}
.about-hero-visual{display:grid;grid-template-columns:1fr 1fr;gap:14px;flex-shrink:0}
.av-card{
  background:linear-gradient(180deg,var(--panel),var(--panel-2));
  border:1px solid var(--line);border-radius:16px;padding:24px 18px;text-align:center;
  transition:transform .28s var(--ease-out),border-color .28s var(--ease-out),box-shadow .28s var(--ease-out);
}
.av-card:hover{transform:translateY(-5px);border-color:var(--accent);box-shadow:0 18px 40px -20px var(--accent-glow)}
.av-num{font-size:34px;font-weight:800;font-family:var(--font-display);background:linear-gradient(135deg,var(--accent),#ffb347);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;line-height:1;letter-spacing:-.02em}
.av-label{font-size:13px;color:var(--text-2);margin-top:8px;font-weight:600;letter-spacing:.04em}
.about-mission{
  background:linear-gradient(180deg,var(--panel),var(--panel-2));
  border:1px solid var(--line);border-radius:18px;padding:36px;margin:32px 0;width:100%;
}
.about-mission h2{font-size:24px;margin-bottom:14px;font-family:var(--font-display);font-weight:700;letter-spacing:-.01em}
.about-mission p{color:var(--text-2);line-height:1.8;margin-bottom:12px}
@media(max-width:640px){.about-hero{flex-direction:column}.about-hero-text{text-align:center}.about-hero-visual{width:100%}}
.legal-content{max-width:1200px;margin:0 auto;font-size:15px;line-height:1.8;color:var(--text-2)}
.legal-content h2{
  font-size:22px;margin:40px 0 18px;color:var(--fg);font-family:var(--font-display);font-weight:800;
  letter-spacing:-.02em;
}
.legal-content h2:first-child{margin-top:0}
.legal-content p{margin-bottom:14px}
.legal-content ul{margin:0 0 16px;padding-left:24px}
.legal-content li{margin-bottom:8px}
.legal-content a{color:var(--accent);text-decoration:none;transition:color .2s}
.legal-content a:hover{color:var(--accent-2)}
.legal-content strong{color:var(--fg)}

/* ===== FAQ page ===== */
.faq-page{max-width:1200px;margin:0 auto}
.faq-contact{text-align:center;margin-top:36px;padding:28px 24px;border-top:1px solid var(--line)}
.faq-contact p{color:var(--text-2);margin-bottom:14px}

/* ===== Stats bar ===== */
.stats-bar{display:flex;align-items:center;justify-content:center;gap:0;padding:40px clamp(16px,4vw,44px);max-width:1200px;margin:0 auto;flex-wrap:wrap}
.stat-item{display:flex;flex-direction:column;align-items:center;gap:8px;padding:0 32px;position:relative}
.stat-num{
  font-family:var(--font-display);font-size:clamp(34px,5vw,52px);font-weight:800;
  background:linear-gradient(135deg,var(--accent),#ffb347);
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent;
  line-height:1;letter-spacing:-.02em;
}
.stat-label{font-size:13px;color:var(--text-2);font-weight:600;letter-spacing:.06em;text-transform:uppercase}
@media(max-width:600px){.stats-bar{gap:20px}.stat-item{padding:10px 18px}}

/* ===== CTA section ===== */
.cta-section{
  position:relative;padding:clamp(56px,8vw,90px) clamp(16px,4vw,44px);text-align:center;
  background:linear-gradient(135deg,rgba(124,108,255,.08),rgba(255,94,58,.08));
  border-top:1px solid var(--line);border-bottom:1px solid var(--line);overflow:hidden;
}
.cta-section::before{
  content:"";position:absolute;inset:0;pointer-events:none;opacity:.4;
  background-image:radial-gradient(var(--line) 1px,transparent 1px);background-size:32px 32px;
  mask-image:radial-gradient(ellipse at 50% 50%,#000 0%,transparent 65%);
  -webkit-mask-image:radial-gradient(ellipse at 50% 50%,#000 0%,transparent 65%);
}
.cta-inner{max-width:1200px;margin:0 auto;position:relative;z-index:1}
.cta-inner h2{font-size:clamp(28px,4vw,44px);font-weight:800;margin-bottom:14px;letter-spacing:-.02em}
.cta-inner p{color:var(--text-2);font-size:17px;margin-bottom:28px;max-width:580px;margin-left:auto;margin-right:auto;line-height:1.6}
.cta-btns{display:flex;gap:14px;justify-content:center;flex-wrap:wrap}

/* ===== Scroll reveal ===== */
.reveal{opacity:0;transform:translateY(24px);transition:opacity .6s ease,transform .6s ease}
.reveal.in{opacity:1;transform:translateY(0)}

/* ===== Page hero inner ===== */
.ed-loading[hidden]{display:none}
.ed-loading{position:absolute;inset:0;background:rgba(15,15,26,.85);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;z-index:9999;border-radius:inherit;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.ed-loading-spin{width:44px;height:44px;border:3px solid var(--line-2);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.ed-loading span{color:#fff;font-size:14px;font-weight:600}

/* ===== Page hero inner ===== */
.page-hero-inner{max-width:1200px;margin:0 auto}

/* ===== Tutorial detailed ===== */
.tut-tip-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;margin:24px 0 36px}
.tut-tip-card{
  background:linear-gradient(180deg,var(--panel),var(--panel-2));
  border:1px solid var(--line);border-radius:12px;padding:22px;
  transition:transform .25s var(--ease-out),border-color .25s var(--ease-out),box-shadow .25s var(--ease-out);
}
.tut-tip-card:hover{border-color:var(--line-2);transform:translateY(-4px);box-shadow:0 14px 32px -22px rgba(0,0,0,.6)}
.tut-tip-card .tip-ico{font-size:26px;margin-bottom:10px;display:inline-block;transition:transform .35s var(--ease-spring)}
.tut-tip-card:hover .tip-ico{transform:scale(1.15) rotate(-4deg)}
.tut-tip-card h3{font-size:16px;margin-bottom:6px;font-family:var(--font-display);letter-spacing:-.01em}
.tut-tip-card p{color:var(--text-2);font-size:14px;line-height:1.6;margin:0}
.tut-shortcut-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px;margin:20px 0}
.tut-shortcut{
  display:flex;align-items:center;gap:10px;padding:12px 16px;
  background:linear-gradient(180deg,var(--panel),var(--panel-2));
  border:1px solid var(--line);border-radius:10px;
  transition:border-color .2s var(--ease-smooth),transform .2s var(--ease-out);
}
.tut-shortcut:hover{border-color:var(--line-2);transform:translateX(2px)}
.tut-shortcut kbd{display:inline-block;padding:3px 8px;border:1px solid var(--line-2);border-radius:5px;font-size:12px;font-family:var(--font-mono,monospace);background:var(--panel-2);color:var(--text);white-space:nowrap;min-width:28px;text-align:center;box-shadow:0 1px 0 var(--line-2)}
.tut-shortcut span{color:var(--text-2);font-size:13px}

.about-h2{
  font-size:24px;margin:40px 0 18px;font-family:var(--font-display);font-weight:800;
  letter-spacing:-.02em;color:var(--text);
}
.about-h2:first-child{margin-top:0}

/* ===== Picker Tabs (category navigation) ===== */
.picker-tabs {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  padding: 6px 0 14px;
  border-bottom: 1px solid var(--line);
  margin-bottom: 18px;
}
.picker-tab {
  display: inline-block;
  padding: 7px 14px;
  border-radius: 999px;
  cursor: pointer;
  font-size: 13px;
  font-weight: 600;
  background: var(--panel-2);
  color: var(--text-2);
  user-select: none;
  transition: transform .2s var(--ease-spring), background .2s var(--ease-smooth), color .2s var(--ease-smooth), box-shadow .2s var(--ease-out);
}
.picker-tab:hover { background: var(--accent-soft); color: var(--accent); transform: translateY(-2px); }
.picker-tab.active { background: linear-gradient(135deg, var(--accent), #ff7a45); color: #fff; box-shadow: 0 8px 18px -8px var(--accent-glow); }

/* ===== Solid color chips (background panel) ===== */
.bg-color-chip{display:inline-block;width:30px;height:30px;border-radius:8px;border:2px solid var(--line-2);cursor:pointer;margin:3px;transition:transform .2s var(--ease-spring),box-shadow .2s var(--ease-out),border-color .2s}
.bg-color-chip:hover{transform:scale(1.2) translateY(-2px);box-shadow:0 8px 16px -4px rgba(0,0,0,.4);z-index:2;position:relative}
.bg-color-chip:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.bg-color-chip.is-active{border-color:var(--text);box-shadow:0 0 0 2px var(--accent-soft)}

/* ===== 侧面板（图标/形状/背景内嵌右侧面板）===== */
.side-panel-body{animation:propFade .22s ease-out}
/* 侧面板内的 tabs 紧凑排列 */
.side-tabs{padding:0 0 12px;margin-bottom:12px;border-bottom:1px solid var(--line);gap:5px}
.side-tabs .picker-tab{font-size:12px;padding:5px 10px}
/* 背景颜色常用预设 */
.bg-presets-row{flex-direction:column;align-items:stretch;gap:10px;margin-top:4px}
.bg-presets-row label{margin-bottom:0;font-size:12px;color:var(--text-2)}
.bg-presets-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
.bg-preset-chip{width:100%;aspect-ratio:1;border-radius:8px;border:1px solid var(--line-2);background:var(--panel-2);cursor:pointer;transition:transform .15s var(--ease-spring),box-shadow .15s var(--ease-smooth),border-color .15s var(--ease-smooth)}
.bg-preset-chip:hover{transform:scale(1.08);border-color:var(--text-3);box-shadow:0 4px 12px -4px rgba(0,0,0,.4);z-index:1}
.bg-preset-chip:active{transform:scale(1)}
/* 拖拽绘制工具栏 */
.draw-tool-bar{display:flex;gap:6px;margin-bottom:8px}
.draw-tool-btn{flex:1;min-width:0;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;gap:5px;padding:8px 6px;background:linear-gradient(180deg,var(--panel-2),var(--panel));border:1px solid var(--line-2);border-radius:9px;color:var(--text-2);font-size:11px;font-weight:600;cursor:pointer;font-family:var(--font-body);transition:background .15s var(--ease-smooth),color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),transform .15s var(--ease-spring)}
.draw-tool-btn:hover{background:var(--accent-soft);color:var(--accent);border-color:var(--accent);transform:translateY(-1px)}
.draw-tool-btn:active{transform:translateY(0)}
.draw-tool-btn svg{flex-shrink:0}
.draw-tool-btn span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.draw-tool-tip{font-size:10px;color:var(--text-3);line-height:1.5;margin-bottom:10px;padding:6px 8px;background:rgba(124,108,255,.08);border-radius:7px;border-left:2px solid var(--violet)}
/* 选择器搜索框 */
.picker-search{position:relative;margin-bottom:10px}
.picker-search-input{width:100%;padding:8px 12px 8px 32px;background:var(--panel-2);border:1px solid var(--line-2);border-radius:9px;color:var(--text);font-size:13px;font-family:var(--font-body);outline:none;transition:border-color .15s var(--ease-smooth),box-shadow .15s var(--ease-smooth)}
.picker-search-input::placeholder{color:var(--text-3)}
.picker-search-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.picker-search::before{content:"";position:absolute;left:10px;top:50%;transform:translateY(-50%);width:14px;height:14px;background:var(--text-3);-webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'><circle cx='11' cy='11' r='8'/><line x1='21' y1='21' x2='16.65' y2='16.65'/></svg>") center/contain no-repeat;mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'><circle cx='11' cy='11' r='8'/><line x1='21' y1='21' x2='16.65' y2='16.65'/></svg>") center/contain no-repeat;pointer-events:none}
.picker-empty{grid-column:1/-1;padding:24px 16px;text-align:center;color:var(--text-3);font-size:13px;font-weight:500}
/* 侧面板内的网格适配窄宽度 */
.side-grid.icon-grid{grid-template-columns:repeat(5,1fr);gap:6px}
.side-grid.shape-grid{grid-template-columns:repeat(5,1fr);gap:8px}
.side-grid .icon-cell{width:auto;height:42px;border-radius:10px;padding:0}
.side-grid .icon-cell img.emoji-icon{width:28px;height:28px;display:block;pointer-events:none}
.side-grid .icon-cell.emoji-fallback{font-size:22px;font-family:'Segoe UI Emoji','Apple Color Emoji','Noto Color Emoji','Noto Sans Symbols','Noto Sans SC',sans-serif}
/* 符号类形状单元格使用跨平台字体栈，保证渲染一致 */
.side-grid .shape-icon-cell{font-family:'Segoe UI Symbol','Apple Color Emoji','Noto Color Emoji','Noto Sans Symbols','Noto Sans SC',sans-serif;font-size:22px}
.side-grid .shape-cell{padding:6px;border-radius:10px}
.side-grid .shape-cell svg{width:24px;height:24px}
/* 侧面板分页器 */
.picker-pager{display:flex;align-items:center;justify-content:center;gap:10px;margin-top:12px;padding-top:10px;border-top:1px solid var(--line)}
.picker-pager .pager-btn{padding:5px 12px;border-radius:8px;border:1px solid var(--line-2);background:var(--panel);color:var(--text);font-size:12px;font-weight:600;cursor:pointer;transition:background .15s var(--ease-smooth),color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),transform .15s var(--ease-spring)}
.picker-pager .pager-btn:hover:not(:disabled){background:var(--accent-soft);border-color:var(--accent);color:var(--accent);transform:translateY(-1px)}
.picker-pager .pager-btn:disabled{opacity:.4;cursor:not-allowed}
.picker-pager .pager-info{font-size:12px;color:var(--text-2);min-width:48px;text-align:center;font-variant-numeric:tabular-nums}
.side-gradient-grid{grid-template-columns:repeat(auto-fill,minmax(40px,1fr));gap:7px}
.side-gradient-grid .gradient-cell{height:40px;border-radius:9px}
.bg-swatches{display:flex;flex-wrap:wrap;gap:6px}
.bg-swatches .bg-color-chip{width:32px;height:32px;margin:0}

/* ===== Shortcut table (统一弹窗风格) ===== */
.shortcut-table{width:100%;border-collapse:separate;border-spacing:0 4px;margin-top:8px}
.shortcut-table td{padding:11px 14px;font-size:13px}
.shortcut-table tr{transition:background .18s var(--ease-smooth)}
.shortcut-table tr td:first-child{border-radius:10px 0 0 10px}
.shortcut-table tr td:last-child{border-radius:0 10px 10px 0}
.shortcut-table tr:hover td{background:var(--panel-2)}
.shortcut-key{font-family:var(--font-mono,'SF Mono','Consolas',monospace);font-weight:700;color:var(--accent);white-space:nowrap;width:42%}
.shortcut-key kbd{display:inline-block;padding:3px 8px;border:1px solid var(--line-2);border-radius:6px;font-size:11px;background:var(--panel);color:var(--text);box-shadow:0 1px 0 var(--line-2),inset 0 1px 0 rgba(255,255,255,.04)}
.shortcut-desc{color:var(--text-2)}

/* ===== Theme toggle ===== */
.theme-toggle{width:42px;height:38px;border-radius:10px;border:1px solid var(--line-2);background:transparent;color:var(--text);font-weight:700;cursor:pointer;font-family:var(--font-display);transition:background .2s;font-size:16px;line-height:1}
.theme-toggle:hover{background:rgba(255,255,255,.06)}

/* ===== Dark mode ===== */
/* 注：默认主题已是深色，dark 模式在此基础上调深背景层次，保留品牌橙色不变 */
[data-theme="dark"] {
  --ink:#0a0a14;
  --ink-2:#0f0f1a;
  --panel:#161628;
  --panel-2:#1c1c34;
  --panel-3:#22223e;
  --line:rgba(255,255,255,.07);
  --line-2:rgba(255,255,255,.13);
  --border:var(--line-2);
  --bd:var(--line-2);
  --app-split:var(--line);
  --app-border:var(--line-2);
  --text:#f0f0f8;
  --text-1:#f0f0f8;
  --text-2:#a7a7c2;
  --text-3:#8585a0;
  --fg:#f0f0f8;
  --fg2:#a7a7c2;
  --muted:#a7a7c2;
  --app-text-primary:#f0f0f8;
  --app-text-secondary:#a7a7c2;
  --app-text-muted:#8585a0;
  --app-bg:#0a0a14;
  --app-surface:#161628;
  --app-surface2:#1c1c34;
  --section-bg:#0f0f1a;
  --app-shadow:0 2px 14px rgba(0,0,0,.55);
  --shadow:0 22px 64px -22px rgba(0,0,0,.7);
  /* 品牌橙色 --accent 保持不变，确保品牌识别一致 */
}
[data-theme="dark"] body { background:#0a0a14; color:#f0f0f8; }
[data-theme="dark"] .site-header { background:rgba(10,10,20,.92); }
[data-theme="dark"] .card, [data-theme="dark"] .tpl-card { background:#161628; border-color:#22223e; }
[data-theme="dark"] .site-footer { background:#06060e; }
[data-theme="dark"] .page-hero { background:linear-gradient(135deg,#13132a,#0a0a14); }
[data-theme="dark"] textarea, [data-theme="dark"] input, [data-theme="dark"] select { background:#161628; color:#f0f0f8; border-color:#22223e; }
/* dark 主题下统一所有弹窗背景 */
[data-theme="dark"] .picker-box,
[data-theme="dark"] .ctx-menu,
[data-theme="dark"] .ed-layers,
[data-theme="dark"] .crop-bar,
[data-theme="dark"] .download-dropdown { background:linear-gradient(180deg,#1c1c34,#161628); border-color:#22223e; }
[data-theme="dark"] .toast { background:linear-gradient(180deg,#1c1c34,#161628); border-color:#2a2a4a; }
[data-theme="dark"] .ed-tools { background:#0f0f1a; border-color:#22223e; }
[data-theme="dark"] .ed-props { background:#0f0f1a; border-color:#22223e; }
[data-theme="dark"] .ed-topbar { background:#0f0f1a; }
/* 修复 kbd 在 dark 模式下不可见（原 background:#fff + color:#fff 错误） */
[data-theme="dark"] .ed-bb-hint kbd { background:#1c1c34; color:#f0f0f8; border-color:#2a2a4a; }

/* ===== Light mode ===== */
[data-theme="light"] {
  --ink:#f5f5fa;
  --ink-2:#ececf3;
  --panel:#ffffff;
  --panel-2:#f0f0f6;
  --panel-3:#e6e6ee;
  --line:rgba(20,20,40,.10);
  --line-2:rgba(20,20,40,.16);
  --border:var(--line-2);
  --bd:var(--line-2);
  --app-split:var(--line);
  --app-border:var(--line-2);
  --text:#1a1a2e;
  --text-1:#1a1a2e;
  --text-2:#55556a;
  --text-3:#6b6b85;
  --fg:#1a1a2e;
  --fg2:#55556a;
  --muted:#55556a;
  --app-text-primary:#1a1a2e;
  --app-text-secondary:#55556a;
  --app-text-muted:#6b6b85;
  --app-bg:#f5f5fa;
  --app-surface:#ffffff;
  --app-surface2:#f0f0f6;
  --section-bg:#ececf3;
  --app-shadow:0 2px 14px rgba(20,20,60,.10);
  --shadow:0 20px 50px -22px rgba(20,20,60,.18);
  --accent-soft:rgba(255,94,58,.12);
}
[data-theme="light"] body { background:#f5f5fa; color:#1a1a2e; }
[data-theme="light"] .site-header { background:rgba(245,245,250,.82); }
[data-theme="light"] .about-team { background:#fff; border-color:#e6e6ee; }
[data-theme="light"] .card, [data-theme="light"] .tpl-card { background:#fff; border-color:#e6e6ee; }
[data-theme="light"] .site-footer { background:#ececf3; }
[data-theme="light"] .page-hero { background:linear-gradient(135deg,#fff,#f0f0f6); }
[data-theme="light"] textarea, [data-theme="light"] input, [data-theme="light"] select { background:#fff; color:#1a1a2e; border-color:#e6e6ee; }
/* light 主题下统一所有弹窗背景 */
[data-theme="light"] .picker-box,
[data-theme="light"] .ctx-menu,
[data-theme="light"] .ed-layers,
[data-theme="light"] .crop-bar,
[data-theme="light"] .download-dropdown { background:linear-gradient(180deg,#ffffff,#f0f0f6); border-color:#e6e6ee; }
[data-theme="light"] .toast { background:linear-gradient(180deg,#ffffff,#f0f0f6); border-color:#e6e6ee; color:#1a1a2e; }
[data-theme="light"] .ed-tools { background:#ececf3; border-color:#e6e6ee; }
[data-theme="light"] .ed-props { background:#ececf3; border-color:#e6e6ee; }
[data-theme="light"] .ed-topbar { background:#ececf3; }
[data-theme="light"] .ed-bottombar { background:#e6e6ee; }
[data-theme="light"] .ed-bb-hint kbd { background:#fff; color:#1a1a2e; border-color:#e6e6ee; }
[data-theme="light"] .ed-stage { background-color:#ececf3; background-image:radial-gradient(circle at 50% 0,rgba(124,108,255,.05),transparent 60%),radial-gradient(circle at 50% 100%,rgba(255,94,58,.03),transparent 60%),radial-gradient(rgba(20,20,40,.10) 1px,transparent 1px); background-size:100% 100%,100% 100%,24px 24px; }
[data-theme="light"] .tpl-controls { background:linear-gradient(180deg,rgba(255,255,255,.92),rgba(240,240,246,.86)); }
[data-theme="light"] .hero-glow { opacity:.5; }
[data-theme="light"] .preview-card { filter:saturate(.9); }
/* light 主题下白色叠加在浅色背景上不可见，改用深色叠加恢复 hover 反馈 */
[data-theme="light"] .btn-ghost:hover,
[data-theme="light"] .lang-toggle:hover,
[data-theme="light"] .nav-toggle:hover,
[data-theme="light"] .theme-toggle:hover,
[data-theme="light"] .tpl-filters button:hover { background:rgba(20,20,40,.06); }
[data-theme="light"] .tpl-filters button .ct { background:rgba(20,20,40,.08); }

/* Context menu (统一弹窗风格) */
.ctx-menu {
  position: fixed; z-index: 310;
  background: linear-gradient(180deg,var(--panel),var(--ink-2));
  border: 1px solid var(--line-2); border-radius: 16px;
  box-shadow: var(--shadow-lg),0 0 0 1px rgba(255,255,255,.04),inset 0 1px 0 rgba(255,255,255,.08);
  min-width: 208px; padding: 7px; display: none;
  animation: pickerIn .24s var(--ease-spring);
  backdrop-filter: blur(16px) saturate(1.2); -webkit-backdrop-filter: blur(16px) saturate(1.2);
}
.ctx-menu.open { display: block; }
.ctx-item { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; padding: 10px 14px; border: none; background: transparent; color: var(--text); font-size: 13px; font-weight: 500; cursor: pointer; font-family: var(--font-body); white-space: nowrap; border-radius: 10px; transition: background .18s var(--ease-smooth), color .18s var(--ease-smooth), transform .18s var(--ease-out), box-shadow .18s var(--ease-smooth); }
.ctx-item:hover { background: var(--accent-soft); color: var(--accent); transform: translateX(2px); box-shadow: 0 4px 12px -6px var(--accent-glow) }
.ctx-item:active { transform: translateX(0) scale(.98) }
.ctx-item.danger { color: #ff5e3a; }
.ctx-item.danger:hover { background: rgba(255,94,58,.14); color: #ff5e3a; box-shadow: 0 4px 12px -6px rgba(255,94,58,.3) }
.ctx-sep { height: 1px; background: linear-gradient(90deg,transparent,var(--line-2),transparent); margin: 5px 6px; }

/* ===== Drag-over state — 已合并至 .ed-stage 主样式 ===== */

/* ===== Search highlight ===== */
.tpl-meta b mark.hl {
  background: linear-gradient(135deg, rgba(124,108,255,0.25), rgba(91,141,239,0.25));
  color: inherit; border-radius: 3px; padding: 0 2px;
}

/* ===== Mobile editor touch support (768px 以下属性面板触摸增强，.ed-props/.ed-topbar 已由 820px 块处理) ===== */
@media (max-width: 768px) {
  .ed-stage { padding-bottom: 60px; }
  .ed-bb-info { font-size: 11px; }
  .prop-row { flex-wrap: wrap; }
  .prop-row label { min-width: 60px; font-size: 12px; }
  .prop-row input[type="range"] { flex: 1; min-width: 100px; }
  .align-btns { flex-wrap: wrap; }
  .gradient-grid { grid-template-columns: repeat(4, 1fr); }
  .picker-tab { white-space: nowrap; }
}

/* ===== Editor enhanced (美化增强) ===== */
/* 顶栏按钮分组：通过 margin-left 实现自然分组（无装饰条） */
.ed-top-actions { gap: 6px; }
.ed-top-actions .btn-sm { border-radius: 10px; transition: transform .15s, background .15s, box-shadow .15s; }
.ed-top-actions .btn-sm:hover { transform: translateY(-1px); }
.ed-top-actions .btn-sm:active { transform: translateY(0); }
.ed-top-actions .btn-sm#edDownPng { box-shadow: 0 6px 18px -8px var(--accent); }
.ed-top-actions .btn-sm#edDownPng:hover { box-shadow: 0 10px 24px -8px var(--accent), 0 0 0 1px rgba(255,94,58,.3); }
.ed-top-actions .ed-select { border-radius: 10px; transition: border-color .15s, box-shadow .15s; }
.ed-top-actions .ed-select:hover { border-color: var(--text-3); }
.ed-top-actions .ed-select:focus { box-shadow: 0 0 0 3px var(--accent-soft); }
/* 分组间距：历史/网格/图层为视图组；尺寸/倍数/缩放为画布组；复制/导出为输出组 */
.ed-top-actions #edHistory { margin-left: 6px; }
.ed-top-actions #edSize { margin-left: 6px; }
.ed-top-actions #edZoomCtl { margin-left: 6px; }
.ed-top-actions #edDownCopy { margin-left: 6px; }
.ed-top-actions #edShortcuts { margin-left: 6px; }

/* 属性面板动画与分组样式 */
.props-panel { animation: propFade .22s ease-out; }
@keyframes propFade { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); } }
.prop-group { margin-bottom: 12px; padding: 14px 15px; background: linear-gradient(180deg, var(--panel) 0%, var(--ink-2) 100%); border: 1px solid var(--line); border-radius: 12px; box-shadow: 0 2px 8px -4px rgba(0,0,0,.3); }
.prop-group h4 { font-size: 11px; letter-spacing: .1em; color: var(--text-2); margin-bottom: 12px; display: flex; align-items: center; gap: 8px; text-transform: uppercase; font-weight: 700; cursor: pointer; user-select: none; transition: color .15s; }
.prop-group h4:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px}
.prop-group h4::after { content: ""; width: 5px; height: 5px; border-right: 1.5px solid var(--text-3); border-bottom: 1.5px solid var(--text-3); transform: rotate(45deg); transition: transform .2s var(--ease-out); margin-left: auto; margin-right: 2px; flex-shrink: 0; }
.prop-group.collapsed h4::after { transform: rotate(-45deg); }
.prop-group > h4:hover { color: var(--text); }
.prop-group.collapsed > h4 { margin-bottom: 0; opacity: .7; }
.prop-group .group-content { display: flex; flex-direction: column; gap: 10px; transition: opacity .15s; }
.prop-row input[type=text]:focus, .prop-row textarea:focus, .prop-row select:focus { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); outline: none; }
/* 输入框统一质感 */
.prop-row input[type=text], .prop-row textarea, .prop-row select {
  background: var(--ink-2); border: 1px solid var(--line-2); color: var(--text);
  border-radius: 8px; padding: 8px 10px; font-family: var(--font-body); font-size: 13px;
  width: 100%; transition: border-color .15s, box-shadow .15s;
}
.prop-row input[type=number] {
  background: var(--ink-2); border: 1px solid var(--line-2); color: var(--text);
  border-radius: 8px; padding: 8px 10px; font-family: var(--font-mono); font-size: 13px;
  transition: border-color .15s, box-shadow .15s;
}
.prop-row select {
  appearance: none; -webkit-appearance: none; -moz-appearance: none;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'><path fill='%23a7a7c2' d='M6 8L2 4h8z'/></svg>");
  background-repeat: no-repeat; background-position: right 10px center; padding-right: 28px;
}
.prop-row textarea { font-family: var(--font-body); line-height: 1.5; resize: vertical; min-height: 64px; }
.prop-row input[type=range] { height: 5px; border-radius: 3px; background: var(--line-2); accent-color: var(--accent); cursor: pointer; }
.prop-row input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; width: 16px; height: 16px; border-radius: 50%; background: var(--accent); border: 2px solid #fff; box-shadow: 0 2px 6px rgba(0,0,0,.3); cursor: pointer; transition: transform .15s; }
.prop-row input[type=range]::-webkit-slider-thumb:hover { transform: scale(1.15); }
.prop-row input[type=range]::-moz-range-thumb { width: 14px; height: 14px; border-radius: 50%; background: var(--accent); border: 2px solid #fff; box-shadow: 0 2px 6px rgba(0,0,0,.3); cursor: pointer; }
.prop-row input[type=color] { width: 34px; height: 28px; border: 1px solid var(--line-2); border-radius: 7px; cursor: pointer; background: none; padding: 2px; transition: transform .15s; }
.prop-row input[type=color]:hover { transform: scale(1.08); }
.prop-val { font-family: var(--font-mono); font-weight: 600; font-size: 12px; min-width: 38px; text-align: right; }
/* 带标签的按钮组行：标签 + 按钮组横向排列 */
.prop-row-btns { align-items: center; }
.prop-row-btns label { font-size: 13px; color: var(--text-2); min-width: 56px; flex-shrink: 0; }
.prop-row-btns .font-btns, .prop-row-btns .align-btns { flex: 1; display: flex; gap: 4px; }
.prop-row-btns .mini-btn { flex: 1; min-width: 0; padding: 7px 4px; font-size: 13px; }
/* 文本输入行：textarea 占满宽度 */
.prop-row-textarea { align-items: stretch; }
.prop-row-textarea textarea { flex: 1; min-height: 64px; resize: vertical; }
/* 色板行：占满宽度 */
.prop-row-swatches { align-items: flex-start; }
.prop-row-swatches .swatches { flex: 1; }
/* 预设按钮行 */
.prop-row-presets { align-items: center; }
.preset-btns { flex: 1; display: flex; gap: 5px; }
.preset-btns .mini-btn { flex: 1; white-space: nowrap; }
/* 全宽按钮行 */
.prop-row-btn-full { align-items: center; }
.prop-row-btn-full .mini-btn { flex: 1; }
/* 颜色行：label + color input */
.prop-row-color { align-items: center; }
.prop-row-color > label { font-size: 13px; color: var(--text-2); min-width: 56px; flex-shrink: 0; }
.prop-row-color > input[type=color] { flex-shrink: 0; }
.color-chip-btn{
  width:34px;height:28px;border-radius:8px;border:1px solid var(--line-2);cursor:pointer;
  padding:0;flex-shrink:0;position:relative;overflow:hidden;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.1);
  transition:transform .15s var(--ease-spring),box-shadow .15s,border-color .15s;
  background-image:linear-gradient(45deg,var(--line) 25%,transparent 25%,transparent 75%,var(--line) 75%),linear-gradient(45deg,var(--line) 25%,transparent 25%,transparent 75%,var(--line) 75%);
  background-size:8px 8px;background-position:0 0,4px 4px;
}
.color-chip-btn::after{content:"";position:absolute;inset:0;background:var(--chip-color,transparent)}
.color-chip-btn:hover{transform:scale(1.08);border-color:var(--text-2);box-shadow:0 4px 12px -2px rgba(0,0,0,.4)}
.color-chip-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
/* 透明色标记：红色斜线 */
.color-chip-btn.is-transparent::before{content:"";position:absolute;top:50%;left:-2px;right:-2px;height:2px;background:var(--danger);transform:rotate(-45deg);transform-origin:center;z-index:2;box-shadow:0 0 4px rgba(255,94,58,.5)}
/* 开关行：label + checkbox */
.prop-row-toggle { align-items: center; }
.prop-row-toggle > label { font-size: 13px; color: var(--text-2); min-width: 56px; flex-shrink: 0; }
.prop-row-toggle > input[type=checkbox] { width: 16px; height: 16px; accent-color: var(--accent); cursor: pointer; flex-shrink: 0; }
/* 背景图片交互式预览区 */
.bgimg-preview{display:flex;justify-content:center;padding:14px 0 10px;margin-bottom:8px}
.bgimg-stage{position:relative;overflow:hidden;border-radius:10px;border:1px solid var(--line-2);background:#0a0a14;background-image:linear-gradient(45deg,#1a1a28 25%,transparent 25%,transparent 75%,#1a1a28 75%),linear-gradient(45deg,#1a1a28 25%,transparent 25%,transparent 75%,#1a1a28 75%);background-size:14px 14px;background-position:0 0,7px 7px;box-shadow:0 6px 18px -8px rgba(0,0,0,.6),inset 0 1px 0 rgba(255,255,255,.06);cursor:grab}
.bgimg-stage:active{cursor:grabbing}
.bgimg-layer{position:absolute;user-select:none;-webkit-user-drag:none;pointer-events:auto;transition:box-shadow .2s,filter .2s;will-change:left,top,width,height}
.bgimg-layer img{width:100%;height:100%;display:block;pointer-events:none;-webkit-user-drag:none}
.bgimg-layer:hover{box-shadow:0 0 0 2px var(--accent),0 4px 14px -4px var(--accent-glow)}
.bgimg-layer.is-dragging{box-shadow:0 0 0 2px var(--accent),0 6px 20px -4px var(--accent-glow);filter:brightness(1.08)}
.bgimg-hint{font-size:11px;color:var(--text-3);text-align:center;padding:6px 8px;line-height:1.5;margin-top:4px;background:rgba(255,255,255,.03);border-radius:8px;border:1px solid var(--line)}
/* 美化开关行（背景面板开启/关闭） */
.prop-row-switch{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:6px 0;margin-bottom:10px}
.prop-row-switch>label{font-size:13px;font-weight:600;color:var(--text);flex:1;cursor:pointer}
.bg-switch{position:relative;width:42px;height:24px;border-radius:13px;background:var(--ink);border:1px solid var(--line-2);cursor:pointer;flex-shrink:0;transition:background .25s var(--ease-smooth),border-color .25s,box-shadow .25s;padding:0;margin:0}
.bg-switch::before{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:var(--text-3);box-shadow:0 2px 6px -1px rgba(0,0,0,.5);transition:transform .28s var(--ease-spring),background .25s,box-shadow .25s}
.bg-switch.is-on{background:linear-gradient(135deg,var(--accent),#ff7a45);border-color:transparent;box-shadow:0 0 12px -2px var(--accent-glow),inset 0 1px 0 rgba(255,255,255,.2)}
.bg-switch.is-on::before{transform:translateX(18px);background:#fff;box-shadow:0 2px 8px -1px rgba(0,0,0,.4)}
.bg-switch:hover{border-color:var(--text-2)}
.bg-switch.is-on:hover{box-shadow:0 0 16px -2px var(--accent-glow),inset 0 1px 0 rgba(255,255,255,.25)}
/* 范围滑块行：label + 滑块 + 数值 */
.prop-row-range label { font-size: 13px; color: var(--text-2); min-width: 56px; flex-shrink: 0; }
.prop-row-range input[type=range] { flex: 1; min-width: 0; }
.prop-row-range .prop-val { min-width: 38px; text-align: right; font-size: 12px; }
/* 旋转行：label 旁边两行控件（滑块+数值 / 输入框+重置） */
.prop-row-rotate > label { font-size: 13px; color: var(--text-2); min-width: 56px; flex-shrink: 0; align-self: center; }
.rotate-ctl { display: flex; flex-direction: column; gap: 6px; flex: 1; min-width: 0; }
.rotate-row { display: flex; align-items: center; gap: 8px; }
.rotate-row input[type=range] { flex: 1; min-width: 0; }
.rotate-row .prop-val { min-width: 38px; text-align: right; font-size: 12px; flex-shrink: 0; }
.rotate-row .rotate-num { flex: 1; min-width: 0; }
.rotate-row .rotate-reset { flex-shrink: 0; }
.rotate-num { text-align: center; padding: 5px 4px; font-size: 12px; font-family: var(--font-mono); background: var(--ink-2); border: 1px solid var(--line-2); color: var(--text); border-radius: 7px; }
.rotate-num:focus { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent-soft); outline: none; }
.rotate-reset { min-width: 36px; padding: 5px 8px; font-size: 12px; }
/* 色板行：紧凑排列 */
.prop-row .swatches { gap: 6px; }
.prop-row .swatch { width: 24px; height: 24px; }
/* 变换组：X/Y/W/H 输入框 */
.transform-row { align-items: center; }
.transform-row label { font-size: 13px; color: var(--text-2); min-width: 56px; flex-shrink: 0; }
.transform-inputs { display: flex; align-items: center; gap: 6px; flex: 1; min-width: 0; }
.transform-inputs .input-prefix { font-size: 11px; color: var(--text-3); font-weight: 700; min-width: 12px; text-align: center; }
.transform-inputs input[type=number] {
  flex: 1; min-width: 0; background: var(--ink-2); border: 1px solid var(--line-2); color: var(--text);
  border-radius: 7px; padding: 6px 8px; font-family: var(--font-mono); font-size: 12px; text-align: center;
  transition: border-color .15s, box-shadow .15s;
}
.transform-inputs input[type=number]:focus { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent-soft); outline: none; }
.transform-inputs input[type=number]::-webkit-inner-spin-button,
.transform-inputs input[type=number]::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }
/* mini-btn 精致化 — 已合并至主样式 */

/* 底部栏精致化 — 已合并至上方 .ed-bottombar 主规则 */

/* 返回按钮美化 — 已合并至主样式 */

/* 缩放控件美化 — 已合并至主样式 */

/* 图层面板与裁剪栏美化 — 已合并至主样式 */

/* Picker 面板美化 — 已合并至主样式 */

/* Picker 滚动条统一 */
.picker-body::-webkit-scrollbar { width: 6px; }
.picker-body::-webkit-scrollbar-thumb { background: var(--line-2); border-radius: 4px; }

/* 撤销/重做按钮状态 — 已合并至主样式 */

/* 历史按钮和工具按钮 */
#edHistory, #edGrid, #edLayers, #edShortcuts { transition: background .15s, transform .15s, color .15s; }
#edHistory:hover, #edGrid:hover, #edLayers:hover, #edShortcuts:hover { transform: translateY(-1px); color: var(--accent); }
#edGrid.on, #edLayers.on { background: var(--accent-soft); color: var(--accent); border-color: var(--accent); }

/* 浅色主题编辑器增强 */
[data-theme="light"] .canvas-wrap { box-shadow: 0 30px 80px -30px rgba(20,20,60,.18), 0 0 0 1px #e6e6ee; }
[data-theme="light"] .prop-group { background: #fff; border-color: #e6e6ee; }
[data-theme="light"] .ed-loading { background: rgba(245,245,250,.9); }

/* 深色主题编辑器增强 */
[data-theme="dark"] .ed-stage { background-color:#0f0f1a; background-image:radial-gradient(circle at 50% 0,rgba(124,108,255,.06),transparent 60%),radial-gradient(circle at 50% 100%,rgba(255,94,58,.05),transparent 60%),radial-gradient(rgba(255,255,255,.05) 1px, transparent 1px); background-size:100% 100%,100% 100%,24px 24px; }
[data-theme="dark"] .canvas-wrap { box-shadow: 0 30px 80px -30px rgba(0,0,0,.7), 0 0 0 1px #22223e; }
[data-theme="dark"] .prop-group { background: #161628; border-color: #22223e; }

/* 编辑器打开时隐藏页面滚动条 */
body.ed-open { overflow: hidden; }

/* ===== 历史记录面板 (统一弹窗风格) ===== */
.hist-summary{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 14px;margin-bottom:8px;background:linear-gradient(180deg,var(--panel-2),var(--panel));border:1px solid var(--line);border-radius:12px;box-shadow:inset 0 1px 0 rgba(255,255,255,.03)}
.hist-summary-txt{font-size:12px;color:var(--text-2);font-weight:600}
.hist-clear-btn{background:transparent;border:1px solid var(--line-2);border-radius:8px;padding:5px 11px;color:var(--text-3);font-size:11px;font-weight:600;cursor:pointer;font-family:var(--font-body);transition:background .15s var(--ease-smooth),color .15s var(--ease-smooth),border-color .15s var(--ease-smooth),transform .15s var(--ease-spring),box-shadow .15s var(--ease-smooth)}
.hist-clear-btn:hover{background:#e5484d;color:#fff;border-color:#e5484d;transform:translateY(-1px);box-shadow:0 4px 10px -4px rgba(229,72,77,.4)}
.hist-section-label{padding:10px 14px 5px;font-size:10px;font-weight:700;color:var(--text-3);text-transform:uppercase;letter-spacing:.07em}
.hist-section-label.redo{color:var(--violet)}
.history-list { max-height:50vh; overflow-y:auto; padding: 4px 8px 8px; }
.history-list::-webkit-scrollbar { width: 6px; }
.history-list::-webkit-scrollbar-thumb { background: var(--line-2); border-radius: 4px; }
.history-row {
  display:flex;align-items:center;gap:10px;padding:10px 12px;
  border:1px solid transparent;border-radius:11px;cursor:pointer;
  font-size:13px;margin-bottom:5px;
  transition: background .18s var(--ease-smooth), border-color .18s var(--ease-smooth), transform .18s var(--ease-out), opacity .15s, box-shadow .18s var(--ease-smooth);
}
.history-row:hover { background: var(--panel-2); border-color: var(--line-2); transform: translateX(3px); }
.history-row:last-child { margin-bottom: 0; }
/* 撤销区：正常可点击 */
.history-row.undo { opacity:.92 }
.history-row.undo:hover { border-color: var(--accent); box-shadow:0 4px 12px -6px var(--accent-glow) }
/* 当前状态：高亮 + 不可点击 */
.history-row.current { background: var(--accent-soft); border-color: var(--accent); cursor:default; transform:none; box-shadow:0 4px 14px -8px var(--accent-glow) }
.history-row.current:hover { transform:none; background: var(--accent-soft); }
/* 重做区：稍暗 */
.history-row.redo { opacity:.5 }
.history-row.redo:hover { opacity:1; border-color: var(--violet); background: var(--violet-soft); box-shadow:0 4px 12px -6px rgba(124,108,255,.3) }
.history-ico {
  width:28px;height:28px;border-radius:9px;
  display:inline-flex;align-items:center;justify-content:center;
  background:var(--panel-2);color:var(--text-2);flex-shrink:0;
  transition:background .15s,color .15s,transform .15s var(--ease-spring)
}
.history-row.undo .history-ico{color:var(--accent)}
.history-row.current .history-ico{background:linear-gradient(135deg,var(--accent),#ff7a45);color:#fff;box-shadow:0 4px 10px -3px var(--accent-glow)}
.history-row.redo .history-ico{color:var(--violet)}
.history-info { display:flex;flex-direction:column;gap:1px;flex:1;min-width:0;overflow:hidden }
.hist-action{color:var(--text);font-weight:600;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hist-dim{color:var(--text-3);font-size:11px;font-variant-numeric:tabular-nums}
.hist-current-tag{display:inline-block;margin-left:6px;padding:1px 7px;background:var(--accent);color:#fff;border-radius:999px;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;vertical-align:middle}
.history-time { font-size: 11px; color: var(--text-3); font-variant-numeric: tabular-nums; flex-shrink: 0; }

/* ===== FAQ page enhanced ===== */
.faq-group { margin-bottom: 40px; }
.faq-group-head { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; padding-bottom: 12px; border-bottom: 1px solid var(--line); }
.faq-group-icon { font-size: 24px; line-height: 1; }
.faq-group-head h2 { font-family: var(--font-display); font-size: 22px; font-weight: 700; margin: 0; }
.faq-group-items details {
  border: 1px solid var(--line); border-radius: 12px; margin-bottom: 10px;
  background: var(--panel); transition: .2s; overflow: hidden;
}
.faq-group-items details:hover { border-color: var(--text-3); }
.faq-group-items details[open] { border-color: var(--accent); box-shadow: 0 4px 20px -8px var(--accent-soft); }
.faq-group-items summary {
  padding: 16px 20px; font-weight: 700; font-size: 15px; cursor: pointer;
  list-style: none; display: flex; align-items: center; justify-content: space-between; gap: 12px;
}
.faq-group-items summary::-webkit-details-marker { display: none; }
.faq-group-items summary::after { content: "+"; font-size: 20px; font-weight: 400; color: var(--text-3); transition: transform .2s; }
.faq-group-items details[open] summary::after { transform: rotate(45deg); color: var(--accent); }
.faq-group-items details p { padding: 0 20px 16px; color: var(--text-2); line-height: 1.7; font-size: 14px; margin: 0; }

@media (max-width: 768px) {
  .faq-group-head h2 { font-size: 18px; }
  .faq-group-items summary { padding: 14px 16px; font-size: 14px; }
  .faq-group-items details p { padding: 0 16px 14px; font-size: 13px; }
}

/* ===== Templates page redesign ===== */
/* ===== 无障碍：尊重「减少动态效果」系统偏好 ===== */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
}

/* ===== Full-screen template preview ===== */
.tpl-preview{position:fixed;inset:0;z-index:420;background:rgba(8,8,16,.82);backdrop-filter:blur(14px) saturate(1.2);-webkit-backdrop-filter:blur(14px) saturate(1.2);display:none;place-items:center;padding:24px;animation:fadeIn .24s var(--ease-smooth)}
.tpl-preview.open{display:grid}
.tpl-preview-dialog{position:relative;display:flex;flex-direction:column;max-width:min(1100px,94vw);max-height:92vh;width:auto;background:var(--panel);border:1px solid var(--line-2);border-radius:18px;overflow:hidden;box-shadow:0 30px 80px -20px rgba(0,0,0,.6)}
.tpl-preview-close{position:absolute;top:10px;right:10px;z-index:2;width:36px;height:36px;border-radius:50%;border:none;background:rgba(15,15,26,.6);color:#fff;font-size:18px;line-height:1;cursor:pointer;display:grid;place-items:center;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);transition:background .15s,transform .15s}
.tpl-preview-close:hover{background:rgba(15,15,26,.88);transform:scale(1.06)}
.tpl-preview-stage{display:flex;align-items:center;justify-content:center;padding:30px;background:var(--ink);min-height:0;flex:1;overflow:auto}
.tpl-preview-img{max-width:100%;max-height:64vh;object-fit:contain;border-radius:6px;box-shadow:0 12px 40px -12px rgba(0,0,0,.55)}
.tpl-preview-foot{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 18px;border-top:1px solid var(--line-2);background:var(--panel)}
.tpl-preview-meta{display:flex;flex-direction:column;gap:2px;min-width:0}
.tpl-preview-meta b{font-size:15px;color:var(--text);font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tpl-preview-meta span{font-size:12px;color:var(--text-2);white-space:nowrap}
.tpl-preview-actions{display:flex;gap:10px;flex-shrink:0}
@media(max-width:640px){
  .tpl-preview{padding:10px}
  .tpl-preview-dialog{max-width:100vw;max-height:96vh;border-radius:12px}
  .tpl-preview-stage{padding:16px}
  .tpl-preview-img{max-height:52vh}
  .tpl-preview-foot{flex-direction:column;align-items:stretch;gap:10px}
  .tpl-preview-actions{flex-direction:column-reverse}
  .tpl-preview-actions .btn{width:100%}
}

/* ---------- 打印样式 ---------- */
@media print {
  /* 隐藏非内容元素 */
  .site-header, .site-footer, .mobile-menu, .nav-toggle, .theme-toggle, .lang-toggle,
  .ad-slot, .editor-overlay, .skip-link, .hero-glow, .cta-section,
  .tpl-filters, .tpl-pager, .preview-card { display:none !important; }
  /* 正文全宽 */
  main { width:100% !important; max-width:100% !important; padding:0 !important; }
  body { background:#fff !important; color:#000 !important; font-size:12pt; line-height:1.6; }
  h1, h2, h3 { page-break-after:avoid; color:#000 !important; }
  a { color:#000 !important; text-decoration:underline; }
  a[href]::after { content:" (" attr(href) ")"; font-size:10pt; color:#555; }
  /* 法律文档打印优化 */
  .legal-content, .about-wrap { max-width:100% !important; padding:0 !important; }
  p, li, blockquote { page-break-inside:avoid; }
  .section { padding:16pt 0 !important; }
}

