/* ==========================================================================
   TKS｜土凱思 官網 v2 —— 2026-09-27
   風格：電影感深色 / Three.js 場景 hero / 章節式排版 / 等寬字標籤（參考 threeui.com）
   ========================================================================== */

:root{
  --bg:#07090d; --bg-2:#0b0f16; --bg-3:#0f141d;
  --panel:rgba(255,255,255,.028); --panel-2:rgba(255,255,255,.055);
  --line:rgba(255,255,255,.08); --line-2:rgba(255,255,255,.16);
  --text:#e9edf3; --text-2:#aab3c2; --muted:#7d8797;
  --cyan:#19d3ff; --cyan-2:#8fe9ff; --violet:#7c5cff;
  --glow:rgba(25,211,255,.18); --err:#ff6b7a;
  --font-display:"Space Grotesk","Noto Sans TC","PingFang TC","Microsoft JhengHei",system-ui,sans-serif;
  --font-body:"Inter","Noto Sans TC","PingFang TC","Microsoft JhengHei",system-ui,sans-serif;
  --font-mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --nav-h:72px; --radius:14px; --ease:cubic-bezier(.2,.7,.2,1);
}

*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--text);font:400 16px/1.7 var(--font-body);
  -webkit-font-smoothing:antialiased;overflow-x:hidden}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
::selection{background:rgba(25,211,255,.3);color:#fff}
:focus-visible{outline:2px solid var(--cyan);outline-offset:3px;border-radius:4px}

.container{width:100%;max-width:1200px;margin:0 auto;padding:0 clamp(20px,5vw,64px)}
section{position:relative;padding:clamp(72px,10vw,140px) 0}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---------- 全站背景：微格線 + 暈光 ---------- */
.site-bg{position:fixed;inset:0;z-index:-1;pointer-events:none;background:
  radial-gradient(900px 500px at 85% -10%,rgba(124,92,255,.10),transparent 60%),
  radial-gradient(800px 600px at -10% 40%,rgba(25,211,255,.07),transparent 60%),
  var(--bg)}
.site-bg::after{content:"";position:absolute;inset:0;opacity:.35;
  background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);
  background-size:72px 72px;
  -webkit-mask-image:radial-gradient(ellipse 70% 60% at 50% 30%,#000 20%,transparent 100%);
          mask-image:radial-gradient(ellipse 70% 60% at 50% 30%,#000 20%,transparent 100%)}

/* ---------- 導覽列 ---------- */
.nav{position:fixed;inset:0 0 auto 0;height:var(--nav-h);z-index:40;display:flex;align-items:center;
  border-bottom:1px solid transparent;transition:background .35s,border-color .35s,backdrop-filter .35s}
.nav.scrolled{background:rgba(7,9,13,.72);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-color:var(--line)}
.nav-inner{display:flex;align-items:center;justify-content:space-between;gap:24px}
.brand{display:flex;align-items:center;gap:12px;font:600 17px var(--font-display);letter-spacing:.01em}
.brand img{width:34px;height:34px;border-radius:9px;box-shadow:0 0 0 1px var(--line-2)}
.brand small{font:500 10px var(--font-mono);letter-spacing:.2em;color:var(--muted);display:block;line-height:1;margin-top:3px}
.nav-links{display:flex;align-items:center;gap:34px;list-style:none;margin:0;padding:0}
.nav-links a{font:500 12px var(--font-mono);letter-spacing:.18em;text-transform:uppercase;color:var(--text-2);
  position:relative;padding:6px 0;transition:color .2s}
.nav-links a:hover{color:#fff}
.nav-links a.active{color:var(--cyan)}
.nav-links a.active::after{content:"";position:absolute;left:0;right:0;bottom:-2px;height:1px;background:var(--cyan)}
.nav-cta{font:500 12px var(--font-mono)!important;letter-spacing:.12em!important;padding:10px 18px!important;
  border:1px solid var(--line-2);border-radius:999px;color:var(--text)!important;transition:border-color .2s,background .2s,color .2s!important}
.nav-cta:hover{border-color:var(--cyan);background:rgba(25,211,255,.08);color:var(--cyan-2)!important}
.hamburger{display:none;width:44px;height:44px;flex-direction:column;justify-content:center;gap:6px;align-items:center;margin-right:-10px}
.hamburger span{width:22px;height:1.5px;background:var(--text);transition:transform .3s,opacity .3s}
.hamburger.open span:nth-child(1){transform:translateY(7.5px) rotate(45deg)}
.hamburger.open span:nth-child(2){opacity:0}
.hamburger.open span:nth-child(3){transform:translateY(-7.5px) rotate(-45deg)}
.mnav{position:fixed;inset:0;z-index:39;background:rgba(7,9,13,.97);display:none;flex-direction:column;justify-content:center;padding:0 32px;gap:8px}
.mnav.open{display:flex}
.mnav a{font:600 clamp(32px,9vw,48px)/1.3 var(--font-display);color:var(--text);border-bottom:1px solid var(--line);padding:14px 0}
.mnav a small{display:block;font:500 11px var(--font-mono);letter-spacing:.2em;color:var(--cyan);margin-bottom:4px}
.mnav .mnav-foot{margin-top:28px;font:500 11px var(--font-mono);letter-spacing:.14em;color:var(--muted)}

/* ---------- 側邊章節導軌（桌機） ---------- */
.rail{position:fixed;right:28px;top:50%;transform:translateY(-50%);z-index:30;display:flex;flex-direction:column;gap:14px}
.rail a{display:flex;align-items:center;justify-content:flex-end;gap:10px;font:500 10.5px var(--font-mono);letter-spacing:.14em;color:var(--muted);transition:color .2s}
.rail a span.l{opacity:0;transform:translateX(6px);transition:opacity .2s,transform .2s}
.rail a span.d{width:6px;height:6px;border-radius:50%;background:var(--muted);flex:none;transition:background .2s,box-shadow .2s}
.rail a:hover span.l,.rail a.active span.l{opacity:1;transform:none}
.rail a.active{color:var(--cyan)}
.rail a.active span.d{background:var(--cyan);box-shadow:0 0 12px var(--cyan)}
@media (max-width:1100px){.rail{display:none}}

/* ---------- 共用元件 ---------- */
.chapter{display:inline-flex;align-items:center;gap:12px;font:500 11.5px/1 var(--font-mono);letter-spacing:.2em;text-transform:uppercase;color:var(--cyan)}
.chapter::before{content:"";width:28px;height:1px;background:var(--cyan);opacity:.8}
.sec-head{display:flex;align-items:baseline;gap:16px;margin-bottom:18px}
.sec-no{font:500 13px var(--font-mono);color:var(--cyan)}
.sec-label{font:500 11.5px var(--font-mono);letter-spacing:.22em;text-transform:uppercase;color:var(--muted)}
h2.sec-title{font:600 clamp(28px,4vw,48px)/1.15 var(--font-display);letter-spacing:-.02em;margin:0 0 18px;max-width:900px}
.sec-sub{max-width:720px;color:var(--text-2);font-size:clamp(15px,1.3vw,17px);line-height:1.85;font-weight:300;margin:0 0 clamp(36px,5vw,64px)}
.sec-sub strong,.lead strong{color:var(--text);font-weight:500}

.btn{display:inline-flex;align-items:center;gap:10px;padding:14px 26px;border-radius:999px;font:500 14px var(--font-body);letter-spacing:.02em;
  border:1px solid var(--line-2);color:var(--text);transition:transform .25s var(--ease),border-color .25s,background .25s,color .25s,box-shadow .25s;white-space:nowrap}
.btn:hover{transform:translateY(-2px)}
.btn-primary{background:var(--text);color:#0a0d12;border-color:transparent}
.btn-primary:hover{background:#fff;box-shadow:0 12px 40px -12px rgba(255,255,255,.35)}
.btn-ghost:hover{border-color:var(--cyan);color:var(--cyan-2);background:rgba(25,211,255,.06)}
.btn .arr{font-family:var(--font-mono);transition:transform .25s}
.btn:hover .arr{transform:translateX(3px)}

.card{position:relative;padding:28px;border:1px solid var(--line);border-radius:var(--radius);
  background:linear-gradient(180deg,var(--panel-2),var(--panel));
  transition:border-color .3s,transform .35s var(--ease),box-shadow .35s}
.card:hover{border-color:rgba(25,211,255,.45);transform:translateY(-3px);box-shadow:0 30px 70px -40px var(--glow)}
.card .idx{position:absolute;top:18px;right:20px;font:500 11px var(--font-mono);letter-spacing:.12em;color:var(--muted)}
.card .ico{width:44px;height:44px;border-radius:11px;display:grid;place-items:center;font-size:21px;
  background:rgba(25,211,255,.08);border:1px solid rgba(25,211,255,.22);margin-bottom:20px}
.card h3{font:600 clamp(18px,1.6vw,21px)/1.35 var(--font-display);margin:0 0 10px;letter-spacing:-.01em}
.card p{color:var(--text-2);font-size:14.5px;line-height:1.8;margin:0;font-weight:300}
.tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}
.tag{font:500 11px var(--font-mono);letter-spacing:.06em;padding:5px 10px;border:1px solid var(--line);border-radius:6px;color:var(--text-2);background:rgba(0,0,0,.2)}
.tag.hi{color:var(--cyan-2);border-color:rgba(25,211,255,.3);background:rgba(25,211,255,.06)}

.grid{display:grid;gap:18px}
.grid-2{grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr))}
.grid-3{grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr))}
.grid-4{grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr))}

