/* ============================================================
   Base + components (Phase 0) — 搭配 tokens.css
   ============================================================ */

*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; }

html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
@view-transition { navigation: auto; }

body {
  font-family: var(--font-sans);
  font-weight: var(--fw-body);
  font-size: var(--text-base);
  line-height: var(--leading-normal);
  color: var(--text-primary);
  background: var(--bg-base);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  font-feature-settings: 'cv05' 1, 'ss03' 1;
  overflow-x: hidden;
}

:lang(zh-Hant), [lang="zh-TW"] p { line-height: var(--leading-cjk); }

a { color: inherit; text-decoration: none; }
img, svg { display: block; max-width: 100%; }
:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 4px; }

/* ---- Typography ---- */
h1, h2, h3 { font-family: var(--font-display); font-weight: var(--fw-heading); letter-spacing: -0.015em; line-height: var(--leading-tight); }
.display { font-weight: var(--fw-display); letter-spacing: -0.02em; line-height: 1.08; font-size: clamp(2.25rem, 6vw, var(--text-5xl)); }
.eyebrow { font-family: var(--font-mono); font-size: var(--text-xs); letter-spacing: .12em; text-transform: uppercase; color: var(--accent-text); display: inline-flex; align-items: center; gap: .5rem; }
.lead { font-size: var(--text-lg); color: var(--text-secondary); max-width: 52ch; }
.muted { color: var(--text-muted); }
.mono { font-family: var(--font-mono); }

/* ---- Layout ---- */
.container { width: 100%; max-width: var(--container); margin-inline: auto; padding-inline: var(--gutter); }
.section { padding-block: var(--space-24); }
.section-head { max-width: 48ch; margin-bottom: var(--space-12); }
.section-head h2 { font-size: var(--text-3xl); margin-top: var(--space-3); }
.section-head p { color: var(--text-secondary); margin-top: var(--space-3); }

/* ---- Nav (sticky glass) ---- */
.nav { position: sticky; top: 0; z-index: 50; backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
  background: color-mix(in oklch, var(--bg-base) 72%, transparent); border-bottom: 1px solid var(--border-soft); }
.nav-inner { display: flex; align-items: center; justify-content: space-between; height: 64px; }
.brand { display: inline-flex; align-items: center; gap: .6rem; font-weight: var(--fw-medium); font-size: var(--text-lg); }
.brand svg { width: 26px; height: 26px; }
.nav-links { display: flex; align-items: center; gap: var(--space-6); }
.nav-links a { color: var(--text-secondary); font-size: var(--text-sm); transition: color var(--dur-fast) var(--ease-out); }
.nav-links a:hover { color: var(--text-primary); }
.nav-cta { color: var(--text-primary) !important; padding: .5rem .9rem; border: 1px solid var(--border); border-radius: var(--radius-sm); }
.nav-cta:hover { border-color: var(--accent); }

/* ---- Buttons ---- */
.btn { display: inline-flex; align-items: center; gap: .5rem; font-weight: var(--fw-medium); font-size: var(--text-sm);
  padding: .7rem 1.2rem; border-radius: var(--radius-sm); border: 1px solid transparent; cursor: pointer;
  transition: transform var(--dur-fast) var(--ease-out), background var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out); }
.btn svg { width: 18px; height: 18px; }
.btn-primary { background: var(--accent); color: var(--on-accent); }
.btn-primary:hover { filter: brightness(1.08); transform: translateY(-1px); }
.btn-ghost { color: var(--text-primary); border-color: var(--border); background: transparent; }
.btn-ghost:hover { border-color: var(--accent); background: var(--surface-1); }

/* ---- Hero（不對稱、左對齊、噪點，非置中漸層）---- */
.hero { position: relative; padding-block: clamp(4rem, 12vh, 8rem) var(--space-16); overflow: hidden; }
.hero::before { content: ""; position: absolute; inset: 0; z-index: -1; opacity: .5;
  background:
    radial-gradient(60% 50% at 18% 0%, color-mix(in oklch, var(--accent) 14%, transparent), transparent 70%),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.7' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E"); }
.hero .display { max-width: 18ch; }
.hero .lead { margin-top: var(--space-6); }
.hero-actions { display: flex; gap: var(--space-3); margin-top: var(--space-8); flex-wrap: wrap; }
.hero-meta { display: flex; gap: var(--space-6); margin-top: var(--space-12); flex-wrap: wrap; }
.hero-meta div { display: flex; flex-direction: column; }
.hero-meta b { font-size: var(--text-2xl); font-family: var(--font-display); }
.hero-meta span { font-size: var(--text-sm); color: var(--text-muted); }

/* ---- Trust strip ---- */
.trust { display: flex; flex-wrap: wrap; gap: var(--space-3); }
.pill { display: inline-flex; align-items: center; gap: .45rem; font-size: var(--text-sm); color: var(--text-secondary);
  padding: .4rem .8rem; border: 1px solid var(--border); border-radius: 999px; background: var(--surface-1); }
.pill svg { width: 15px; height: 15px; color: var(--accent-text); }

/* ---- Bento 工具牆 ---- */
.bento { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--gutter); }
.tile { position: relative; display: flex; flex-direction: column; background: var(--surface-1); border: 1px solid var(--border);
  border-radius: var(--radius-lg); padding: var(--space-6); overflow: hidden; isolation: isolate;
  transition: border-color var(--dur-base) var(--ease-out), transform var(--dur-base) var(--ease-out); }
