From b37c9044f158dd93a83238d6326c833946cd184f Mon Sep 17 00:00:00 2001 From: Leonard Date: Thu, 16 Jul 2026 16:18:42 +0000 Subject: [PATCH] prototype: styles --- prototype/styles.css | 671 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 671 insertions(+) create mode 100644 prototype/styles.css diff --git a/prototype/styles.css b/prototype/styles.css new file mode 100644 index 0000000..a0f1607 --- /dev/null +++ b/prototype/styles.css @@ -0,0 +1,671 @@ +/* Hallmark · styles for Phoenix Split Studio prototype */ + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html, +body { + overflow-x: clip; +} + +html { + scroll-behavior: smooth; +} + +body { + margin: 0; + font-family: var(--font-body); + font-size: var(--text-base); + line-height: 1.6; + color: var(--color-ink); + background: var(--color-paper); + -webkit-font-smoothing: antialiased; +} + +img { + max-width: 100%; + height: auto; + display: block; +} + +a { + color: var(--color-accent); + text-underline-offset: 0.18em; +} + +a:hover { + text-decoration-thickness: 2px; +} + +a:focus-visible, +button:focus-visible, +input:focus-visible { + outline: 2px solid var(--color-focus); + outline-offset: 2px; +} + +.skip { + position: absolute; + left: -9999px; + top: 0; + background: var(--color-ink); + color: var(--color-paper); + padding: var(--space-sm) var(--space-md); + z-index: 100; +} + +.skip:focus { + left: var(--space-md); + top: var(--space-md); +} + +.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; +} + +/* Header — edge-aligned, sparse */ +.site-header { + position: sticky; + top: 0; + z-index: 300; + background: color-mix(in oklch, var(--color-paper) 92%, transparent); + backdrop-filter: blur(8px); + border-bottom: 1px solid var(--color-rule); +} + +.site-header__inner { + max-width: var(--page); + margin: 0 auto; + min-height: var(--banner-height); + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--space-lg); + padding: var(--space-sm) 0; +} + +.wordmark { + display: inline-flex; + align-items: center; + gap: 0.65rem; + text-decoration: none; + color: var(--color-ink); +} + +.wordmark img { + width: 2.1rem; + height: 2.1rem; + object-fit: contain; +} + +.wordmark__text { + display: flex; + flex-direction: column; + line-height: 1.05; +} + +.wordmark__name { + font-family: var(--font-display); + font-size: 1.45rem; + font-weight: 500; + font-style: normal; + letter-spacing: 0.01em; +} + +.wordmark__sub { + font-size: 0.68rem; + letter-spacing: 0.14em; + text-transform: uppercase; + color: var(--color-muted); +} + +.nav { + display: none; + gap: var(--space-lg); + align-items: center; +} + +.nav a { + color: var(--color-ink); + text-decoration: none; + font-size: var(--text-sm); + font-weight: 500; + white-space: nowrap; +} + +.nav a:hover { + color: var(--color-accent); +} + +@media (min-width: 860px) { + .nav { + display: flex; + } +} + +/* Buttons */ +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 44px; + padding: 0.65rem 1.15rem; + border: 1px solid transparent; + border-radius: var(--radius); + font-family: var(--font-body); + font-size: var(--text-sm); + font-weight: 600; + letter-spacing: 0.02em; + text-decoration: none; + white-space: nowrap; + cursor: pointer; + transition: background-color var(--dur-short) var(--ease-out), + color var(--dur-short) var(--ease-out), + border-color var(--dur-short) var(--ease-out); +} + +.btn--primary { + background: var(--color-ink); + color: var(--color-paper); + border-color: var(--color-ink); +} + +.btn--primary:hover { + background: var(--color-accent); + border-color: var(--color-accent); + color: var(--color-accent-ink); +} + +.btn--primary:active { + transform: translateY(1px); +} + +.text-link { + font-weight: 500; + color: var(--color-ink); + text-decoration: underline; + text-decoration-color: var(--color-rule); + text-underline-offset: 0.2em; + white-space: nowrap; +} + +.text-link:hover { + color: var(--color-accent); + text-decoration-color: var(--color-accent); +} + +/* Split layout */ +.split { + display: grid; + gap: var(--space-xl); + align-items: center; +} + +@media (min-width: 900px) { + .split { + grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr); + gap: var(--space-3xl); + } + + .service--flip, + .founder { + grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr); + } + + .service--flip .service__media, + .founder .founder__media { + order: 2; + } + + .service--flip .service__copy, + .founder .founder__copy { + order: 1; + } +} + +/* Hero */ +.hero { + max-width: var(--page); + margin: 0 auto; + padding: var(--space-2xl) 0 var(--space-3xl); +} + +.hero__media { + margin: 0; + background: var(--color-paper-2); +} + +.hero__media img { + width: 100%; + aspect-ratio: 16 / 11; + object-fit: cover; +} + +.hero__copy { + max-width: 34rem; +} + +.place { + margin: 0 0 var(--space-md); + font-size: 0.72rem; + font-weight: 600; + letter-spacing: 0.16em; + text-transform: uppercase; + color: var(--color-muted); +} + +.hero h1, +.section h2, +.service h3, +.mem h3, +.founder h2 { + font-family: var(--font-display); + font-style: normal; + font-weight: 500; + letter-spacing: -0.01em; + line-height: 1.08; + margin: 0 0 var(--space-md); + color: var(--color-ink); + overflow-wrap: anywhere; + min-width: 0; +} + +.hero h1 { + font-size: var(--text-display); + max-width: 14ch; +} + +.lede { + margin: 0 0 var(--space-xl); + font-size: var(--text-md); + line-height: 1.55; + max-width: var(--measure); + color: color-mix(in oklch, var(--color-ink) 88%, var(--color-muted)); +} + +.hero__actions, +.cta-row { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: var(--space-md) var(--space-lg); + margin-bottom: var(--space-lg); +} + +.fine { + margin: 0; + font-size: var(--text-sm); + color: var(--color-muted); + max-width: 48ch; + line-height: 1.5; +} + +/* Awards ribbon — one line, not a modal/section */ +.ribbon { + max-width: var(--page); + margin: 0 auto var(--space-3xl); + padding: var(--space-md) 0; + border-top: 1px solid var(--color-rule); + border-bottom: 1px solid var(--color-rule); + font-size: var(--text-sm); + color: var(--color-muted); +} + +.ribbon a { + color: var(--color-ink); + font-weight: 500; +} + +/* Sections */ +.section { + max-width: var(--page); + margin: 0 auto; + padding: var(--space-3xl) 0; +} + +.section--narrow { + max-width: min(42rem, calc(100% - 2.5rem)); +} + +.section--band { + background: var(--color-band); + max-width: none; + padding-left: max(1.25rem, calc((100% - 1120px) / 2)); + padding-right: max(1.25rem, calc((100% - 1120px) / 2)); +} + +.section--band > * { + max-width: 1120px; + margin-left: auto; + margin-right: auto; +} + +.section--narrow.section--band > * { + max-width: 42rem; +} + +.section__intro { + max-width: 40rem; + margin-bottom: var(--space-2xl); +} + +.section h2 { + font-size: var(--text-2xl); +} + +.section p { + margin: 0 0 var(--space-md); + max-width: var(--measure); +} + +/* Services */ +.service { + margin-bottom: var(--space-3xl); +} + +.service__media { + margin: 0; + background: var(--color-paper-2); + min-width: 0; +} + +.service__media img { + width: 100%; + aspect-ratio: 4 / 3; + object-fit: cover; +} + +.service__copy h3 { + font-size: var(--text-xl); +} + +.service-pair { + display: grid; + gap: var(--space-xl); + grid-template-columns: 1fr; +} + +@media (min-width: 700px) { + .service-pair { + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); + gap: var(--space-2xl); + } +} + +.service-card { + min-width: 0; +} + +.service-card img { + width: 100%; + aspect-ratio: 5 / 4; + object-fit: cover; + margin-bottom: var(--space-md); + background: var(--color-paper-2); +} + +.service-card h3 { + font-size: var(--text-lg); + margin-bottom: var(--space-xs); +} + +/* Memberships */ +.mem-grid { + display: grid; + gap: var(--space-xl); +} + +@media (min-width: 800px) { + .mem-grid { + grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr); + align-items: stretch; + } +} + +.mem { + padding: var(--space-xl); + background: var(--color-paper); + border: 1px solid var(--color-rule); +} + +.mem--lead { + background: var(--color-ink); + color: var(--color-paper); + border-color: var(--color-ink); +} + +.mem--lead .mem__kicker, +.mem--lead p, +.mem--lead li { + color: color-mix(in oklch, var(--color-paper) 82%, transparent); +} + +.mem--lead h3, +.mem--lead .mem__price { + color: var(--color-paper); +} + +.mem--lead .btn--primary { + background: var(--color-paper); + color: var(--color-ink); + border-color: var(--color-paper); +} + +.mem--lead .btn--primary:hover { + background: var(--color-accent); + border-color: var(--color-accent); + color: var(--color-accent-ink); +} + +.mem__kicker { + margin: 0 0 var(--space-xs); + font-size: 0.72rem; + letter-spacing: 0.14em; + text-transform: uppercase; + font-weight: 600; + color: var(--color-muted); +} + +.mem h3 { + font-size: var(--text-xl); +} + +.mem__price { + margin: 0 0 var(--space-lg); + font-family: var(--font-display); + font-size: var(--text-lg); +} + +.mem__price span { + font-size: var(--text-2xl); + font-weight: 500; +} + +.mem ul { + margin: 0 0 var(--space-xl); + padding-left: 1.1rem; +} + +.mem li { + margin-bottom: var(--space-xs); +} + +/* Founder */ +.founder { + padding-top: 0; +} + +.founder__media { + margin: 0; + background: var(--color-paper-2); + min-width: 0; +} + +.founder__media img { + width: 100%; + aspect-ratio: 4 / 5; + object-fit: cover; + object-position: top center; +} + +.founder blockquote { + margin: 0 0 var(--space-lg); + padding: 0; + font-family: var(--font-outlier); + font-size: var(--text-md); + line-height: 1.45; + border-left: 2px solid var(--color-accent); + padding-left: var(--space-md); +} + +/* Quotes */ +.quote { + margin: 0 0 var(--space-2xl); + padding: 0; +} + +.quote blockquote { + margin: 0 0 var(--space-sm); + padding: 0; + font-family: var(--font-outlier); + font-size: var(--text-lg); + line-height: 1.4; + font-weight: 400; +} + +.quote figcaption { + font-size: var(--text-sm); + color: var(--color-muted); +} + +/* Form */ +.list-form { + display: grid; + gap: var(--space-md); + max-width: 28rem; +} + +.list-form input { + min-height: 44px; + width: 100%; + border: 1px solid var(--color-rule); + border-radius: var(--radius); + background: var(--color-paper); + color: var(--color-ink); + padding: 0.65rem 0.85rem; + font: inherit; + outline: 2px solid transparent; +} + +.list-form input:hover { + border-color: color-mix(in oklch, var(--color-ink) 35%, var(--color-rule)); +} + +.list-form input:focus { + border-color: var(--color-accent); + outline: 2px solid var(--color-focus); + outline-offset: 1px; +} + +.list-form .btn { + width: fit-content; +} + +/* Visit */ +.address { + font-size: var(--text-md); + line-height: 1.5; +} + +/* Footer */ +.site-footer { + border-top: 1px solid var(--color-rule); + margin-top: var(--space-3xl); + padding: var(--space-3xl) 0 var(--space-2xl); + background: var(--color-paper-2); +} + +.site-footer__inner { + max-width: var(--page); + margin: 0 auto; +} + +.site-footer__statement { + font-family: var(--font-display); + font-size: var(--text-xl); + line-height: 1.25; + max-width: 28ch; + margin: 0 0 var(--space-xl); +} + +.site-footer__meta { + margin: 0 0 var(--space-md); + font-size: var(--text-sm); + color: var(--color-muted); +} + +.site-footer__meta a { + color: var(--color-ink); +} + +.site-footer__note { + margin: var(--space-xl) 0 0; + padding-top: var(--space-md); + border-top: 1px solid var(--color-rule); + font-size: 0.8rem; + color: var(--color-muted); + max-width: 60ch; +} + +/* Page gutters */ +body > header > .site-header__inner, +body > main > .hero, +body > main > .ribbon, +body > main > .section:not(.section--band), +body > footer > .site-footer__inner { + padding-left: 1.25rem; + padding-right: 1.25rem; +} + +@media (min-width: 900px) { + body > header > .site-header__inner, + body > main > .hero, + body > main > .ribbon, + body > main > .section:not(.section--band), + body > footer > .site-footer__inner { + padding-left: 0; + padding-right: 0; + } + + .hero, + .ribbon, + .section:not(.section--band), + .site-header__inner, + .site-footer__inner { + width: min(1120px, calc(100% - 2.5rem)); + margin-left: auto; + margin-right: auto; + } +} + +@media (prefers-reduced-motion: reduce) { + html { + scroll-behavior: auto; + } + + .btn, + a { + transition: none; + } +}