Files
honeyDueAPI/static/css/style.css
T
Trey t 191c9b08e0
Backend CI / Test (push) Has been cancelled
Backend CI / Contract Tests (push) Has been cancelled
Backend CI / Build (push) Has been cancelled
Backend CI / Lint (push) Has been cancelled
Backend CI / Secret Scanning (push) Has been cancelled
feat(static): rebuild landing page on amber-on-midnight brand system
Replace the off-brand "VIBRANT EDITION" CSS (generic SaaS blue/purple/
teal/pink) with a strict palette derived from icon.png and style_guide.md:

  --gold #FCCE38, --amber #F5A623, --pollen #FFE082, --sun-bloom #F9BB2F
  --midnight #181E37, --deep #162140, --comb-line #232230
  --cream #FFF1D0

Spacing/radius scale mirrors iOS DesignSystem.swift (AppSpacing 4/8/12/
16/24/32/48/64; AppRadius 4/8/12/16/20/24) so the web feels native to
the same brand system. 56px button height, 16px card radius, identical
elevation language.

Page architecture:
- Sticky translucent nav with hex brand mark (1+6 cluster)
- Hero with iPhone frame mock showing real kanban view (overdue/due
  soon/in progress/done with priority dots and meta chips)
- Cream "What's due, what's done, what's yours" pillars
- Four feature deep-dives (residences, tasks/kanban, contractors,
  documents/warranties) with product UI mocks built from real app
  concepts
- "Each cell, a task" comb section with JS-generated 8x10 honeycomb
  completion grid that fills more densely toward the top
- iOS polish section: Home Screen widget mock with quick-complete,
  push notification with inline actions, Face ID lock, 11 themes
- Sharing section with share-card mock (HIVE-7K2D-Q9 code + 3 keepers)
- Free vs Pro pricing with "Most chosen" tag
- Final CTA with brand mark + golden glow

Honeycomb motif:
- Brand mark uses gold-on-navy with a radial halo (no currentColor
  dependency — renders identically everywhere)
- Hex grid background uses a properly tessellating flat-top tile
  (3 hexes per 126x73 unit, sharing full edges, no seams)
- Hex bullets, hex pills, completion grid all flat-top per style guide

Copy follows style_guide.md voice — calm, specific, no banned words
(chore, simplified, seamless), sentence case throughout. Canonical
tagline "A home is a hive. We'll help you keep it." used verbatim
in the hero and footer.

JS: mobile nav toggle, scroll-state nav, IntersectionObserver reveal,
deterministic comb-grid generator. Respects prefers-reduced-motion.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 13:34:32 -05:00