.tile:hover { border-color: color-mix(in oklch, var(--accent) 60%, var(--border)); transform: translateY(-3px); }
.tile.col-2 { grid-column: span 2; }
.tile.row-2 { grid-row: span 2; }
.tile-head { display: flex; align-items: center; gap: .6rem; margin-bottom: var(--space-3); }
.tile-logo { width: 30px; height: 30px; flex: none; }
.tile h3 { font-size: var(--text-xl); }
.tile .tagline { font-size: var(--text-sm); color: var(--accent-text); margin-bottom: var(--space-2); }
.tile p { font-size: var(--text-sm); color: var(--text-secondary); }
.tile-foot { margin-top: auto; padding-top: var(--space-4); display: flex; align-items: center; justify-content: space-between; }
.tile-foot .go { display: inline-flex; align-items: center; gap: .35rem; font-size: var(--text-sm); font-weight: var(--fw-medium); color: var(--text-primary); }
.tile-foot .go svg { width: 16px; height: 16px; transition: transform var(--dur-fast) var(--ease-out); }
.tile:hover .tile-foot .go svg { transform: translateX(3px); }
.tag { font-family: var(--font-mono); font-size: var(--text-xs); padding: .2rem .5rem; border-radius: 6px;
  border: 1px solid var(--border); color: var(--text-muted); }
.tag-paid { color: #f0c674; border-color: color-mix(in oklch, #f0c674 40%, var(--border)); background: color-mix(in oklch, #f0c674 8%, transparent); }
.tag-soon { color: var(--text-muted); border-style: dashed; }
/* 截圖佔位（待真實產品截圖替換）*/
.shot { margin-top: var(--space-4); aspect-ratio: 16/10; border-radius: var(--radius-sm); border: 1px solid var(--border-soft);
  background:
    linear-gradient(135deg, color-mix(in oklch, var(--accent-grad-a) 22%, var(--surface-2)), color-mix(in oklch, var(--accent-grad-b) 18%, var(--surface-2)));
  display: flex; align-items: center; justify-content: center; color: var(--text-muted); font-size: var(--text-xs); font-family: var(--font-mono); }
.tile-accent { color: var(--accent); }

/* ---- Footer ---- */
.footer { border-top: 1px solid var(--border-soft); padding-block: var(--space-16); margin-top: var(--space-24); }
.footer-grid { display: flex; flex-wrap: wrap; justify-content: space-between; gap: var(--space-8); }
.footer a { color: var(--text-secondary); font-size: var(--text-sm); }
.footer a:hover { color: var(--text-primary); }
.footer .disclaimer { color: var(--text-muted); font-size: var(--text-sm); max-width: 60ch; margin-top: var(--space-6); }

/* ---- Scroll-driven reveal（原生、零 JS；不支援則直接顯示）---- */
@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    .reveal { animation: rise linear both; animation-timeline: view(); animation-range: entry 5% entry 45%; }
  }
}
@keyframes rise { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: none; } }

/* ---- Responsive ---- */
@media (max-width: 900px) {
  .bento { grid-template-columns: repeat(2, 1fr); }
  .tile.col-2 { grid-column: span 2; }
}
@media (max-width: 600px) {
  .bento { grid-template-columns: 1fr; }
  .tile.col-2, .tile.row-2 { grid-column: auto; grid-row: auto; }
  .nav-links a:not(.nav-cta) { display: none; }
}

/* ---- 廣告位（合併、克制、iframe 隔離）---- */
.ad-slot { display: flex; flex-direction: column; align-items: center; gap: var(--space-3); padding-block: var(--space-12); }
.ad-slot .ad-label { font-family: var(--font-mono); font-size: var(--text-xs); letter-spacing: .12em; text-transform: uppercase; color: var(--text-muted); }
.ad-slot iframe { border: 0; max-width: 100%; overflow: hidden; border-radius: var(--radius-sm); }

/* ============================================================
   產品頁元件（MediaGrab / MediaStudio 共用）
   ============================================================ */
/* 下載按鈕 */
.dl-row { display: flex; gap: var(--space-3); flex-wrap: wrap; margin-top: var(--space-8); }
.dl { display: flex; flex-direction: column; gap: 3px; padding: .8rem 1.3rem; border-radius: var(--radius-sm);
  border: 1px solid var(--border); background: var(--surface-1); min-width: 210px; color: var(--text-primary);
  transition: border-color var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out); }