.divider{height:1px;background:linear-gradient(90deg,transparent,var(--line-2),transparent);margin:0 auto;max-width:1200px}

/* ---------- 揭示動畫 ---------- */
.reveal{opacity:0;transform:translateY(22px);transition:opacity .9s var(--ease),transform .9s var(--ease);transition-delay:var(--d,0s)}
.reveal.visible{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){.reveal{opacity:1;transform:none;transition:none} html{scroll-behavior:auto}}

/* ---------- Hero ---------- */
.hero{position:relative;min-height:100vh;min-height:100svh;display:grid;align-items:center;padding:calc(var(--nav-h) + 40px) 0 120px;overflow:hidden;isolation:isolate}
.hero.hero-sub{min-height:62vh;padding-bottom:80px}
.hero canvas{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:-1}
.hero::before{content:"";position:absolute;inset:0;z-index:-2;background:
  radial-gradient(700px 420px at 72% 45%,rgba(25,211,255,.10),transparent 65%),
  radial-gradient(600px 400px at 20% 80%,rgba(124,92,255,.10),transparent 65%)}
.hero::after{content:"";position:absolute;left:0;right:0;bottom:0;height:200px;z-index:-1;background:linear-gradient(180deg,transparent,var(--bg))}
.hero-inner{position:relative;z-index:1;max-width:780px}
.hero h1{font:600 clamp(36px,5.6vw,70px)/1.1 var(--font-display);letter-spacing:-.025em;margin:22px 0 22px}
.hero h1 .accent{background:linear-gradient(90deg,var(--cyan) 0%,var(--cyan-2) 50%,#fff 100%);-webkit-background-clip:text;background-clip:text;color:transparent}
.hero-sub h1{font-size:clamp(34px,5vw,60px)}
.lead{max-width:640px;font-size:clamp(16px,1.5vw,19px);line-height:1.85;color:var(--text-2);font-weight:300;margin:0}
.cta-row{display:flex;flex-wrap:wrap;gap:14px;margin-top:36px}
.hero-stats{display:flex;flex-wrap:wrap;gap:36px 48px;list-style:none;margin:52px 0 0;padding:28px 0 0;border-top:1px solid var(--line)}
.hero-stats b{display:block;font:600 26px/1.1 var(--font-display);letter-spacing:-.01em}
.hero-stats b em{font-style:normal;color:var(--cyan)}
.hero-stats span{display:block;font:500 10.5px var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-top:6px}
.hero-word{position:absolute;left:50%;bottom:-.14em;transform:translateX(-50%);z-index:0;pointer-events:none;user-select:none;
  font:700 clamp(150px,26vw,400px)/1 var(--font-display);letter-spacing:.04em;color:transparent;
  -webkit-text-stroke:1px rgba(255,255,255,.13);white-space:nowrap}
.scroll-cue{position:absolute;left:clamp(20px,5vw,64px);bottom:36px;display:flex;align-items:center;gap:12px;font:500 10.5px var(--font-mono);letter-spacing:.2em;color:var(--muted)}
.scroll-cue i{display:block;width:1px;height:44px;background:var(--line-2);position:relative;overflow:hidden}
.scroll-cue i::after{content:"";position:absolute;left:0;top:-100%;width:100%;height:100%;background:var(--cyan);animation:cue 2.2s var(--ease) infinite}
@keyframes cue{0%{top:-100%}60%,100%{top:100%}}
.hero-side{position:absolute;right:clamp(20px,5vw,64px);top:50%;transform:translateY(-50%);writing-mode:vertical-rl;font:500 11px var(--font-mono);letter-spacing:.3em;color:var(--muted);opacity:.7}
@media (max-width:1100px){.hero-side{display:none}}

/* ---------- 首頁：About 四格 ---------- */
.about-grid{display:grid;grid-template-columns:1.1fr 1fr;gap:56px;align-items:start}
.about-text p{color:var(--text-2);font-size:17px;line-height:1.9;font-weight:300;margin:0 0 18px}
.about-text p strong{color:var(--text);font-weight:500}
.mini-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.mini{padding:22px;border:1px solid var(--line);border-radius:12px;background:var(--panel);display:flex;gap:14px;align-items:flex-start;transition:border-color .3s,background .3s}
.mini:hover{border-color:rgba(25,211,255,.4);background:var(--panel-2)}
.mini .ico{font-size:20px;line-height:1;margin-top:2px}
.mini b{display:block;font:600 15px var(--font-display);margin-bottom:4px}
.mini span{font-size:13px;color:var(--muted)}
@media (max-width:900px){.about-grid{grid-template-columns:1fr;gap:36px}}
@media (max-width:480px){.mini-grid{grid-template-columns:1fr}}

/* ---------- 首頁：Why 三條 ---------- */
.why-list{display:grid;gap:0;border-top:1px solid var(--line)}
.why{display:grid;grid-template-columns:90px 1fr;gap:24px;padding:36px 0;border-bottom:1px solid var(--line);align-items:start}
.why .no{font:600 40px/1 var(--font-display);color:transparent;-webkit-text-stroke:1px var(--cyan);letter-spacing:-.02em}
.why h3{font:600 clamp(19px,2vw,24px)/1.35 var(--font-display);margin:4px 0 10px;letter-spacing:-.01em}
.why p{margin:0;color:var(--text-2);font-weight:300;line-height:1.85;max-width:760px}
.why p strong{color:var(--text);font-weight:500}
@media (max-width:640px){.why{grid-template-columns:1fr;gap:8px}}

/* ---------- 首頁：合作模式 ---------- */
.model{padding:36px}
.model .kicker{font:500 11px var(--font-mono);letter-spacing:.18em;text-transform:uppercase;color:var(--cyan);margin-bottom:14px;display:block}
.model h3{font:600 clamp(20px,2vw,26px)/1.3 var(--font-display);margin:0 0 16px}
.model p{color:var(--text-2);font-weight:300;line-height:1.85;margin:0 0 12px}
.model p:last-child{margin:0}
.model .fit{margin-top:22px;padding-top:18px;border-top:1px dashed var(--line-2);font-size:13.5px;color:var(--muted)}
.model .fit b{color:var(--text-2);font-weight:500}

/* ---------- 首頁：流程 ---------- */
.steps{display:grid;grid-template-columns:repeat(4,1fr);gap:22px;position:relative}
.steps::before{content:"";position:absolute;left:0;right:0;top:26px;height:1px;background:linear-gradient(90deg,var(--cyan),var(--line) 60%,transparent)}
.step{position:relative;padding-top:56px}
.step .dot{position:absolute;top:21px;left:0;width:11px;height:11px;border-radius:50%;background:var(--bg);border:1.5px solid var(--cyan);box-shadow:0 0 0 6px var(--bg)}
.step .no{font:500 11px var(--font-mono);letter-spacing:.2em;color:var(--cyan);display:block;margin-bottom:10px}
.step h3{font:600 18px/1.4 var(--font-display);margin:0 0 8px}
.step p{margin:0;color:var(--text-2);font-size:14.5px;font-weight:300;line-height:1.8}
@media (max-width:900px){.steps{grid-template-columns:1fr 1fr}.steps::before{display:none}.step{padding-top:40px}.step .dot{top:8px}}
@media (max-width:520px){.steps{grid-template-columns:1fr}}

/* ---------- CTA ---------- */
.cta-panel{position:relative;overflow:hidden;padding:clamp(48px,7vw,88px) clamp(24px,6vw,80px);border:1px solid var(--line-2);border-radius:24px;
  background:linear-gradient(135deg,rgba(25,211,255,.08),rgba(124,92,255,.08) 60%,transparent);text-align:center}
.cta-panel::before{content:"";position:absolute;inset:-40%;background:radial-gradient(closest-side,rgba(25,211,255,.14),transparent 70%);animation:breathe 9s ease-in-out infinite;pointer-events:none}
@keyframes breathe{0%,100%{transform:scale(.9) translate(0,0)}50%{transform:scale(1.05) translate(4%,6%)}}
.cta-panel>*{position:relative}
.cta-panel h2{font:600 clamp(28px,4vw,46px)/1.15 var(--font-display);letter-spacing:-.02em;margin:16px 0}
.cta-panel p{max-width:680px;margin:0 auto 32px;color:var(--text-2);font-weight:300;line-height:1.85}
.cta-panel p strong{color:var(--text);font-weight:500}
.cta-panel .cta-row{justify-content:center;margin-top:0}

/* ---------- Footer ---------- */
footer{border-top:1px solid var(--line);padding:56px 0 30px;margin-top:40px}
.foot-grid{display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:36px;margin-bottom:44px}
.foot-brand{display:flex;flex-direction:column;gap:14px}
.foot-brand p{margin:0;color:var(--muted);font-size:14px;max-width:360px;line-height:1.8}
.foot-col h4{font:500 11px var(--font-mono);letter-spacing:.2em;text-transform:uppercase;color:var(--muted);margin:0 0 16px}
.foot-col a,.foot-col span{display:block;color:var(--text-2);font-size:14.5px;padding:5px 0;transition:color .2s}
.foot-col a:hover{color:var(--cyan-2)}
.foot-bottom{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;padding-top:22px;border-top:1px solid var(--line);font:500 11px var(--font-mono);letter-spacing:.12em;color:var(--muted)}
@media (max-width:760px){.foot-grid{grid-template-columns:1fr;gap:28px}}

/* ---------- Projects ---------- */
.case-list{border-top:1px solid var(--line)}
.case{display:grid;grid-template-columns:130px 1fr auto;gap:32px;padding:clamp(40px,5vw,64px) 0;border-bottom:1px solid var(--line);align-items:start}
.case-no{font:600 clamp(48px,6vw,72px)/1 var(--font-display);letter-spacing:-.03em;color:transparent;-webkit-text-stroke:1px rgba(255,255,255,.32);transition:-webkit-text-stroke-color .3s,color .3s}
.case:hover .case-no{-webkit-text-stroke-color:var(--cyan)}
.case-scale{display:inline-flex;align-items:center;gap:8px;font:500 11px var(--font-mono);letter-spacing:.1em;padding:6px 11px;border-radius:6px;
  background:rgba(25,211,255,.08);color:var(--cyan-2);border:1px solid rgba(25,211,255,.28);margin-bottom:14px}
.case-scale::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--cyan);box-shadow:0 0 8px var(--cyan)}
.case h3{font:600 clamp(22px,2.6vw,30px)/1.25 var(--font-display);letter-spacing:-.015em;margin:0 0 14px}
.case .desc{margin:0;color:var(--text-2);font-weight:300;line-height:1.85;max-width:760px}
.case .desc strong{color:var(--text);font-weight:500}
.case ul{list-style:none;padding:0;margin:20px 0 0;display:grid;gap:8px;max-width:760px}
.case li{position:relative;padding-left:22px;color:var(--text-2);font-size:14.5px;line-height:1.75;font-weight:300}
.case li::before{content:"—";position:absolute;left:0;color:var(--cyan);font-family:var(--font-mono)}
.case-aside{display:flex;flex-direction:column;align-items:flex-end;gap:16px;padding-top:6px;min-width:160px}
.case-aside .tags{margin:0;justify-content:flex-end}
.case-link{font:500 12px var(--font-mono);letter-spacing:.14em;color:var(--text-2);display:inline-flex;gap:8px;align-items:center;transition:color .2s}
.case-link:hover{color:var(--cyan)}
.case-link .arr{transition:transform .25s}
.case-link:hover .arr{transform:translateX(4px)}
@media (max-width:960px){.case{grid-template-columns:90px 1fr}.case-aside{grid-column:2;align-items:flex-start}.case-aside .tags{justify-content:flex-start}}
@media (max-width:560px){.case{grid-template-columns:1fr;gap:12px}.case-aside{grid-column:1}}
.legal{margin-top:40px;border:1px solid var(--line);border-radius:12px;background:var(--panel);overflow:hidden}
.legal summary{cursor:pointer;list-style:none;padding:18px 22px;font:500 12px var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--muted);display:flex;justify-content:space-between;align-items:center}
.legal summary::-webkit-details-marker{display:none}
.legal summary::after{content:"+";font-size:16px;transition:transform .25s}
.legal[open] summary::after{transform:rotate(45deg)}
.legal-body{padding:4px 22px 22px;color:var(--text-2);font-size:14px;line-height:1.85;font-weight:300}
.legal-body p{margin:0 0 12px}
.legal-body strong{color:var(--text);font-weight:500}

