@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap'); /* ========================================================================== Design Tokens ========================================================================== */ :root { /* --- Color tokens --- */ --pxme-color-primary: hsl(215, 100%, 56%); --pxme-color-primary-dark: hsl(215, 100%, 40%); --pxme-color-secondary: hsl(210, 13%, 45%); --pxme-color-success: hsl(134, 61%, 41%); --pxme-color-danger: hsl(354, 70%, 54%); --pxme-color-warning: hsl(45, 100%, 51%); --pxme-color-info: hsl(191, 64%, 42%); --pxme-color-light: hsl(42, 39%, 94%); --pxme-color-light-alt: hsl(42, 39%, 85%); --pxme-color-dark: hsl(210, 29%, 24%); --pxme-color-border: hsl(210, 13%, 45%); --pxme-color-surface: hsl(0, 0%, 100%); /* --- Spacing tokens --- */ --pxme-space-2xs: 4px; --pxme-space-xs: 8px; --pxme-space-sm: 12px; --pxme-space-md: 16px; --pxme-space-lg: 24px; --pxme-space-xl: 32px; --pxme-space-2xl: 48px; --pxme-space-3xl: 60px; /* --- Border radius tokens --- */ --pxme-radius-sm: 4px; --pxme-radius-md: 8px; --pxme-radius-lg: 16px; --pxme-radius-full: 50%; /* --- Font size tokens --- */ --pxme-font-2xs: 0.65rem; --pxme-font-xs: 0.75rem; --pxme-font-sm: 0.875rem; --pxme-font-md: 1rem; --pxme-font-lg: 1.125rem; --pxme-font-xl: 1.25rem; --pxme-font-2xl: 1.5rem; /* --- Font weight tokens --- */ --pxme-weight-light: 300; --pxme-weight-normal: 400; --pxme-weight-medium: 500; --pxme-weight-semibold: 600; --pxme-weight-bold: 700; --pxme-weight-heavy: 800; /* --- Shadow tokens --- */ --pxme-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08); --pxme-shadow-md: 0 4px 8px rgba(0, 0, 0, 0.1); --pxme-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.12); /* --- Transition tokens --- */ --pxme-transition-fast: 0.15s ease; --pxme-transition-normal: 0.3s ease; /* --- Layout tokens --- */ --pxme-gallery-min-col: 400px; --pxme-card-min-height: 300px; --pxme-icon-size: 24px; /* --- Footer tokens --- */ --pxme-color-footer-bg: hsl(210, 29%, 18%); --pxme-color-footer-text: hsl(42, 39%, 94%); /* --- Header tokens --- */ --pxme-color-header-bg: transparent; --pxme-color-header-text: var(--pxme-color-dark); /* --- Focus ring --- */ --pxme-focus-ring: 0 0 0 2px var(--pxme-color-primary), 0 0 0 4px color-mix(in srgb, var(--pxme-color-primary) 30%, transparent); } /* ========================================================================== Dark Mode -------------------------------------------------------------------------- Two selectors ensure dark tokens apply in all scenarios: 1. @media – OS preference fallback (before JS sets data-theme, or if JS is disabled). Excluded when the user explicitly chose light. 2. [data-theme="dark"] – explicit override set by the theme toggle. ========================================================================== */ @media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) { --pxme-color-primary: hsl(215, 100%, 67%); --pxme-color-primary-dark: hsl(215, 100%, 52%); --pxme-color-secondary: hsl(210, 15%, 60%); --pxme-color-light: hsl(220, 15%, 13%); --pxme-color-light-alt: hsl(220, 13%, 20%); --pxme-color-dark: hsl(210, 20%, 90%); --pxme-color-border: hsl(220, 10%, 28%); --pxme-color-surface: hsl(220, 15%, 17%); --pxme-color-footer-bg: hsl(220, 15%, 8%); --pxme-color-footer-text: hsl(210, 15%, 65%); --pxme-color-header-bg: transparent; --pxme-color-header-text: var(--pxme-color-dark); --pxme-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3); --pxme-shadow-md: 0 4px 8px rgba(0, 0, 0, 0.35); --pxme-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.45); color-scheme: dark; } } :root[data-theme="dark"] { --pxme-color-primary: hsl(215, 100%, 67%); --pxme-color-primary-dark: hsl(215, 100%, 52%); --pxme-color-secondary: hsl(210, 15%, 60%); --pxme-color-light: hsl(220, 15%, 13%); --pxme-color-light-alt: hsl(220, 13%, 20%); --pxme-color-dark: hsl(210, 20%, 90%); --pxme-color-border: hsl(220, 10%, 28%); --pxme-color-surface: hsl(220, 15%, 17%); --pxme-color-footer-bg: hsl(220, 15%, 8%); --pxme-color-footer-text: hsl(210, 15%, 65%); --pxme-color-header-bg: transparent; --pxme-color-header-text: var(--pxme-color-dark); --pxme-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3); --pxme-shadow-md: 0 4px 8px rgba(0, 0, 0, 0.35); --pxme-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.45); color-scheme: dark; } /* ========================================================================== CSS Reset (Modern) ========================================================================== */ html { font-family: 'Poppins', sans-serif; color: var(--pxme-color-dark); background-color: var(--pxme-color-light); margin: 0; padding: 0; box-sizing: border-box; line-height: 1.6; font-size: 16px; scroll-behavior: smooth; -webkit-text-size-adjust: 100%; -moz-tab-size: 4; tab-size: 4; -webkit-font-feature-settings: 'kern', 'liga', 'calt'; font-feature-settings: 'kern', 'liga', 'calt'; } *, *::before, *::after { box-sizing: border-box; } * { margin: 0; } @media (prefers-reduced-motion: no-preference) { html { interpolate-size: allow-keywords; } } body { line-height: 1.5; -webkit-font-smoothing: antialiased; overflow-x: hidden; padding-bottom: var(--pxme-space-xl); } img, picture, video, canvas, svg { display: block; max-width: 100%; } input, button, textarea, select { font: inherit; } p, h1, h2, h3, h4, h5, h6 { overflow-wrap: break-word; } p { text-wrap: pretty; } h1, h2, h3, h4, h5, h6 { text-wrap: balance; } a { color: inherit; text-decoration: none; } ul { list-style: none; padding: 0; margin: 0; } #root, #__next { isolation: isolate; } /* ========================================================================== Global Accessibility & Utility ========================================================================== */ /* Focus-visible ring (keyboard users only) */ :focus-visible { outline: 3px solid var(--pxme-color-primary); outline-offset: 2px; box-shadow: var(--pxme-focus-ring); } /* Skip link */ .pxme-skip-link { position: absolute; top: -100%; left: var(--pxme-space-md, 16px); z-index: 999; padding: var(--pxme-space-xs, 8px) var(--pxme-space-md, 16px); background: var(--pxme-color-primary); color: #fff; font-weight: var(--pxme-weight-semibold, 600); border-radius: 0 0 var(--pxme-radius-md, 8px) var(--pxme-radius-md, 8px); transition: top var(--pxme-transition-fast); } .pxme-skip-link:focus { top: 0; outline: 3px solid var(--pxme-color-primary); outline-offset: 2px; } /* Screen-reader only utility */ .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } /* ========================================================================== Layout — .pxme-root ========================================================================== */ .pxme-root { min-height: 100vh; display: flex; flex-direction: column; } .pxme-hero { position: relative; overflow: hidden; min-height: calc(100vh - 180px); padding: var(--pxme-space-2xl); } .pxme-hero__backdrop { position: absolute; inset: 0; background: radial-gradient(circle at top left, color-mix(in srgb, var(--pxme-color-primary) 18%, transparent) 0, transparent 42%), radial-gradient(circle at bottom right, color-mix(in srgb, var(--pxme-color-warning) 16%, transparent) 0, transparent 36%), linear-gradient(135deg, color-mix(in srgb, var(--pxme-color-surface) 78%, var(--pxme-color-light) 22%), var(--pxme-color-light)); pointer-events: none; } .pxme-hero__shell { position: relative; z-index: 1; display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(18rem, 0.95fr); gap: var(--pxme-space-xl); align-items: stretch; } .pxme-hero__intro, .pxme-hero__panel { border: 1px solid color-mix(in srgb, var(--pxme-color-border) 65%, transparent); border-radius: 28px; background: color-mix(in srgb, var(--pxme-color-surface) 82%, transparent); backdrop-filter: blur(10px); box-shadow: var(--pxme-shadow-lg); } .pxme-hero__intro { padding: clamp(2rem, 5vw, 4rem); } .pxme-hero__eyebrow { margin-bottom: var(--pxme-space-sm); color: var(--pxme-color-secondary); font-size: var(--pxme-font-xs); font-weight: var(--pxme-weight-bold); letter-spacing: 0.14em; text-transform: uppercase; } .pxme-hero__title { max-width: 12ch; margin-bottom: var(--pxme-space-md); font-size: clamp(2.6rem, 7vw, 5.4rem); line-height: 0.94; } .pxme-hero__message { max-width: 36rem; margin-bottom: var(--pxme-space-xl); color: var(--pxme-color-secondary); font-size: clamp(1rem, 2vw, 1.2rem); } .pxme-hero__actions { display: flex; flex-wrap: wrap; gap: var(--pxme-space-md); } .pxme-hero__cta { font: inherit; font-size: var(--pxme-font-base, 1rem); font-weight: var(--pxme-weight-semibold); display: inline-flex; align-items: center; justify-content: center; padding: var(--pxme-space-sm) var(--pxme-space-xl); border-radius: 999px; transition: transform var(--pxme-transition-fast), background var(--pxme-transition-fast), color var(--pxme-transition-fast), border-color var(--pxme-transition-fast); } .pxme-hero__cta--primary { background: var(--pxme-color-primary); color: #fff; box-shadow: var(--pxme-shadow-md); } .pxme-hero__cta--primary:hover { background: var(--pxme-color-primary-dark); transform: translateY(-1px); } .pxme-hero__cta--secondary { border: 1px solid var(--pxme-color-border); color: var(--pxme-color-dark); background: transparent; } .pxme-hero__cta--secondary:hover { border-color: var(--pxme-color-primary); color: var(--pxme-color-primary); transform: translateY(-1px); } .pxme-hero__panel { display: grid; gap: var(--pxme-space-md); padding: var(--pxme-space-xl); } .pxme-hero__status { margin-top: var(--pxme-space-md); color: var(--pxme-color-secondary); font-size: var(--pxme-font-sm); } .pxme-hero__feature { padding: var(--pxme-space-md); border-radius: var(--pxme-radius-lg); background: color-mix(in srgb, var(--pxme-color-light) 38%, transparent); } .pxme-hero__feature-kicker { display: inline-block; margin-bottom: var(--pxme-space-xs); color: var(--pxme-color-primary); font-size: var(--pxme-font-xs); font-weight: var(--pxme-weight-bold); letter-spacing: 0.08em; text-transform: uppercase; } .pxme-hero__feature h2 { margin-bottom: var(--pxme-space-xs); font-size: var(--pxme-font-xl); } .pxme-hero__feature p { color: var(--pxme-color-secondary); font-size: var(--pxme-font-sm); } @media (max-width: 900px) { .pxme-hero { padding: var(--pxme-space-lg); } .pxme-hero__shell { grid-template-columns: 1fr; } .pxme-hero__title { max-width: none; } } .pxme-auth-complete { min-height: 100vh; display: grid; place-items: center; padding: var(--pxme-space-xl); background: radial-gradient(circle at top left, color-mix(in srgb, var(--pxme-color-primary) 14%, transparent), transparent 42%), linear-gradient(180deg, color-mix(in srgb, var(--pxme-color-surface) 78%, var(--pxme-color-light) 22%), var(--pxme-color-light)); } .pxme-auth-complete__panel { width: min(32rem, 100%); padding: var(--pxme-space-2xl); text-align: center; border-radius: 24px; border: 1px solid color-mix(in srgb, var(--pxme-color-border) 65%, transparent); background: color-mix(in srgb, var(--pxme-color-surface) 88%, transparent); box-shadow: var(--pxme-shadow-lg); } .pxme-auth-complete__eyebrow { margin-bottom: var(--pxme-space-sm); color: var(--pxme-color-secondary); font-size: var(--pxme-font-xs); font-weight: var(--pxme-weight-bold); letter-spacing: 0.14em; text-transform: uppercase; } /* ========================================================================== Image viewer body — .pxme-viewer__body (used on view.html to set dark background) ========================================================================== */ .pxme-viewer__body { margin: 0; padding: 0; background: hsl(0, 0%, 7%); overflow: hidden; }