/* Oriforma website
 *
 * 色板与字体来自 docs/BRAND/ORIFORMA_LOGO_COLOR.md / ORIFORMA_LOGO.md：
 *   纸白 #FFFFFF 主底、微灰 #F4F5F3 区块底、青浅调 #DCE9E7 卡片底、铝 #A7ADB0 细线，
 *   深青 #0F5E58 品牌色（按钮、链接、字标的品牌色版），暗青 #08312E 深底（3D 视口、收尾横幅）。
 *   琥珀只用于活动物料，网站不用。
 * 字体：Archivo（SIL OFL，自托管，可变字体 wght 100–900 / wdth 62–125）。
 *   标题用加宽（wdth 112）+ 粗（700）；正文 400；规格、尺寸、标签用系统等宽字。
 */

/* Archivo 未到达前用度量匹配的本地字体顶替：行高用 Archivo 的 ascent/descent（878/-210 per 1000），宽度按实测比例
   （正文 Archivo 400 ≈ Arial × 1.008；标题 Archivo 700 @ 112% 拉宽 ≈ Arial 700 × 1.10），换字时文本几乎不重排（CLS） */
@font-face {
    font-family: 'Archivo Fallback';
    src: local('Arial'), local('Liberation Sans'), local('Helvetica Neue'), local('Helvetica');
    ascent-override: 87.8%; descent-override: 21%; line-gap-override: 0%; size-adjust: 100.8%;
}
@font-face {
    font-family: 'Archivo Fallback Wide';
    src: local('Arial Bold'), local('Arial'), local('Liberation Sans'), local('Helvetica Neue'), local('Helvetica');
    ascent-override: 87.8%; descent-override: 21%; line-gap-override: 0%; size-adjust: 110%;
}
@font-face {
    font-family: 'Archivo';
    src: url('/w/fonts/Archivo-variable.woff2?v=20261002a') format('woff2-variations'),
         url('/w/fonts/Archivo-variable.woff2?v=20261002a') format('woff2');
    font-weight: 100 900;
    font-stretch: 62% 125%;
    font-style: normal;
    font-display: swap;
}

:root {
    --paper: #FFFFFF;
    --mist: #F4F5F3;
    --tint: #DCE9E7;
    --alu: #A7ADB0;
    --petrol: #0F5E58;
    --deep: #08312E;
    --ink: #000000;
    --text: #15181A;
    --muted: #5C6468;
    --line: rgba(167, 173, 176, 0.55);
    --line-strong: #A7ADB0;

    --font-sans: 'Archivo', 'Archivo Fallback', 'Helvetica Neue', Helvetica, Arial, sans-serif;
    --font-wide: 'Archivo', 'Archivo Fallback Wide', 'Helvetica Neue', Helvetica, Arial, sans-serif;   /* 拉宽的标题用这个，回退字体按比例放宽 */
    --font-mono: ui-monospace, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;
    --max: clamp(1160px, 100vw - 400px, 1520px);   /* 全站容器：1160 起步，视口超 1560 后对称放宽、1520 封顶；导航、hero、各 section、页脚同宽 */
    --gutter: 24px;
    --radius: 6px;
}

*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
[hidden] { display: none !important; }   /* 带 display 的类（.btn / .nav-cta 等）会盖掉 hidden 属性的默认样式；已登录时隐藏注册入口靠的就是 hidden */
html { -webkit-text-size-adjust: 100%; }
body {
    font-family: var(--font-sans);
    background: var(--paper);
    color: var(--text);
    line-height: 1.55;
    font-size: 17px;
    -webkit-font-smoothing: antialiased;
}
a { color: var(--petrol); text-decoration: none; }
a:hover { text-decoration: underline; text-underline-offset: 3px; }
img { display: block; max-width: 100%; height: auto; }
button { font: inherit; }
::selection { background: var(--tint); }

.wrap { max-width: var(--max); margin: 0 auto; padding: 0 var(--gutter); }

/* ---------- 标志锁定版 ---------- */
.o-lockup { display: inline-flex; align-items: center; color: var(--ink); text-decoration: none; direction: ltr; }   /* 锁定版是固定图样，RTL 下也不翻转 */
.o-lockup:hover { text-decoration: none; }
.o-mark { width: 32px; height: 32px; flex: none; }
.o-wordmark {
    margin-left: 6px;                         /* 3/16 of mark height */
    font-weight: 600;
    font-size: 13px;                           /* 104/256 of mark height */
    letter-spacing: 0.08em;
    line-height: 1;
    padding-top: 1px;
}
.o-lockup-sm .o-mark { width: 24px; height: 24px; }
.o-lockup-sm .o-wordmark { font-size: 10px; margin-left: 4.5px; }