/* ---------- Contact ---------- */
.contact-grid{display:grid;grid-template-columns:1fr 1.15fr;gap:clamp(36px,6vw,80px);align-items:start}
.contact-info h2{font:600 clamp(28px,3.6vw,44px)/1.15 var(--font-display);letter-spacing:-.02em;margin:0 0 18px}
.contact-info>p{color:var(--text-2);font-weight:300;line-height:1.85;margin:0 0 28px}
.info-list{border-top:1px solid var(--line)}
.info-item{display:flex;gap:18px;padding:18px 0;border-bottom:1px solid var(--line);align-items:flex-start}
.info-item .ico{width:40px;height:40px;flex:none;border-radius:10px;display:grid;place-items:center;font-size:17px;background:rgba(25,211,255,.08);border:1px solid rgba(25,211,255,.22)}
.info-item b{display:block;font:500 11px var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin-bottom:4px}
.info-item span{font-size:16px;color:var(--text)}
.info-item a:hover{color:var(--cyan-2)}
.services-box{margin-top:28px}
.services-box h4{font:500 11px var(--font-mono);letter-spacing:.2em;text-transform:uppercase;color:var(--muted);margin:0 0 12px}
.form-panel{padding:clamp(24px,3.5vw,40px);border:1px solid var(--line-2);border-radius:20px;background:linear-gradient(180deg,rgba(255,255,255,.05),rgba(255,255,255,.02));
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);position:relative}
.form-panel .chapter{margin-bottom:22px}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.field{margin-bottom:18px}
.field label{display:block;font:500 11px var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:8px}
.field label .req{color:var(--cyan)}
.field input,.field select,.field textarea{width:100%;padding:13px 14px;background:rgba(0,0,0,.35);border:1px solid var(--line-2);border-radius:10px;color:var(--text);
  font:400 15px/1.5 var(--font-body);outline:none;transition:border-color .2s,box-shadow .2s;-webkit-appearance:none;appearance:none}
