/* ═══════════════════════════════════════════════════════════ PearDock Website · Design System Brand tokens: #0f1117 · #2dd4bf · #f4f7fb ═══════════════════════════════════════════════════════════ */ :root { --bg-primary: #0a0c10; --bg-secondary: #0f1117; --bg-tertiary: #161b22; --bg-elevated: #1c2128; --bg-hover: #22272e; --bg-glass: rgba(22, 27, 34, 0.72); --accent: #2dd4bf; --accent-secondary: #14b8a6; --accent-dim: rgba(45, 212, 191, 0.12); --accent-glow: rgba(45, 212, 191, 0.35); --accent-border: rgba(45, 212, 191, 0.28); --success: #4ade80; --warning: #fbbf24; --danger: #f87171; --info: #38bdf8; --text: #f4f7fb; --text-secondary: #c8d1df; --text-muted: #9aa8bc; --text-faint: #7d8b9f; --border: rgba(255, 255, 255, 0.08); --border-strong: rgba(255, 255, 255, 0.14); --radius: 14px; --radius-sm: 10px; --radius-lg: 22px; --radius-full: 999px; --font: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; --mono: 'JetBrains Mono', 'SF Mono', 'Fira Code', ui-monospace, monospace; --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4); --shadow-md: 0 8px 24px rgba(0, 0, 0, 0.35); --shadow-lg: 0 24px 64px rgba(0, 0, 0, 0.45); --shadow-glow: 0 0 80px rgba(45, 212, 191, 0.15); /* Compact bar; pear hangs below and is cradled by the bar bottom */ --nav-h: 68px; --brand-logo: 96px; /* Keep leaf fully on-screen (no overflow above viewport top) */ --brand-top-inset: 6px; /* How far the pear hangs past the bar bottom */ --brand-overhang: calc(var(--brand-logo) - var(--nav-h) + var(--brand-top-inset)); /* True semicircle diameter under the pear (snug around the mark) */ --brand-cradle: calc(var(--brand-logo) + 4px); --max: 1200px; --max-wide: 1400px; /* Docs prose width is controlled in docs.css (--docs-content) */ --docs-max: 58rem; --install-max: 720px; --ease: cubic-bezier(0.22, 1, 0.36, 1); } *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { scroll-behavior: smooth; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-rendering: optimizeLegibility; /* Single scrollport: only the document scrolls (not html+body both) */ overflow-x: clip; overflow-y: scroll; /* stable gutter; body must NOT also scroll */ max-width: 100%; height: 100%; } body { font-family: var(--font); font-size: 16px; line-height: 1.65; color: var(--text); background: var(--bg-primary); min-height: 100%; /* Critical: avoid second vertical scrollbar on body */ overflow-x: clip; overflow-y: visible; max-width: 100%; position: relative; } /* ─── Slim themed scrollbars (site-wide) ─── */ :root { --sb-size: 8px; --sb-radius: 999px; --sb-track: transparent; --sb-thumb: rgba(148, 163, 184, 0.28); --sb-thumb-hover: rgba(45, 212, 191, 0.55); --sb-thumb-active: rgba(45, 212, 191, 0.75); } /* Firefox */ * { scrollbar-width: thin; scrollbar-color: var(--sb-thumb) var(--sb-track); } /* Chromium / Safari / Edge */ *::-webkit-scrollbar { width: var(--sb-size); height: var(--sb-size); } *::-webkit-scrollbar-track { background: var(--sb-track); border-radius: var(--sb-radius); } *::-webkit-scrollbar-thumb { background: var(--sb-thumb); border-radius: var(--sb-radius); border: 2px solid transparent; background-clip: padding-box; } *::-webkit-scrollbar-thumb:hover { background: var(--sb-thumb-hover); border: 2px solid transparent; background-clip: padding-box; } *::-webkit-scrollbar-thumb:active { background: var(--sb-thumb-active); border: 2px solid transparent; background-clip: padding-box; } *::-webkit-scrollbar-corner { background: transparent; } /* Utility: hide without fighting other display rules */ .hidden, [hidden] { display: none !important; } /* Ensure main chrome never forces a wider document */ main, .site-nav, .site-footer, .docs-layout, .section, .container, .container-wide { max-width: 100%; min-width: 0; } img { max-width: 100%; height: auto; display: block; } video, iframe, svg { max-width: 100%; } a { color: var(--accent); text-decoration: none; transition: color 0.2s var(--ease); } a:hover { color: #5eead4; } /* ─── Typography ─── */ h1, h2, h3, h4 { font-weight: 700; letter-spacing: -0.03em; line-height: 1.15; color: var(--text); } h1 { font-size: clamp(2.4rem, 5.5vw, 3.75rem); } h2 { font-size: clamp(1.75rem, 3.5vw, 2.5rem); } h3 { font-size: 1.25rem; } h4 { font-size: 1.05rem; } p { color: var(--text-secondary); } .lead { font-size: clamp(1.05rem, 2vw, 1.25rem); color: var(--text-muted); line-height: 1.7; max-width: 52ch; } .gradient-text { background: linear-gradient(135deg, #5eead4 0%, var(--accent) 40%, #38bdf8 100%); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; } /* ─── Layout ─── */ .container { width: min(100% - 2rem, var(--max)); max-width: 100%; margin-inline: auto; padding-inline: 0; box-sizing: border-box; } .container-wide { width: min(100% - 2rem, var(--max-wide)); max-width: 100%; margin-inline: auto; box-sizing: border-box; } .section { padding: 6rem 0; position: relative; } .section-sm { padding: 4rem 0; } .section-label { display: inline-flex; align-items: center; gap: 0.5rem; font-size: 0.75rem; font-weight: 600; letter-spacing: 0.12em; text-transform: uppercase; color: var(--accent); margin-bottom: 1rem; } .section-label::before { content: ''; width: 18px; height: 2px; background: var(--accent); border-radius: 2px; } /* ─── Buttons ─── */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 0.55rem; font-family: var(--font); font-size: 0.95rem; font-weight: 600; letter-spacing: -0.01em; padding: 0.8rem 1.4rem; border-radius: var(--radius-full); border: 1px solid transparent; cursor: pointer; transition: transform 0.25s var(--ease), box-shadow 0.25s var(--ease), background 0.2s, border-color 0.2s, color 0.2s; text-decoration: none; white-space: nowrap; line-height: 1.2; } .btn:hover { transform: translateY(-1px); } .btn:active { transform: translateY(0); } .btn-primary { background: linear-gradient(135deg, var(--accent) 0%, var(--accent-secondary) 100%); color: #042f2e; box-shadow: 0 0 0 1px rgba(45, 212, 191, 0.3), 0 8px 28px rgba(45, 212, 191, 0.25); } .btn-primary:hover { color: #042f2e; box-shadow: 0 0 0 1px rgba(45, 212, 191, 0.5), 0 12px 36px rgba(45, 212, 191, 0.35); } .btn-secondary { background: var(--bg-elevated); color: var(--text); border-color: var(--border-strong); } .btn-secondary:hover { color: var(--text); border-color: var(--accent-border); background: var(--bg-hover); } .btn-ghost { background: transparent; color: var(--text-secondary); border-color: var(--border); } .btn-ghost:hover { color: var(--text); border-color: var(--border-strong); background: rgba(255, 255, 255, 0.03); } .btn-lg { padding: 1rem 1.75rem; font-size: 1.02rem; } .btn-sm { padding: 0.5rem 0.95rem; font-size: 0.85rem; } /* ─── Cards ─── */ .card { background: linear-gradient(165deg, rgba(28, 33, 40, 0.9) 0%, rgba(15, 17, 23, 0.95) 100%); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 1.75rem; transition: border-color 0.3s var(--ease), transform 0.3s var(--ease), box-shadow 0.3s var(--ease); max-width: 100%; min-width: 0; box-sizing: border-box; overflow-x: clip; } .card:hover { border-color: var(--accent-border); transform: translateY(-3px); box-shadow: var(--shadow-md), 0 0 40px rgba(45, 212, 191, 0.06); } .card-icon { width: 44px; height: 44px; border-radius: 12px; display: grid; place-items: center; background: var(--accent-dim); border: 1px solid var(--accent-border); color: var(--accent); font-size: 1.15rem; margin-bottom: 1.1rem; } .card h3 { margin-bottom: 0.55rem; } .card p { font-size: 0.95rem; color: var(--text-muted); } /* ─── Code ─── */ code, kbd { font-family: var(--mono); font-size: 0.88em; } :not(pre) > code { background: var(--accent-dim); color: var(--accent); padding: 0.15em 0.45em; border-radius: 6px; border: 1px solid var(--accent-border); } pre { background: #080a0e; border: 1px solid var(--border); border-radius: var(--radius); padding: 1.15rem 1.25rem; /* Long curl URLs have no spaces · break mid-token, never h-scroll */ overflow-x: clip; overflow-y: hidden; max-width: 100%; width: 100%; min-width: 0; box-sizing: border-box; font-family: var(--mono); font-size: 0.8rem; line-height: 1.7; color: var(--text-secondary); position: relative; white-space: pre-wrap; word-break: break-all; overflow-wrap: anywhere; } pre code { background: none; border: none; padding: 0; color: inherit; font-size: inherit; white-space: pre-wrap; word-break: break-all; overflow-wrap: anywhere; display: block; max-width: 100%; min-width: 0; overflow-x: clip; box-sizing: border-box; } .code-block { position: relative; margin: 1.25rem 0; max-width: 100%; min-width: 0; overflow-x: clip; overflow-y: visible; width: 100%; box-sizing: border-box; } .code-block pre { margin: 0; /* room for copy button */ padding-right: 4.5rem; overflow-x: clip; white-space: pre-wrap; word-break: break-all; } .code-block .copy-btn { position: absolute; top: 0.65rem; right: 0.65rem; z-index: 2; font-size: 0.75rem; padding: 0.35rem 0.65rem; border-radius: 8px; background: var(--bg-elevated); border: 1px solid var(--border); color: var(--text-muted); cursor: pointer; font-family: var(--font); font-weight: 500; transition: all 0.2s; } .code-block .copy-btn:hover { color: var(--accent); border-color: var(--accent-border); } .code-block .copy-btn.copied { color: var(--success); border-color: rgba(74, 222, 128, 0.35); } /* ─── Tables ─── */ .table-wrap { overflow-x: clip; margin: 1.25rem 0; border-radius: var(--radius); border: 1px solid var(--border); max-width: 100%; width: 100%; box-sizing: border-box; min-width: 0; } table { width: 100%; max-width: 100%; border-collapse: collapse; font-size: 0.92rem; table-layout: fixed; } th, td { text-align: left; padding: 0.85rem 1.1rem; border-bottom: 1px solid var(--border); word-break: break-word; overflow-wrap: anywhere; vertical-align: top; min-width: 0; } th code, td code { word-break: break-all; overflow-wrap: anywhere; white-space: normal; } th { background: var(--bg-tertiary); color: var(--text-muted); font-weight: 600; font-size: 0.78rem; letter-spacing: 0.04em; text-transform: uppercase; } td { color: var(--text-secondary); background: rgba(15, 17, 23, 0.5); } tr:last-child td { border-bottom: none; } tr:hover td { background: rgba(45, 212, 191, 0.04); } /* ─── Badge / Chip ─── */ .badge { display: inline-flex; align-items: center; gap: 0.35rem; font-size: 0.72rem; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; padding: 0.3rem 0.65rem; border-radius: var(--radius-full); background: var(--accent-dim); color: var(--accent); border: 1px solid var(--accent-border); } .badge-muted { background: rgba(255, 255, 255, 0.05); color: var(--text-muted); border-color: var(--border); } /* ─── Nav ─── */ .site-nav { position: fixed; top: 0; left: 0; right: 0; z-index: 1000; height: var(--nav-h); display: flex; align-items: center; /* Pear hangs below the strip; keep overflow visible */ overflow: visible; transition: background 0.3s, border-color 0.3s, backdrop-filter 0.3s; border-bottom: 1px solid transparent; /* Keep glass only on the bar strip; logo + cradle paint above it */ isolation: isolate; } .site-nav.scrolled { background: var(--bg-glass); backdrop-filter: blur(16px) saturate(1.4); -webkit-backdrop-filter: blur(16px) saturate(1.4); border-bottom-color: var(--border); } .nav-inner { width: min(100% - 2rem, var(--max-wide)); max-width: 100%; margin-inline: auto; display: flex; align-items: center; justify-content: space-between; gap: 1rem; min-width: 0; height: 100%; overflow: visible; position: relative; z-index: 1; } .nav-brand { display: flex; align-items: center; /* Tight: pear artwork already has transparent side padding */ gap: 0.15rem; color: var(--text); font-weight: 700; font-size: 1.15rem; letter-spacing: -0.03em; flex-shrink: 0; min-width: 0; position: relative; z-index: 2; /* Brand row matches bar; logo hangs from here */ height: var(--nav-h); } /* * Bottom-only cradle: true semicircle under the pear. * Full disc is positioned with its center on the bar bottom, then the top * half is clipped away · so only a curve leaves and returns to the bar. * No top ring, no diameter stroke through the pear. */ .nav-brand::after { content: ''; position: absolute; left: 0; /* Circle center sits on the bar’s bottom edge */ top: calc(100% - (var(--brand-cradle) / 2)); width: var(--brand-cradle); height: var(--brand-cradle); margin-left: calc((var(--brand-logo) - var(--brand-cradle)) / 2); z-index: 0; pointer-events: none; box-sizing: border-box; border-radius: 50%; border: 1px solid transparent; background: transparent; box-shadow: none; /* Keep only the lower half (under the nav) */ clip-path: inset(50% 0 0 0); transition: background 0.3s, border-color 0.3s, box-shadow 0.3s, backdrop-filter 0.3s; } .site-nav.scrolled .nav-brand::after { /* Same glass + border as the bar · continuous under the pear */ background: var(--bg-glass); backdrop-filter: blur(16px) saturate(1.4); -webkit-backdrop-filter: blur(16px) saturate(1.4); border-color: var(--border); box-shadow: 0 12px 28px rgba(0, 0, 0, 0.3); } /* * Erase the straight nav border under the pear so the semicircle is the * only edge there. Uses the bar’s own glass fill (not a solid black strip). */ .site-nav.scrolled .nav-brand::before { content: ''; position: absolute; left: calc((var(--brand-logo) - var(--brand-cradle)) / 2 + 1px); bottom: -1px; width: calc(var(--brand-cradle) - 2px); height: 3px; z-index: 2; pointer-events: none; /* Layer glass over the secondary bg so the 1px border is fully hidden */ background: linear-gradient(var(--bg-glass), var(--bg-glass)), var(--bg-secondary); } .nav-brand-text { line-height: 1; white-space: nowrap; /* Pull wordmark into the logo’s empty right margin */ margin-left: -0.35rem; position: relative; z-index: 1; } /* * Free-floating pear · top stays inside the bar (no viewport clip); * bottom hangs below and sits in the circular cradle. */ .nav-brand-logo { width: var(--brand-logo); height: var(--brand-logo); max-width: none; flex-shrink: 0; display: block; object-fit: contain; object-position: center; border: 0; border-radius: 0; background: transparent; box-shadow: none; position: relative; z-index: 3; align-self: flex-start; margin: 0; margin-top: var(--brand-top-inset); margin-bottom: calc(-1 * var(--brand-overhang)); /* Soft depth so it reads over glass + page content */ filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.25)) drop-shadow(0 10px 22px rgba(0, 0, 0, 0.4)); transition: transform 0.28s var(--ease), filter 0.28s var(--ease); pointer-events: auto; } .nav-links { min-width: 0; position: relative; z-index: 1; } .nav-cta { flex-shrink: 0; position: relative; z-index: 1; } .nav-brand:hover { color: var(--text); } .nav-brand:hover .nav-brand-logo { /* Lift slightly but keep leaf on-screen (no negative translate past top) */ transform: translateY(-2px) scale(1.04); filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.28)) drop-shadow(0 14px 28px rgba(0, 0, 0, 0.45)); } .nav-links { display: flex; align-items: center; gap: 0.25rem; list-style: none; } .nav-links a { color: var(--text-muted); font-size: 0.92rem; font-weight: 500; padding: 0.5rem 0.85rem; border-radius: 10px; transition: color 0.2s, background 0.2s; } .nav-links a:hover, .nav-links a.active { color: var(--text); background: rgba(255, 255, 255, 0.04); } .nav-cta { display: flex; align-items: center; gap: 0.65rem; } .nav-toggle { display: none; width: 42px; height: 42px; border-radius: 10px; border: 1px solid var(--border); background: var(--bg-elevated); color: var(--text); cursor: pointer; place-items: center; font-size: 1.2rem; } /* ─── Footer ─── */ .site-footer { border-top: 1px solid var(--border); background: var(--bg-secondary); padding: 4rem 0 2rem; margin-top: 2rem; } .footer-grid { display: grid; grid-template-columns: 1.4fr repeat(3, 1fr); gap: 2.5rem; margin-bottom: 3rem; } .footer-brand { display: flex; flex-direction: column; gap: 1rem; } .footer-brand img { width: 40px; height: 40px; border-radius: 10px; } .footer-brand p { font-size: 0.92rem; color: var(--text-muted); max-width: 28ch; } .footer-col h4 { font-size: 0.78rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-faint); margin-bottom: 1rem; } .footer-col a { display: block; color: var(--text-muted); font-size: 0.92rem; padding: 0.3rem 0; } .footer-col a:hover { color: var(--accent); } .footer-bottom { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 1rem; padding-top: 1.75rem; border-top: 1px solid var(--border); font-size: 0.85rem; color: var(--text-faint); } .footer-bottom a { color: var(--text-muted); } .footer-bottom a:hover { color: var(--accent); } /* ─── Ambient background ─── */ .bg-mesh { position: fixed; inset: 0; z-index: -1; pointer-events: none; background: radial-gradient(ellipse 80% 50% at 50% -20%, rgba(45, 212, 191, 0.12), transparent 55%), radial-gradient(ellipse 40% 40% at 90% 10%, rgba(56, 189, 248, 0.06), transparent 50%), radial-gradient(ellipse 50% 40% at 10% 60%, rgba(45, 212, 191, 0.04), transparent 50%), var(--bg-primary); } .bg-grid { position: fixed; inset: 0; z-index: -1; pointer-events: none; background-image: linear-gradient(rgba(255, 255, 255, 0.02) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.02) 1px, transparent 1px); background-size: 64px 64px; mask-image: radial-gradient(ellipse 70% 60% at 50% 0%, black, transparent); -webkit-mask-image: radial-gradient(ellipse 70% 60% at 50% 0%, black, transparent); } /* ─── Utilities ─── */ .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); border: 0; } .flex { display: flex; } .flex-wrap { flex-wrap: wrap; } .items-center { align-items: center; } .justify-between { justify-content: space-between; } .gap-2 { gap: 0.5rem; } .gap-3 { gap: 0.75rem; } .gap-4 { gap: 1rem; } .mt-2 { margin-top: 0.5rem; } .mt-4 { margin-top: 1rem; } .mt-6 { margin-top: 1.5rem; } .mb-4 { margin-bottom: 1rem; } .mb-6 { margin-bottom: 1.5rem; } .text-muted { color: var(--text-muted); } .text-center { text-align: center; } /* ─── Reveal animation ─── */ .reveal { opacity: 0; transform: translateY(22px); transition: opacity 0.7s var(--ease), transform 0.7s var(--ease); } .reveal.visible { opacity: 1; transform: none; } /* ─── Responsive / mobile ─── */ /* Backdrop for open mobile menus */ .nav-backdrop, .docs-sidebar-backdrop { display: none; position: fixed; inset: 0; z-index: 900; background: rgba(0, 0, 0, 0.55); -webkit-backdrop-filter: blur(2px); backdrop-filter: blur(2px); border: 0; padding: 0; cursor: pointer; } .nav-backdrop.is-visible, .docs-sidebar-backdrop.is-visible { display: block; } body.nav-open, body.docs-sidebar-open { overflow: hidden; touch-action: none; } @media (max-width: 900px) { :root { --nav-h: 60px; /* Fit fully inside the bar · no overflow / cradle on mobile */ --brand-logo: 44px; --brand-top-inset: 0px; --brand-overhang: 0px; } .site-nav { height: auto; min-height: var(--nav-h); padding-top: env(safe-area-inset-top, 0); overflow: visible; } .nav-inner { width: 100%; max-width: 100%; padding: 0.65rem 1rem; padding-right: max(1rem, env(safe-area-inset-right)); padding-left: max(1rem, env(safe-area-inset-left)); flex-wrap: wrap; row-gap: 0; box-sizing: border-box; overflow: visible; } .nav-brand { order: 1; font-size: 1.1rem; gap: 0.35rem; height: calc(var(--nav-h) - 0px); min-height: calc(var(--nav-h) - 8px); align-items: center; } /* No cradle on mobile */ .nav-brand::before, .nav-brand::after, .site-nav.scrolled .nav-brand::before, .site-nav.scrolled .nav-brand::after { content: none; display: none; background: none; border: none; box-shadow: none; } .nav-brand-text { margin-left: 0; } .nav-brand-logo { /* Sit flush in the bar · no hang above/below */ align-self: center; margin: 0; width: var(--brand-logo); height: var(--brand-logo); max-height: calc(var(--nav-h) - 12px); } .nav-brand:hover .nav-brand-logo { transform: none; } .nav-toggle { display: grid; order: 2; margin-left: auto; min-width: 44px; min-height: 44px; touch-action: manipulation; } .nav-links, .nav-cta { display: none; } /* Single stacked panel: links + CTAs flow naturally (no absolute dual panels) */ .site-nav.open { background: var(--bg-secondary); border-bottom-color: var(--border); max-height: min(100dvh, 100vh); /* Drawer scrolls; pear may clip while open · ok vs closed overflow */ overflow-x: visible; overflow-y: auto; overscroll-behavior: contain; } .site-nav.open .nav-links { display: flex; flex-direction: column; order: 3; width: 100%; flex-basis: 100%; gap: 0.15rem; padding: 0.75rem 0 0.35rem; border-top: 1px solid var(--border); margin-top: 0.5rem; list-style: none; } .site-nav.open .nav-links a { display: flex; align-items: center; min-height: 48px; padding: 0.75rem 0.85rem; font-size: 1rem; border-radius: 12px; } .site-nav.open .nav-cta { display: flex; flex-direction: column; order: 4; width: 100%; flex-basis: 100%; gap: 0.65rem; padding: 0.5rem 0 0.85rem; } .site-nav.open .nav-cta .btn { width: 100%; max-width: 100%; white-space: normal; min-height: 48px; justify-content: center; } .footer-grid { grid-template-columns: 1fr 1fr; gap: 1.75rem 1.25rem; } .section { padding: 3.5rem 0; } .card { padding: 1.25rem; } pre { font-size: 0.76rem; padding: 0.9rem 0.95rem; } .code-block pre { padding-right: 4rem; } /* Touch-friendly controls */ .btn { min-height: 44px; touch-action: manipulation; } .btn-sm { min-height: 40px; } /* Tables: scroll inside wrap only */ .table-wrap { -webkit-overflow-scrolling: touch; overflow-x: auto; margin-inline: 0; } table { min-width: 28rem; table-layout: auto; } th, td { white-space: normal; word-break: break-word; } h1 { font-size: clamp(1.85rem, 8vw, 2.6rem); } h2 { font-size: clamp(1.4rem, 5.5vw, 2rem); } .lead { font-size: 1.02rem; } } @media (max-width: 560px) { .footer-grid { grid-template-columns: 1fr; gap: 1.5rem; } .footer-col a { padding: 0.45rem 0; min-height: 40px; display: flex; align-items: center; } .footer-bottom { flex-direction: column; align-items: flex-start; gap: 0.65rem; text-align: left; } .container, .container-wide { width: min(100% - 1.25rem, var(--max)); } .btn { white-space: normal; text-align: center; } .btn-lg { padding: 0.9rem 1.25rem; width: 100%; max-width: 100%; } .hero-actions { flex-direction: column; align-items: stretch; } .hero-actions .btn { width: 100%; } /* Safe area for home indicator */ .site-footer { padding-bottom: max(2rem, env(safe-area-inset-bottom)); } body { padding-left: env(safe-area-inset-left); padding-right: env(safe-area-inset-right); } } /* Very small phones */ @media (max-width: 380px) { :root { --brand-logo: 40px; --brand-top-inset: 0px; --brand-overhang: 0px; } .nav-brand { font-size: 1rem; gap: 0.25rem; } .nav-brand-text { margin-left: 0; } .container, .container-wide { width: min(100% - 1rem, var(--max)); } } /* ─── Hard ban: no horizontal scrollbars on code / install blocks ─── */ pre, pre code, .code-block, .install-card, .table-wrap { overflow-x: clip !important; max-width: 100% !important; min-width: 0 !important; } pre, pre code { white-space: pre-wrap !important; word-break: break-all !important; overflow-wrap: anywhere !important; }