labs / static /css /faq.css
3v324v23's picture
deploy: unified router + dreamy website (2026-06-16T09:46:52Z)
c1a683f
Raw
History Blame Contribute Delete
8.86 kB
/* =========================================================================
faq.css — dreamy help center
Frosted accordion panels, rose search bar, category pills — all built on
the site's token system (no new colors/fonts invented here).
========================================================================= */
/* --- hero ------------------------------------------------------------- */
.faq-hero {
padding-top: clamp(7rem, 16vw, 9rem); /* clear the fixed nav */
padding-bottom: clamp(1.5rem, 4vw, 2.5rem);
text-align: center;
}
.faq-hero h1 {
font-size: var(--step-hero); /* fluid display size */
margin-bottom: 0.6rem;
}
.faq-hero p {
max-width: 52ch; /* readable measure */
margin-inline: auto;
color: var(--ink-soft);
font-size: 1.1rem;
}
/* --- search bar ------------------------------------------------------- */
.faq-search { /* the search wrapper */
max-width: 560px;
margin: 0 auto clamp(1.5rem, 4vw, 2rem);
position: relative; /* anchor the icon */
}
.faq-search input { /* the input field */
width: 100%;
min-height: 56px; /* generous touch target */
padding: 0.9rem 1.2rem 0.9rem 3rem; /* room for the icon */
font-family: var(--font-body);
font-size: 1.05rem;
color: var(--ink);
background: var(--panel); /* frosted cloud card */
border: 1.5px solid var(--panel-border);
border-radius: var(--radius-pill); /* pill shape */
box-shadow: 0 12px 30px rgba(157, 170, 242, 0.16);
transition: border-color var(--dur-fast) var(--ease-gentle),
box-shadow var(--dur-fast) var(--ease-gentle);
-webkit-appearance: none; /* no iOS inner shadow */
appearance: none;
}
.faq-search input::placeholder { color: var(--ink-soft); opacity: 0.8; }
.faq-search input:focus { /* focus ring, no glow */
outline: none;
border-color: var(--rose);
box-shadow: 0 12px 30px rgba(255, 143, 171, 0.22);
}
.faq-search input:focus-visible { /* keyboard a11y ring */
outline: 2.5px solid var(--rose);
outline-offset: 2px;
}
.faq-search .search-icon { /* magnifier glyph */
position: absolute;
left: 1.15rem;
top: 50%;
transform: translateY(-50%);
color: var(--rose);
pointer-events: none;
}
/* --- category pills --------------------------------------------------- */
.faq-cats { /* the filter row */
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 0.6rem;
margin-bottom: clamp(2rem, 5vw, 3rem);
}
.faq-cat { /* one pill button */
font-family: var(--font-body);
font-size: 0.95rem;
font-weight: 700;
color: var(--ink-soft);
background: var(--panel);
border: 1.5px solid var(--panel-border);
border-radius: var(--radius-pill);
padding: 0.55rem 1.2rem; /* tappable area */
min-height: 42px; /* touch target */
cursor: pointer;
transition: all var(--dur-fast) var(--ease-gentle);
display: inline-flex;
align-items: center;
gap: 0.4rem;
}
.faq-cat:hover { /* hover lift */
border-color: var(--rose);
color: var(--rose-deep);
transform: translateY(-1px);
}
.faq-cat:focus-visible { /* keyboard ring */
outline: 2.5px solid var(--rose);
outline-offset: 2px;
}
.faq-cat .count { /* the (n) badge */
font-size: 0.78rem;
opacity: 0.7;
font-weight: 600;
}
.faq-cat[aria-pressed="true"] { /* active selected pill */
background: var(--rose);
border-color: var(--rose);
color: #fff;
box-shadow: 0 8px 20px -6px rgba(255, 143, 171, 0.55);
}
.faq-cat[aria-pressed="true"] .count { opacity: 0.9; }
/* --- accordion -------------------------------------------------------- */
.faq-list { /* the accordion list */
max-width: 820px;
margin: 0 auto clamp(3rem, 8vw, 5rem);
display: flex;
flex-direction: column;
gap: 0.8rem;
}
.faq-item { /* one Q/A card */
background: var(--panel); /* frosted cloud */
border: 1.5px solid var(--panel-border);
border-radius: var(--radius-card);
overflow: hidden; /* clip the expanding ans */
box-shadow: 0 8px 24px rgba(157, 170, 242, 0.10);
transition: box-shadow var(--dur-fast) var(--ease-gentle),
border-color var(--dur-fast) var(--ease-gentle);
}
.faq-item:hover { /* gentle hover */
box-shadow: 0 12px 30px rgba(157, 170, 242, 0.16);
border-color: rgba(255, 143, 171, 0.35);
}
.faq-q { /* the question header */
width: 100%;
display: flex;
align-items: center;
gap: 0.9rem;
padding: 1.1rem 1.4rem;
font-family: var(--font-body);
font-size: 1.08rem;
font-weight: 700;
color: var(--ink);
text-align: left;
background: none;
border: none;
cursor: pointer;
min-height: 44px; /* touch target */
}
.faq-q:focus-visible { /* keyboard ring */
outline: 2.5px solid var(--rose);
outline-offset: -3px;
border-radius: 6px;
}
.faq-q .q-tag { /* category mini-badge */
flex: none;
font-size: 0.7rem;
font-weight: 700;
letter-spacing: 0.04em;
text-transform: uppercase;
color: var(--rose-deep);
background: rgba(255, 143, 171, 0.14);
border-radius: var(--radius-pill);
padding: 0.18rem 0.6rem;
}
.faq-q .q-text { flex: 1; } /* the question copy */
.faq-q .chevron { /* expand/collapse icon */
flex: none;
color: var(--rose);
transition: transform var(--dur-fast) var(--ease-spring);
}
.faq-item[data-open="true"] .chevron { /* rotate when open */
transform: rotate(180deg);
}
/* answer panel: grid-template-rows animates 0fr→1fr smoothly */
.faq-a-wrap {
display: grid;
grid-template-rows: 0fr; /* collapsed by default */
transition: grid-template-rows var(--dur-slow) var(--ease-soft);
}
.faq-item[data-open="true"] .faq-a-wrap {
grid-template-rows: 1fr; /* expand */
}
.faq-a { /* answer inner scroller */
overflow: hidden; /* required by grid trick */
min-height: 0;
}
.faq-a-inner { /* answer content pad */
padding: 0 1.4rem 1.2rem;
color: var(--ink);
opacity: 0; /* fade in with expand */
transform: translateY(-4px);
transition: opacity var(--dur-slow) var(--ease-soft),
transform var(--dur-slow) var(--ease-soft);
}
.faq-item[data-open="true"] .faq-a-inner {
opacity: 1;
transform: translateY(0);
}
.faq-a-inner p { margin: 0 0 0.6rem; max-width: none; }
.faq-a-inner p:last-child { margin-bottom: 0; }
.faq-a-inner code { /* inline endpoint pill */
font-family: var(--font-mono, 'JetBrains Mono', monospace);
font-size: 0.85em;
background: rgba(157, 170, 242, 0.14);
color: var(--rose-deep);
padding: 0.1em 0.45em;
border-radius: 6px;
}
.faq-a-inner a { color: var(--rose-deep); font-weight: 700; }
/* --- empty state (no results) ----------------------------------------- */
.faq-empty { /* shown when search empty */
text-align: center;
padding: 2.5rem 1rem;
color: var(--ink-soft);
}
.faq-empty .emoji { font-size: 2.5rem; display: block; margin-bottom: 0.5rem; }
/* --- footer CTA ------------------------------------------------------- */
.faq-cta { /* "still have questions" */
max-width: 720px;
margin: 0 auto clamp(4rem, 10vw, 6rem);
text-align: center;
background: var(--panel);
border: 1.5px solid var(--panel-border);
border-radius: var(--radius-card);
padding: clamp(2rem, 5vw, 3rem);
box-shadow: 0 14px 36px rgba(157, 170, 242, 0.16);
}
.faq-cta h2 { font-size: var(--step-h3); margin-bottom: 0.6rem; }
.faq-cta p { color: var(--ink-soft); margin-bottom: 1.5rem; }
/* hide items filtered out by search or category */
.faq-item[data-hidden="true"] { display: none; }
/* reduced motion: skip the accordion slide */
@media (prefers-reduced-motion: reduce) {
.faq-a-wrap, .faq-a-inner, .faq-q .chevron { transition: none; }
}