.field textarea{min-height:150px;resize:vertical}
.field select{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M2 4l4 4 4-4' fill='none' stroke='%237d8797' stroke-width='1.5'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 14px center;padding-right:38px}
.field select option{background:#0f141d;color:var(--text)}
.field input::placeholder,.field textarea::placeholder{color:#5b6473}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--cyan);box-shadow:0 0 0 3px var(--glow)}
.field .error{border-color:var(--err)!important;box-shadow:none}
.err-msg{display:none;color:var(--err);font-size:12.5px;margin-top:6px}
.err-msg.show{display:block}
.hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}
.form-foot{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-top:8px}
.form-foot small{color:var(--muted);font-size:12.5px}
#formSubmitMsg{display:none;margin-top:14px;font-size:14px}
.success{display:none;text-align:center;padding:40px 10px}
.success.show{display:block}
.success .ok{width:64px;height:64px;border-radius:50%;margin:0 auto 20px;display:grid;place-items:center;font-size:28px;background:rgba(25,211,255,.1);border:1px solid rgba(25,211,255,.4);color:var(--cyan)}
.success h3{font:600 24px var(--font-display);margin:0 0 10px}
.success p{color:var(--text-2);margin:0 0 22px;font-weight:300}
@media (max-width:900px){.contact-grid{grid-template-columns:1fr}}
@media (max-width:560px){.form-row{grid-template-columns:1fr}}

/* ---------- RWD ---------- */
@media (max-width:860px){
  .nav-links{display:none}
  .hamburger{display:flex}
  .hero{padding-top:calc(var(--nav-h) + 24px)}
  .hero-word{font-size:34vw;bottom:-.1em}
  .scroll-cue{display:none}
  .hero-stats{gap:24px 32px}
}

/* ==========================================================================
   v2.1 特效層（2026-09-27）：進度條 / 游標 / 開場 / 卡片聚光光邊 / 跑馬燈 / 掃光 / 線條畫出
   ========================================================================== */
.progress{position:fixed;left:0;top:0;height:2px;width:0;z-index:60;pointer-events:none;
  background:linear-gradient(90deg,var(--cyan),var(--violet));box-shadow:0 0 12px var(--cyan)}

/* 自訂游標（只在有 hover 的精準指標裝置） */
.cur-dot,.cur-ring{position:fixed;left:0;top:0;pointer-events:none;z-index:100;border-radius:50%;display:none;will-change:transform}
.cur-dot{width:8px;height:8px;margin:-4px 0 0 -4px;background:var(--cyan);mix-blend-mode:screen;box-shadow:0 0 10px var(--cyan)}
.cur-ring{width:40px;height:40px;margin:-20px 0 0 -20px;border:1px solid rgba(25,211,255,.75);
  transition:width .25s var(--ease),height .25s var(--ease),margin .25s var(--ease),background .25s,border-color .25s}
.cur-ring.on{width:68px;height:68px;margin:-34px 0 0 -34px;background:rgba(25,211,255,.08);border-color:rgba(25,211,255,.4)}
.cur-ring.down{width:26px;height:26px;margin:-13px 0 0 -13px;background:rgba(25,211,255,.25)}
body.has-cursor .cur-dot,body.has-cursor .cur-ring{display:block}
body.has-cursor,body.has-cursor a,body.has-cursor button,body.has-cursor summary,body.has-cursor input,body.has-cursor select,body.has-cursor textarea{cursor:none}

/* 開場 boot */
.intro{position:fixed;inset:0;z-index:200;background:var(--bg);display:grid;place-items:center;
  transition:clip-path .8s cubic-bezier(.7,0,.2,1);clip-path:inset(0 0 0 0)}
.intro.done{clip-path:inset(0 0 100% 0)}
.intro-in{width:min(420px,80vw);font:500 11px/1.9 var(--font-mono);letter-spacing:.18em;color:var(--muted)}
.intro-logo{font:700 44px/1 var(--font-display);letter-spacing:.08em;color:var(--text);margin-bottom:22px}
.intro-logo::after{content:"_";color:var(--cyan);animation:blink 1s steps(2) infinite}
@keyframes blink{50%{opacity:0}}
.intro-lines{min-height:76px;text-transform:uppercase}
.intro-lines div{animation:fadein .3s var(--ease)}
@keyframes fadein{from{opacity:0;transform:translateX(-6px)}to{opacity:1;transform:none}}
.intro-bar{height:1px;background:var(--line-2);margin:16px 0 8px;overflow:hidden}
.intro-bar i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--cyan),var(--violet));box-shadow:0 0 12px var(--cyan)}
.intro-pct{text-align:right;color:var(--cyan)}
body.intro-lock{overflow:hidden}

