/* ═══════════════════════════════════════════════ THE ALGORITHM — Design System Retro Groovy Pop-Art / Comic-Book Theme ═══════════════════════════════════════════════ */ /* ── Google Fonts ── */ @import url('https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700;1,9..40,400;1,9..40,500&family=Fraunces:ital,opsz,wght@0,9..144,700;0,9..144,900;1,9..144,700;1,9..144,900&family=Space+Grotesk:wght@400;500;600;700&display=swap'); /* ── Tokens ── */ :root { --cream: #FAF0DC; --black: #1A0A00; --pink: #FF4D8D; --green: #4CAF50; --orange: #FF6B35; --yellow: #FFD600; --purple: #7B2FBE; --blue: #1B98E0; --red: #E63946; --white: #FFFFFF; --gray-100: #f5f5f4; --gray-200: #e7e5e4; --gray-300: #d6d3d1; --gray-400: #a8a29e; --gray-500: #78716c; --gray-600: #57534e; --gray-700: #44403c; /* Borders & Shadows — tighter for product feel */ --border: 2px solid var(--black); --border-thin: 1px solid var(--black); --border-thick: 3px solid var(--black); --shadow: 3px 3px 0 0 var(--black); --shadow-hover: 5px 5px 0 0 var(--black); --shadow-active: 1px 1px 0 0 var(--black); --shadow-lg: 6px 6px 0 0 var(--black); --shadow-xl: 8px 8px 0 0 var(--black); /* Radii */ --r-pill: 999px; --r-card: 14px; --r-sm: 8px; --r-lg: 22px; --r-xl: 32px; /* Typography */ --font-heading: 'Fraunces', Georgia, serif; --font-body: 'DM Sans', system-ui, sans-serif; --font-mono: 'Space Grotesk', monospace; } /* ── Reset ── */ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } html { font-size: 14.5px; scroll-behavior: smooth; } body { background: var(--cream); color: var(--black); font-family: var(--font-body); font-weight: 500; line-height: 1.55; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; overflow-x: hidden; min-height: 100vh; } img { display: block; max-width: 100%; } svg { max-width: 100%; } /* Wave dividers between sections */ .wave-divider { display: block; width: 100%; height: 40px; pointer-events: none; } a { color: inherit; } button { cursor: pointer; font-family: inherit; } /* ── Typography — tighter, more refined ── */ h1, h2, h3, h4, h5, h6 { font-family: var(--font-heading); font-weight: 900; color: var(--black); letter-spacing: -0.025em; line-height: 1.08; } h1 { font-size: clamp(2rem, 5vw, 3.5rem); } h2 { font-size: clamp(1.6rem, 3.5vw, 2.4rem); } h3 { font-size: clamp(1.1rem, 2vw, 1.5rem); } .font-heading { font-family: var(--font-heading); font-weight: 700; } .font-heading-black { font-family: var(--font-heading); font-weight: 900; } .font-heading-italic { font-family: var(--font-heading); font-weight: 900; font-style: italic; } .font-body { font-family: var(--font-body); } .font-mono { font-family: var(--font-mono); } /* ── Layout Utilities ── */ .container { width: 100%; max-width: 1060px; margin: 0 auto; padding: 0 1.5rem; } .section-py { padding-top: 4rem; padding-bottom: 4rem; } .text-center { text-align: center; } .relative { position: relative; } .hidden { display: none !important; } .sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0); border: 0; } .flex { display: flex; } .flex-col { flex-direction: column; } .items-center { align-items: center; } .justify-center { justify-content: center; } .justify-between { justify-content: space-between; } .gap-2 { gap: 0.5rem; } .gap-3 { gap: 0.75rem; } .gap-4 { gap: 1rem; } .gap-6 { gap: 1.5rem; } .gap-8 { gap: 2rem; } .flex-wrap { flex-wrap: wrap; } .flex-grow { flex-grow: 1; } .flex-shrink-0 { flex-shrink: 0; } .w-full { width: 100%; } .min-h-screen { min-height: 100vh; } .mx-auto { margin-left: auto; margin-right: auto; } .mb-2 { margin-bottom: 0.5rem; } .mb-3 { margin-bottom: 0.75rem; } .mb-4 { margin-bottom: 1rem; } .mb-6 { margin-bottom: 1.5rem; } .mb-8 { margin-bottom: 2rem; } .mb-10 { margin-bottom: 2.5rem; } .mb-12 { margin-bottom: 3rem; } .mt-2 { margin-top: 0.5rem; } .mt-4 { margin-top: 1rem; } .mt-6 { margin-top: 1.5rem; } .mt-auto { margin-top: auto; } .m-0 { margin: 0; } .p-0 { padding: 0; } .inline-block { display: inline-block; } .block { display: block; } .overflow-hidden { overflow: hidden; } .grid { display: grid; } .grid-2 { grid-template-columns: 1fr 1fr; } /* ── Comic-Book Halftone Dot Background + Paper Grain ── */ .comic-dots::before { content: ''; position: fixed; inset: 0; background-image: radial-gradient(circle, var(--black) 0.4px, transparent 0.4px); background-size: 12px 12px; opacity: 0.03; pointer-events: none; z-index: 0; } .comic-dots::after { content: ''; position: fixed; inset: 0; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E"); pointer-events: none; z-index: 0; } /* ═══════════════════════════════════════ COMPONENTS ═══════════════════════════════════════ */ /* ── Nav ── */ .nav { position: sticky; top: 0; z-index: 100; height: 52px; background: var(--black); border-bottom: 2px solid var(--yellow); display: flex; align-items: center; } .nav .container { display: flex; align-items: center; justify-content: space-between; height: 100%; } .nav-logo { font-family: var(--font-heading); font-weight: 900; color: var(--yellow); font-size: 1.05rem; text-decoration: none; display: flex; flex-direction: column; gap: 0; letter-spacing: -0.02em; transition: opacity 0.2s; line-height: 1.15; } .nav-logo:hover { opacity: 0.85; } .nav-links { display: flex; gap: 1.5rem; align-items: center; } .nav-link { font-family: var(--font-body); font-weight: 600; font-size: 0.72rem; color: var(--white); text-decoration: none; text-transform: uppercase; letter-spacing: 0.1em; transition: color 0.2s; position: relative; } .nav-link:hover { color: var(--yellow); } .nav-link::after { content: ''; position: absolute; bottom: -2px; left: 0; width: 0; height: 1.5px; background: var(--yellow); transition: width 0.25s ease; } .nav-link:hover::after { width: 100%; } /* ── Buttons ── */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 0.4rem; font-family: var(--font-body); font-weight: 700; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.07em; padding: 0.6rem 1.5rem; border: var(--border); border-radius: var(--r-pill); box-shadow: var(--shadow); cursor: pointer; text-decoration: none; transition: all 0.15s ease; position: relative; line-height: 1.2; } .btn:hover { box-shadow: var(--shadow-hover); transform: translate(-1px, -1px); } .btn:active { box-shadow: var(--shadow-active); transform: translate(1px, 1px); } .btn--primary { background: var(--pink); color: var(--white); } .btn--dark { background: var(--black); color: var(--white); } .btn--yellow { background: var(--yellow); color: var(--black); } .btn--green { background: var(--green); color: var(--white); } .btn--purple { background: var(--purple); color: var(--white); } .btn--blue { background: var(--blue); color: var(--white); } .btn--white { background: var(--white); color: var(--black); } .btn--full { width: 100%; } .btn--lg { font-size: 0.95rem; padding: 0.85rem 2rem; } /* ── Pill Labels ── */ .pill-label { display: inline-block; font-family: var(--font-heading); font-weight: 900; font-style: italic; font-size: 0.7rem; text-transform: lowercase; padding: 0.22rem 0.8rem; border: var(--border-thin); border-radius: var(--r-pill); box-shadow: 1.5px 1.5px 0 0 var(--black); line-height: 1.3; white-space: nowrap; letter-spacing: 0.02em; } .pill-label--pink { background: var(--pink); color: var(--white); } .pill-label--green { background: var(--green); color: var(--white); } .pill-label--yellow { background: var(--yellow); color: var(--black); } .pill-label--purple { background: var(--purple); color: var(--white); } .pill-label--orange { background: var(--orange); color: var(--white); } .pill-label--blue { background: var(--blue); color: var(--white); } .pill-label--white { background: var(--white); color: var(--black); } .pill-label--red { background: var(--red); color: var(--white); } /* ── Cards ── */ .card { background: var(--white); border: var(--border); border-radius: var(--r-card); box-shadow: var(--shadow); padding: 1.25rem; transition: box-shadow 0.2s ease, transform 0.2s ease; } .card:hover { box-shadow: var(--shadow-hover); transform: translateY(-2px); } .card--flat { box-shadow: none; } .card--flat:hover { box-shadow: none; transform: none; } .card--lg { border-radius: var(--r-lg); box-shadow: var(--shadow-lg); padding: 2rem; } .card--xl { border-radius: var(--r-xl); box-shadow: var(--shadow-xl); padding: 2.25rem; } /* Pop-art rotated cards */ .rotate-left { transform: rotate(-2deg); } .rotate-right { transform: rotate(2deg); } .rotate-left:hover, .rotate-right:hover { transform: rotate(0deg) translateY(-3px); } /* ── Speech Bubble Card (comic style) ── */ .speech-bubble { position: relative; background: var(--white); border: var(--border-thick); border-radius: var(--r-lg); padding: 2rem; box-shadow: var(--shadow-lg); } .speech-bubble::after { content: ''; position: absolute; bottom: -16px; left: 32px; width: 0; height: 0; border-left: 10px solid transparent; border-right: 10px solid transparent; border-top: 16px solid var(--black); } .speech-bubble::before { content: ''; position: absolute; bottom: -11px; left: 35px; width: 0; height: 0; border-left: 7px solid transparent; border-right: 7px solid transparent; border-top: 12px solid var(--white); z-index: 1; } /* ── Lightning Bolt Decoration ── */ .lightning { display: inline-block; font-size: 2rem; filter: drop-shadow(2px 2px 0 var(--black)); animation: lightning-flash 3s ease-in-out infinite; } @keyframes lightning-flash { 0%, 90%, 100% { opacity: 1; } 95% { opacity: 0.3; } } /* ── Form Inputs ── */ .field-input { width: 100%; font-family: var(--font-body); font-size: 0.88rem; font-weight: 600; padding: 0.55rem 0.75rem; background: var(--cream); border: var(--border); border-radius: var(--r-sm); color: var(--black); outline: none; transition: box-shadow 0.2s ease, background 0.2s ease; -webkit-appearance: none; appearance: none; } .field-input:focus { box-shadow: 2px 2px 0 0 var(--purple); background: var(--white); } .field-input::placeholder { color: var(--gray-400); font-weight: 500; } select.field-input { cursor: pointer; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%231A0A00' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 0.75rem center; padding-right: 2.25rem; } /* ── Custom Dropdown (replaces native