/* ─────────────────────────────────────────────────────────────── Forge — daslang.io design tokens + components See ~/Downloads/daslang_website/handoff/HANDOFF.md for the spec. ─────────────────────────────────────────────────────────────── */ :root { /* Backgrounds */ --bg: #0d0c0a; --bg-2: #15130f; --bg-3: #1c1a14; /* Foreground */ --fg: #e8e2d2; --fg-dim: #9b9281; --fg-faint: #5b5547; /* Structure */ --rule: #2a2620; /* Accent */ --amber: #e8a13a; --amber-dim: #a87420; /* Syntax / status */ --green: #9bc46a; --red: #d96d4f; --blue: #6aa9c4; /* Type */ --font-sans: "Inter Tight", "Inter", -apple-system, system-ui, sans-serif; --font-mono: "JetBrains Mono", "SF Mono", ui-monospace, Menlo, monospace; /* Hint embedded widgets (Disqus, GitHub, etc.) to render in dark mode. */ color-scheme: dark; } /* ───── Reset / base ───── */ *, *::before, *::after { box-sizing: border-box; } html, body { margin: 0; padding: 0; background: var(--bg); color: var(--fg); font-family: var(--font-sans); font-size: 14px; line-height: 1.5; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } a { color: inherit; text-decoration: none; cursor: pointer; } a:hover { color: var(--amber); } img { max-width: 100%; display: block; } h1, h2, h3, h4 { margin: 0; font-weight: 600; } p { margin: 0; } button { font: inherit; border: 0; background: none; color: inherit; cursor: pointer; padding: 0; } /* ───── Layout ───── */ .forge-container { max-width: 1180px; margin: 0 auto; padding: 0 32px; position: relative; } /* Dot grid + subtle warm radial glow behind the hero. */ .forge-page { position: relative; min-height: 100%; overflow-x: hidden; } .forge-page::before { content: ""; position: absolute; inset: 0; pointer-events: none; background-image: radial-gradient(800px 400px at 80% -100px, rgba(232, 161, 58, 0.10), transparent 60%), radial-gradient(circle at center, rgba(255, 255, 255, 0.04) 1px, transparent 1px); background-size: auto, 22px 22px; -webkit-mask-image: linear-gradient(to bottom, black, black 60%, transparent); mask-image: linear-gradient(to bottom, black, black 60%, transparent); } /* ───── Nav ───── */ .forge-nav { position: relative; border-bottom: 1px solid var(--rule); } .forge-nav__inner { display: flex; align-items: center; justify-content: space-between; height: 56px; } .forge-nav__left { display: flex; align-items: center; gap: 32px; } .forge-nav__links { display: flex; gap: 22px; font-family: var(--font-mono); font-size: 12.5px; color: var(--fg-dim); } .forge-nav__links a.is-active { color: var(--amber); } .forge-nav__right { display: flex; align-items: center; gap: 14px; font-family: var(--font-mono); font-size: 12.5px; } .forge-nav__version { color: var(--fg-faint); } /* GitHub star chip — count filled by files/github-star.js */ .forge-nav__gh { display: inline-flex; align-items: center; gap: 7px; padding: 3px 9px; border: 1px solid var(--rule); border-radius: 6px; color: var(--fg-dim); text-decoration: none; } .forge-nav__gh:hover { color: var(--amber); border-color: var(--amber-dim); } .forge-nav__gh-stars:empty { display: none; } /* "N NEW" blog chip injected by files/blog-counter.js */ .forge-nav__links a.forge-blog-link { display: inline-flex; align-items: center; gap: 6px; } .forge-blog-chip { display: inline-flex; align-items: center; min-width: 16px; padding: 1px 6px; border: 1px solid var(--amber); border-radius: 3px; color: var(--amber); font-family: var(--font-mono); font-size: 10px; font-weight: 600; line-height: 1.4; letter-spacing: 0.6px; text-transform: uppercase; } /* Logo mark */ .forge-mark { display: flex; align-items: center; gap: 10px; font-family: var(--font-mono); font-size: 15px; font-weight: 600; color: var(--fg); } .forge-mark__glyph { width: 22px; height: 22px; color: var(--amber); display: block; flex-shrink: 0; } .forge-mark__glyph svg { width: 100%; height: 100%; display: block; } .forge-mark__tld { color: var(--fg-faint); font-weight: 400; } /* ───── Hero ───── */ .forge-hero { position: relative; padding: 72px 0 88px; } .forge-hero__grid { display: grid; grid-template-columns: 1.05fr 1fr; gap: 56px; align-items: center; } .forge-hero__lockup { display: inline-flex; align-items: center; gap: 20px; margin-bottom: 24px; } .forge-hero__glyph { width: 64px; height: 64px; color: var(--amber); display: block; flex-shrink: 0; } .forge-hero__glyph svg { width: 100%; height: 100%; display: block; } .forge-hero__eyebrow { font-family: var(--font-mono); font-size: 12px; font-weight: 500; color: var(--amber); letter-spacing: 1.4px; line-height: 1.15; text-transform: uppercase; max-width: 260px; } .forge-hero h1 { font-family: var(--font-sans); font-size: 64px; line-height: 1.02; font-weight: 600; letter-spacing: -0.03em; color: var(--fg); } .forge-hero h1 em { font-style: italic; font-weight: 400; color: var(--amber); } .forge-hero__lede { margin-top: 22px; font-size: 17px; line-height: 1.55; color: var(--fg-dim); max-width: 480px; } .forge-hero__ctas { display: flex; gap: 12px; margin-top: 32px; align-items: center; } .forge-btn-primary, .forge-btn-secondary { font-family: var(--font-mono); font-size: 13.5px; padding: 12px 18px; border-radius: 5px; display: inline-flex; align-items: center; gap: 8px; text-decoration: none; line-height: 1; } .forge-btn-primary { background: var(--amber); color: var(--bg); font-weight: 600; } .forge-btn-primary:hover { color: var(--bg); background: #f4b04a; } .forge-btn-secondary { color: var(--fg); border: 1px solid var(--rule); } .forge-btn-secondary:hover { color: var(--fg); border-color: var(--amber-dim); } /* Stat row under the hero CTAs */ .forge-stats { display: flex; gap: 28px; margin-top: 44px; padding-top: 24px; border-top: 1px solid var(--rule); font-family: var(--font-mono); font-size: 12px; } .forge-stat__n { color: var(--fg); font-size: 22px; white-space: nowrap; } .forge-stat__l { color: var(--fg-faint); margin-top: 2px; } /* ───── Terminal / code panel (hero right column) ───── */ .forge-terminal { background: var(--bg-2); border: 1px solid var(--rule); border-radius: 8px; box-shadow: 0 30px 80px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(232, 161, 58, 0.05); overflow: hidden; } .forge-terminal__header { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px; border-bottom: 1px solid var(--rule); font-family: var(--font-mono); font-size: 12px; color: var(--fg-dim); } .forge-terminal__dots { display: flex; gap: 6px; } .forge-terminal__dot { width: 11px; height: 11px; border-radius: 50%; } .forge-terminal__dot--red { background: #e84a3a; } .forge-terminal__dot--amber { background: var(--amber); } .forge-terminal__dot--green { background: var(--green); } .forge-terminal__label { flex: 1; text-align: center; } .forge-terminal__status { color: var(--amber); } /* Tabs above the code panel (sample switcher) */ .forge-sample-tabs { display: flex; border-bottom: 1px solid var(--rule); font-family: var(--font-mono); font-size: 12px; } .forge-sample-tab { padding: 10px 16px; color: var(--fg-faint); border-right: 1px solid var(--rule); cursor: pointer; background: transparent; border-bottom: 2px solid transparent; } .forge-sample-tab.is-active { color: var(--fg); background: var(--bg); border-bottom-color: var(--amber); } .forge-sample-tab:hover:not(.is-active) { color: var(--fg-dim); } /* Hero editor — CodeMirror instance. The CM build supplies its own gutter and * line-number rendering via lineNumbers:true; cm-forge.css colors the tokens. */ .forge-editor { height: 320px; overflow: hidden; } .forge-editor .CodeMirror { height: 100%; } /* Token colors (kept for blog code blocks rendered by highlight.js + pygments) */ .tok-kw, .pygments .k, .pygments .kd, .pygments .kr { color: var(--amber); } .tok-ty, .pygments .nb, .pygments .nc, .pygments .nt { color: var(--blue); } .tok-s, .pygments .s, .pygments .s1, .pygments .s2 { color: var(--green); } .tok-n, .pygments .m, .pygments .mi, .pygments .mf { color: #d8a8d8; } .tok-c, .pygments .c, .pygments .c1, .pygments .cm { color: var(--fg-faint); font-style: italic; } .tok-a, .pygments .na { color: var(--red); } .tok-id, .pygments .n { color: var(--fg); } .tok-p, .pygments .o, .pygments .p { color: var(--fg-dim); } /* Output panel beneath the code */ .forge-output { border-top: 1px solid var(--rule); background: var(--bg); padding: 12px 16px; font-family: var(--font-mono); font-size: 12.5px; color: var(--fg-dim); } .forge-output__line { white-space: pre; } .forge-output__prompt { color: var(--green); } .forge-output__stdout { color: var(--fg); } .forge-output__stderr { color: var(--red); } .forge-output__ok { color: var(--green); margin-top: 4px; } .forge-output__hint { color: var(--fg-faint); } /* Run button on the terminal header */ .forge-run { font-family: var(--font-mono); font-size: 12px; color: var(--amber); border: 1px solid var(--amber-dim); border-radius: 3px; padding: 3px 9px; cursor: pointer; background: transparent; } .forge-play { font-family: var(--font-mono); font-size: 12px; color: var(--fg-dim); border: 1px solid var(--rule); border-radius: 3px; padding: 3px 9px; margin-right: 6px; cursor: pointer; background: transparent; text-decoration: none; } .forge-play:hover { color: var(--fg); border-color: var(--fg-dim); } .forge-run:hover { background: rgba(232, 161, 58, 0.10); } .forge-run:disabled { opacity: 0.5; cursor: default; } .forge-play:disabled { opacity: 0.5; cursor: default; } /* ───── Section labels (§ 0N — name) ───── */ .forge-section { border-top: 1px solid var(--rule); padding: 88px 0; } .forge-section--alt { background: var(--bg-2); } .forge-section-label { display: flex; align-items: center; gap: 12px; font-family: var(--font-mono); font-size: 11.5px; color: var(--amber); text-transform: uppercase; letter-spacing: 1.4px; margin-bottom: 16px; } .forge-section-label__num { color: var(--fg-faint); } .forge-section-label__rule { flex: none; width: 36px; height: 1px; background: var(--amber-dim); } .forge-h2 { font-family: var(--font-sans); font-size: 38px; font-weight: 600; letter-spacing: -0.022em; line-height: 1.1; margin: 0; color: var(--fg); } .forge-p { color: var(--fg-dim); font-size: 16px; line-height: 1.6; margin-top: 18px; max-width: 460px; } .forge-link-amber { display: inline-block; margin-top: 14px; font-family: var(--font-mono); font-size: 12.5px; color: var(--amber); text-decoration: none; border-bottom: 1px solid var(--amber-dim); } /* ───── § 01 Benchmarks ───── */ .forge-bench__grid { display: grid; grid-template-columns: 0.9fr 1.4fr; gap: 56px; margin-top: 28px; align-items: start; } .forge-bench__meta { margin-top: 22px; font-family: var(--font-mono); font-size: 11.5px; color: var(--fg-faint); } .forge-bench__meta > div { line-height: 1.6; } .forge-bench__source { color: var(--amber-dim); border-bottom: 1px solid transparent; transition: color 80ms ease, border-color 80ms ease; } .forge-bench__source:hover { color: var(--amber); border-bottom-color: var(--amber-dim); } .forge-bench__panel { background: var(--bg); border: 1px solid var(--rule); border-radius: 8px; padding: 20px 22px; } .forge-bench__controls { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-bottom: 14px; padding-bottom: 14px; border-bottom: 1px dashed var(--rule); } .forge-bench__cats { display: flex; gap: 2px; font-family: var(--font-mono); font-size: 11.5px; } .forge-bench__cat { padding: 6px 12px; color: var(--fg-faint); border-radius: 4px; cursor: pointer; background: transparent; } .forge-bench__cat.is-active { color: var(--fg); background: var(--bg-2); border: 1px solid var(--rule); padding: 5px 11px; } .forge-bench__bm { font-family: var(--font-mono); font-size: 11.5px; color: var(--fg); background: var(--bg-2); border: 1px solid var(--rule); border-radius: 4px; padding: 5px 10px; } .forge-bench__row { display: grid; grid-template-columns: 170px 1fr 60px; gap: 14px; align-items: center; padding: 7px 0; border-bottom: 1px dashed var(--rule); } .forge-bench__row:last-child { border-bottom: none; } .forge-bench__label { font-family: var(--font-mono); font-size: 12.5px; color: var(--fg-dim); } .forge-bench__row--das .forge-bench__label { color: var(--fg); font-weight: 600; } .forge-bench__bar { height: 14px; background: var(--bg-2); border-radius: 2px; overflow: hidden; position: relative; } .forge-bench__bar-fill { height: 100%; } .forge-bench__row--das .forge-bench__bar-fill { background: var(--amber); } .forge-bench__row--das-ref .forge-bench__bar-fill { background: var(--blue); opacity: 0.75; } .forge-bench__row--das-ref .forge-bench__label { color: var(--blue); font-style: italic; } .forge-bench__row--native .forge-bench__bar-fill { background: var(--green); } .forge-bench__row--rival .forge-bench__bar-fill { background: var(--fg-dim); opacity: 0.55; } .forge-bench__num { font-family: var(--font-mono); font-size: 12px; color: var(--fg); text-align: right; } .forge-bench__caption { margin-top: 16px; padding-top: 14px; border-top: 1px dashed var(--rule); font-family: var(--font-mono); font-size: 11px; color: var(--fg-faint); } /* Platform cycler — left rail under the copy block. forge.js renders one row per profile JSON; clicking a row swaps the bars in the right card. */ .forge-bench__eyebrow { margin-top: 30px; margin-bottom: 10px; font-family: var(--font-mono); font-size: 11px; color: var(--fg-faint); letter-spacing: 1.2px; text-transform: uppercase; } .forge-bench__platforms { display: flex; flex-direction: column; } .forge-bench__platform { padding: 10px 14px; border-left: 2px solid transparent; background: transparent; cursor: pointer; transition: background 150ms ease; } .forge-bench__platform:hover { background: rgba(28, 26, 20, 0.5); } .forge-bench__platform.is-active { border-left-color: var(--amber); background: var(--bg-3); } .forge-bench__platform-label { font-family: var(--font-mono); font-size: 13px; color: var(--fg-dim); font-weight: 400; } .forge-bench__platform.is-active .forge-bench__platform-label { color: var(--fg); font-weight: 600; } .forge-bench__platform-meta { margin-top: 3px; font-family: var(--font-mono); font-size: 10.5px; line-height: 1.5; color: var(--fg-faint); } /* Test-selector chip in the card header. Decorative until 2+ workloads exist; then forge.js will hide it and unhide the .forge-bench__bm select. */ .forge-bench__test-chip { display: inline-flex; align-items: center; gap: 10px; padding: 6px 12px; border-radius: 6px; background: var(--bg-2); border: 1px solid var(--rule); color: var(--fg); font-family: var(--font-mono); font-size: 12.5px; cursor: pointer; } .forge-bench__test-chip-chevron { color: var(--fg-faint); font-size: 10px; } /* Playground deep-link footer — replaces the old static caption with an actionable link that carries the current test as a ?example= query into /playground/. */ .forge-bench__playground-link { display: flex; justify-content: flex-end; margin-top: 14px; padding-top: 14px; border-top: 1px dashed var(--rule); } .forge-bench__playground-link a { font-family: var(--font-mono); font-size: 12.5px; color: var(--amber); text-decoration: none; border-bottom: 1px solid var(--amber-dim); padding-bottom: 1px; } .forge-bench__playground-link a:hover { border-bottom-color: var(--amber); } .forge-bench__playground-test { color: var(--fg); } /* ───── § 02 Features ───── */ .forge-features__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--rule); margin-top: 36px; border: 1px solid var(--rule); } .forge-feature { background: var(--bg); padding: 24px 24px 28px; min-height: 180px; } .forge-feature__kicker { font-family: var(--font-mono); color: var(--amber); font-size: 11.5px; letter-spacing: 1.4px; text-transform: uppercase; } .forge-feature__title { margin-top: 12px; font-size: 19px; font-weight: 600; letter-spacing: -0.01em; } .forge-feature__body { margin-top: 10px; color: var(--fg-dim); font-size: 14px; line-height: 1.55; } /* ───── § 03 Platforms ───── */ .forge-platforms__grid { display: grid; grid-template-columns: 1fr 1.2fr; gap: 56px; align-items: start; } .forge-platforms__cells { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--rule); border: 1px solid var(--rule); } .forge-platform { background: var(--bg); padding: 20px 18px; min-height: 84px; } .forge-platform__name { font-family: var(--font-mono); font-size: 13.5px; color: var(--fg); } .forge-platform__sub { font-family: var(--font-mono); font-size: 11.5px; color: var(--fg-faint); margin-top: 4px; } /* ───── § 04 Install ───── */ .forge-install__grid { display: grid; grid-template-columns: 1fr 1.3fr; gap: 56px; align-items: start; margin-top: 24px; } .forge-install__panel { background: var(--bg-2); border: 1px solid var(--rule); border-radius: 8px; overflow: hidden; } .forge-install__tabs { display: flex; border-bottom: 1px solid var(--rule); font-family: var(--font-mono); font-size: 12px; } .forge-install__tab { cursor: pointer; padding: 10px 16px; color: var(--fg-faint); border-right: 1px solid var(--rule); background: transparent; border-bottom: 2px solid transparent; } .forge-install__tab.is-active { color: var(--fg); background: var(--bg); border-bottom-color: var(--amber); } .forge-install__body { padding: 20px 22px; font-family: var(--font-mono); font-size: 13px; line-height: 1.7; color: var(--fg); min-height: 230px; } .forge-install__pane { display: none; } .forge-install__pane.is-active { display: block; } .forge-install__hint { color: var(--fg-faint); } .forge-install__cmd { } .forge-install__cmd .prompt { color: var(--green); } .forge-install__sp { height: 14px; } /* ───── § 05 News ───── */ .forge-news__grid { display: grid; grid-template-columns: 1fr 1.5fr; gap: 56px; align-items: start; } .forge-news__row { display: grid; grid-template-columns: 120px 150px 1fr; gap: 18px; padding: 18px 0; border-top: 1px solid var(--rule); } .forge-news__date { font-family: var(--font-mono); font-size: 12px; color: var(--fg-faint); } .forge-news__tag { font-family: var(--font-mono); font-size: 11px; color: var(--amber); border: 1px solid var(--amber-dim); border-radius: 3px; padding: 2px 7px; align-self: start; justify-self: start; text-transform: lowercase; } .forge-news__title { color: var(--fg); font-size: 14.5px; line-height: 1.4; } /* Long module-name tags (e.g. dasImguiNodeEditor) must stay inside their grid track — cap at the column width and break rather than overlap the title. */ .forge-news__row .forge-news__tag { max-width: 100%; overflow-wrap: anywhere; } /* ───── Blog: listing + post ───── */ .forge-blog-list { margin-top: 24px; } .forge-blog-item { display: grid; grid-template-columns: 140px 90px 1fr; gap: 18px; padding: 22px 0; border-top: 1px solid var(--rule); align-items: start; } .forge-blog-item:hover { background: rgba(232, 161, 58, 0.02); } .forge-blog-item__date { font-family: var(--font-mono); font-size: 12px; color: var(--fg-faint); } .forge-blog-item__tag { font-family: var(--font-mono); font-size: 11px; color: var(--amber); border: 1px solid var(--amber-dim); border-radius: 3px; padding: 2px 7px; align-self: start; justify-self: start; text-transform: lowercase; } .forge-blog-item__title { font-family: var(--font-sans); font-size: 19px; font-weight: 600; color: var(--fg); letter-spacing: -0.01em; line-height: 1.3; } .forge-blog-item__title a { color: inherit; } .forge-blog-item__title a:hover { color: var(--amber); } .forge-blog-item__excerpt { margin-top: 8px; color: var(--fg-dim); font-size: 14.5px; line-height: 1.55; } .forge-post { padding: 56px 0 88px; } .forge-post__meta { display: flex; align-items: center; gap: 14px; font-family: var(--font-mono); font-size: 12px; color: var(--fg-faint); margin-bottom: 18px; } .forge-post__meta .forge-news__tag { font-size: 11px; } .forge-post h1.forge-post__title { font-family: var(--font-sans); font-size: 44px; line-height: 1.1; font-weight: 600; letter-spacing: -0.02em; margin: 0 0 24px; color: var(--fg); } .forge-post__body { max-width: 760px; font-size: 16px; line-height: 1.65; color: var(--fg); } .forge-post__body h2 { margin: 40px 0 14px; font-family: var(--font-sans); font-size: 26px; font-weight: 600; letter-spacing: -0.015em; color: var(--fg); } .forge-post__body h3 { margin: 32px 0 12px; font-family: var(--font-sans); font-size: 20px; font-weight: 600; color: var(--fg); } .forge-post__body p { margin: 14px 0; color: var(--fg-dim); } .forge-post__body strong, .forge-post__body b { color: var(--fg); font-weight: 600; } .forge-post__body ul, .forge-post__body ol { margin: 14px 0 14px 24px; color: var(--fg-dim); } .forge-post__body li { margin: 6px 0; } .forge-post__body a { color: var(--amber); border-bottom: 1px solid var(--amber-dim); } .forge-post__body a:hover { color: var(--fg); border-bottom-color: var(--fg); } .forge-post__body blockquote { margin: 18px 0; padding: 12px 18px; border-left: 2px solid var(--amber-dim); background: var(--bg-2); color: var(--fg-dim); } .forge-post__body code { font-family: var(--font-mono); font-size: 13px; background: var(--bg-2); border: 1px solid var(--rule); color: var(--amber); padding: 1px 5px; border-radius: 3px; } .forge-post__body pre { background: var(--bg-2); border: 1px solid var(--rule); border-radius: 8px; padding: 16px 18px; overflow-x: auto; font-family: var(--font-mono); font-size: 13px; line-height: 1.65; margin: 18px 0; } .forge-post__body pre code { background: none; border: none; padding: 0; color: var(--fg); } .forge-post__body hr { border: 0; border-top: 1px solid var(--rule); margin: 32px 0; } .forge-post__body img { margin: 18px 0; border-radius: 4px; } .forge-post-nav { margin-top: 56px; padding-top: 24px; border-top: 1px solid var(--rule); display: flex; justify-content: space-between; font-family: var(--font-mono); font-size: 12.5px; } .forge-post-nav a { color: var(--fg-dim); } .forge-post-nav a:hover { color: var(--amber); } /* ───── Comments (Disqus) ───── */ /* Disqus loads in a sandboxed iframe so we can only style the wrapper — * the comment styling itself comes from the Disqus admin panel * (Appearance → Color scheme: Auto). The `color-scheme: dark` hint on * :root makes Auto resolve to dark. */ .forge-post__comments { padding: 56px 0 88px; border-top: 1px solid var(--rule); background: var(--bg); } .forge-post__comments .forge-section-label { margin-bottom: 18px; } .forge-post__comments #disqus_thread { margin-top: 20px; background: var(--bg-2); border: 1px solid var(--rule); border-radius: 8px; padding: 16px 20px; min-height: 80px; } .forge-post__comments noscript { display: block; margin-top: 16px; color: var(--fg-faint); font-family: var(--font-mono); font-size: 12.5px; } .forge-post__comments noscript a { color: var(--amber); border-bottom: 1px solid var(--amber-dim); } /* Changelist: same layout as blog listing, wider. */ .forge-changelist { margin-top: 24px; } /* ───── Footer ───── */ .forge-footer { padding: 56px 0 64px; border-top: 1px solid var(--rule); font-family: var(--font-mono); font-size: 12.5px; } .forge-footer__grid { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1fr; gap: 32px; } .forge-footer__about { margin-top: 14px; color: var(--fg-faint); line-height: 1.6; } .forge-footer__col-head { color: var(--fg-faint); margin-bottom: 12px; text-transform: uppercase; letter-spacing: 1.2px; font-size: 11px; } .forge-footer__link { color: var(--fg); display: block; margin-bottom: 8px; } .forge-footer__link:hover { color: var(--amber); } /* ───── Responsive ───── */ /* Tablet 768–1023: stack hero */ @media (max-width: 1023px) { .forge-hero__grid { grid-template-columns: 1fr; gap: 40px; } .forge-nav__links { gap: 18px; } } /* Static hero fallback for mobile (replaces the CodeMirror live demo). * Hidden on desktop; the @media below flips visibility and also hides * the interactive editor + sample tabs + output + run/playground buttons. */ .forge-hero__code { display: none; margin: 0; padding: 16px 18px; background: transparent; color: var(--fg); font-family: var(--font-mono); font-size: 13px; line-height: 1.55; overflow-x: auto; white-space: pre; } /* Mobile nav: hamburger button toggles a dropdown panel containing the * normally-inline `.forge-nav__links`. Burger is hidden on desktop. The * toggle is a plain inline onclick on the button that flips `.is-open` * on the nav element. */ .forge-nav { position: relative; } .forge-nav__burger { display: none; cursor: pointer; background: transparent; border: 1px solid var(--rule); color: var(--fg-dim); font-family: var(--font-mono); font-size: 18px; line-height: 1; padding: 4px 12px; border-radius: 4px; transition: color 80ms ease, border-color 80ms ease; } .forge-nav__burger:hover { color: var(--amber); border-color: var(--amber-dim); } /* Mobile <768 */ @media (max-width: 767px) { .forge-container { padding: 0 20px; } .forge-nav__burger { display: inline-flex; align-items: center; order: -1; } .forge-nav__links { display: none; position: absolute; top: 100%; left: 0; right: 0; background: var(--bg-2); border-bottom: 1px solid var(--rule); padding: 16px 24px 20px; flex-direction: column; align-items: stretch; gap: 14px; font-size: 14px; z-index: 20; } .forge-nav.is-open .forge-nav__links { display: flex; } .forge-hero { padding: 48px 0 64px; } .forge-hero h1 { font-size: 38px; } .forge-hero__lede { font-size: 15px; } .forge-hero__lockup { gap: 14px; margin-bottom: 18px; } .forge-hero__glyph { width: 44px; height: 44px; } .forge-hero__eyebrow { font-size: 11px; } .forge-hero__ctas { flex-direction: column; align-items: stretch; } .forge-btn-primary, .forge-btn-secondary { justify-content: center; } .forge-stats { gap: 18px; flex-wrap: wrap; } .forge-stat { min-width: 45%; } /* Hero swaps from interactive CodeMirror to a static highlighted block. */ .forge-editor, .forge-output, .forge-sample-tabs, #hero-run, #hero-playground { display: none !important; } .forge-hero__code { display: block; } .forge-section { padding: 56px 0; } .forge-h2 { font-size: 26px; } .forge-bench__grid, .forge-platforms__grid, .forge-install__grid, .forge-news__grid { grid-template-columns: 1fr; gap: 36px; } .forge-bench__row { grid-template-columns: 110px 1fr 50px; gap: 8px; } .forge-bench__bar { height: 5px; } .forge-features__grid { grid-template-columns: 1fr; } .forge-platforms__cells { grid-template-columns: repeat(2, 1fr); } .forge-footer__grid { grid-template-columns: 1fr 1fr; } .forge-news__row { grid-template-columns: 90px 1fr; grid-template-areas: "date title" "tag tag"; } .forge-news__date { grid-area: date; } .forge-news__title { grid-area: title; } .forge-news__tag { grid-area: tag; } /* Blog index + changelist rows: stack date+tag on row 1, body on row 2. * Otherwise the 140px date column squeezes the title into ~94px and * each word wraps to a new line. */ .forge-blog-item { grid-template-columns: auto 1fr; grid-template-rows: auto auto; gap: 6px 12px; } .forge-blog-item__date { grid-row: 1; grid-column: 1; } .forge-blog-item__tag { grid-row: 1; grid-column: 2; justify-self: end; } .forge-blog-item__title { grid-row: 2; grid-column: 1 / -1; } .forge-blog-item > div:nth-child(3):not([class]) { grid-row: 2; grid-column: 1 / -1; } } /* Very narrow phones: drop the redundant version chip so [github ↗] + * [install] don't collide with it. */ @media (max-width: 479px) { .forge-nav__version { display: none; } } /* Tablet bench grid adjustment */ @media (max-width: 1023px) { .forge-bench__grid, .forge-platforms__grid, .forge-install__grid, .forge-news__grid { grid-template-columns: 1fr; gap: 40px; } .forge-features__grid { grid-template-columns: repeat(2, 1fr); } .forge-footer__grid { grid-template-columns: 1fr 1fr 1fr; } } /* ───────────────────────────────────────────────────────────── daspkg — package index page (/daspkg.html) + landing callout ───────────────────────────────────────────────────────────── */ /* Inline-code chip used in hero copy + landing callout. */ .forge-inline-code { font-family: var(--font-mono); font-size: 13px; padding: 1px 6px; background: var(--bg-2); border: 1px solid var(--rule); border-radius: 3px; color: var(--amber); } /* ───── Hero (/daspkg.html) ───── */ .forge-daspkg-hero { position: relative; overflow: hidden; padding: 52px 0 40px; border-bottom: 1px solid var(--rule); } .forge-daspkg-hero::before { content: ""; position: absolute; inset: 0; pointer-events: none; background-image: radial-gradient(700px 280px at 85% -60px, rgba(232, 161, 58, 0.10), transparent 60%), radial-gradient(circle at center, rgba(255, 255, 255, 0.04) 1px, transparent 1px); background-size: auto, 22px 22px; -webkit-mask-image: linear-gradient(to bottom, black, transparent); mask-image: linear-gradient(to bottom, black, transparent); } .forge-daspkg-hero__grid { position: relative; display: grid; grid-template-columns: 1.05fr 1fr; gap: 48px; align-items: end; } .forge-daspkg-hero h1 { font-family: var(--font-sans); font-size: 56px; line-height: 1.02; font-weight: 600; letter-spacing: -0.03em; color: var(--fg); margin: 0; } .forge-daspkg-hero h1 em { font-style: italic; font-weight: 400; color: var(--amber); } .forge-daspkg-hero__kicker { font-family: var(--font-mono); font-size: 12px; color: var(--amber); letter-spacing: 1.4px; text-transform: uppercase; margin-bottom: 14px; } .forge-daspkg-hero__lede { margin-top: 18px; font-size: 16px; line-height: 1.6; color: var(--fg-dim); max-width: 560px; } .forge-daspkg-hero__lede a { color: var(--amber); border-bottom: 1px solid var(--amber-dim); } .forge-daspkg-hero__ctas { margin-top: 24px; display: flex; gap: 18px; align-items: center; flex-wrap: wrap; } .forge-daspkg-cmd { font-family: var(--font-mono); font-size: 13px; background: var(--bg-2); border: 1px solid var(--rule); padding: 8px 12px; border-radius: 5px; display: inline-flex; align-items: center; gap: 8px; color: var(--fg); } .forge-daspkg-cmd .prompt { color: var(--green); } .forge-daspkg-cmd .placeholder { color: var(--fg-dim); } .forge-daspkg-cmd .copy { margin-left: 6px; color: var(--fg-faint); cursor: copy; user-select: none; } .forge-daspkg-cmd .copy:hover { color: var(--amber); } .forge-daspkg-hero__doc-link { font-family: var(--font-mono); font-size: 12.5px; color: var(--fg-dim); border-bottom: 1px solid var(--rule); } /* "publish a package" card (right column of the hero) */ .forge-daspkg-publish { background: var(--bg-2); border: 1px solid var(--rule); border-radius: 6px; padding: 18px 20px; } .forge-daspkg-publish__head { font-family: var(--font-mono); font-size: 11px; color: var(--fg-faint); letter-spacing: 1.3px; text-transform: uppercase; margin-bottom: 14px; } .forge-daspkg-publish__body { font-family: var(--font-mono); font-size: 13px; line-height: 1.7; color: var(--fg); } .forge-daspkg-publish__body .prompt { color: var(--green); } .forge-daspkg-publish__body .placeholder { color: var(--fg-dim); } .forge-daspkg-publish__body .comment { color: var(--fg-faint); } .forge-daspkg-publish__foot { margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--rule); display: flex; justify-content: space-between; font-family: var(--font-mono); font-size: 11.5px; } .forge-daspkg-publish__count { color: var(--fg-faint); } .forge-daspkg-publish__cli { color: var(--amber); } /* ───── Filter strip ───── */ .forge-daspkg-filter { border-bottom: 1px solid var(--rule); padding: 28px 0 22px; } .forge-daspkg-filter__row { display: grid; grid-template-columns: 320px 1fr auto; gap: 24px; align-items: center; } .forge-daspkg-search { display: flex; align-items: center; gap: 10px; background: var(--bg-2); border: 1px solid var(--rule); border-radius: 5px; padding: 8px 12px; } .forge-daspkg-search__glyph { color: var(--fg-faint); font-family: var(--font-mono); font-size: 13px; } .forge-daspkg-search input { flex: 1; background: transparent; border: 0; outline: 0; color: var(--fg); font-family: var(--font-mono); font-size: 13px; } .forge-daspkg-search input::placeholder { color: var(--fg-faint); } .forge-daspkg-search__clear { color: var(--fg-faint); font-family: var(--font-mono); font-size: 12px; cursor: pointer; background: none; border: 0; padding: 0; } .forge-daspkg-search__clear:hover { color: var(--amber); } .forge-daspkg-tags { display: flex; flex-wrap: wrap; gap: 6px; } .forge-daspkg-chip { font-family: var(--font-mono); font-size: 11.5px; padding: 4px 9px; border-radius: 3px; cursor: pointer; background: var(--bg-2); color: var(--fg-dim); border: 1px solid var(--rule); font-weight: 400; user-select: none; transition: background 80ms ease, color 80ms ease, border-color 80ms ease; } .forge-daspkg-chip:hover { border-color: var(--amber-dim); color: var(--fg); } .forge-daspkg-chip.is-active { background: var(--amber); color: var(--bg); border-color: var(--amber); font-weight: 600; } .forge-daspkg-count { font-family: var(--font-mono); font-size: 11.5px; color: var(--fg-faint); white-space: nowrap; } .forge-daspkg-count__n { color: var(--fg); } /* ───── Grid + cards ───── */ .forge-daspkg-grid { padding: 36px 0 80px; } .forge-daspkg-grid__list { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; } .forge-daspkg-empty { padding: 60px 0; text-align: center; color: var(--fg-faint); font-family: var(--font-mono); font-size: 13px; } .forge-daspkg-card { background: var(--bg-2); border: 1px solid var(--rule); border-radius: 6px; padding: 20px 22px 18px; display: flex; flex-direction: column; gap: 14px; cursor: pointer; transition: border-color 120ms ease; color: inherit; text-decoration: none; } .forge-daspkg-card:hover { border-color: var(--amber-dim); } .forge-daspkg-card:hover .forge-daspkg-card__repo { color: var(--amber); } .forge-daspkg-card__head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; } .forge-daspkg-card__title-row { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; } .forge-daspkg-card h3 { margin: 0; font-family: var(--font-mono); font-size: 17px; font-weight: 600; color: var(--fg); letter-spacing: -0.005em; } .forge-daspkg-card__native { font-family: var(--font-mono); font-size: 10.5px; color: var(--amber); border: 1px solid var(--amber-dim); padding: 1px 6px; border-radius: 2px; letter-spacing: 0.6px; } .forge-daspkg-card__sdk { font-family: var(--font-mono); font-size: 10.5px; color: var(--fg-faint); } .forge-daspkg-card__license { font-family: var(--font-mono); font-size: 11px; color: var(--fg-faint); } .forge-daspkg-card__desc { margin: 0; color: var(--fg-dim); font-size: 14px; line-height: 1.55; } .forge-daspkg-card__tags { display: flex; flex-wrap: wrap; gap: 5px; } .forge-daspkg-card__tag { font-family: var(--font-mono); font-size: 10.5px; padding: 2px 6px; border-radius: 2px; color: var(--fg-dim); background: var(--bg-2); border: 1px solid var(--rule); } .forge-daspkg-card__deps { font-family: var(--font-mono); font-size: 11px; color: var(--fg-faint); margin-top: -6px; } .forge-daspkg-card__foot { margin-top: auto; display: flex; align-items: center; justify-content: space-between; padding-top: 12px; border-top: 1px solid var(--rule); } .forge-daspkg-card__install { font-family: var(--font-mono); font-size: 11.5px; color: var(--fg-dim); display: flex; align-items: center; gap: 8px; } .forge-daspkg-card__install .prompt { color: var(--green); } .forge-daspkg-card__install .copy { color: var(--fg-faint); cursor: copy; user-select: none; } .forge-daspkg-card__install .copy:hover { color: var(--amber); } .forge-daspkg-card__repo { font-family: var(--font-mono); font-size: 11.5px; color: var(--fg-dim); transition: color 120ms ease; } /* ───── Landing-page callout (§ 05 packages) ───── */ .forge-pkg-callout__grid { display: grid; grid-template-columns: 1fr 1.3fr; gap: 56px; align-items: start; } .forge-pkg-callout h2 { font-family: var(--font-sans); font-size: 38px; font-weight: 600; letter-spacing: -0.022em; line-height: 1.1; margin: 0; color: var(--fg); } .forge-pkg-callout h2 em { font-style: italic; font-weight: 400; color: var(--amber); } .forge-pkg-callout__lede { color: var(--fg-dim); font-size: 16px; line-height: 1.6; margin-top: 18px; max-width: 460px; } .forge-pkg-callout__ctas { margin-top: 22px; display: flex; gap: 12px; flex-wrap: wrap; } .forge-pkg-callout__primary { background: var(--amber); color: var(--bg); font-family: var(--font-mono); font-weight: 600; padding: 10px 16px; border-radius: 5px; font-size: 13px; text-decoration: none; } .forge-pkg-callout__primary:hover { color: var(--bg); background: #f4b04a; } .forge-pkg-callout__secondary { color: var(--fg); font-family: var(--font-mono); padding: 10px 16px; font-size: 13px; border: 1px solid var(--rule); border-radius: 5px; text-decoration: none; } .forge-pkg-callout__secondary:hover { border-color: var(--amber-dim); } .forge-pkg-callout__index { margin-top: 20px; font-family: var(--font-mono); font-size: 11.5px; color: var(--fg-faint); } .forge-pkg-callout__term { background: var(--bg-2); border: 1px solid var(--rule); border-radius: 6px; padding: 14px 16px; font-family: var(--font-mono); font-size: 13px; color: var(--fg); line-height: 1.6; } .forge-pkg-callout__term .prompt { color: var(--green); } .forge-pkg-callout__term .ok { color: var(--green); } .forge-pkg-callout__term .dim { color: var(--fg-faint); } .forge-pkg-callout__cells { margin-top: 18px; display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--rule); border: 1px solid var(--rule); border-radius: 6px; overflow: hidden; } .forge-pkg-callout__cell { background: var(--bg); padding: 16px 16px 18px; text-decoration: none; color: inherit; display: block; transition: background 120ms ease; } .forge-pkg-callout__cell:hover { background: var(--bg-3); } .forge-pkg-callout__cell:hover .forge-pkg-callout__cell-name { color: var(--amber); } .forge-pkg-callout__cell-name { font-family: var(--font-mono); font-size: 13px; font-weight: 600; color: var(--fg); transition: color 120ms ease; } .forge-pkg-callout__cell-tags { font-family: var(--font-mono); font-size: 10.5px; color: var(--fg-faint); margin-top: 4px; } .forge-pkg-callout__cell-desc { color: var(--fg-dim); font-size: 12.5px; line-height: 1.5; margin-top: 10px; } .forge-pkg-callout__indexed { margin-top: 12px; font-family: var(--font-mono); font-size: 11.5px; color: var(--fg-faint); text-align: right; } /* ───── Responsive ───── */ @media (max-width: 1023px) { .forge-daspkg-hero__grid { grid-template-columns: 1fr; gap: 32px; align-items: start; } .forge-pkg-callout__grid { grid-template-columns: 1fr; gap: 36px; } } @media (max-width: 767px) { .forge-daspkg-hero { padding: 36px 0 28px; } .forge-daspkg-hero h1 { font-size: 38px; } .forge-daspkg-hero__ctas { flex-direction: column; align-items: stretch; } .forge-daspkg-cmd { width: 100%; } .forge-daspkg-filter__row { grid-template-columns: 1fr; gap: 14px; } .forge-daspkg-search { width: 100%; } .forge-daspkg-grid__list { grid-template-columns: 1fr; } .forge-daspkg-grid { padding: 28px 0 60px; } .forge-pkg-callout h2 { font-size: 26px; } .forge-pkg-callout__cells { grid-template-columns: 1fr; } } /* ═══════════════════════════════════════════════════════════════════════ Examples page (examples.html) — daslang apps compiled to wasm, played in an overlay. Mirrors forge-examples.jsx. The card "screen" is a real gameplay poster; clicking runs the compiled wasm64 build in an iframe. ═══════════════════════════════════════════════════════════════════════ */ /* ───── Hero ───── */ .forge-ex-hero { border-bottom: 1px solid var(--rule); padding: 52px 0 40px; position: relative; overflow: hidden; } .forge-ex-hero::before { content: ""; position: absolute; inset: 0; pointer-events: none; background-image: radial-gradient(700px 280px at 85% -60px, rgba(232,161,58,0.10), transparent 60%), radial-gradient(circle at center, rgba(255,255,255,0.04) 1px, transparent 1px); background-size: auto, 22px 22px; -webkit-mask-image: linear-gradient(to bottom, black, transparent); mask-image: linear-gradient(to bottom, black, transparent); } .forge-ex-hero__kicker { font-family: var(--font-mono); font-size: 12px; color: var(--amber); letter-spacing: 1.4px; text-transform: uppercase; margin-bottom: 14px; position: relative; } .forge-ex-hero__title { font-family: var(--font-sans); font-size: 56px; line-height: 1.02; font-weight: 600; margin: 0; letter-spacing: -0.03em; max-width: 760px; position: relative; } .forge-ex-hero__title em { font-style: italic; font-weight: 400; color: var(--amber); } .forge-ex-hero__lede { margin-top: 18px; font-size: 16px; line-height: 1.6; color: var(--fg-dim); max-width: 620px; position: relative; } /* ───── Grid ───── */ .forge-ex-grid { padding: 40px 0 90px; } .forge-ex-grid__list { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 16px; } /* ───── Card ───── */ .forge-ex-card { background: var(--bg-2); border: 1px solid var(--rule); border-radius: 8px; overflow: hidden; cursor: pointer; display: flex; flex-direction: column; transition: border-color 120ms ease; } .forge-ex-card:hover, .forge-ex-card:focus-visible { border-color: var(--amber-dim); outline: none; } .forge-ex-card__screen { position: relative; height: 200px; border-bottom: 1px solid var(--rule); background: #070605; overflow: hidden; } .forge-ex-card__poster { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 40%; } .forge-ex-card__scanlines { position: absolute; inset: 0; pointer-events: none; background-image: repeating-linear-gradient(0deg, rgba(0,0,0,0.22) 0, rgba(0,0,0,0.22) 1px, transparent 1px, transparent 3px); } .forge-ex-card__hover { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; background: transparent; transition: background 120ms ease; } .forge-ex-card:hover .forge-ex-card__hover, .forge-ex-card:focus-visible .forge-ex-card__hover { background: rgba(7,6,5,0.45); } /* Persistent play-circle (video-thumbnail pattern) — always visible so the card reads as runnable on touch + at a glance; brightens to solid amber on hover. */ .forge-ex-card__playbtn { width: 56px; height: 56px; display: flex; align-items: center; justify-content: center; border-radius: 99px; background: rgba(7,6,5,0.55); border: 1.5px solid var(--amber); color: var(--amber); font-size: 18px; padding-left: 3px; /* optically center the ▶ glyph */ opacity: 0.9; transition: all 140ms ease; } .forge-ex-card:hover .forge-ex-card__playbtn, .forge-ex-card:focus-visible .forge-ex-card__playbtn { background: var(--amber); color: var(--bg); opacity: 1; transform: scale(1.08); } .forge-ex-card__body { padding: 18px 20px 16px; display: flex; flex-direction: column; gap: 12px; flex: 1; } .forge-ex-card__titlerow { display: flex; align-items: baseline; gap: 10px; } .forge-ex-card__name { margin: 0; font-family: var(--font-sans); font-size: 19px; font-weight: 600; color: var(--fg); letter-spacing: -0.01em; } .forge-ex-card__kind { font-family: var(--font-mono); font-size: 10.5px; color: var(--amber); border: 1px solid var(--amber-dim); padding: 1px 7px; border-radius: 2px; white-space: nowrap; } .forge-ex-card__desc { margin: 0; color: var(--fg-dim); font-size: 13.5px; line-height: 1.55; } .forge-ex-card__tags { display: flex; gap: 5px; flex-wrap: wrap; } .forge-ex-tag { font-family: var(--font-mono); font-size: 10.5px; padding: 2px 6px; border-radius: 2px; color: var(--fg-dim); background: var(--bg); border: 1px solid var(--rule); } .forge-ex-card__foot { margin-top: auto; padding-top: 14px; border-top: 1px solid var(--rule); display: flex; flex-direction: column; gap: 10px; align-items: flex-start; } .forge-ex-card__pglink { font-family: var(--font-mono); font-size: 11.5px; color: var(--fg-dim); white-space: nowrap; } .forge-ex-card__pglink:hover { color: var(--amber); } /* ───── More-coming tile ───── */ .forge-ex-more { border: 1px dashed var(--rule); border-radius: 8px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; min-height: 150px; text-align: center; padding: 24px; } .forge-ex-more__plus { font-family: var(--font-mono); font-size: 22px; color: var(--rule); } .forge-ex-more__head { font-family: var(--font-mono); font-size: 12px; color: var(--fg-dim); } .forge-ex-more__sub { font-family: var(--font-mono); font-size: 10.5px; line-height: 1.5; max-width: 220px; color: var(--fg-faint); } /* ───── Overlay player ───── */ .forge-ex-overlay { position: fixed; inset: 0; z-index: 1000; background: rgba(5,4,3,0.82); -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px); display: flex; align-items: center; justify-content: center; padding: 40px; } .forge-ex-player { /* Size the player to the game's aspect ratio (--ex-aspect, set per example) so the canvas fills it without letterbox bars; capped by 900px-wide and the viewport's max height. */ width: min(900px, 100%, calc(min(62vh, 560px) * var(--ex-aspect, 1.3333))); background: var(--bg-2); border: 1px solid var(--rule); border-radius: 10px; overflow: hidden; box-shadow: 0 40px 120px rgba(0,0,0,0.6); display: flex; flex-direction: column; } .forge-ex-player__bar { display: flex; align-items: center; gap: 12px; padding: 11px 14px; border-bottom: 1px solid var(--rule); } .forge-ex-player__lights { display: flex; gap: 6px; } .forge-ex-player__lights span { width: 11px; height: 11px; border-radius: 99px; } .forge-ex-player__lights span:nth-child(1) { background: #e84a3a; } .forge-ex-player__lights span:nth-child(2) { background: #e8a13a; } .forge-ex-player__lights span:nth-child(3) { background: #9bc46a; } .forge-ex-player__name { font-family: var(--font-mono); font-size: 13px; color: var(--fg); font-weight: 600; } .forge-ex-player__status { font-family: var(--font-mono); font-size: 11px; display: flex; align-items: center; gap: 6px; white-space: nowrap; } .forge-ex-player__status.is-running { color: var(--green); } .forge-ex-player__status.is-loading { color: var(--fg-dim); } .forge-ex-player__status.is-fallback { color: var(--amber); } .forge-ex-player__dot { width: 6px; height: 6px; border-radius: 99px; background: currentColor; display: inline-block; } .forge-ex-player__status.is-running .forge-ex-player__dot { animation: forgeExBlink 1.1s ease-in-out infinite; } .forge-ex-player__status.is-loading .forge-ex-player__dot { animation: forgeExBlink 0.7s ease-in-out infinite; } .forge-ex-player__actions { margin-left: auto; display: flex; align-items: center; gap: 6px; } .forge-ex-pill { font-family: var(--font-mono); font-size: 12px; color: var(--fg-dim); border: 1px solid var(--rule); border-radius: 4px; padding: 4px 9px; background: var(--bg-2); cursor: pointer; } .forge-ex-pill:hover { color: var(--fg); border-color: var(--amber-dim); } .forge-ex-pill--close { color: var(--fg); } .forge-ex-player__viewport { position: relative; width: 100%; aspect-ratio: var(--ex-aspect, 1.3333); max-height: min(62vh, 560px); background: #070605; } /* Fullscreen: drop the in-page aspect box and max-height cap so the viewport (and the iframe inside it) fill the screen. The game canvas is grown to fit letterboxed by examples.js (object-fit into the same-origin frame). */ .forge-ex-player__viewport:fullscreen { width: 100vw; height: 100vh; max-height: none; aspect-ratio: auto; background: #0d0c0a; } .forge-ex-player__frame { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; display: block; } .forge-ex-player__fallback { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; gap: 14px; padding: 40px; } .forge-ex-player__fallback-glyph { font-size: 40px; color: var(--amber); opacity: 0.8; } .forge-ex-player__fallback-head { font-family: var(--font-sans); font-size: 20px; font-weight: 600; color: var(--fg); } .forge-ex-player__fallback-body { font-size: 14px; line-height: 1.6; color: var(--fg-dim); max-width: 440px; } .forge-ex-player__fallback-btn { margin-top: 6px; font-family: var(--font-mono); font-size: 13px; font-weight: 600; color: var(--bg); background: var(--amber); padding: 10px 18px; border-radius: 5px; } .forge-ex-player__toolbar { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 12px 16px; border-top: 1px solid var(--rule); background: var(--bg); flex-wrap: wrap; } .forge-ex-player__controls { font-family: var(--font-mono); font-size: 11.5px; color: var(--fg-faint); } .forge-ex-player__controls-label { color: var(--fg-dim); } .forge-ex-player__links { display: flex; align-items: center; gap: 16px; font-family: var(--font-mono); font-size: 12px; } .forge-ex-player__link { color: var(--fg-dim); border-bottom: 1px solid var(--rule); } .forge-ex-player__link:hover { color: var(--fg); } .forge-ex-player__link--amber { color: var(--amber); border-bottom-color: var(--amber-dim); } @keyframes forgeExBlink { 0%,100%{opacity:1} 50%{opacity:0.25} } /* ───── Responsive ───── */ @media (max-width: 1023px) { .forge-ex-hero__title { font-size: 42px; } } @media (max-width: 640px) { .forge-ex-hero__title { font-size: 34px; } .forge-ex-overlay { padding: 16px; } }