/* 卡片：隨游標聚光 + 旋轉光邊 */
@property --ang{syntax:"<angle>";inherits:false;initial-value:0deg}
.card,.mini,.model{transform-style:preserve-3d;will-change:transform}
.card::before,.mini::before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .35s;
  background:radial-gradient(380px circle at var(--mx,50%) var(--my,50%),rgba(25,211,255,.16),transparent 45%)}
.card:hover::before,.mini:hover::before{opacity:1}
.card::after{content:"";position:absolute;inset:-1px;border-radius:inherit;padding:1px;pointer-events:none;opacity:0;transition:opacity .35s;
  background:conic-gradient(from var(--ang),transparent 0 62%,var(--cyan) 80%,var(--violet) 90%,transparent 100%);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;
  animation:spin-ang 3.2s linear infinite}
.card:hover::after{opacity:1}
@keyframes spin-ang{to{--ang:360deg}}
.mini{position:relative}

/* 跑馬燈 */
.ticker{overflow:hidden;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:16px 0;background:rgba(255,255,255,.015);
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent);mask-image:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent)}
.ticker-track{display:flex;width:max-content;white-space:nowrap;animation:tick 46s linear infinite;font:500 12px var(--font-mono);letter-spacing:.24em;text-transform:uppercase;color:var(--muted)}
.ticker-track span{padding-right:56px}
.ticker-track span::before{content:"◆";color:var(--cyan);margin-right:56px;font-size:8px;vertical-align:middle;text-shadow:0 0 8px var(--cyan)}
@keyframes tick{to{transform:translateX(-50%)}}
.ticker:hover .ticker-track{animation-play-state:paused}