.dl:hover { border-color: var(--accent); transform: translateY(-1px); }
.dl .dl-os { font-weight: var(--fw-medium); display: flex; align-items: center; gap: .5rem; }
.dl .dl-os svg { width: 18px; height: 18px; }
.dl .dl-sub { font-size: var(--text-xs); color: var(--text-muted); }
.dl.is-primary { background: var(--accent); color: var(--on-accent); border-color: transparent; }
.dl.is-primary .dl-sub { color: color-mix(in oklch, var(--on-accent) 65%, transparent); }
.dl.is-primary::after { content: "建議"; font-family: var(--font-mono); font-size: 10px; letter-spacing: .08em;
  position: absolute; }
.version-note { margin-top: var(--space-4); font-size: var(--text-sm); color: var(--text-muted); font-family: var(--font-mono); }
.version-note a { color: var(--accent-text); }

/* 安裝指引 */
.guides { display: grid; grid-template-columns: 1fr 1fr; gap: var(--gutter); margin-top: var(--space-12); }
.guide { background: var(--surface-1); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: var(--space-6); }
.guide h3 { font-size: var(--text-lg); margin-bottom: var(--space-4); display: flex; align-items: center; gap: .5rem; }
.guide h3 svg { width: 20px; height: 20px; color: var(--accent); }
.guide ol { padding-left: 1.3rem; display: flex; flex-direction: column; gap: .6rem; color: var(--text-secondary); font-size: var(--text-sm); }
.guide code { font-family: var(--font-mono); background: var(--surface-2); padding: .1rem .4rem; border-radius: 4px; font-size: .85em; color: var(--text-primary); }
.guide .tip { margin-top: var(--space-4); font-size: var(--text-sm); color: var(--text-muted); border-left: 2px solid var(--accent); padding-left: .8rem; }

/* 功能網格 */
.features { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--gutter); }
.feature { background: var(--surface-1); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: var(--space-6);
  transition: border-color var(--dur-base) var(--ease-out); }
.feature:hover { border-color: color-mix(in oklch, var(--accent) 50%, var(--border)); }
.feature .ic { width: 26px; height: 26px; color: var(--accent); margin-bottom: var(--space-4); }
.feature h3 { font-size: var(--text-lg); margin-bottom: var(--space-2); }
.feature p { font-size: var(--text-sm); color: var(--text-secondary); }

/* 步驟 */
.steps { counter-reset: s; display: flex; flex-direction: column; gap: var(--space-4); max-width: 64ch; padding: 0; }
.steps li { list-style: none; counter-increment: s; position: relative; padding-left: 2.6rem; color: var(--text-secondary); min-height: 1.8rem; }
.steps li::before { content: counter(s); position: absolute; left: 0; top: -2px; width: 1.8rem; height: 1.8rem; border-radius: 50%;
  background: var(--accent-soft); color: var(--accent-text); display: flex; align-items: center; justify-content: center;
  font-family: var(--font-mono); font-size: var(--text-sm); border: 1px solid color-mix(in oklch, var(--accent) 30%, transparent); }
.steps strong { color: var(--text-primary); font-weight: var(--fw-medium); }

/* FAQ */
.faq { display: flex; flex-direction: column; gap: var(--space-3); max-width: 72ch; }
.faq-item { border: 1px solid var(--border); border-radius: var(--radius); padding: var(--space-6); background: var(--surface-1); }
.faq-item h3 { font-size: var(--text-base); margin-bottom: var(--space-2); }
.faq-item p { font-size: var(--text-sm); color: var(--text-secondary); }
.faq-item a { color: var(--accent-text); }

/* Ko-fi 浮動鈕（重新設計，融入系統）*/
.kofi-float { position: fixed; bottom: 20px; right: 20px; z-index: 40; display: inline-flex; align-items: center; gap: .5rem;
  background: var(--surface-2); color: var(--text-primary); padding: .6rem 1rem; border-radius: 999px; font-size: var(--text-sm);
  font-weight: var(--fw-medium); border: 1px solid var(--border); backdrop-filter: blur(10px);
  transition: border-color var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out); }
.kofi-float:hover { border-color: var(--accent); transform: translateY(-2px); }
.kofi-float svg { width: 17px; height: 17px; color: #FF5E5B; }

.section-alt { background: var(--surface-1); border-block: 1px solid var(--border-soft); }

@media (max-width: 860px) { .features { grid-template-columns: repeat(2, 1fr); } .guides { grid-template-columns: 1fr; } }
@media (max-width: 560px) { .features { grid-template-columns: 1fr; } }

/* fix: 主下載鍵「建議」徽章定位 */
.dl { position: relative; }
.dl.is-primary::after { top: 8px; right: 12px; opacity: .65; color: var(--on-accent); }