/* ---------- 导航 ---------- */
.site-nav {
    position: sticky; top: 0; z-index: 20;
    background: var(--paper);   /* 实色，不做毛玻璃 */
    border-bottom: 1px solid var(--line);
}
.site-nav-in {
    max-width: var(--max); margin: 0 auto; padding: 0 var(--gutter);
    height: 64px; display: flex; align-items: center; gap: 36px;
}
.nav-links { display: flex; gap: 28px; margin-inline-start: 8px; }
.nav-links a { color: var(--text); font-size: 15px; font-weight: 500; padding: 6px 0; border-bottom: 2px solid transparent; }
.nav-links a:hover { text-decoration: none; color: var(--petrol); }
.nav-links a[aria-current="page"] { border-bottom-color: var(--petrol); color: var(--petrol); }
.nav-actions { margin-inline-start: auto; display: flex; justify-content: flex-end; align-items: center; gap: 18px; }
.nav-signin { font-size: 15px; font-weight: 500; color: var(--text); }   /* 登录是安静的文字链接，注册（.nav-cta）才是实心主按钮 */
.nav-cta {
    display: inline-flex; align-items: center; height: 38px; padding: 0 16px;
    background: var(--petrol); color: #fff; border-radius: var(--radius); font-size: 15px; font-weight: 600;
}
.nav-cta:hover { background: var(--deep); text-decoration: none; color: #fff; }
.nav-toggle { display: none; margin-inline-start: auto; width: 40px; height: 40px; background: none; border: 1px solid var(--line-strong); border-radius: var(--radius); cursor: pointer; }
.nav-toggle span { display: block; width: 18px; height: 2px; background: var(--ink); margin: 4px auto; }

/* ---------- 文字 ---------- */
.eyebrow {
    font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.12em; text-transform: uppercase;
    color: var(--petrol); margin-bottom: 18px;
}
.display {
    font-family: var(--font-wide);
    font-weight: 700; font-stretch: 112%; letter-spacing: -0.025em; line-height: 1.02;
    font-size: clamp(40px, 6.2vw, 72px); color: var(--ink);
}
h2.display { font-size: clamp(30px, 4vw, 44px); }
.lede { font-size: 20px; line-height: 1.5; color: var(--muted); max-width: 34em; }
.num {
    font-family: var(--font-mono); font-size: 13px; color: var(--muted); letter-spacing: 0.08em;
}

/* ---------- 按钮 ---------- */
.btn {
    display: inline-flex; align-items: center; gap: 10px; height: 48px; padding: 0 22px;
    border-radius: var(--radius); font-weight: 600; font-size: 16px; border: 1px solid transparent; cursor: pointer;
}
.btn:hover { text-decoration: none; }
.btn-primary { background: var(--petrol); color: #fff; }
.btn-primary:hover { background: var(--deep); color: #fff; }
.btn-ghost { background: transparent; color: var(--ink); border-color: var(--muted); }   /* 边线对比 ≥3:1，才看得出是按钮 */
.btn-ghost:hover { border-color: var(--ink); }
.btn-light { background: #fff; color: var(--deep); }
.btn-light:hover { background: var(--tint); }
.btn[disabled], .btn[aria-disabled="true"] { opacity: 0.5; pointer-events: none; }
.btn svg { width: 18px; height: 18px; }
.btn-row { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 30px; }

/* ---------- 首页 hero：文案在左、录制画面在右，整幅在首屏内，构图左右对称 ----------
   用全站同一个容器（--max），与导航、下方各 section、页脚同宽同左缘。画面宽度另受首屏剩余高度约束
   （16:10 + 标题条，≈250px 的导航、内边距与余量），所以 1280×720 到 2560×1440 打开时都能看到整幅，不用滚动。 */
.hero { padding: 48px 0 0; }
.hero-split {
    display: grid; grid-template-columns: minmax(420px, 5fr) minmax(0, 7fr);
    gap: clamp(32px, 4vw, 64px); align-items: center;
}
.hero-copy { max-width: 560px; }
.hero-title { font-size: clamp(36px, 3.3vw, 52px); }   /* 「Parametric CAD.」在 440px 的文案列里仍是一行 */
.hero .lede { margin-top: 20px; font-size: 18px; }
.hero .btn-row { margin-top: 28px; }
.hero .btn { padding: 0 16px; }
.hero-note { margin-top: 16px; font-size: 14px; color: var(--muted); }
.frame-hero { width: min(100%, calc((100vh - 250px) * 1.6)); justify-self: end; }
.frame-hero img { aspect-ratio: 16 / 10; }
/* 三段轮播：叠放，淡入淡出 */
.reel { position: relative; aspect-ratio: 16 / 10; background: #F4F5F3; }
.reel-clip { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; transition: opacity .5s ease; }
.reel-clip.is-on { opacity: 1; }
.reel-clip:not([src]) { visibility: hidden; }
/* 标题条右侧的切换控件：上一段 / 三段进度条（可点）/ 下一段。只有脚本接管后才显示 */
#heroCap { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cap-pre { font-weight: inherit; }   /* 「Recorded session · 」前缀，窄屏隐藏给标题让位 */
.reel-nav { display: none; align-items: center; gap: 10px; margin-left: auto; flex: none; }
.frame-hero.is-live .reel-nav { display: flex; }
.reel-btn {
    width: 32px; height: 28px; padding: 0; display: inline-flex; align-items: center; justify-content: center;
    background: transparent; border: 1px solid rgba(220, 233, 231, 0.55); border-radius: 3px; color: var(--tint); cursor: pointer;
}
.reel-btn:hover { border-color: var(--tint); background: rgba(220, 233, 231, 0.12); }
.reel-btn svg { width: 14px; height: 14px; }
.reel-dots { display: inline-flex; gap: 6px; }
.reel-dot { width: 28px; height: 22px; padding: 0; background: none; border: 0; cursor: pointer; display: inline-flex; align-items: center; }
.reel-dot i { display: block; position: relative; width: 100%; height: 3px; border-radius: 2px; background: rgba(220, 233, 231, 0.45); overflow: hidden; }
.reel-dot i b { position: absolute; inset: 0; width: 0; background: var(--tint); }   /* 宽度与过渡时长由脚本按该段时长设置 */
.reel-dot:hover i { background: rgba(220, 233, 231, 0.5); }
.reel-btn:focus-visible, .reel-dot:focus-visible, .frame-hero:focus-visible { outline: 2px solid var(--tint); outline-offset: 2px; }
.frame-hero:focus-visible { outline-color: var(--petrol); }
.frame-hero.is-paused .ic-pause, .frame-hero:not(.is-paused) .ic-play { display: none; }
@media (pointer: coarse) { .reel-btn { width: 44px; height: 36px; } }
@media (prefers-reduced-motion: reduce) { .reel-dot i b { transition: none !important; } }

/* 技术图框：细边 + 四角刻度 + 等宽字标题条，而不是浏览器窗口的三个圆点 */
.frame { position: relative; border: 1px solid var(--line-strong); background: var(--deep); border-radius: 4px; overflow: hidden; }
.frame-cap {
    display: flex; justify-content: space-between; gap: 12px;
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase;
    color: var(--tint); background: var(--deep); padding: 8px 12px; border-bottom: 1px solid rgba(220, 233, 231, 0.18);
}
.frame img { width: 100%; }
.frame-ticks { position: absolute; inset: 0; pointer-events: none; }
.frame-ticks::before, .frame-ticks::after {
    content: ''; position: absolute; width: 14px; height: 14px; border-color: var(--tint); border-style: solid;
}
.frame-ticks::before { left: -1px; bottom: -1px; border-width: 0 0 2px 2px; }
.frame-ticks::after { right: -1px; bottom: -1px; border-width: 0 2px 2px 0; }

/* ---------- 规格条 ---------- */
.spec-strip { border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); margin-top: 48px; }
.spec-strip-in { max-width: var(--max); margin: 0 auto; padding: 0 var(--gutter); display: grid; grid-template-columns: repeat(5, 1fr); }
.spec { padding: 22px 0; border-left: 1px solid var(--line); padding-left: 20px; }
.spec:first-child { border-left: 0; padding-left: 0; }
.spec b { display: block; font-weight: 700; font-stretch: 108%; font-size: clamp(19px, 1.55vw, 24px); letter-spacing: -0.01em; color: var(--ink); line-height: 1.1; white-space: nowrap; }
.spec span { display: block; margin-top: 6px; font-family: var(--font-mono); font-size: 12px; color: var(--muted); letter-spacing: 0.04em; }

/* ---------- 章节 ---------- */
.sec { padding: 96px 0; }
.sec + .sec:not(.sec-mist) { padding-top: 0; }   /* 微灰底的段落自己要有上内边距 */
.sec-mist { background: var(--mist); }
.sec-mist + .sec { padding-top: 96px; }
.sec-head { max-width: 760px; margin-bottom: 48px; }
.sec-head .num { display: block; margin-bottom: 14px; }
.sec-head p { margin-top: 16px; color: var(--muted); font-size: 18px; }

.row { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: 56px; align-items: center; padding: 56px 0; border-top: 1px solid var(--line); }
.row:first-of-type { border-top: 0; padding-top: 0; }
.row.flip .row-text { order: 2; }
.row h3 { font-weight: 700; font-stretch: 108%; letter-spacing: -0.015em; font-size: 28px; line-height: 1.15; margin: 10px 0 14px; color: var(--ink); }
.row p { color: var(--muted); }
.row p + p { margin-top: 12px; }
.row .num { display: block; }
.row-text ul { margin: 14px 0 0; padding: 0; list-style: none; }
.row-text li { position: relative; padding-left: 18px; margin: 6px 0; color: var(--text); }
.row-text li::before { content: ''; position: absolute; left: 0; top: 0.65em; width: 8px; height: 1px; background: var(--petrol); }

/* 库节点「标签云」 */
.chips { display: flex; flex-wrap: wrap; gap: 8px; }
.chip { font-size: 14px; padding: 7px 12px; border: 1px solid var(--line-strong); border-radius: 999px; background: #fff; color: var(--text); }
.chip.on { background: var(--tint); border-color: transparent; color: var(--deep); }

/* 导出格式表 */
.fmt { border: 1px solid var(--line-strong); border-radius: 4px; overflow: hidden; background: #fff; }
.fmt-row { display: grid; grid-template-columns: 110px 1fr; gap: 20px; padding: 18px 20px; border-top: 1px solid var(--line); }
.fmt-row:first-child { border-top: 0; }
.fmt-row b { font-family: var(--font-mono); font-size: 15px; letter-spacing: 0.04em; color: var(--ink); }
.fmt-row span { color: var(--muted); font-size: 15px; }

/* 截图框：图片自带底色，框只给一条铝色细线 */
.vp { background: var(--mist); border-radius: 4px; overflow: hidden; border: 1px solid var(--line-strong); }
.vp img { width: 100%; }
.vp-anim { background: #F4F5F3; }
.vp-anim img { aspect-ratio: 4 / 3; }

/* ---------- 画廊卡片 ---------- */
.g-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
.g-card { display: block; color: inherit; border: 1px solid var(--line-strong); border-radius: 4px; overflow: hidden; background: #fff; transition: border-color .15s; }
.g-card:hover { text-decoration: none; border-color: var(--petrol); }
.g-thumb { aspect-ratio: 4 / 3; background: var(--mist); overflow: hidden; border-bottom: 1px solid var(--line); }
.g-thumb img { width: 100%; height: 100%; object-fit: cover; }
.g-card-body { padding: 16px 18px 18px; }
.g-card h3 { font-size: 18px; font-weight: 600; letter-spacing: -0.01em; color: var(--ink); }
.g-meta { display: flex; justify-content: space-between; gap: 12px; margin-top: 6px; font-family: var(--font-mono); font-size: 12px; color: var(--muted); }
.g-desc { margin-top: 10px; font-size: 14px; color: var(--muted); line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.sec-link { display: inline-block; margin-top: 28px; padding: 6px 0; font-weight: 600; }

/* 发现页的分类筛选（/community?category=）。品牌色板：未选中纸白 + 铝色细线，选中深青底；
   标签用等宽小字，与 .g-meta 同一套。.chip / .chip.on 是功能页那套标签云，不复用它 ——
   tests 按 class 名数卡片与 chip，两套名字分开才不会互相污染计数。 */
.g-count { font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); margin-bottom: 14px; }
.g-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 28px; }
.g-chip { display: inline-block; padding: 6px 12px; border: 1px solid var(--line-strong); border-radius: 999px; background: var(--paper); font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.04em; color: var(--text); white-space: nowrap; }
a.g-chip:hover { text-decoration: none; border-color: var(--petrol); color: var(--petrol); }
.g-chip.is-on { background: var(--petrol); border-color: var(--petrol); color: #fff; }
.g-filter-note { margin-top: 24px; font-size: 15px; color: var(--muted); }

/* ---------- 收尾横幅 ---------- */
.band { background: var(--deep); color: #fff; padding: 72px 0; }
.band .display { color: #fff; font-size: clamp(28px, 3.6vw, 40px); }
.band p { color: var(--tint); margin-top: 14px; font-size: 18px; }
.band .btn-row { margin-top: 26px; }

/* ---------- 页脚 ---------- */
.site-footer { border-top: 1px solid var(--line); margin-top: 0; background: var(--paper); }
.site-footer-in { max-width: var(--max); margin: 0 auto; padding: 48px var(--gutter) 32px; display: grid; grid-template-columns: 1.4fr 1fr; gap: 40px; }
.footer-tag { margin-top: 14px; font-size: 14px; color: var(--muted); max-width: 30em; }
.footer-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
.footer-cols h4 { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); margin-bottom: 12px; font-weight: 500; }
.footer-cols a { display: block; color: var(--text); font-size: 15px; padding: 4px 0; }
.site-footer-base { max-width: var(--max); margin: 0 auto; padding: 16px var(--gutter) 28px; border-top: 1px solid var(--line); font-size: 13px; color: var(--muted); display: flex; gap: 20px; flex-wrap: wrap; }
.icp-notice { color: var(--muted); text-decoration: none; font-size: 13px; }
.icp-notice:hover { text-decoration: underline; }

/* ---------- 内页标题区 ---------- */
.page-head { padding: 64px 0 40px; border-bottom: 1px solid var(--line); }
.page-head .lede { margin-top: 16px; }

/* ---------- 功能页清单 ---------- */
.feat { display: grid; grid-template-columns: 220px 1fr; gap: 32px; padding: 36px 0; border-top: 1px solid var(--line); }
.feat:first-child { border-top: 0; }
.feat h3 { font-weight: 700; font-stretch: 108%; font-size: 22px; letter-spacing: -0.01em; color: var(--ink); }
.feat .num { display: block; margin-bottom: 8px; }
.feat p { color: var(--muted); max-width: 44em; }   /* 容器放宽到 1520 后段落别跟着拉到 140 字一行 */
.limits p { max-width: 70ch; }
.feat ul { margin: 12px 0 0; padding: 0; list-style: none; columns: 2; column-gap: 32px; }
.feat li { break-inside: avoid; padding: 5px 0; border-bottom: 1px solid var(--line); font-size: 15px; }
.limits { margin-top: 48px; padding: 24px 28px; background: var(--mist); border-left: 3px solid var(--petrol); }
.limits h3 { font-size: 16px; font-weight: 600; margin-bottom: 8px; }
.limits p { color: var(--muted); font-size: 15px; }

/* ---------- 价格 ---------- */
.plans { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 24px; }   /* AI 关着时 Pro 卡隐藏，不留空列 */
.plan { border: 1px solid var(--line-strong); border-radius: 4px; padding: 28px; background: #fff; display: flex; flex-direction: column; }
.plan.hl { background: var(--tint); border-color: transparent; }
.plan h3 { font-weight: 700; font-stretch: 108%; font-size: 24px; color: var(--ink); }
.plan-price { margin: 14px 0 6px; font-weight: 700; font-stretch: 110%; font-size: 40px; letter-spacing: -0.02em; line-height: 1; color: var(--ink); }
.plan-price small { font-family: var(--font-mono); font-size: 12px; font-weight: 400; letter-spacing: 0.06em; color: var(--muted); display: block; margin: 8px 0 0; }
.plan-note { font-family: var(--font-mono); font-size: 12px; color: var(--muted); letter-spacing: 0.04em; }
.plan ul { list-style: none; margin: 20px 0 24px; padding: 0; flex: 1; }
.plan li { padding: 7px 0; border-top: 1px solid var(--line); font-size: 15px; }
.plan.hl li { border-top-color: rgba(15, 94, 88, 0.18); }
.plan .btn { align-self: flex-start; }
.plan-contact { margin-top: 14px; font-size: 13px; color: var(--muted); line-height: 1.5; }
.plan-contact a { font-weight: 600; }
.pricing-note { margin-top: 32px; padding: 18px 22px; background: var(--mist); font-size: 15px; color: var(--muted); max-width: 70ch; }

/* ---------- 关于 ---------- */
.about-grid { display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); gap: 56px; align-items: start; }
.about-grid > * { min-width: 0; }   /* 网格项默认 min-width:auto，表格的最小内容宽会把 320px 的列撑出视口 */
.prose p { margin-bottom: 16px; color: var(--text); }
.prose h3 { font-weight: 700; font-stretch: 108%; font-size: 22px; margin: 36px 0 12px; color: var(--ink); }
.about-mark { background: var(--mist); border: 1px solid var(--line); padding: 48px; display: grid; place-items: center; }
.about-mark .o-mark { width: 220px; height: 220px; color: var(--ink); }
.about-mark figcaption { margin-top: 20px; font-family: var(--font-mono); font-size: 12px; color: var(--muted); text-align: center; letter-spacing: 0.04em; line-height: 1.7; }
.kv-table { width: 100%; border-collapse: collapse; margin-top: 24px; font-size: 15px; table-layout: fixed; }
.kv-table td { overflow-wrap: anywhere; }
.kv-table th, .kv-table td { text-align: left; padding: 10px 0; border-top: 1px solid var(--line); vertical-align: top; }
.kv-table th { font-family: var(--font-mono); font-weight: 500; font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--muted); width: 36%; padding-right: 16px; }

/* ---------- 画廊详情 ---------- */
.gm { display: grid; grid-template-columns: minmax(0, 7fr) minmax(320px, 5fr); gap: 40px; padding: 20px 0 80px; align-items: start; }
.gm-stage-wrap { position: sticky; top: 84px; }
.gm-stage { position: relative; aspect-ratio: 4 / 3; background: var(--mist); border: 1px solid var(--line-strong); border-radius: 4px; overflow: hidden; }
.gm-stage canvas { display: block; }
.gm-stage img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0.9; }
.gm-status {
    position: absolute; left: 12px; bottom: 12px; font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.04em;
    color: var(--deep); background: rgba(255, 255, 255, 0.85); padding: 6px 10px; border: 1px solid var(--line-strong);
}
.gm-status[hidden] { display: none; }
.gm-stage.loading::after {
    content: ''; position: absolute; inset: 0; background:
        linear-gradient(rgba(167,173,176,0.25) 1px, transparent 1px) 0 0 / 100% 32px,
        linear-gradient(90deg, rgba(167,173,176,0.25) 1px, transparent 1px) 0 0 / 32px 100%;
}
.gm-top { padding-top: 28px; }
.gm-back { display: inline-flex; align-items: center; gap: 6px; padding: 6px 0; font-weight: 600; font-size: 15px; color: var(--petrol); }
.gm-back svg { width: 16px; height: 16px; }
.gm h1 { font-weight: 700; font-stretch: 110%; letter-spacing: -0.02em; font-size: clamp(28px, 3.2vw, 38px); line-height: 1.1; color: var(--ink); }
.gm-by { margin-top: 10px; font-family: var(--font-mono); font-size: 13px; color: var(--muted); }
.gm-desc { margin-top: 16px; color: var(--muted); }
.gm-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 24px; }
.gm-hint { margin-top: 10px; font-size: 13px; color: var(--muted); }
.gm-hint a { font-weight: 600; }

.params { margin-top: 32px; border-top: 1px solid var(--line-strong); }
.params-hd { display: flex; justify-content: space-between; align-items: baseline; padding: 16px 0 6px; }
.params-hd h2 { font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--petrol); font-weight: 500; }
.params-hd button { background: none; border: 0; color: var(--muted); font-size: 13px; cursor: pointer; text-decoration: underline; text-underline-offset: 3px; }
.params-empty { padding: 12px 0 18px; color: var(--muted); font-size: 14px; }
.prow { display: grid; grid-template-columns: 1fr auto; gap: 4px 14px; align-items: center; padding: 12px 0; border-top: 1px solid var(--line); }
.prow-k { font-size: 15px; font-weight: 500; color: var(--text); }
.prow output { font-family: var(--font-mono); font-size: 13px; color: var(--ink); min-width: 6ch; text-align: right; }
.prow input[type="range"] { grid-column: 1 / -1; width: 100%; accent-color: var(--petrol); }
.prow input[type="text"], .prow input[type="number"] {
    grid-column: 1 / -1; width: 100%; height: 40px; padding: 0 10px; border: 1px solid var(--line-strong); border-radius: var(--radius);
    font: inherit; font-size: 15px; background: #fff;
}
.prow input[type="text"]:focus { outline: 2px solid var(--petrol); outline-offset: 1px; border-color: transparent; }
.prow input[type="checkbox"] { width: 18px; height: 18px; accent-color: var(--petrol); }
.prow-desc { grid-column: 1 / -1; font-size: 13px; color: var(--muted); }

.kv { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--line); border: 1px solid var(--line); margin-top: 28px; }
.kv > div { background: #fff; padding: 12px 14px; }
.kv span { display: block; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); }
.kv b { display: block; margin-top: 4px; font-family: var(--font-mono); font-size: 14px; font-weight: 500; color: var(--ink); }

.gm-note { margin-top: 28px; padding: 16px 18px; background: var(--mist); font-size: 14px; color: var(--muted); line-height: 1.6; max-width: 70ch; }
.gm-note b { color: var(--text); font-weight: 600; }
.gm-error { margin-top: 12px; padding: 12px 14px; border: 1px solid #C9772F; color: #7A4215; background: #FBF3EC; font-size: 14px; }
.gm-error[hidden] { display: none; }

/* ---------- 画廊详情：可选区块（没内容就不占位） ---------- */
/* :empty 只在元素**一个子节点都没有**时匹配 —— 空白与换行都算子节点（注释不算）。
   所以 gallery-model.html 里这些元素的开标签与 {{TOKEN}} 之间不能有空格或换行；
   有一个空格，6 个公开模型页上就会各多出一个空的带边框的框。 */
.gm-opt:empty { display: none; }

.gm-notice { margin-bottom: 14px; padding: 12px 14px; background: var(--tint); border-left: 3px solid var(--petrol); font-size: 14px; line-height: 1.6; color: var(--text); }
.gm-ver { margin-top: 6px; font-family: var(--font-mono); font-size: 13px; color: var(--petrol); }

/* ---------- 可打印性估算（一次性，作者发布时测一遍） ---------- */
/* 整块的盒子样式**只挂在 [data-print="ok"] 上**，这不是风格偏好，是退化路径：
   这一版没有估算时九个 token 全是空串，八个子元素各自被上面那条 .gm-opt:empty 隐掉，
   而容器本身没有 margin / padding / 边框 / 底色，于是它高 0、一个像素都不占。
   同一个结论对**回访者缓存里那份旧 website.css** 也成立（/w/ 带 ?v= 的资源缓存一年
   immutable，而 website/views/ 由进程按请求从磁盘读 —— 视图先落地，样式表要等 ?v= 升号）：
   旧样式表里 .gm-print 整个不存在，但 .gm-opt:empty 在，所以那段窗口里页面上同样什么都不多。
   反过来，如果这里给 .gm-print 本身加了底色或边框，那两种情况下都会出现一个空壳。 */
/* font-size 在这里不是为了排版，而是为了 `max-width: 70ch` —— `ch` 按元素自己的字号算，
   不写的话这个盒子在中等宽度下比同样 70ch 的 .gm-note 宽出 25%（实测 768px 下 700 vs 560），
   同一屏上两个米灰盒子不一样宽。字号与 .gm-note 对齐，两个盒子的 70ch 就是同一个宽度。 */
.gm-print[data-print="ok"] { margin-top: 28px; padding: 16px 18px; background: var(--mist); font-size: 14px; max-width: 70ch; }
.gm-print-hd { font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--petrol); font-weight: 500; }
.gm-print-row { margin-top: 8px; font-family: var(--font-mono); font-size: 13px; line-height: 1.5; color: var(--text); overflow-wrap: anywhere; }
.gm-print-verdict { margin-top: 14px; font-size: 14px; line-height: 1.6; color: var(--text); }
.gm-print-note { margin-top: 10px; font-size: 13px; line-height: 1.6; color: var(--muted); }

/* ---------- 描述正文（服务端渲染的 Markdown） ---------- */
/* 选择器清单按 app/services/community-description.js 的 ALLOWED_TAGS 生成（契约 §5），
   不是猜的。排版全部限定在这个容器里：它的内容来自作者，不该影响页面上任何别的东西。 */
.gm-md { margin-top: 14px; font-size: 15px; line-height: 1.7; color: var(--text); max-width: 70ch; overflow-wrap: anywhere; }
.gm-md > :first-child { margin-top: 0; }
.gm-md p { margin: 0 0 12px; }
.gm-md h3, .gm-md h4, .gm-md h5, .gm-md h6 { margin: 22px 0 8px; font-weight: 700; font-stretch: 106%; color: var(--ink); }
.gm-md h3 { font-size: 19px; }
.gm-md h4 { font-size: 17px; }
.gm-md h5, .gm-md h6 { font-size: 15px; }
.gm-md ul, .gm-md ol { margin: 12px 0; padding-inline-start: 22px; }
.gm-md li { margin: 5px 0; }
.gm-md a { color: var(--petrol); font-weight: 600; text-decoration: underline; text-underline-offset: 3px; }
.gm-md strong { font-weight: 700; color: var(--ink); }
.gm-md del { color: var(--muted); }
.gm-md code { font-family: var(--font-mono); font-size: 0.9em; padding: 1px 5px; border-radius: 4px; background: var(--mist); }
.gm-md pre { margin: 12px 0; padding: 12px 14px; background: var(--mist); overflow-x: auto; }
.gm-md pre code { padding: 0; background: none; font-size: 13px; line-height: 1.55; }
.gm-md blockquote { margin: 12px 0; padding-inline-start: 14px; border-inline-start: 2px solid var(--line-strong); color: var(--muted); }
.gm-md hr { margin: 20px 0; border: 0; border-top: 1px solid var(--line); }

/* ---------- 许可证与「如何署名」 ---------- */
.gm-attrib { margin-top: 20px; padding-top: 16px; border-top: 1px solid var(--line); }
.gm-attrib-lic { font-size: 14px; color: var(--muted); }
.gm-attrib-lic b { font-family: var(--font-mono); font-size: 13px; font-weight: 500; color: var(--ink); }
.gm-attrib-text { margin-top: 8px; padding: 10px 12px; background: var(--mist); font-family: var(--font-mono); font-size: 12px; line-height: 1.6; color: var(--text); overflow-wrap: anywhere; }
/* 没有许可证就整块不出：否则读到的是「Licence:」后面什么都没有、署名句以「licensed .」收尾。
   生产的两列都是 NOT NULL，所以这只会发生在 L0 门禁与测试那个合成行上 —— 以及这个文件
   与 website/gallery-data.js 之间那一次重启的窗口里（视图从磁盘即时生效，渲染器要等重启）。 */
.gm-attrib:has(.gm-attrib-lic b:empty) { display: none; }
/* 能力页（草稿 / 不公开 / 已下架）上，署名句里那个公开地址还不通 —— 这一句把它说出来。
   公开页上是空串，.gm-opt:empty 把整条隐掉，所以公开页一个字节都不多。 */
#attributionNote { margin-top: 8px; color: var(--text); }

/* ---------- 版本历史 ---------- */
.gm-versions { margin-top: 32px; border-top: 1px solid var(--line-strong); padding-top: 16px; }
.gm-versions-hd { font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--petrol); font-weight: 500; }
.gm-ver-list { list-style: none; margin-top: 10px; }
.gm-ver-list li { padding: 10px 0; border-top: 1px solid var(--line); font-size: 14px; }
.gm-ver-list li:first-child { border-top: 0; }
.gm-ver-list a { font-weight: 600; color: var(--petrol); text-decoration: underline; text-underline-offset: 3px; }
.gm-ver-meta { display: inline-block; margin-inline-start: 8px; font-family: var(--font-mono); font-size: 12px; color: var(--muted); }
.gm-ver-log { display: block; margin-top: 4px; color: var(--muted); }
/* 版本列表被 limit 裁过时那一句（「列出最新 50 条，共 60 版」） */
.gm-ver-more { margin-top: 10px; font-family: var(--font-mono); font-size: 12px; color: var(--muted); }

/* 「复制配置链接」「复制署名」两个控件。
   做成文字链的样子而不是实心按钮：这一页的主按钮是下载，复制是旁路动作。
   两个都由 website/public/js/gallery.js 绑事件（它按 id 取，取不到就是这项功能没上线）。 */
.gm-copy { display: inline-block; margin-top: 10px; background: none; border: 0; padding: 0; color: var(--petrol); font: inherit; font-size: 13px; font-weight: 600; cursor: pointer; text-decoration: underline; text-underline-offset: 3px; }
.gm-copy:hover { color: var(--deep); }

/* 窄屏上「载入 3D 预览」：渲染栈不预热，等一次明确的点击（gallery.js 的 offerPreview）。
   模板里带着 hidden，脚本决定要用时才露出来；脚本自己造的那一份用的是同一个类。 */
.gm-load { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); z-index: 1; white-space: nowrap; }

.not-found { padding: 96px 0 120px; }

/* ---------- 画廊：保存文件名对话框（模态，点遮罩不关） ---------- */
.gm-modal { position: fixed; inset: 0; z-index: 50; background: rgba(8, 49, 46, 0.45); display: flex; align-items: center; justify-content: center; padding: 16px; }
.gm-modal-card { width: 100%; max-width: 440px; background: #fff; border: 1px solid var(--line-strong); border-radius: 6px; padding: 24px; }
.gm-modal-card h2 { font-weight: 700; font-stretch: 108%; font-size: 22px; letter-spacing: -0.01em; color: var(--ink); margin-bottom: 16px; }
.gm-modal-card label { display: block; font-size: 14px; font-weight: 500; margin-bottom: 6px; }
.gm-modal-card input { width: 100%; height: 42px; padding: 0 12px; border: 1px solid var(--line-strong); border-radius: var(--radius); font: inherit; font-size: 15px; }
.gm-modal-card input:focus { outline: 2px solid var(--petrol); outline-offset: 1px; border-color: transparent; }
.gm-modal-hint { margin-top: 8px; font-size: 13px; color: var(--muted); }
.gm-modal-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 20px; }
.gm-modal-actions .btn { height: 42px; }

/* ---------- 法律页面（privacy / terms 共用）---------- */
.legal { max-width: 760px; margin: 56px auto 0; padding: 0 var(--gutter) 80px; line-height: 1.75; }
.legal h1 { font-weight: 700; font-stretch: 110%; letter-spacing: -0.02em; font-size: 36px; margin-bottom: 8px; color: var(--ink); }
.legal h2 { font-weight: 700; font-stretch: 106%; font-size: 22px; margin-top: 44px; margin-bottom: 12px; color: var(--ink); }
.legal h3 { font-size: 17px; font-weight: 600; margin-top: 26px; margin-bottom: 8px; color: var(--ink); }
.legal p, .legal li { color: var(--text); }
.legal p { margin-bottom: 12px; }
.legal ul { padding-inline-start: 22px; margin: 12px 0; }
.legal li { margin: 6px 0; }
.legal code { font-family: var(--font-mono); font-size: 0.9em; padding: 1px 5px; border-radius: 4px; background: var(--mist); }
.legal-meta { font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.06em; color: var(--muted); margin-bottom: 32px; }
.legal-table { width: 100%; border-collapse: collapse; margin: 16px 0; font-size: 15px; }
.legal-table th, .legal-table td { border: 1px solid var(--line-strong); padding: 10px 12px; text-align: start; vertical-align: top; }
.legal-table th { font-weight: 600; background: var(--mist); }

/* ---------- 响应式 ---------- */
@media (max-width: 960px) {
    .hero-grid, .about-grid { grid-template-columns: 1fr; gap: 36px; }
    .hero-split { grid-template-columns: 1fr; gap: 32px; }
    .hero-copy { max-width: 760px; }
    .frame-hero { width: 100%; }
    .hero { padding: 48px 0 0; }
    .row { grid-template-columns: 1fr; gap: 28px; padding: 40px 0; }
    .row.flip .row-text { order: 0; }
    .spec-strip-in { grid-template-columns: repeat(3, 1fr); }
    .spec { padding: 18px 0 18px 16px; }
    .spec:nth-child(4) { border-left: 0; padding-left: 0; }
    .g-grid, .plans { grid-template-columns: repeat(2, 1fr); }
    .gm { grid-template-columns: 1fr; }
    .gm-stage-wrap { position: static; }
    .feat { grid-template-columns: 1fr; gap: 12px; }
    .site-footer-in { grid-template-columns: 1fr; }
}
@media (max-width: 720px) {
    body { font-size: 16px; }
    .site-nav-in { gap: 16px; }
    .nav-links, .nav-actions { display: none; }
    .nav-toggle { display: block; }
    .site-nav.open .site-nav-in { flex-wrap: wrap; height: auto; padding-bottom: 16px; }
    .site-nav.open .nav-links { display: flex; flex-direction: column; gap: 4px; width: 100%; order: 3; margin: 8px 0 0; }
    .site-nav.open .nav-links a { padding: 10px 0; border-bottom: 1px solid var(--line); }
    .site-nav.open .nav-actions { display: flex; width: 100%; order: 4; margin-top: 14px; }
    .site-nav.open .nav-toggle { order: 2; }
    .site-nav.open .site-nav-in > .o-lockup { height: 64px; }
    .hero { padding: 36px 0 0; }
    .hero-split { gap: 24px; }
    .cap-pre, .reel-dots { display: none; }
    .spec-strip-in { grid-template-columns: 1fr 1fr; }
    .spec { border-left: 0; padding-left: 0; border-top: 1px solid var(--line); }
    .spec b { white-space: normal; }   /* 窄屏两列时「STL · 3MF · STEP」得允许换行 */
    .spec:nth-child(-n+2) { border-top: 0; }
    .sec { padding: 64px 0; }
    .sec-mist + .sec { padding-top: 64px; }
    .g-grid, .plans { grid-template-columns: 1fr; }
    /* 窄屏上 18 个 chip 横着滚，**不要**让整页出现横向滚动条 */
    .g-chips { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: thin; padding-bottom: 6px; }
    .feat ul { columns: 1; }
    .kv { grid-template-columns: 1fr 1fr; }
    .kv > :nth-child(3):last-child { grid-column: 1 / -1; }   /* 三格两列，最后一格占满，不留灰块 */
    .fmt-row { grid-template-columns: 1fr; gap: 6px; }
    .legal { margin-top: 32px; }
    .legal h1 { font-size: 28px; }
    .legal-table { font-size: 14px; }
    .legal-table th, .legal-table td { padding: 8px; }
}

/* ---------- 无障碍与排版细节（2026-10-02 红队）---------- */
:focus-visible { outline: 2px solid var(--petrol); outline-offset: 2px; }
.skip-link { position: absolute; inset-inline-start: 8px; top: 8px; z-index: 30; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; background: var(--paper); color: var(--petrol); border: 1px solid var(--line-strong); border-radius: var(--radius); font-weight: 600; }
.skip-link:focus { width: auto; height: auto; margin: 0; padding: 8px 12px; overflow: visible; clip-path: none; }
.legal a, .pricing-note a, .gm-note a, .kv-table a, .limits a, .row-text a { text-decoration: underline; text-underline-offset: 3px; }   /* 正文里的链接不能只靠颜色区分 */
.display, .sec-head h2, .row h3, .band h2, .gm-side h1, .page-head h1 { text-wrap: balance; }   /* 标题最后一行不留孤词 */
@media (max-width: 360px) { .hero-title { font-size: 32px; } }
/* ---------- 谱系：模型页的「源自 / 衍生」（W1-SITEPAGE / A4a）----------
   标题沿用 .gm-versions-hd 的处理（mono、12px、0.12em、大写、--petrol），好让侧栏里
   许可证、谱系、版本历史这三块看起来是一套东西。列表本身也照 .gm-ver-list 的样子，
   理由相同：它们在同一根竖线上。
   不需要任何 `:empty` 规则 —— 两个渲染器都返回空串，而插槽的匹配式把整行（含注释定界符、
   行首缩进与行尾换行）一起吃掉，所以根本没有一个空元素要去隐藏。.gm-opt 那一族之所以
   存在，是因为它的 token 住在视图**总会**发出来的元素里面。 */
.gm-lineage { margin-top: 20px; padding-top: 16px; border-top: 1px solid var(--line); }
.gm-lineage-hd { font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--petrol); font-weight: 500; }
.gm-lineage-hd ~ .gm-lineage-hd { margin-top: 20px; }
.gm-lin-list { list-style: none; margin-top: 10px; }
.gm-lin-list li { padding: 10px 0; border-top: 1px solid var(--line); font-size: 14px; }
.gm-lin-list li:first-child { border-top: 0; }
.gm-lin-list a { font-weight: 600; color: var(--petrol); text-decoration: underline; text-underline-offset: 3px; overflow-wrap: anywhere; }
.gm-lin-name { font-weight: 600; color: var(--ink); }
.gm-lin-meta { display: inline-block; margin-inline-start: 8px; font-family: var(--font-mono); font-size: 12px; color: var(--muted); }
.gm-lin-gone { color: var(--muted); }
.gm-lin-note { margin-top: 6px; font-size: 13px; color: var(--muted); }
.gm-lin-derived { margin-top: 12px; font-size: 14px; }
.gm-lin-derived a { font-weight: 600; color: var(--petrol); text-decoration: underline; text-underline-offset: 3px; }
.gm-lin-more { margin-top: 10px; font-family: var(--font-mono); font-size: 12px; color: var(--muted); }
.gm-lin-more a { font-family: var(--font-sans); }

/* 「有更新的版本可用」（A14）。横幅位，所以用品牌的青浅调做底，不是语义色。 */
.gm-newer { margin-top: 10px; padding: 12px 14px; background: var(--tint); font-size: 14px; }
.gm-newer p { color: var(--text); }
.gm-newer a:not(.btn) { font-weight: 600; color: var(--deep); text-decoration: underline; text-underline-offset: 3px; }
.gm-newer-sum { margin-bottom: 8px; }
.gm-try-latest { margin-top: 10px; }

/* ---------- 谱系页 /community/<slug>/lineage（W1-SITEPAGE / A4b）----------
   带状版式，不是 SVG 图：不用 JavaScript、不用布局引擎、读屏器能读出结构，而且在手机
   宽度下自己退成一列（auto-fill 的网格，不需要一条 media query）。 */
.lin { padding: 40px 0 8px; }
.lin h1 { font-weight: 700; font-stretch: 108%; letter-spacing: -0.01em; font-size: 30px; color: var(--ink); }
.lin-sub { margin-top: 10px; max-width: 70ch; color: var(--muted); }
/* 正文由 below 插槽送来，容器是注册表发的 .wrap.gm-sections —— 只在谱系页上给它下边距
   （相邻选择器），免得替将来第一个用这个插槽的模型页功能定下间距。 */
.lin + .gm-sections { padding-bottom: 72px; }
.lin-empty { margin-top: 28px; max-width: 70ch; color: var(--text); }
.lin-band { margin-top: 28px; }
.lin-band-hd { font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--petrol); font-weight: 500; }
.lin-row { list-style: none; margin-top: 12px; display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 16px; }
.lin-card { display: flex; flex-direction: column; gap: 4px; }
.lin-card-link { display: block; color: inherit; border: 1px solid var(--line-strong); border-radius: 4px; overflow: hidden; background: var(--paper); transition: border-color .15s; }
.lin-card-link:hover { border-color: var(--petrol); text-decoration: none; }
.lin-card-link img { display: block; width: 100%; height: auto; aspect-ratio: 4 / 3; object-fit: cover; background: var(--mist); }
.lin-card-nocover { display: block; width: 100%; aspect-ratio: 4 / 3; background: var(--mist); }
.lin-card-name { display: block; padding: 10px 12px; font-size: 15px; font-weight: 600; color: var(--ink); }
.lin-card-meta { font-family: var(--font-mono); font-size: 12px; color: var(--muted); }
.lin-card-edge { font-size: 13px; color: var(--muted); }
.lin-card-more { font-size: 13px; font-weight: 600; color: var(--petrol); text-decoration: underline; text-underline-offset: 3px; }
.lin-card-self { border: 1px solid var(--petrol); border-radius: 4px; padding: 10px 12px; background: var(--tint); }
.lin-card-self .lin-card-name { padding: 0; }
.lin-card-self .lin-card-meta { margin-top: 2px; }
/* 被下架的来源：没有图、没有名字、没有链接 —— 一句固定的话。虚线边表示「这里有过一个东西」。 */
.lin-card-gone { border: 1px dashed var(--line-strong); border-radius: 4px; padding: 10px 12px; font-size: 14px; color: var(--muted); }
.lin-more { margin-top: 10px; font-family: var(--font-mono); font-size: 12px; color: var(--muted); }