/* 流程線條畫出 */
.steps::before{width:0;transition:width 1.8s var(--ease) .2s}
.steps.drawn::before{width:100%}
.steps .dot{transform:scale(0);transition:transform .5s var(--ease)}
.steps.drawn .dot{transform:scale(1)}
.steps.drawn .step:nth-child(1) .dot{transition-delay:.3s}.steps.drawn .step:nth-child(2) .dot{transition-delay:.7s}
.steps.drawn .step:nth-child(3) .dot{transition-delay:1.1s}.steps.drawn .step:nth-child(4) .dot{transition-delay:1.5s}

/* 案例列：hover 掃光 + 編號填色 */
.case{position:relative;overflow:hidden}
.case::after{content:"";position:absolute;top:0;left:-35%;width:30%;height:100%;pointer-events:none;transform:skewX(-18deg);
  background:linear-gradient(90deg,transparent,rgba(25,211,255,.07),transparent);transition:left .9s var(--ease)}
.case:hover::after{left:135%}
.case:hover .case-no{color:rgba(25,211,255,.12);text-shadow:0 0 30px rgba(25,211,255,.35)}

/* hero 文字進場：逐行位移 + 模糊 */
.hero h1.reveal,.hero .lead.reveal{filter:blur(8px)}
.hero h1.reveal.visible,.hero .lead.reveal.visible{filter:blur(0);transition:opacity .9s var(--ease),transform .9s var(--ease),filter .9s var(--ease);transition-delay:var(--d,0s)}
.hero-inner,.hero-word{will-change:transform}

/* 章節導軌線 */
.rail::before{content:"";position:absolute;right:2px;top:-24px;bottom:-24px;width:1px;background:linear-gradient(180deg,transparent,var(--line-2),transparent)}

/* 按鈕：hover 掃光 */
.btn{position:relative;overflow:hidden}
.btn::after{content:"";position:absolute;top:0;left:-60%;width:40%;height:100%;transform:skewX(-20deg);pointer-events:none;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.35),transparent);transition:left .6s var(--ease)}
.btn:hover::after{left:130%}

@media (prefers-reduced-motion:reduce){.ticker-track,.card::after,.intro-logo::after{animation:none}.hero h1.reveal,.hero .lead.reveal{filter:none}}

/* ==========================================================================
   v2.2 全頁 3D 世界 + 去方塊化（2026-09-27）
   ========================================================================== */
.scene-fixed{position:fixed;inset:0;width:100%;height:100%;display:block;z-index:-3;pointer-events:none}
.site-bg{z-index:-4}
.hero::before,.hero::after{display:none}
.hero{overflow:visible}
/* 章節文字後面壓一層暗，保持可讀 */
main section:not(.hero)::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:radial-gradient(70% 60% at 35% 50%,rgba(7,9,13,.82),rgba(7,9,13,.25) 70%,transparent)}
/* 巨大章節編號（視差） */
main section[data-no]::after{content:attr(data-no);position:absolute;right:clamp(8px,3vw,48px);top:clamp(20px,6vw,70px);z-index:-1;pointer-events:none;
  font:700 clamp(150px,22vw,340px)/1 var(--font-display);letter-spacing:-.04em;color:rgba(25,211,255,.035);-webkit-text-stroke:1px rgba(143,233,255,.16);
  transform:translateY(calc(var(--py,0) * 1px));will-change:transform}
main section[data-no]:nth-of-type(even)::after{right:auto;left:clamp(8px,3vw,48px)}
.divider{opacity:.5}
footer{background:linear-gradient(180deg,transparent,rgba(7,9,13,.85) 30%)}

/* 卡片去方塊：玻璃、幾乎無邊、錯落浮動 */
.card,.mini,.model{border-color:rgba(255,255,255,.05);background:rgba(255,255,255,.025);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}
.card:hover,.mini:hover{border-color:rgba(25,211,255,.4)}
@media (min-width:900px){
  .grid-2>.card:nth-child(even),.grid-2>.model:nth-child(even){margin-top:56px}
  .grid-3>.card:nth-child(3n+2){margin-top:44px}
  .mini-grid>.mini:nth-child(even){margin-top:28px}
  .card,.model,.mini{transform:translateY(calc(var(--fy,0) * 1px))}
}

/* 標題遮罩掀開 */
h2.sec-title.reveal,.contact-info h2.reveal{clip-path:inset(0 0 100% 0);transform:none}
h2.sec-title.reveal.visible,.contact-info h2.reveal.visible{clip-path:inset(0 0 -10% 0);transition:clip-path 1s var(--ease),opacity .6s;transition-delay:var(--d,0s)}

