field-guide / src /lib /styles /global.css
pngwn
Add partner logos, nav popout menu, FAQ updates; fix scroll-spy
560169d
/* ============================================================
Build Small Hackathon — base styles & design tokens
Woodblock Press · square · 2px ink rules · hard stamp shadows
============================================================ */
:root {
/* paper / neutrals (warm) */
--paper: #f4eee1;
--paper-2: #efe7d4;
--kraft: #e4d5b7;
--kraft-deep: #d6c19a;
--line: #cdbb95;
/* ink */
--ink: #33312b;
--ink-2: #4a4639;
--ink-soft: rgba(51,49,43,.62);
--ink-faint: rgba(51,49,43,.40);
/* accents (share chroma/lightness, vary hue) */
--forest: #3d6a55;
--forest-deep: #2b4d3d;
--forest-ink: #20392d;
--amber: #e0913a;
--amber-deep: #c2762a;
--clay: #bd5f37;
/* mapped roles */
--bg: var(--paper);
--accent: var(--forest);
--accent-2: var(--amber);
--font-display: 'Archivo', system-ui, sans-serif;
--font-body: 'Archivo', system-ui, sans-serif;
--font-mono: 'Spline Sans Mono', ui-monospace, monospace;
--maxw: 1200px;
/* Woodblock: square everything */
--radius: 0;
--radius-sm: 0;
/* hard offset stamp shadows */
--press: 4px 4px 0 var(--ink);
--press-sm: 2px 2px 0 var(--ink);
--paccent: var(--forest);
}
* { box-sizing: border-box; }
html { scroll-behavior: smooth; scroll-padding-top: 84px; }
body {
margin: 0;
font-family: var(--font-body);
background: var(--bg);
color: var(--ink);
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
line-height: 1.55;
}
/* subtle canvas grain on the whole page */
body::before {
content: "";
position: fixed; inset: 0;
pointer-events: none; z-index: 0;
opacity: var(--grain-op, .5);
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='120' height='120' filter='url(%23n)' opacity='0.045'/%3E%3C/svg%3E");
}
.app-root { position: relative; z-index: 1; }
::selection { background: var(--amber); color: #fff; }
a { color: inherit; text-decoration: none; }
h1,h2,h3,h4 { font-family: var(--font-display); margin: 0; line-height: 1.02; }
/* ---------- layout ---------- */
.wrap { max-width: var(--maxw); margin: 0 auto; padding: 0 28px; width: 100%; }
.section { position: relative; padding: 92px 0; }
.section--tight { padding: 64px 0; }
/* ---------- type utilities ---------- */
.display {
font-family: var(--font-display);
font-weight: 800;
font-stretch: 118%;
letter-spacing: -0.015em;
line-height: 0.98;
}
.mono {
font-family: var(--font-mono);
font-weight: 500;
letter-spacing: 0.02em;
}
.eyebrow {
font-family: var(--font-mono);
font-size: 12px;
font-weight: 500;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--ink-soft);
display: inline-flex; align-items: center; gap: 9px;
}
.eyebrow::before {
content: ""; width: 22px; height: 2px; background: var(--accent-2);
display: inline-block;
}
.lede { font-size: clamp(17px, 1.5vw, 20px); color: var(--ink-2); max-width: 60ch; text-wrap: pretty; }
/* ---------- coordinate tag (mono, map-like) ---------- */
.coord {
font-family: var(--font-mono);
font-size: 11px; letter-spacing: .08em;
color: var(--ink-faint);
}
/* ---------- buttons (woodblock: square, 2px ink, stamp shadow) ---------- */
.btn {
font-family: var(--font-display);
font-weight: 800; font-stretch: 108%;
font-size: 15px; letter-spacing: .01em;
display: inline-flex; align-items: center; gap: 10px;
padding: 13px 22px;
border-radius: 0;
border: 2px solid var(--ink);
background: var(--ink);
color: var(--paper);
cursor: pointer;
box-shadow: 4px 4px 0 var(--ink);
transition: transform .1s ease, box-shadow .1s ease;
position: relative;
white-space: nowrap;
}
.btn:hover { transform: translate(2px,2px); box-shadow: 2px 2px 0 var(--ink); }
.btn:active { transform: translate(4px,4px); box-shadow: 0 0 0 var(--ink); }
.btn--accent { background: var(--accent); border-color: var(--forest-ink); color: #fff;
box-shadow: 4px 4px 0 var(--forest-ink); }
.btn--accent:hover { box-shadow: 2px 2px 0 var(--forest-ink); }
.btn--accent:active { box-shadow: 0 0 0 var(--forest-ink); }
.btn--ghost { background: var(--paper); color: var(--ink); }
.btn--ghost:hover { background: var(--paper); color: var(--ink); }
/* ---------- chips / filters ---------- */
.chip {
font-family: var(--font-mono); font-size: 12.5px; font-weight: 600;
letter-spacing: .02em;
padding: 7px 13px; border-radius: 0;
border: 2px solid var(--ink);
background: var(--paper); color: var(--ink);
cursor: pointer;
display: inline-flex; align-items: center; gap: 7px;
white-space: nowrap;
box-shadow: 2px 2px 0 var(--ink);
transition: transform .1s ease, box-shadow .1s ease, background .12s, color .12s;
}
.chip:hover { transform: translate(1px,1px); box-shadow: 1px 1px 0 var(--ink); }
.chip[data-on="true"] { background: var(--ink); color: var(--paper); }
.chip[data-on="true"].chip--forest { background: var(--forest); border-color: var(--forest-ink); color:#fff; }
.chip[data-on="true"].chip--amber { background: var(--amber); border-color: var(--ink); color: var(--ink); }
/* ---------- cards ---------- */
.card {
background: var(--paper);
border: 2px solid var(--ink);
border-radius: 0;
box-shadow: 5px 5px 0 var(--ink);
position: relative;
}
.card--kraft { background: var(--kraft); }
/* dashed map separator (stays dashed) */
.dash-rule { height: 0; border: none; border-top: 2px dashed var(--line); margin: 0; }
/* ---------- external / social link pills (kept flat per earlier direction) ---------- */
.linkrow { display: flex; flex-wrap: wrap; gap: 2px; }
.linkpill {
display: inline-flex; align-items: center; gap: 7px;
font-family: var(--font-mono); font-size: 12.5px; letter-spacing: .01em;
padding: 6px 10px; border-radius: 0;
border: none; background: transparent; color: var(--ink-soft);
transition: color .15s ease, background .15s ease;
white-space: nowrap;
}
.linkpill:hover { color: var(--lp); background: color-mix(in srgb, var(--lp) 10%, transparent); }
.on-dark .linkpill { color: rgba(244,238,225,.7); }
.on-dark .linkpill:hover { color: var(--paper); background: rgba(244,238,225,.1); }
/* ---------- stamp badge (KEEP ROUND — brand mark) ---------- */
.stamp {
position: relative;
width: 132px; height: 132px;
display: grid; place-items: center;
flex: none;
}
.stamp__ring { position: absolute; inset: 0; }
.stamp__face {
position: relative; text-align: center;
display: flex; flex-direction: column; align-items: center; justify-content: center;
gap: 2px;
}
/* small motif: dotted route */
.route { stroke-dasharray: 1 7; stroke-linecap: round; }
@media (prefers-reduced-motion: reduce) {
html { scroll-behavior: auto; }
}
/* ---------- nav ---------- */
.nav {
position: sticky; top: 0; z-index: 50;
background: color-mix(in srgb, var(--bg) 82%, transparent);
backdrop-filter: blur(12px) saturate(140%);
border-bottom: 2px solid var(--ink);
}
.nav__inner { display: flex; align-items: center; gap: 20px; height: 64px; }
.nav__brand { display: flex; align-items: center; gap: 10px; flex-shrink: 0; }
.nav__brand-text { font-size: 19px; font-stretch: 112%; white-space: nowrap; }
.nav__links { display: flex; gap: 4px; margin-left: auto; }
.nav__link {
font-family: var(--font-mono); font-size: 12.5px; letter-spacing: .02em;
padding: 7px 12px; border-radius: 0; color: var(--ink-soft);
white-space: nowrap;
transition: all .15s ease; cursor: pointer;
}
.nav__link:hover { color: var(--ink); background: color-mix(in srgb, var(--kraft) 60%, transparent); }
.nav__link[data-active="true"] { color: var(--ink); background: var(--kraft); }
/* hamburger toggle — hidden until the inline links no longer fit */
.nav__toggle {
display: none;
margin-left: auto;
align-items: center; justify-content: center;
width: 40px; height: 40px; padding: 0;
background: var(--paper);
border: 2px solid var(--ink);
box-shadow: var(--press-sm);
cursor: pointer;
transition: transform .1s ease, box-shadow .1s ease;
}
.nav__toggle:hover { transform: translate(2px,2px); box-shadow: 0 0 0 var(--ink); }
.nav__toggle:active { transform: translate(2px,2px); box-shadow: 0 0 0 var(--ink); }
/* submit button sized to match the toggle (40px tall, 2px stamp shadow) */
.nav__submit {
height: 40px; padding: 0 16px;
font-size: 13px; gap: 8px;
box-shadow: 2px 2px 0 var(--forest-ink);
}
.nav__submit:hover { transform: translate(2px,2px); box-shadow: 0 0 0 var(--forest-ink); }
.nav__submit:active { transform: translate(2px,2px); box-shadow: 0 0 0 var(--forest-ink); }
/* click-away scrim behind the popout */
.nav__scrim {
display: none;
position: fixed; inset: 0; z-index: 40;
background: transparent; border: 0; padding: 0; margin: 0; cursor: default;
}
/* popout menu panel */
.nav__menu {
display: none;
position: absolute; top: calc(100% + 8px); right: 28px; z-index: 60;
flex-direction: column;
width: min(260px, calc(100vw - 56px));
padding: 8px;
background: var(--paper);
border: 2px solid var(--ink);
box-shadow: var(--press);
}
.nav__menu-link {
font-family: var(--font-mono); font-size: 14px; letter-spacing: .02em;
padding: 11px 14px; color: var(--ink-soft);
transition: background .15s ease, color .15s ease;
}
.nav__menu-link:hover { color: var(--ink); background: color-mix(in srgb, var(--kraft) 60%, transparent); }
.nav__menu-link[data-active="true"] { color: var(--ink); background: var(--kraft); }
/* below ~1000px the eight inline links stop fitting — switch to the popout */
@media (max-width: 1000px){
.nav__links { display: none; }
.nav__toggle { display: inline-flex; }
.nav__menu { display: flex; }
.nav__scrim { display: block; }
}
/* tiny screens: drop the wordmark, keep the stamp badge */
@media (max-width: 400px){ .nav__brand-text { display: none; } }
/* dark section */
.on-dark { --bg: var(--forest-ink); background: var(--forest-ink); color: var(--paper); }
.on-dark h1, .on-dark h2, .on-dark h3 { color: var(--paper); }
.on-dark .eyebrow { color: rgba(244,238,225,.7); }
.on-dark .lede { color: rgba(244,238,225,.82); }
.on-dark .card { background: rgba(244,238,225,.05); border-color: rgba(244,238,225,.5);
box-shadow: 5px 5px 0 rgba(244,238,225,.18); color: var(--paper); }
/* generic grid helpers */
.grid { display: grid; gap: 20px; }
/* placeholder image block */
.ph {
position: relative; overflow: hidden; border-radius: 0;
background:
repeating-linear-gradient(135deg, var(--kraft) 0 10px, var(--kraft-deep) 10px 20px);
border: 2px solid var(--ink);
display: grid; place-items: center; color: var(--ink-soft);
}
.ph span { font-family: var(--font-mono); font-size: 11px; letter-spacing: .06em;
background: var(--paper); padding: 5px 10px; border-radius: 0; border: 2px solid var(--ink); }
.sr-only { position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0; }
/* ============ stamp ============ */
.stamp--spin svg.stamp__ring { transition: transform .9s cubic-bezier(.2,.7,.2,1); }
.stamp--spin:hover svg.stamp__ring { transform: rotate(28deg); }
/* ============ hero ============ */
.hero { position: relative; overflow: clip; padding: 64px 0 84px; }
.hero__grid { display: grid; grid-template-columns: 1.15fr .85fr; gap: 48px; align-items: center; }
.hero h1 { font-size: clamp(58px, 11vw, 150px); }
.hero__statline { display: flex; gap: 0; flex-wrap: wrap; border: 2px solid var(--ink);
border-radius: 0; overflow: hidden; width: fit-content; background: var(--paper);
box-shadow: 4px 4px 0 var(--ink); }
.hero__stat { padding: 11px 22px; border-right: 2px solid var(--ink); white-space: nowrap; }
.hero__stat:last-child { border-right: none; }
.hero__stat b { font-family: var(--font-display); font-stretch: 115%; font-size: 17px; display: block; white-space: nowrap; line-height: 1.15; }
.hero__stat span { font-family: var(--font-mono); font-size: 11px; letter-spacing: .04em; color: var(--ink-soft); line-height: 1.2; }
.hero__card {
position: relative; border: 2px solid var(--ink); border-radius: 0;
background: var(--kraft); padding: 28px; overflow: hidden;
box-shadow: 8px 8px 0 var(--ink);
}
@media (max-width: 900px){
.hero__grid { grid-template-columns: 1fr; gap: 32px; }
.hero h1 { font-size: clamp(54px, 17vw, 96px); }
}
/* ============ tracks ============ */
.tracks { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }
.track {
position: relative; overflow: hidden;
border: 2px solid var(--ink); border-radius: 0;
background: var(--paper); padding: 34px;
box-shadow: 6px 6px 0 var(--ink);
transition: transform .15s ease, box-shadow .15s ease;
}
.track:hover { transform: translate(-2px,-2px); box-shadow: 8px 8px 0 var(--ink); }
.track__glyph { width: 60px; height: 60px; border-radius: 0; display: grid; place-items: center;
border: 2px solid var(--ink); box-shadow: 3px 3px 0 var(--ink); margin-bottom: 22px; }
.track__ex { display: flex; flex-direction: column; gap: 0; margin-top: 22px; padding: 0; }
.track__ex li { list-style: none; padding: 11px 0; border-top: 1.5px dashed var(--line);
display: flex; align-items: center; gap: 11px; font-size: 15px; }
@media (max-width: 820px){ .tracks { grid-template-columns: 1fr; } }
/* ============ rules ============ */
.rules { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0;
border: 2px solid var(--ink); border-radius: 0; overflow: hidden; background: var(--paper);
box-shadow: 6px 6px 0 var(--ink); }
.rule { padding: 26px; border-right: 2px solid var(--ink); border-bottom: 2px solid var(--ink); }
.rule__n { font-family: var(--font-mono); font-size: 12px; color: var(--amber-deep); letter-spacing: .1em; }
.rule__check { width: 26px; height: 26px; border-radius: 50%; border: 2px solid var(--forest);
display: grid; place-items: center; color: var(--forest); margin-bottom: 14px; }
@media (max-width: 820px){ .rules { grid-template-columns: 1fr; } }
/* ============ prizes ============ */
.prize-tabs { display: flex; gap: 8px; flex-wrap: wrap; }
.podium { display: grid; grid-template-columns: repeat(2,1fr); gap: 20px; }
.podium__col { border: 2px solid var(--ink); border-radius: 0; overflow: hidden; background: var(--paper);
box-shadow: 6px 6px 0 var(--ink); }
.podium__head { padding: 18px 22px; color: #fff; display: flex; align-items: center; justify-content: space-between; }
.podium__body { padding: 20px 22px; }
.podium__body .sponsor-places { margin-top: 0; }
.prow { display: flex; align-items: center; justify-content: space-between; gap: 14px;
padding: 15px 22px; border-top: 1.5px dashed var(--line); }
.prow:first-child { border-top: none; }
.prow__place { font-family: var(--font-display); font-stretch: 112%; font-weight: 700; font-size: 17px; }
.prow__award { font-family: var(--font-mono); font-weight: 600; font-size: 15px; }
@media (max-width: 760px){ .podium { grid-template-columns: 1fr; } }
.sponsor-grid { display: grid; grid-template-columns: repeat(2,1fr); gap: 18px; grid-auto-rows: 1fr; }
.sponsor-grid > div { display: grid; }
.sponsor-card { position: relative; border: 2px solid var(--ink); border-radius: 0;
background: var(--paper); padding: 24px; overflow: hidden;
box-shadow: 6px 6px 0 var(--ink);
transition: transform .15s ease, box-shadow .15s ease; }
.sponsor-card:hover { transform: translate(-2px,-2px); box-shadow: 8px 8px 0 var(--ink); }
@media (max-width: 760px){ .sponsor-grid { grid-template-columns: 1fr; } }
/* sponsor placement list */
.sponsor-places { margin-top: 16px; display: grid; gap: 9px; }
.sponsor-place { display: flex; align-items: baseline; gap: 8px; }
.sponsor-place__rank { font-family: var(--font-display); font-stretch: 110%; font-weight: 700;
font-size: 15px; color: var(--ink); white-space: nowrap; }
.dotfill { flex: 1; border-bottom: 1.5px dotted var(--line); transform: translateY(-3px); min-width: 14px; }
/* expandable clarifications */
.clarify-toggle { display: inline-flex; align-items: center; gap: 7px; margin-top: 14px;
padding: 0; background: none; border: none; cursor: pointer;
font-family: var(--font-mono); font-size: 11.5px; letter-spacing: .08em; text-transform: uppercase;
color: var(--ink-soft); transition: color .16s ease; }
.clarify-toggle:hover { color: var(--ink); }
.clarify-toggle__chev { transform: rotate(90deg); transition: transform .22s ease; }
.clarify-toggle[data-on="true"] .clarify-toggle__chev { transform: rotate(-90deg); }
.clarify-body { max-height: 0; overflow: hidden; transition: max-height .3s ease; }
.clarify-body[data-open="true"] { max-height: 400px; }
.clarify-list { list-style: none; margin: 14px 0 0; padding: 14px 0 0; display: grid; gap: 11px;
border-top: 1.5px dashed var(--line); }
.clarify-list li { position: relative; padding-left: 18px; font-size: 13.5px; line-height: 1.5;
color: var(--ink-2); text-wrap: pretty; }
.clarify-dot { position: absolute; left: 0; top: 8px; width: 6px; height: 6px; border-radius: 50%; }
/* bonus badge grid */
.badge-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; grid-auto-rows: 1fr; }
.badge-grid > div { display: grid; }
@media (max-width: 700px){ .badge-grid { grid-template-columns: repeat(2,1fr); } }
@media (max-width: 460px){ .badge-grid { grid-template-columns: 1fr; } }
.bonus-card { border: 2px solid var(--ink); border-radius: 0; background: var(--paper);
padding: 20px; display: flex; flex-direction: column;
box-shadow: 4px 4px 0 var(--ink);
transition: transform .15s ease, box-shadow .15s ease; }
.bonus-card:hover { transform: translate(-2px,-2px); box-shadow: 6px 6px 0 var(--ink); }
.bonus-card__top { display: flex; justify-content: space-between; align-items: center; gap: 12px; }
.bonus-card__blurb { margin: 8px 0 0; font-size: 14px; line-height: 1.5; color: var(--ink-2); text-wrap: pretty; }
.bonus-card__note { margin: 14px 0 0; padding: 14px 0 0; border-top: 1.5px dashed var(--line);
font-size: 13.5px; line-height: 1.55; color: var(--ink-2); text-wrap: pretty; }
.flip__name { font-family: var(--font-display); font-stretch: 110%; font-weight: 700; font-size: 16px; }
/* ============ recommender — pressed cards ============ */
/* container is no longer a frame — just a stack */
.rec { background: transparent; border: none; box-shadow: none; }
/* picker — five separated pressed cards */
.rec__needs { display: grid; grid-template-columns: repeat(5, 1fr); gap: 14px; }
.rec__need {
position: relative;
display: flex; flex-direction: column;
min-height: 158px;
padding: 20px 16px 18px;
border: 2px solid var(--ink);
background: var(--paper);
box-shadow: 5px 5px 0 var(--ink);
text-align: left; cursor: pointer; color: var(--ink);
transition: transform .1s ease, box-shadow .1s ease, background .12s ease;
}
.rec__need:hover { transform: translate(2px,2px); box-shadow: 3px 3px 0 var(--ink); }
/* number → top-right corner stamp */
.rec__need .coord { position: absolute; top: 14px; right: 14px; }
/* glyph plate → square, top; margin-bottom:auto bottom-aligns the label */
.rec__needglyph {
width: 46px; height: 46px;
border: 2px solid var(--ink); border-radius: 0;
background: var(--kraft);
display: grid; place-items: center;
margin: 0 0 auto; opacity: 1;
}
.rec__need > .display { margin-top: 18px; line-height: 1.12; }
/* SELECTED — forest fill, amber plate, pressed flush into its shadow */
.rec__need[data-on="true"] {
background: var(--forest); color: #fff; border-color: var(--forest-ink);
transform: translate(5px,5px);
box-shadow: 0 0 0 var(--forest-ink);
}
.rec__need[data-on="true"] .coord { color: rgba(255,255,255,.7); }
.rec__need[data-on="true"] .rec__needglyph { background: var(--amber); border-color: var(--forest-ink); color: var(--ink); }
/* result panel — now its own framed card below the picker */
.rec__result {
margin-top: 26px;
padding: 24px;
border: 2px solid var(--ink); border-radius: 0;
box-shadow: 6px 6px 0 var(--ink);
background: var(--kraft);
}
.rec__resulthead { display: flex; align-items: center; gap: 12px; margin-bottom: 4px; flex-wrap: wrap; }
.rec__resulttitle { font-size: 18px; font-stretch: 106%; font-weight: 700; }
.rec__resultlede { color: var(--ink-soft); margin: 0 0 4px; font-size: 14px; }
/* result match rows — fixed logo rail so names align */
.rec__match { display: grid; grid-template-columns: 168px 1fr auto; align-items: center; gap: 18px;
padding: 16px 0; border-top: 1.5px dashed var(--kraft-deep); }
.rec__match:first-child { border-top: none; }
.rec__match .partner-logo { width: 100%; height: 40px; margin: 0; }
.rec__matchmeta { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.rec__matchname { font-size: 16.5px; font-stretch: 106%; font-weight: 700; }
.rec__matchwhy { margin: 3px 0 0; color: var(--ink-2); font-size: 14px; text-wrap: pretty; }
/* below the 5-up grid → one horizontal scroll strip so the result stays
visible alongside the picker (avoids tall multi-row full-size cards) */
@media (max-width: 820px){
.rec__needs {
grid-template-columns: none;
display: flex; flex-wrap: nowrap; overflow-x: auto;
gap: 10px; padding-bottom: 8px;
scroll-snap-type: x proximity;
-webkit-overflow-scrolling: touch;
}
.rec__need {
flex: 0 0 auto; scroll-snap-align: start;
flex-direction: row; align-items: center; gap: 10px;
min-height: 0; padding: 11px 14px; white-space: nowrap;
box-shadow: 3px 3px 0 var(--ink);
}
.rec__need:hover { transform: none; box-shadow: 3px 3px 0 var(--ink); }
.rec__need[data-on="true"] { transform: translate(3px,3px); box-shadow: 0 0 0 var(--forest-ink); }
.rec__needglyph { width: 32px; height: 32px; margin: 0; flex: none; }
.rec__need > .display { margin-top: 0; font-size: 15px; }
.rec__need .coord { display: none; } /* drop the number to keep chips tight */
}
@media (max-width: 560px){
.rec__match { grid-template-columns: 1fr auto; }
.rec__match .partner-logo { grid-column: 1 / -1; width: fit-content; }
.rec__result { margin-top: 18px; padding: 18px; }
}
/* ============ partners overview ============ */
.partner-grid { display: grid; grid-template-columns: repeat(4,1fr); gap: 16px; }
.partner-card { border: 2px solid var(--ink); border-radius: 0; background: var(--paper);
padding: 22px; box-shadow: 6px 6px 0 var(--ink);
transition: transform .15s ease, box-shadow .15s ease; display: block; }
.partner-card:hover { transform: translate(-2px,-2px); box-shadow: 8px 8px 0 var(--ink); }
.partner-logo { height: 38px; border-radius: 0; display: inline-flex; align-items: center; justify-content: center;
padding: 7px 12px; background: #fff; border: 2px solid var(--ink); width: fit-content; }
.partner-logo img { max-height: 100%; max-width: 100%; width: auto; object-fit: contain; display: block; }
.partner-logo--sm { height: 30px; padding: 5px 10px; }
/* OpenAI wordmark has a descending “p” — nudge down so the caps optically centre */
.partner-logo img[src*="openai"],
.plogo img[src*="openai"] { transform: translateY(8%); }
/* Cohere lockup reads heavier/larger than the others — shrink for even visual weight */
.partner-logo img[src*="cohere"],
.plogo img[src*="cohere"] { max-height: 74%; }
@media (max-width: 900px){ .partner-grid { grid-template-columns: repeat(2,1fr); } }
@media (max-width: 480px){ .partner-grid { grid-template-columns: 1fr; } }
/* ============ submit trail (KEEP round dots + dashed connector) ============ */
.trail { position: relative; display: grid; gap: 0; }
.trail__step { display: grid; grid-template-columns: 56px 1fr; gap: 22px; padding: 0 0 34px; position: relative; }
.trail__dot { width: 56px; height: 56px; border-radius: 50%; border: 2px solid var(--ink); background: var(--paper);
display: grid; place-items: center; font-family: var(--font-display); font-weight: 800; font-size: 20px; z-index: 2; }
.trail__step::before { content: ""; position: absolute; left: 27px; top: 56px; bottom: -4px; width: 0;
border-left: 2.5px dashed var(--line); }
.trail__step:last-child::before { display: none; }
/* ============ faq ============ */
.faq-item { border-top: 2px solid var(--ink); }
.faq-item:last-child { border-bottom: 2px solid var(--ink); }
.faq-q { display: flex; align-items: center; justify-content: space-between; gap: 20px; width: 100%;
background: transparent; border: 0; cursor: pointer; padding: 24px 4px; text-align: left;
font-family: var(--font-display); font-stretch: 106%; font-weight: 600; font-size: clamp(18px,2.2vw,22px); color: var(--ink); }
.faq-plus { flex: none; width: 32px; height: 32px; border-radius: 0; border: 2px solid var(--ink);
background: var(--paper); box-shadow: 2px 2px 0 var(--ink); color: var(--ink);
display: grid; place-items: center;
transition: transform .15s ease, box-shadow .15s ease, background .2s ease, color .2s ease; }
.faq-plus svg { transition: transform .25s ease; }
.faq-q:hover .faq-plus { transform: translate(1px,1px); box-shadow: 1px 1px 0 var(--ink); }
.faq-q[aria-expanded="true"] .faq-plus { background: var(--amber); color: var(--ink);
transform: translate(1px,1px); box-shadow: 1px 1px 0 var(--ink); }
.faq-q[aria-expanded="true"] .faq-plus svg { transform: rotate(45deg); }
.faq-a { overflow: hidden; max-height: 0; transition: max-height .35s ease; }
.faq-a__inner { padding: 0 4px 26px; max-width: 70ch; color: var(--ink-2); font-size: 16.5px; }
/* ============ footer ============ */
.footer { background: var(--ink); color: var(--paper); padding: 72px 0 40px; position: relative; overflow: clip; }
.footer a:hover { color: var(--amber); }
/* keyframes */
@keyframes floaty { 0%,100%{ transform: translateY(0); } 50%{ transform: translateY(-7px); } }
.floaty { animation: floaty 6s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce){ .floaty { animation: none; } }
/* ============================================================
partner-page template styles — themed per partner via --paccent
============================================================ */
/* ---- top bar / breadcrumb ---- */
.pbar { position: sticky; top: 0; z-index: 50;
background: color-mix(in srgb, var(--bg) 84%, transparent);
backdrop-filter: blur(12px) saturate(140%);
border-bottom: 2px solid var(--ink); }
.pbar__inner { display: flex; align-items: center; gap: 14px; height: 60px; }
.crumb { font-family: var(--font-mono); font-size: 12.5px; color: var(--ink-soft);
display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.crumb a:hover { color: var(--ink); }
.crumb b { color: var(--ink); font-weight: 600; }
.crumb__sep { color: var(--ink-faint); }
/* ---- header ---- */
.phead { position: relative; overflow: clip; padding: 56px 0 48px;
border-bottom: 2px solid var(--ink);
background:
linear-gradient(180deg, color-mix(in srgb, var(--paccent) 9%, var(--bg)) 0%, var(--bg) 78%); }
.phead__grid { display: grid; grid-template-columns: 1fr auto; gap: 36px; align-items: center; }
.plogo { display: inline-flex; align-items: center; justify-content: center; height: 52px;
padding: 10px 18px; background: #fff; border: 2px solid var(--ink); border-radius: 0;
width: fit-content; box-shadow: 3px 3px 0 var(--ink); }
.plogo img { max-height: 100%; max-width: 220px; width: auto; object-fit: contain; display: block; }
.psize-chip { font-family: var(--font-mono); font-size: 12px; letter-spacing: .04em;
border: 2px solid var(--ink); color: var(--paccent); padding: 6px 13px;
border-radius: 0; box-shadow: 2px 2px 0 var(--ink);
display: inline-flex; align-items: center; gap: 7px; white-space: nowrap; }
@media (max-width: 760px){ .phead__grid { grid-template-columns: 1fr; } }
/* ---- model / capability cards ---- */
.pcards { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px,1fr)); gap: 18px; }
.pcard { border: 2px solid var(--ink); border-radius: 0; background: var(--paper);
padding: 22px; box-shadow: 5px 5px 0 var(--ink);
transition: transform .15s ease, box-shadow .15s ease; }
.pcard:hover { transform: translate(-2px,-2px); box-shadow: 7px 7px 0 var(--ink); }
.pcard__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.pcard__name { font-family: var(--font-display); font-weight: 700; font-stretch: 108%; font-size: 21px; }
.tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; padding: 0; }
.tag { font-family: var(--font-mono); font-size: 11px; letter-spacing: .02em;
background: color-mix(in srgb, var(--paccent) 12%, transparent);
color: color-mix(in srgb, var(--paccent) 75%, var(--ink));
padding: 4px 9px; border-radius: 0; list-style: none; }
/* size-vs-cap bar (under-32B story) */
.sizebar { margin-top: 16px; }
.sizebar__track { height: 8px; border-radius: 0; background: var(--kraft);
border: 2px solid var(--ink); overflow: hidden; }
.sizebar__fill { height: 100%; background: var(--paccent); border-radius: 0; }
.sizebar__lbl { display: flex; justify-content: space-between; margin-top: 7px;
font-family: var(--font-mono); font-size: 11px; color: var(--ink-soft); }
/* capability card (infra) — colored plate gets a stamp */
.capglyph { width: 46px; height: 46px; border-radius: 0; display: grid; place-items: center;
background: var(--paccent); color: #fff; margin-bottom: 16px; box-shadow: 3px 3px 0 var(--ink); }
/* ---- selection guide table ---- */
.guide { border: 2px solid var(--ink); border-radius: 0; overflow: hidden; background: var(--paper); }
.guide__row { display: grid; grid-template-columns: 1fr auto 1fr; gap: 20px; align-items: center;
padding: 20px 26px; border-top: 1.5px dashed var(--line); }
.guide__row:first-child { border-top: none; }
.guide__want { font-size: 16.5px; color: var(--ink-2); }
.guide__want b { font-family: var(--font-display); color: var(--ink); font-weight: 600; }
.guide__arrow { color: var(--paccent); display: grid; place-items: center; }
.guide__use { text-align: right; }
.guide__use b { font-family: var(--font-display); font-stretch: 106%; font-weight: 700; font-size: 18px;
color: var(--paccent); display: block; }
@media (max-width: 680px){
.guide__row { grid-template-columns: 1fr; gap: 8px; text-align: left; padding: 18px 20px; }
.guide__use { text-align: left; } .guide__arrow { display: none; }
}
/* ---- resources ---- */
.reslist { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px,1fr)); gap: 12px; }
.resitem { display: flex; align-items: center; gap: 14px; padding: 16px 18px;
border: 2px solid var(--ink); border-radius: 0; background: var(--paper);
box-shadow: 2px 2px 0 var(--ink);
transition: transform .15s ease, box-shadow .15s ease; }
.resitem:hover { transform: translate(1px,1px); box-shadow: 1px 1px 0 var(--ink); }
.resitem__glyph { width: 38px; height: 38px; border-radius: 0; flex: none; display: grid; place-items: center;
border: 2px solid var(--ink); color: var(--paccent); }
.resitem__arrow { margin-left: auto; color: var(--ink-faint); }
/* starter space callout (keep the dashed paccent frame — it's a callout, not a control) */
.starter { display: flex; align-items: center; gap: 20px; padding: 24px 26px;
border: 2px dashed var(--paccent); border-radius: 0; background: color-mix(in srgb, var(--paccent) 6%, var(--paper)); }
/* ---- prize callout ---- */
.pprize { display: grid; grid-template-columns: auto 1fr auto; gap: 28px; align-items: center;
border: 2px solid var(--ink); border-radius: 0; padding: 30px 32px;
box-shadow: 6px 6px 0 var(--ink);
background: var(--kraft); position: relative; overflow: hidden; }
@media (max-width: 720px){ .pprize { grid-template-columns: 1fr; text-align: center; justify-items: center; } }
/* ---- support ---- */
.support { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px,1fr)); gap: 14px; }
.supitem { display: flex; align-items: center; gap: 15px; padding: 20px;
border: 2px solid var(--ink); border-radius: 0; background: var(--paper); }
.supitem__glyph { width: 44px; height: 44px; border-radius: 0; flex: none; display: grid; place-items: center;
background: var(--paccent); color: #fff; box-shadow: 3px 3px 0 var(--ink); }
.supitem__handle { font-family: var(--font-mono); font-size: 13px; color: var(--ink-soft); }
.section-label { display: flex; align-items: baseline; gap: 14px; margin-bottom: 28px; }
@media (max-width: 760px){ .starter { flex-direction: column; align-items: flex-start; } }