/* ============================================================ AnwarPi — shared motion & brand layer Loaded after each page's inline styles; tokens stay in-page. ============================================================ */ /* ---- Shared palette: cool light on deep blue-black ---- */ :root { --bg: oklch(16% 0.03 225); --surface: oklch(22% 0.04 220); --fg: oklch(96% 0.015 210); --muted: oklch(74% 0.03 215); --border: oklch(36% 0.05 215); --accent: oklch(78% 0.17 190); } /* ---- Shared responsive safeguards ---- */ html, body { max-width: 100%; overflow-x: clip; } img, svg, video { height: auto; } main, section, .container, .grid, [class*="grid"], [class*="layout"] { min-width: 0; } code, pre, bdi { overflow-wrap: anywhere; } pre, table { max-width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; } :focus-visible { outline-color: var(--accent); } @media (pointer: coarse) { a, button, input, select, textarea, summary, .btn, .icon-btn { min-height: 44px; } } @media (max-width: 920px) { :root { --gutter: 22px; } .container { width: 100%; } /* Keep primary navigation visible on phones and tablets. */ .topnav .nav-inner, .topnav .topnav-inner { flex-wrap: wrap; gap: 0 16px; padding-top: 10px; } .topnav .logo, .topnav .nav-tools { margin-bottom: 10px; } .topnav .logo { min-height: 50px; } input, select, textarea { min-height: 48px; font-size: 16px; } .footer-col a { min-height: 44px; display: flex; align-items: center; } .section-head { gap: 20px; } .demo-strip { padding-inline: var(--gutter); } .table-wrap, .billing-table { max-width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; } .topnav .nav-links, .topnav .topnav-inner > nav { display: flex; order: 3; flex: 0 0 calc(100% + (var(--gutter) * 2)); gap: 8px; margin-inline: calc(var(--gutter) * -1); padding-inline: var(--gutter); overflow-x: auto; overscroll-behavior-inline: contain; scrollbar-width: none; border-top: 1px solid var(--border); } .topnav .nav-links::-webkit-scrollbar, .topnav .topnav-inner > nav::-webkit-scrollbar { display: none; } .topnav .nav-links a, .topnav .topnav-inner > nav a { flex: none; min-height: 52px; padding-inline: 12px; white-space: nowrap; position: relative; } .topnav a[aria-current="page"] { position: relative; color: var(--fg); font-weight: 700; } .topnav a[aria-current="page"]::after { content: ""; position: absolute; inset-inline: 12px; bottom: 5px; height: 3px; border-radius: 999px; background: var(--accent); } .topnav .nav-links + .nav-tools .menu-trigger, .topnav .topnav-inner > nav + .nav-tools .menu-trigger { display: none; } .menu-drawer { width: min(520px, 92vw); } .dialog-card, .modal-card { max-width: calc(100vw - 36px); max-height: calc(100dvh - 36px); overflow-y: auto; } } @media (max-width: 620px) { :root { --gutter: 18px; } body { line-height: 1.7; } h1 { font-size: clamp(38px, 11vw, 50px) !important; overflow-wrap: normal; word-break: normal; } h2 { overflow-wrap: normal; word-break: normal; } .topnav .logo { font-size: 20px; } .topnav .nav-return { display: inline-flex !important; min-height: 44px; align-items: center; font-size: 13px; padding-inline: 4px; } .topnav .nav-inner, .topnav .topnav-inner { gap: 0 10px; } .topnav .nav-links, .topnav .topnav-inner > nav { gap: 4px; } .topnav .nav-links a, .topnav .topnav-inner > nav a { padding-inline: 10px; } .hero-cta, .dialog-actions, .form-actions { align-items: stretch; gap: 12px; } .hero-cta .btn, .dialog-actions .btn, .form-actions .btn { width: 100%; } .pagefoot { padding-block: 40px; } .footer-bottom { gap: 12px; } .card, .membership-card, .paywall, .plan, .team-contact { padding-inline: 20px; } .dialog-card, .modal-card, .dialog-panel, .modal-panel { max-width: calc(100vw - 28px); } } /* ---- Brand mark: real logo image replaces the geometric span ---- */ img.logo-mark { width: 30px; height: 34px; object-fit: contain; transform: none; background: none; border-radius: 4px; flex: none; } /* ---- Text selection on dark canvas ---- */ ::selection { background: color-mix(in oklch, var(--accent) 28%, transparent); } /* ---- Button hover: light-sweep + lift (AnwarPi "light" motif) ---- */ @media (prefers-reduced-motion: no-preference) { .btn, .btn-primary, .btn-secondary, .btn-ghost, .icon-btn { position: relative; overflow: hidden; transition: transform .18s ease, box-shadow .18s ease, background-color .18s ease, border-color .18s ease, color .18s ease; } .btn::after, .btn-primary::after, .btn-secondary::after, .btn-ghost::after, .icon-btn::after { content: ""; position: absolute; inset-block: 0; inset-inline-start: -45%; width: 34%; background: linear-gradient(100deg, transparent 0%, rgba(255, 255, 255, 0.45) 50%, transparent 100%); transform: skewX(-18deg); opacity: 0; pointer-events: none; } .btn:hover::after, .btn-primary:hover::after, .btn-secondary:hover::after, .btn-ghost:hover::after, .icon-btn:hover::after { animation: anw-sweep 0.85s cubic-bezier(0.4, 0, 0.2, 1); } .btn:hover, .btn-primary:hover, .btn-secondary:hover, .btn-ghost:hover, .icon-btn:hover { transform: translateY(-1px); } .btn-primary:hover, .btn:hover { box-shadow: 0 8px 28px color-mix(in oklch, var(--accent) 30%, transparent); } .btn:active, .btn-primary:active, .btn-secondary:active, .btn-ghost:active, .icon-btn:active { transform: translateY(0); } } @keyframes anw-sweep { 0% { opacity: 1; inset-inline-start: -45%; } 100% { opacity: 1; inset-inline-start: 118%; } } /* ---- Scroll reveal (driven by anwarpi.js) ---- */ [data-anw] { transition: opacity 0.7s ease, transform 0.7s cubic-bezier(0.16, 1, 0.3, 1); } .anw-anim [data-anw]:not(.anw-in) { opacity: 0; transform: translateY(18px); } /* ---- WebGL canvas sits behind everything, above the root background ---- */ #anwarpi-bg { position: fixed; inset: 0; width: 100%; height: 100%; z-index: -1; pointer-events: none; transition: opacity 0.9s ease; } /* ---- Hero brand mark: the beam logo, black field dissolved into the canvas ---- */ .hero-logo { display: block; width: 68px; height: auto; border-radius: 6px; mix-blend-mode: screen; /* drops the jpg's black field — only the beams glow */ margin-block-end: 26px; } /* ---- Dark-theme correction: scrims must dim with black, not --fg (now white) ---- */ .dialog-scrim, .menu-scrim, .modal { background: rgba(5, 5, 5, 0.68); }