/* 流程線條：隨捲動畫出 */
.steps::before{width:calc(var(--draw,0) * 100%);transition:none}
.steps .dot{transform:scale(calc(var(--dot,0)))}

/* Why 列：hover 底色掃入 + 編號實心 */
.why{position:relative;padding-left:16px;margin-left:-16px;padding-right:16px;transition:background .4s}
.why::before{content:"";position:absolute;left:0;top:0;bottom:0;width:0;background:linear-gradient(90deg,rgba(25,211,255,.08),transparent);transition:width .6s var(--ease)}
.why:hover::before{width:100%}
.why:hover .no{color:var(--cyan);-webkit-text-stroke-color:var(--cyan);text-shadow:0 0 24px rgba(25,211,255,.6)}
.why .no{transition:color .4s,text-shadow .4s}

/* 服務區：桌機橫向捲動固定畫面 */
.hscroll{position:relative}
.hscroll-sticky{position:sticky;top:0;height:100vh;height:100svh;display:flex;flex-direction:column;justify-content:center;overflow:hidden;padding-top:var(--nav-h)}
.hscroll-head{margin-bottom:28px}
.hscroll-head .sec-sub{margin-bottom:0}
.hscroll-track{display:flex;gap:28px;will-change:transform;padding-right:clamp(20px,5vw,64px)}
.hscroll-track .card{flex:0 0 clamp(440px,36vw,560px);min-height:300px;margin-top:0!important;display:flex;flex-direction:column}
.hscroll-track .card:nth-child(even){transform:translateY(28px)}
.hscroll-track .card .big{font:700 96px/1 var(--font-display);letter-spacing:-.04em;color:transparent;-webkit-text-stroke:1px rgba(25,211,255,.45);position:absolute;right:22px;bottom:14px;pointer-events:none}
.hscroll-bar{height:1px;background:var(--line-2);margin-top:32px;position:relative;overflow:hidden}
.hscroll-bar i{position:absolute;left:0;top:0;height:100%;width:calc(var(--hp,0) * 100%);background:linear-gradient(90deg,var(--cyan),var(--violet));box-shadow:0 0 10px var(--cyan)}
.hscroll-hint{display:flex;justify-content:space-between;font:500 10.5px var(--font-mono);letter-spacing:.2em;color:var(--muted);margin-top:10px}
@media (max-width:899px){
  .hscroll{height:auto!important}
  .hscroll-sticky{position:static;height:auto;overflow:visible;padding-top:0}
  .hscroll-track{flex-direction:column;transform:none!important;padding-right:0}
  .hscroll-track .card{flex:auto;min-height:0;transform:none!important}
  .hscroll-bar,.hscroll-hint{display:none}
  main section[data-no]::after{font-size:120px;top:10px}
}

/* ==========================================================================
   v2.3 卡片 HUD 成形動畫 + 分層錯開進場（2026-09-27）
   ========================================================================== */
.hud{position:relative;
  background:radial-gradient(rgba(143,233,255,.07) 1px,transparent 1.3px) 0 0/18px 18px,linear-gradient(180deg,rgba(255,255,255,.045),rgba(255,255,255,.015))}
/* 四角括號 */
.hud .c{position:absolute;width:14px;height:14px;border:1px solid var(--cyan);opacity:0;pointer-events:none;z-index:3;
  transition:transform .55s var(--ease),opacity .55s,width .3s,height .3s,box-shadow .3s}
.hud .c1{top:9px;left:9px;border-right:0;border-bottom:0;transform:translate(-16px,-16px)}
.hud .c2{top:9px;right:9px;border-left:0;border-bottom:0;transform:translate(16px,-16px)}
.hud .c3{bottom:9px;left:9px;border-right:0;border-top:0;transform:translate(-16px,16px)}
.hud .c4{bottom:9px;right:9px;border-left:0;border-top:0;transform:translate(16px,16px)}
.hud.visible .c{opacity:.65;transform:none;transition-delay:calc(var(--d,0s) + .15s)}
.hud:hover .c{width:22px;height:22px;opacity:1;box-shadow:0 0 8px var(--cyan);transition-delay:0s}
/* 邊框描光 */
.hud .trace{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:3;overflow:visible}
.hud .trace rect{x:.75px;y:.75px;width:calc(100% - 1.5px);height:calc(100% - 1.5px);rx:13px;fill:none;stroke:var(--cyan-2);stroke-width:1.5;
  stroke-dasharray:100;stroke-dashoffset:100;opacity:0;filter:drop-shadow(0 0 6px var(--cyan));vector-effect:non-scaling-stroke}
.hud.visible .trace rect{animation:trace 1.2s var(--ease) var(--d,0s) forwards}
@keyframes trace{0%{stroke-dashoffset:100;opacity:1}75%{opacity:1}100%{stroke-dashoffset:0;opacity:0}}
/* 掃描線 */
.hud .scan{position:absolute;left:0;right:0;top:0;height:2px;opacity:0;pointer-events:none;z-index:4;
  background:linear-gradient(90deg,transparent,var(--cyan-2),transparent);box-shadow:0 0 16px 2px rgba(25,211,255,.6)}