1357 lines
33 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ===================================================================
honeyDue — Landing styles
Amber on midnight. Cream as daylight. Hex as structure.
Tokens mirror iOS DesignSystem.swift (AppSpacing / AppRadius).
=================================================================== */
/* -------------------- Tokens -------------------- */
:root {
/* Brand color */
--gold: #FCCE38;
--amber: #F5A623;
--pollen: #FFE082;
--sun-bloom: #F9BB2F;
--midnight: #181E37;
--deep: #162140;
--comb-line: #232230;
--cream: #FFF1D0;
--cream-elev: #FFF7E1;
--white: #FFFFFF;
/* Semantic text */
--text-on-dark: #F5F2EA;
--text-muted-on-dark: rgba(245, 242, 234, 0.62);
--text-faint-on-dark: rgba(245, 242, 234, 0.38);
--text-on-light: #1A1A22;
--text-muted-on-light: rgba(26, 26, 34, 0.65);
--text-faint-on-light: rgba(26, 26, 34, 0.38);
/* Borders */
--border-on-dark: rgba(245, 242, 234, 0.10);
--border-on-dark-strong: rgba(245, 242, 234, 0.18);
--border-on-light: rgba(26, 26, 34, 0.08);
--border-on-light-strong: rgba(26, 26, 34, 0.16);
/* Status */
--error: #DD1C1A;
/* Type */
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, system-ui, sans-serif;
--t-display: clamp(2.5rem, 5.6vw, 4.25rem);
--t-h2: clamp(1.85rem, 3.6vw, 2.75rem);
--t-h3: clamp(1.25rem, 1.8vw, 1.625rem);
--t-lead: clamp(1.0625rem, 1.3vw, 1.25rem);
--t-body: 1rem;
--t-sm: 0.9375rem;
--t-xs: 0.8125rem;
/* Spacing — mirrors AppSpacing (4/8/12/16/24/32/48/64) */
--s-1: 4px;
--s-2: 8px;
--s-3: 12px;
--s-4: 16px;
--s-5: 24px;
--s-6: 32px;
--s-7: 48px;
--s-8: 64px;
--s-9: 96px;
--s-10: 128px;
/* Radius — mirrors AppRadius (4/8/12/16/20/24) */
--r-1: 4px;
--r-2: 8px;
--r-3: 12px;
--r-4: 16px;
--r-5: 20px;
--r-6: 24px;
--r-pill: 9999px;
/* Shadows — calibrated for amber on midnight */
--shadow-soft: 0 8px 32px rgba(11, 17, 36, 0.35);
--shadow-deep: 0 24px 64px rgba(11, 17, 36, 0.55);
--shadow-glow: 0 0 96px rgba(252, 206, 56, 0.32);
--shadow-light: 0 12px 32px rgba(56, 38, 18, 0.10);
/* Layout */
--container-max: 1180px;
--nav-height: 64px;
/* Faint hex grid as a data-URI background.
Flat-top honeycomb tessellation: tile 126×73, 3 hexes per tile (one
full + two straddling top/bottom edges). Side length s=42, height
h≈73. Hex A center (21,36), B (84,0), C (84,73). Adjacent hexes
share full edges so the tile repeats with no seams or gaps. */
--hex-grid-dark: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='126' height='73' viewBox='0 0 126 73'><g fill='none' stroke='%23F5F2EA' stroke-opacity='0.07' stroke-width='1'><polygon points='0,0 42,0 63,36 42,73 0,73 -21,36'/><polygon points='63,-36 105,-36 126,0 105,36 63,36 42,0'/><polygon points='63,36 105,36 126,73 105,109 63,109 42,73'/></g></svg>");
}
/* -------------------- Reset / base -------------------- */
* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
font-family: var(--font-sans);
font-size: var(--t-body);
line-height: 1.6;
color: var(--text-on-dark);
background: var(--midnight);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
overflow-x: hidden;
}
img, svg { display: block; max-width: 100%; }
a { color: inherit; text-decoration: none; }
button { font-family: inherit; cursor: pointer; }
ul { list-style: none; }
em { font-style: italic; color: var(--gold); font-weight: 500; }
::selection { background: var(--gold); color: var(--midnight); }
/* -------------------- Layout primitives -------------------- */
.container {
width: 100%;
max-width: var(--container-max);
margin-inline: auto;
padding-inline: var(--s-5);
}
.eyebrow {
display: inline-flex;
align-items: center;
gap: var(--s-2);
font-size: var(--t-xs);
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--text-muted-on-dark);
margin-bottom: var(--s-4);
}
.eyebrow--gold { color: var(--gold); }
.eyebrow--center { display: flex; justify-content: center; }
.eyebrow-mark { width: 8px; height: 8px; color: var(--gold); }
.section-title {
font-size: var(--t-h2);
font-weight: 700;
line-height: 1.1;
letter-spacing: -0.02em;
margin-bottom: var(--s-4);
color: var(--text-on-dark);
}
.section-title--light { color: var(--text-on-light); }
.section-sub {
font-size: var(--t-lead);
line-height: 1.55;
color: var(--text-muted-on-dark);
max-width: 60ch;
margin-bottom: var(--s-7);
}
.section-sub--light { color: var(--text-muted-on-light); }
/* Reveal-on-scroll — JS toggles .is-visible */
.reveal {
opacity: 0;
transform: translateY(16px);
transition: opacity 0.7s cubic-bezier(0.2, 0.7, 0.2, 1), transform 0.7s cubic-bezier(0.2, 0.7, 0.2, 1);
will-change: opacity, transform;
}
.reveal.is-visible {
opacity: 1;
transform: none;
}
/* -------------------- Buttons -------------------- */
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--s-2);
height: 56px;
padding: 0 var(--s-6);
border-radius: var(--r-3);
font-weight: 600;
font-size: var(--t-body);
line-height: 1;
transition: transform 0.15s ease, box-shadow 0.2s ease, background 0.2s ease, border-color 0.2s ease;
white-space: nowrap;
border: 1px solid transparent;
user-select: none;
}
.btn:hover { transform: translateY(-1px); }
.btn:active { transform: translateY(0); }
.btn:focus-visible {
outline: 2px solid var(--gold);
outline-offset: 3px;
}
.btn-primary {
background: var(--gold);
color: var(--midnight);
box-shadow: 0 8px 24px rgba(252, 206, 56, 0.28), inset 0 1px 0 rgba(255, 255, 255, 0.4);
}
.btn-primary:hover {
background: var(--pollen);
box-shadow: 0 12px 32px rgba(252, 206, 56, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.5);
}
.btn-ghost {
background: transparent;
color: var(--text-on-dark);
border-color: var(--border-on-dark-strong);
}
.btn-ghost:hover {
background: rgba(245, 242, 234, 0.06);
border-color: rgba(245, 242, 234, 0.32);
}
.btn-block { width: 100%; }
.btn-sm { height: 40px; padding: 0 var(--s-4); font-size: var(--t-sm); }
.btn-lg { height: 56px; padding: 0 var(--s-6); }
.btn-icon { width: 18px; height: 18px; }
/* -------------------- Navigation -------------------- */
.nav {
position: sticky;
top: 0;
z-index: 50;
height: var(--nav-height);
background: rgba(24, 30, 55, 0.72);
backdrop-filter: saturate(140%) blur(18px);
-webkit-backdrop-filter: saturate(140%) blur(18px);
border-bottom: 1px solid transparent;
transition: border-color 0.2s ease, background 0.2s ease;
}
.nav.is-scrolled {
border-bottom-color: var(--border-on-dark);
background: rgba(22, 28, 50, 0.88);
}
.nav-container {
height: 100%;
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--s-5);
}
.nav-brand {
display: inline-flex;
align-items: center;
gap: 0;
color: var(--text-on-dark);
}
.brand-wordmark {
font-weight: 700;
font-size: 1.0625rem;
letter-spacing: -0.02em;
color: var(--text-on-dark);
}
.brand-wordmark-strong { color: var(--gold); }
.nav-links {
display: none;
align-items: center;
gap: var(--s-6);
}
.nav-link {
font-size: var(--t-sm);
color: var(--text-muted-on-dark);
font-weight: 500;
transition: color 0.15s ease;
}
.nav-link:hover { color: var(--text-on-dark); }
.nav-cta { display: none; }
.nav-toggle {
background: none;
border: 0;
width: 36px;
height: 36px;
display: inline-flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 5px;
color: var(--text-on-dark);
}
.nav-toggle span {
display: block;
width: 22px;
height: 1.75px;
background: currentColor;
transition: transform 0.2s ease, opacity 0.2s ease;
}
.nav-toggle.is-active span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.nav-toggle.is-active span:nth-child(2) { opacity: 0; }
.nav-toggle.is-active span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
@media (min-width: 768px) {
.nav-links { display: flex; }
.nav-cta { display: inline-flex; }
.nav-toggle { display: none; }
}
/* Mobile menu open */
.nav-links.is-open {
display: flex;
position: absolute;
top: var(--nav-height);
left: 0;
right: 0;
flex-direction: column;
gap: 0;
background: var(--midnight);
border-bottom: 1px solid var(--border-on-dark);
padding: var(--s-3) 0;
}
.nav-links.is-open .nav-link {
padding: var(--s-3) var(--s-5);
width: 100%;
}
/* -------------------- Hex field background -------------------- */
.hex-field {
position: absolute;
inset: 0;
background-image: var(--hex-grid-dark);
background-size: 126px 73px;
background-position: center;
pointer-events: none;
mask-image: radial-gradient(ellipse at center, black 30%, transparent 80%);
-webkit-mask-image: radial-gradient(ellipse at center, black 30%, transparent 80%);
opacity: 0.85;
}
.hex-field--soft {
mask-image: radial-gradient(ellipse at center, black 0%, transparent 70%);
-webkit-mask-image: radial-gradient(ellipse at center, black 0%, transparent 70%);
opacity: 0.5;
}
/* -------------------- Hero -------------------- */
.hero {
position: relative;
overflow: hidden;
background: radial-gradient(ellipse 90% 60% at 30% 0%, #1B2547 0%, var(--midnight) 50%, var(--deep) 100%);
padding: var(--s-9) 0;
}
.hero-glow {
position: absolute;
top: -120px;
right: -160px;
width: 640px;
height: 640px;
border-radius: 50%;
background: radial-gradient(circle, rgba(252, 206, 56, 0.32) 0%, rgba(252, 206, 56, 0.08) 35%, transparent 65%);
filter: blur(20px);
pointer-events: none;
}
.hero-container {
position: relative;
display: grid;
grid-template-columns: 1fr;
gap: var(--s-8);
align-items: center;
}
.hero-content { max-width: 36rem; }
.hero-title {
font-size: var(--t-display);
font-weight: 800;
line-height: 1.02;
letter-spacing: -0.035em;
margin-bottom: var(--s-5);
color: var(--text-on-dark);
}
.hero-title em {
font-style: italic;
font-weight: 700;
color: var(--gold);
}
.hero-sub {
font-size: var(--t-lead);
line-height: 1.55;
color: var(--text-muted-on-dark);
margin-bottom: var(--s-6);
max-width: 32rem;
}
.hero-cta {
display: flex;
flex-wrap: wrap;
gap: var(--s-3);
margin-bottom: var(--s-5);
}
.hero-trust {
font-size: var(--t-sm);
color: var(--text-faint-on-dark);
}
/* iPhone mock */
.hero-visual {
display: flex;
justify-content: center;
align-items: center;
position: relative;
}
.iphone {
position: relative;
width: 300px;
max-width: 100%;
animation: heroFloat 8s ease-in-out infinite;
}
@keyframes heroFloat {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-8px); }
}
.iphone-frame {
position: relative;
aspect-ratio: 9 / 19.5;
background: #0A0E20;
border-radius: 44px;
padding: 8px;
box-shadow:
0 0 0 1.5px rgba(245, 242, 234, 0.08),
0 60px 120px -30px rgba(11, 17, 36, 0.85),
0 24px 48px -12px rgba(11, 17, 36, 0.5),
0 0 80px rgba(252, 206, 56, 0.18);
}
.iphone-notch {
position: absolute;
top: 14px;
left: 50%;
transform: translateX(-50%);
width: 96px;
height: 26px;
background: #000;
border-radius: 16px;
z-index: 2;
}
.iphone-screen {
width: 100%;
height: 100%;
background: linear-gradient(180deg, #11172F 0%, #181E37 60%, #1A2240 100%);
border-radius: 36px;
overflow: hidden;
display: flex;
flex-direction: column;
position: relative;
}
.iphone-statusbar {
display: flex;
justify-content: space-between;
align-items: center;
padding: 14px 22px 6px;
font-size: 12px;
font-weight: 600;
color: var(--text-on-dark);
}
.iphone-statusbar-right { display: inline-flex; gap: 3px; }
.sb-dot {
width: 4px; height: 4px; border-radius: 50%;
background: var(--text-on-dark);
}
.sb-dot--off { background: var(--text-faint-on-dark); }
.iphone-titlebar {
padding: 18px 18px 10px;
}
.iphone-title {
display: block;
font-size: 22px;
font-weight: 700;
letter-spacing: -0.02em;
color: var(--text-on-dark);
}
.iphone-subtitle {
display: block;
font-size: 12px;
color: var(--text-muted-on-dark);
margin-top: 2px;
}
.iphone-tabs {
display: flex;
gap: 6px;
padding: 4px 18px 12px;
overflow-x: auto;
scrollbar-width: none;
}
.iphone-tabs::-webkit-scrollbar { display: none; }
.iphone-tab {
flex: 0 0 auto;
padding: 6px 10px;
font-size: 11px;
font-weight: 500;
color: var(--text-muted-on-dark);
background: rgba(245, 242, 234, 0.06);
border-radius: var(--r-pill);
white-space: nowrap;
}
.iphone-tab--active {
color: var(--midnight);
background: var(--gold);
}
.iphone-cards {
flex: 1;
padding: 0 14px;
display: flex;
flex-direction: column;
gap: 8px;
overflow: hidden;
}
.task-card {
background: rgba(245, 242, 234, 0.04);
border: 1px solid var(--border-on-dark);
border-radius: var(--r-3);
padding: 10px 12px;
display: flex;
flex-direction: column;
gap: 6px;
}
.task-card--overdue {
border-color: rgba(221, 28, 26, 0.35);
background: linear-gradient(180deg, rgba(221, 28, 26, 0.10), rgba(221, 28, 26, 0.04));
}
.task-card--done {
background: linear-gradient(180deg, rgba(252, 206, 56, 0.14), rgba(252, 206, 56, 0.04));
border-color: rgba(252, 206, 56, 0.35);
}
.task-card-row {
display: flex;
align-items: center;
gap: 8px;
font-size: 12.5px;
font-weight: 600;
color: var(--text-on-dark);
}
.task-title { flex: 1; }
.task-card-meta {
display: flex;
gap: 6px;
flex-wrap: wrap;
}
.meta-chip {
font-size: 10px;
font-weight: 500;
padding: 3px 7px;
border-radius: var(--r-pill);
background: rgba(245, 242, 234, 0.08);
color: var(--text-muted-on-dark);
}
.meta-chip--overdue { background: rgba(221, 28, 26, 0.18); color: #FFB8B6; }
.meta-chip--done { background: rgba(252, 206, 56, 0.22); color: var(--midnight); font-weight: 600; }
.prio-dot {
width: 8px;
height: 8px;
border-radius: 50%;
flex-shrink: 0;
}
.prio-dot--high { background: var(--error); }
.prio-dot--med { background: var(--gold); }
.prio-dot--low { background: rgba(245, 242, 234, 0.35); }
.task-done {
width: 14px;
height: 14px;
color: var(--gold);
flex-shrink: 0;
}
.task-done--sm { width: 12px; height: 12px; }
.iphone-tabbar {
margin-top: auto;
display: flex;
justify-content: space-around;
align-items: center;
padding: 10px 16px 18px;
border-top: 1px solid var(--border-on-dark);
background: rgba(11, 17, 36, 0.5);
}
.iphone-tabbar-item {
font-size: 10px;
color: var(--text-faint-on-dark);
display: inline-flex;
flex-direction: column;
align-items: center;
gap: 3px;
}
.iphone-tabbar-item svg {
width: 14px;
height: 14px;
}
.iphone-tabbar-item--active { color: var(--gold); }
@media (min-width: 1024px) {
.hero { padding: var(--s-10) 0; }
.hero-container {
grid-template-columns: 1.05fr 1fr;
gap: var(--s-8);
}
.iphone { width: 340px; }
}
/* -------------------- Trust strip -------------------- */
.trust {
background: var(--deep);
border-top: 1px solid var(--border-on-dark);
border-bottom: 1px solid var(--border-on-dark);
padding: var(--s-5) 0;
}
.trust-container {
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
gap: var(--s-3) var(--s-7);
}
.trust-item {
display: inline-flex;
align-items: center;
gap: var(--s-2);
font-size: var(--t-sm);
font-weight: 500;
color: var(--text-muted-on-dark);
}
.trust-mark {
width: 8px; height: 8px;
color: var(--gold);
}
/* -------------------- Pillars -------------------- */
.pillars {
background: var(--cream);
color: var(--text-on-light);
padding: var(--s-9) 0;
text-align: center;
position: relative;
}
.pillars .section-title { color: var(--text-on-light); }
.pillars .section-sub { color: var(--text-muted-on-light); margin-inline: auto; margin-bottom: var(--s-8); }
.pillars .eyebrow { color: var(--amber); }
.pillars-grid {
display: grid;
grid-template-columns: 1fr;
gap: var(--s-6);
text-align: left;
}
.pillar {
background: var(--cream-elev);
border: 1px solid var(--border-on-light);
border-radius: var(--r-5);
padding: var(--s-6);
box-shadow: var(--shadow-light);
transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.pillar:hover {
transform: translateY(-3px);
box-shadow: 0 20px 40px rgba(56, 38, 18, 0.14);
}
.pillar-kicker {
display: inline-flex;
align-items: center;
min-height: 32px;
padding: 0 12px;
margin-bottom: var(--s-4);
border-radius: var(--r-pill);
background: rgba(245, 166, 35, 0.12);
border: 1px solid rgba(245, 166, 35, 0.24);
font-size: var(--t-xs);
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--amber);
}
.pillar-title {
font-size: var(--t-h3);
font-weight: 700;
letter-spacing: -0.015em;
margin-bottom: var(--s-3);
color: var(--text-on-light);
}
.pillar-desc {
font-size: var(--t-body);
line-height: 1.6;
color: var(--text-muted-on-light);
}
.pillar-desc em { color: var(--midnight); font-style: italic; font-weight: 600; }
@media (min-width: 768px) {
.pillars-grid { grid-template-columns: repeat(3, 1fr); }
}
/* -------------------- Features -------------------- */
.features {
background: var(--midnight);
padding: var(--s-9) 0;
position: relative;
}
.feature {
display: grid;
grid-template-columns: 1fr;
gap: var(--s-7);
align-items: center;
padding: var(--s-7) 0;
}
.feature + .feature { border-top: 1px solid var(--border-on-dark); }
.feature-content { max-width: 36rem; }
.feature-title {
font-size: var(--t-h2);
font-weight: 700;
line-height: 1.1;
letter-spacing: -0.02em;
margin-bottom: var(--s-4);
color: var(--text-on-dark);
}
.feature-desc {
font-size: var(--t-lead);
line-height: 1.6;
color: var(--text-muted-on-dark);
margin-bottom: var(--s-5);
}
.feature-desc em { color: var(--gold); font-style: italic; font-weight: 500; }
.feature-list {
display: flex;
flex-direction: column;
gap: var(--s-3);
}
.feature-list li {
display: flex;
align-items: flex-start;
gap: var(--s-3);
font-size: var(--t-body);
color: var(--text-on-dark);
}
.feature-list--light li { color: var(--text-on-light); }
.li-mark {
width: 12px;
height: 12px;
color: var(--gold);
flex-shrink: 0;
margin-top: 7px;
}
.li-mark--dim { color: var(--text-faint-on-light); }
.feature-visual {
display: flex;
justify-content: center;
align-items: center;
}
@media (min-width: 1024px) {
.feature {
grid-template-columns: 1fr 1fr;
gap: var(--s-8);
padding: var(--s-8) 0;
}
.feature--right .feature-content { order: 2; }
.feature--right .feature-visual { order: 1; }
}
/* UI mock card (residences / contractors / docs panels) */
.ui-card {
width: 100%;
max-width: 460px;
background: linear-gradient(180deg, rgba(245, 242, 234, 0.04), rgba(245, 242, 234, 0.01));
border: 1px solid var(--border-on-dark);
border-radius: var(--r-5);
padding: var(--s-5);
box-shadow: var(--shadow-soft);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
}
.ui-card-head {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: var(--s-4);
}
.ui-card-eyebrow {
font-size: var(--t-xs);
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--text-muted-on-dark);
}
.ui-card-tag {
font-size: var(--t-xs);
font-weight: 600;
color: var(--gold);
background: rgba(252, 206, 56, 0.14);
padding: 2px 10px;
border-radius: var(--r-pill);
}
.ui-row {
display: flex;
align-items: center;
gap: var(--s-3);
padding: var(--s-3) 0;
border-top: 1px solid var(--border-on-dark);
}
.ui-row:first-of-type { border-top: 0; }
.ui-row-body { flex: 1; min-width: 0; }
.ui-row-body strong {
display: block;
font-size: var(--t-sm);
font-weight: 600;
color: var(--text-on-dark);
margin-bottom: 2px;
}
.ui-row-body small {
display: block;
font-size: 0.8125rem;
color: var(--text-muted-on-dark);
}
.ui-row-hex {
width: 30px;
height: 26px;
flex-shrink: 0;
color: rgba(252, 206, 56, 0.46);
}
.ui-row-hex--filled {
color: var(--gold);
filter: drop-shadow(0 6px 10px rgba(252, 206, 56, 0.14));
}
.ui-row-pill {
font-size: var(--t-xs);
font-weight: 600;
padding: 4px 10px;
border-radius: var(--r-pill);
background: rgba(245, 242, 234, 0.08);
color: var(--text-muted-on-dark);
}
.ui-row-pill--warn { background: rgba(245, 166, 35, 0.18); color: var(--gold); }
.ui-row-pill--ok { background: rgba(252, 206, 56, 0.16); color: var(--gold); }
.fav { color: var(--gold); margin-left: 4px; }
/* Warranty badges */
.warranty-badge {
flex-shrink: 0;
display: inline-flex;
align-items: center;
justify-content: center;
width: 50px;
height: 28px;
border-radius: var(--r-2);
font-size: 0.6875rem;
font-weight: 700;
letter-spacing: 0.04em;
text-transform: uppercase;
}
.warranty-badge--active { background: rgba(252, 206, 56, 0.16); color: var(--gold); }
.warranty-badge--soon { background: rgba(245, 166, 35, 0.22); color: #FFC97A; }
.warranty-badge--doc { background: rgba(245, 242, 234, 0.10); color: var(--text-on-dark); }
/* Kanban mock */
.kanban {
display: grid;
grid-template-columns: repeat(5, minmax(140px, 1fr));
gap: var(--s-3);
width: 100%;
overflow-x: auto;
padding-bottom: var(--s-3);
scrollbar-width: thin;
}
.kanban-col {
background: rgba(245, 242, 234, 0.03);
border: 1px solid var(--border-on-dark);
border-radius: var(--r-4);
padding: var(--s-3);
display: flex;
flex-direction: column;
gap: var(--s-2);
min-width: 140px;
}
.kanban-col-label {
font-size: 0.6875rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--text-muted-on-dark);
padding-bottom: var(--s-2);
}
.kanban-col-label--overdue { color: #FF8584; }
.kanban-col-label--inprogress { color: var(--gold); }
.kanban-col-label--done { color: var(--gold); }
.kanban-card {
background: var(--midnight);
border: 1px solid var(--border-on-dark);
border-radius: var(--r-3);
padding: var(--s-3);
font-size: 0.8125rem;
font-weight: 500;
color: var(--text-on-dark);
display: flex;
align-items: center;
gap: var(--s-2);
line-height: 1.3;
}
.kanban-card--inprogress { border-color: rgba(252, 206, 56, 0.35); }
.kanban-card--done {
background: linear-gradient(180deg, rgba(252, 206, 56, 0.16), rgba(252, 206, 56, 0.04));
border-color: rgba(252, 206, 56, 0.32);
color: var(--pollen);
}
/* -------------------- Comb (completion grid) -------------------- */
.comb {
background: var(--cream);
color: var(--text-on-light);
padding: var(--s-9) 0;
overflow: hidden;
}
.comb-container {
display: grid;
grid-template-columns: 1fr;
gap: var(--s-7);
align-items: center;
}
.comb-copy .eyebrow { color: var(--amber); }
.comb-stats {
display: flex;
gap: var(--s-7);
margin-top: var(--s-5);
flex-wrap: wrap;
}
.comb-stat-num {
display: block;
font-size: clamp(1.75rem, 3vw, 2.5rem);
font-weight: 800;
letter-spacing: -0.02em;
color: var(--midnight);
}
.comb-stat-label {
display: block;
font-size: var(--t-sm);
color: var(--text-muted-on-light);
}
.comb-visual {
display: flex;
justify-content: center;
align-items: center;
}
.comb-grid {
display: grid;
grid-template-columns: repeat(8, 1fr);
gap: 6px;
max-width: 480px;
width: 100%;
}
.comb-cell {
aspect-ratio: 1 / 0.866;
clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);
background: rgba(26, 26, 34, 0.08);
transition: background 0.4s ease;
}
.comb-cell.is-filled { background: var(--gold); }
.comb-cell.is-faint { background: rgba(252, 206, 56, 0.32); }
@media (min-width: 1024px) {
.comb-container { grid-template-columns: 1fr 1fr; gap: var(--s-9); }
}
/* -------------------- Sharing -------------------- */
.sharing {
background: var(--cream);
color: var(--text-on-light);
padding: var(--s-9) 0;
overflow: hidden;
}
.sharing .eyebrow { color: var(--amber); }
.sharing-container {
display: grid;
grid-template-columns: 1fr;
gap: var(--s-7);
align-items: center;
}
.sharing-visual { display: flex; justify-content: center; }
.share-card {
width: 100%;
max-width: 380px;
background: var(--midnight);
color: var(--text-on-dark);
border-radius: var(--r-5);
padding: var(--s-6);
box-shadow: var(--shadow-deep);
border: 1px solid var(--border-on-dark-strong);
position: relative;
overflow: hidden;
}
.share-card::before {
content: "";
position: absolute;
top: -40px;
right: -40px;
width: 180px;
height: 180px;
border-radius: 50%;
background: radial-gradient(circle, rgba(252, 206, 56, 0.22) 0%, transparent 70%);
}
.share-card-head {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--s-4);
margin-bottom: var(--s-5);
position: relative;
}
.share-card-head strong { display: block; font-size: 1.0625rem; font-weight: 700; color: var(--text-on-dark); }
.share-card-head small { display: block; font-size: var(--t-sm); color: var(--text-muted-on-dark); }
.share-card-tag {
flex-shrink: 0;
display: inline-flex;
align-items: center;
min-height: 28px;
padding: 0 10px;
border-radius: var(--r-pill);
background: rgba(252, 206, 56, 0.14);
border: 1px solid rgba(252, 206, 56, 0.24);
font-size: var(--t-xs);
font-weight: 700;
letter-spacing: 0.06em;
text-transform: uppercase;
color: var(--gold);
}
.share-code {
display: flex;
flex-direction: column;
gap: 4px;
padding: var(--s-4);
margin-bottom: var(--s-4);
background: rgba(252, 206, 56, 0.1);
border: 1px dashed rgba(252, 206, 56, 0.4);
border-radius: var(--r-3);
position: relative;
}
.share-code-label {
font-size: 0.6875rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--gold);
}
.share-code-value {
font-size: 1.5rem;
font-weight: 700;
letter-spacing: 0.08em;
color: var(--text-on-dark);
font-feature-settings: "tnum";
}
.share-people {
display: flex;
flex-direction: column;
gap: var(--s-3);
}
.share-person {
display: flex;
align-items: center;
gap: var(--s-3);
font-size: var(--t-sm);
color: var(--text-on-dark);
}
.share-avatar {
width: 32px;
height: 32px;
display: inline-flex;
align-items: center;
justify-content: center;
border-radius: 50%;
font-size: 0.8125rem;
font-weight: 700;
color: var(--midnight);
flex-shrink: 0;
}
.share-avatar--a { background: var(--gold); }
.share-avatar--b { background: var(--pollen); }
.share-avatar--c { background: #E8A765; }
@media (min-width: 1024px) {
.sharing-container { grid-template-columns: 1fr 1fr; gap: var(--s-9); }
.sharing-visual { justify-content: flex-end; }
}
/* -------------------- Pricing -------------------- */
.pricing {
background: var(--midnight);
padding: var(--s-9) 0;
text-align: center;
position: relative;
}
.pricing .section-title { color: var(--text-on-dark); }
.pricing .section-sub { color: var(--text-muted-on-dark); margin-inline: auto; margin-bottom: var(--s-8); }
.pricing .eyebrow { color: var(--gold); }
.pricing-grid {
display: grid;
grid-template-columns: 1fr;
gap: var(--s-5);
max-width: 920px;
margin-inline: auto;
text-align: left;
}
.price-card {
background: linear-gradient(180deg, rgba(245, 242, 234, 0.04), rgba(245, 242, 234, 0.01));
border: 1px solid var(--border-on-dark);
border-radius: var(--r-5);
padding: var(--s-7);
display: flex;
flex-direction: column;
gap: var(--s-5);
position: relative;
}
.price-card--pro {
background: linear-gradient(180deg, rgba(252, 206, 56, 0.10), rgba(252, 206, 56, 0.02));
border-color: rgba(252, 206, 56, 0.4);
box-shadow: 0 32px 64px rgba(252, 206, 56, 0.10);
}
.price-card-tag {
position: absolute;
top: -12px;
right: var(--s-5);
background: var(--gold);
color: var(--midnight);
font-size: var(--t-xs);
font-weight: 700;
letter-spacing: 0.06em;
text-transform: uppercase;
padding: 4px 10px;
border-radius: var(--r-pill);
}
.price-card-header {
display: flex;
flex-direction: column;
gap: var(--s-2);
padding-bottom: var(--s-4);
border-bottom: 1px solid var(--border-on-dark);
}
.price-card-name {
font-size: 1rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.06em;
color: var(--gold);
}
.price-card-price {
font-size: clamp(1.375rem, 2.4vw, 1.875rem);
font-weight: 700;
letter-spacing: -0.02em;
line-height: 1.1;
color: var(--text-on-dark);
}
.price-card-line {
font-size: var(--t-sm);
color: var(--text-muted-on-dark);
}
.price-card-list {
display: flex;
flex-direction: column;
gap: var(--s-3);
}
.price-card-list li {
display: flex;
align-items: flex-start;
gap: var(--s-3);
font-size: var(--t-body);
color: var(--text-on-dark);
line-height: 1.5;
}
@media (min-width: 768px) {
.pricing-grid { grid-template-columns: 1fr 1fr; }
}
/* -------------------- Final CTA -------------------- */
.cta-final {
position: relative;
background: linear-gradient(180deg, var(--midnight) 0%, var(--deep) 100%);
padding: var(--s-10) 0;
overflow: hidden;
text-align: center;
}
.cta-glow {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 720px;
height: 720px;
border-radius: 50%;
background: radial-gradient(circle, rgba(252, 206, 56, 0.20) 0%, transparent 60%);
pointer-events: none;
}
.cta-container {
position: relative;
max-width: 640px;
margin-inline: auto;
}
.cta-container .eyebrow { color: var(--gold); }
.cta-title {
font-size: clamp(2rem, 4.4vw, 3.25rem);
font-weight: 800;
line-height: 1.1;
letter-spacing: -0.025em;
margin-bottom: var(--s-4);
color: var(--text-on-dark);
}
.cta-sub {
font-size: var(--t-lead);
color: var(--text-muted-on-dark);
margin-bottom: var(--s-6);
}
.cta-buttons {
display: flex;
flex-wrap: wrap;
gap: var(--s-3);
justify-content: center;
margin-bottom: var(--s-4);
}
.cta-trust {
font-size: var(--t-sm);
color: var(--text-faint-on-dark);
}
/* -------------------- Footer -------------------- */
.footer {
background: var(--deep);
color: var(--text-muted-on-dark);
padding: var(--s-8) 0 var(--s-5);
border-top: 1px solid var(--border-on-dark);
}
.footer-container {
display: grid;
grid-template-columns: 1fr;
gap: var(--s-7);
margin-bottom: var(--s-7);
}
.footer-brand-row {
display: inline-flex;
align-items: center;
gap: var(--s-2);
margin-bottom: var(--s-3);
}
.footer-tagline {
font-size: var(--t-sm);
color: var(--text-muted-on-dark);
max-width: 28ch;
}
.footer-links {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: var(--s-5);
}
.footer-col h4 {
font-size: var(--t-xs);
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--text-on-dark);
margin-bottom: var(--s-3);
}
.footer-col a {
display: block;
font-size: var(--t-sm);
color: var(--text-muted-on-dark);
padding: var(--s-1) 0;
transition: color 0.15s ease;
}
.footer-col a:hover { color: var(--gold); }
.footer-static {
display: block;
font-size: var(--t-sm);
color: var(--text-faint-on-dark);
padding: var(--s-1) 0;
}
.footer-bottom {
display: flex;
flex-direction: column;
gap: var(--s-2);
padding-top: var(--s-5);
border-top: 1px solid var(--border-on-dark);
font-size: var(--t-xs);
color: var(--text-faint-on-dark);
}
.brand-line {
display: inline-flex;
align-items: center;
gap: var(--s-2);
}
.brand-line-hex {
width: 8px;
height: 8px;
color: var(--gold);
}
@media (min-width: 768px) {
.footer-container {
grid-template-columns: 1.4fr 2fr;
gap: var(--s-8);
}
.footer-bottom {
flex-direction: row;
justify-content: space-between;
align-items: center;
}
}
/* -------------------- Reduced motion -------------------- */
@media (prefers-reduced-motion: reduce) {
html { scroll-behavior: auto; }
.reveal { opacity: 1; transform: none; transition: none; }
.iphone { animation: none; }
*, *::before, *::after {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}
/* -------------------- Focus visibility -------------------- */
a:focus-visible {
outline: 2px solid var(--gold);
outline-offset: 2px;
border-radius: 2px;
}