@media print {
    .site-nav, .site-footer, .skip-link, .btn-row, .reel-nav { display: none !important; }
    body { color: #000; background: #fff; }
    a { color: #000; text-decoration: underline; }
    .legal { max-width: none; margin-top: 0; }
}
/* Shared author identity for model cards, detail pages and creator profiles. */
.author-avatar{position:relative;display:inline-grid;place-items:center;flex:none;width:24px;height:24px;border-radius:50%;overflow:hidden;background:var(--tint);color:var(--petrol);vertical-align:middle}.author-identicon{width:100%;height:100%;fill:currentColor}.author-avatar-image{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.author-avatar.has-avatar .author-identicon{visibility:hidden}.g-meta>span:first-child{display:inline-flex;align-items:center;gap:6px;min-width:0}.g-meta .author-avatar{width:20px;height:20px}.gm-by .author-avatar{margin-inline:4px}

/* Community discovery: fixed page size, accessible filters and compact pagination. */
.g-types { margin-bottom: 16px; }
.g-chip-count { font-variant-numeric: tabular-nums; margin-inline-start: 5px; opacity: .8; }
.g-kind { display: block; color: var(--muted); font-size: 12px; margin-bottom: 6px; }
.g-pagination { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 16px; margin-top: 28px; }
.g-page-summary { margin: 0; color: var(--muted); font-size: 14px; }
.g-pagination nav { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.g-page { display: inline-flex; justify-content: center; align-items: center; min-width: 40px; min-height: 40px; padding: 6px 12px; border: 1px solid var(--line); border-radius: 8px; color: var(--text); text-decoration: none; background: var(--paper); }
.g-page:hover, .g-page:focus-visible { background: var(--tint); border-color: var(--petrol); }
.g-page.is-on { background: var(--petrol); border-color: var(--petrol); color: white; font-weight: 600; }
.g-page.disabled { color: var(--muted); background: var(--mist); }
.g-page-gap { padding: 0 5px; color: var(--muted); }
.g-empty { padding: 32px 0; color: var(--muted); }
@media (max-width: 600px) { .g-pagination { align-items: flex-start; } .g-pagination nav { width: 100%; } .g-page { padding: 6px 10px; } }
.community-language-switch { display: flex; gap: 4px; align-items: center; overflow-x: auto; padding: 6px max(var(--gutter), calc((100vw - var(--max)) / 2)); border-bottom: 1px solid var(--line); background: var(--mist); font-size: 12px; white-space: nowrap; scrollbar-width: thin; }
.community-language-switch a { flex: none; padding: 4px 7px; color: var(--muted); border-radius: 4px; text-decoration: none; }
.community-language-switch a:hover, .community-language-switch a:focus-visible { background: var(--tint); color: var(--petrol); }
.community-language-switch a[aria-current="page"] { background: var(--petrol); color: white; }

/* A quiet language control in the shared header; logical edges also work in RTL. */
.site-language-menu { position: relative; margin-inline-start: 0; font-size: 13px; }
.site-language-menu summary { display: inline-flex; align-items: center; gap: 7px; min-height: 36px; padding: 6px 10px; color: var(--ink); border: 1px solid var(--line); border-radius: 7px; cursor: pointer; list-style: none; }
.site-language-menu summary::-webkit-details-marker { display: none; }
.site-language-menu summary:hover, .site-language-menu summary:focus-visible { background: var(--mist); outline-color: var(--petrol); }
.site-language-menu summary bdi { max-width: 140px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.site-language-menu > nav { position: absolute; inset-inline-end: 0; top: calc(100% + 8px); z-index: 100; display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 4px; width: 300px; max-width: calc(100vw - 32px); max-height: min(420px,60vh); overflow-y: auto; padding: 8px; border: 1px solid var(--line); border-radius: 10px; background: var(--paper,white); box-shadow: 0 8px 28px #0002; white-space: normal; }
.site-language-menu > nav a { padding: 9px; border-radius: 5px; color: var(--ink); text-decoration: none; text-align: start; }
.site-language-menu > nav a:hover, .site-language-menu > nav a:focus-visible { background: var(--mist); }
.site-language-menu > nav a[aria-current="page"] { background: var(--petrol); color: white; }
.gm-xlate { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin-block: 14px; font-size: 13px; color: var(--muted); }
.gm-xlate p { margin: 0; }
.gm-xlate button { flex: none; }
.gm-desc, .gm-md, #gm h1 { overflow-wrap: anywhere; }
@media (max-width: 768px) { .site-nav.open .nav-actions { flex-wrap: wrap; gap: 10px; } .site-language-menu { margin-inline-start: 0; } .site-language-menu > nav { inset-inline-start: auto; inset-inline-end: 0; } }
/* Language selection remains available on mobile even without the scripted menu. */
@media (max-width: 768px) {
 .site-nav:not(.open) .nav-actions { display: flex; gap: 0; margin-inline-start: 8px; }
 .site-nav:not(.open) .nav-actions > a { display: none; }
 .site-nav:not(.open) .site-language-menu summary bdi { display: none; }
 .site-nav:not(.open) .site-language-menu > nav { inset-inline-start: auto; inset-inline-end: 0; }
}

.gm-note > b { display: block; margin-block-end: 6px; }

/* Keep the selected version and its static history links beside the model title. */
.gm-version-controls { display:flex; align-items:center; flex-wrap:wrap; gap:10px; margin-block:10px 18px; }
.gm-version-controls .gm-ver { margin:0; padding:5px 10px; border:1px solid var(--line); border-radius:7px; background:var(--mist); }
.gm-version-controls .gm-versions { margin:0; padding:0; border:0; }
.gm-version-menu { position:relative; font-size:13px; }
.gm-version-menu summary { display:flex; align-items:center; gap:8px; padding:6px 10px; border:1px solid var(--line-strong); border-radius:7px; cursor:pointer; list-style:none; color:var(--ink); }
.gm-version-menu summary::-webkit-details-marker { display:none; }
.gm-version-menu summary:hover { background:var(--mist); }
.gm-version-menu summary:focus-visible { outline:2px solid var(--petrol); outline-offset:2px; }
.gm-version-menu summary svg { width:16px; height:16px; flex:none; transition:transform .15s; }
.gm-version-menu[open] summary svg { transform:rotate(180deg); }
.gm-version-options { position:absolute; inset-inline-end:0; top:calc(100% + 8px); z-index:20; width:360px; max-width:calc(100vw - 48px); max-height:min(360px,50vh); overflow:auto; padding:8px 14px; border:1px solid var(--line-strong); border-radius:10px; background:var(--paper); box-shadow:0 8px 28px #0002; }
.gm-version-options .gm-ver-list { margin:0; }
.gm-version-options .gm-ver-selected { color:var(--petrol); }
.gm-version-options .gm-ver-meta { display:block; margin:3px 0 0; line-height:1.5; }
.gm-version-options .gm-ver-log { overflow-wrap:anywhere; }
@media(max-width:960px) { .gm-version-controls { position:relative; } .gm-version-menu { position:static; } .gm-version-options { inset-inline-start:0; inset-inline-end:auto; } }

.gm-version-options time { display:inline-block; direction:ltr; unicode-bidi:isolate; }