.hud.visible .scan{animation:scan .9s var(--ease) calc(var(--d,0s) + .1s) forwards}
@keyframes scan{0%{top:0;opacity:1}100%{top:100%;opacity:0}}
/* 底部資料流虛線 */
.hud .dl{position:absolute;left:28px;right:28px;bottom:11px;height:1px;opacity:.28;pointer-events:none;
  background:repeating-linear-gradient(90deg,var(--cyan) 0 6px,transparent 6px 14px);
  -webkit-mask:linear-gradient(90deg,transparent,#000 25%,#000 75%,transparent);mask:linear-gradient(90deg,transparent,#000 25%,#000 75%,transparent);
  animation:dash 1.4s linear infinite}
@keyframes dash{to{background-position:28px 0}}
.hud .ico{box-shadow:0 0 0 1px rgba(25,211,255,.22),0 0 26px -6px var(--cyan);transition:transform .35s var(--ease),box-shadow .35s}
.hud:hover .ico{transform:rotate(-6deg) scale(1.08);box-shadow:0 0 0 1px rgba(25,211,255,.5),0 0 30px -4px var(--cyan)}

/* 進場：透視翻入 + 閃爍成形；結束後交回 hover 傾斜 */
.hud.reveal{opacity:0;transform:perspective(900px) rotateX(14deg) translateY(28px) scale(.96);transition:none;filter:none}
.hud.reveal.visible{animation:materialize 1s var(--ease) var(--d,0s) forwards}
.hud.reveal.settled{animation:none;opacity:1;transform:none;transition:border-color .3s,transform .35s var(--ease),box-shadow .35s}
@keyframes materialize{0%{opacity:0;transform:perspective(900px) rotateX(14deg) translateY(28px) scale(.96)}
  16%{opacity:.4}22%{opacity:.08}28%{opacity:.85}34%{opacity:.5}100%{opacity:1;transform:none}}
/* 內容分層成形 */
.hud.reveal>:not(.c):not(.trace):not(.scan):not(.dl){opacity:0;transform:translateY(12px);filter:blur(4px)}
.hud.reveal.visible>:not(.c):not(.trace):not(.scan):not(.dl){opacity:1;transform:none;filter:none;transition:opacity .6s var(--ease),transform .6s var(--ease),filter .6s var(--ease)}
.hud.reveal.visible>:nth-child(1){transition-delay:calc(var(--d,0s) + .3s)}
.hud.reveal.visible>:nth-child(2){transition-delay:calc(var(--d,0s) + .4s)}
.hud.reveal.visible>:nth-child(3){transition-delay:calc(var(--d,0s) + .5s)}
.hud.reveal.visible>:nth-child(4){transition-delay:calc(var(--d,0s) + .6s)}
.hud.reveal.visible>:nth-child(5){transition-delay:calc(var(--d,0s) + .7s)}
.hud.reveal.visible>:nth-child(6){transition-delay:calc(var(--d,0s) + .8s)}
.hud.reveal.visible .ico{animation:pop .7s cubic-bezier(.34,1.56,.64,1) calc(var(--d,0s) + .4s) both}
@keyframes pop{0%{transform:scale(0) rotate(-25deg)}100%{transform:none}}
.hud.reveal .tag{opacity:0;transform:scale(.6) translateY(6px)}
.hud.reveal.visible .tag{opacity:1;transform:none;transition:opacity .45s var(--ease),transform .45s cubic-bezier(.34,1.56,.64,1)}
.hud.reveal.visible .tag:nth-child(1){transition-delay:calc(var(--d,0s) + .75s)}
.hud.reveal.visible .tag:nth-child(2){transition-delay:calc(var(--d,0s) + .85s)}
.hud.reveal.visible .tag:nth-child(3){transition-delay:calc(var(--d,0s) + .95s)}
.hud.reveal.visible .tag:nth-child(4){transition-delay:calc(var(--d,0s) + 1.05s)}
.hscroll-track .card:nth-child(even){transform:none;margin-top:28px!important}
.hscroll-track .card .big{z-index:1}

/* 案例列 / Why / 流程 / 聯絡資訊：分層錯開 + 編號閃爍 + 左側光柱 */
.stg.reveal{opacity:1;transform:none;transition:none}
.stg.reveal>*,.stg.reveal>div>*{opacity:0;transform:translateY(14px);filter:blur(3px)}
.stg.reveal.visible>*,.stg.reveal.visible>div>*{opacity:1;transform:none;filter:none;transition:opacity .7s var(--ease),transform .7s var(--ease),filter .7s var(--ease)}
.stg.reveal.visible>:nth-child(1){transition-delay:.05s}.stg.reveal.visible>:nth-child(2){transition-delay:.15s}.stg.reveal.visible>:nth-child(3){transition-delay:.3s}
.stg.reveal.visible>div>:nth-child(1){transition-delay:.25s}.stg.reveal.visible>div>:nth-child(2){transition-delay:.35s}.stg.reveal.visible>div>:nth-child(3){transition-delay:.45s}.stg.reveal.visible>div>:nth-child(4){transition-delay:.55s}
.stg.reveal.visible .case-no,.stg.reveal.visible .why .no,.stg.reveal.visible>.no{animation:numflick .9s steps(1) .1s both}
@keyframes numflick{0%{opacity:0}12%{opacity:1}22%{opacity:.15}34%{opacity:1}46%{opacity:.35}58%{opacity:1}100%{opacity:1}}
.stg.reveal:not(.why)::before{content:"";position:absolute;left:0;top:14%;bottom:14%;width:2px;background:linear-gradient(180deg,transparent,var(--cyan),transparent);
  box-shadow:0 0 12px var(--cyan);transform:scaleY(0);transition:transform .8s var(--ease) .1s;pointer-events:none;z-index:1}
.stg.reveal.visible:not(.why)::before{transform:scaleY(1)}
.case.stg.reveal::before{top:24%;bottom:24%}
.stg .case-aside .tag{opacity:0;transform:scale(.6)}
.stg.visible .case-aside .tag{opacity:1;transform:none;transition:.45s cubic-bezier(.34,1.56,.64,1)}
.stg.visible .case-aside .tag:nth-child(2){transition-delay:.1s}.stg.visible .case-aside .tag:nth-child(3){transition-delay:.2s}
@media (prefers-reduced-motion:reduce){
  .hud.reveal,.hud.reveal>*,.stg.reveal>*,.stg.reveal>div>*,.hud.reveal .tag{opacity:1!important;transform:none!important;filter:none!important;animation:none!important;transition:none!important}
  .hud .dl,.hud .scan,.hud .trace{display:none}
}
