2026-10-25 23:29:40 +00:00
/* Hallmark · shape: Split Hero With Floating Search · genre: editorial · theme: custom (by request: the user's own reference screenshot) · job: sign up · idea: "a marriage site that opens like a wedding morning: warm paper, a serif that speaks plainly, and every demo a visitor can touch" · vibe: "warm cream, navy ink, quietly lively"
* paper: oklch(98.4% 0.012 85) · accent: oklch(56% 0.15 38) · display: DM Serif Display · body: Figtree · hero: text left, the couple's photo bleeding off the right edge, a search bar floating across its foot · nav: edge-aligned · footer: letter close · imagery: photographs, user's own 1, library 1, natural · signature: the floating search bar that drives the Australia map and the scored matches
* axes: light/roman-serif/warm · posture: restrained · contrast: pass · fold: pass · v2.0.0 */
/* Hallmark · pre-emit critique: P4 H4 E4 S4 R3 V3 · weakest: R, the page now holds a lot of motion; cut every loop and kept only one-time entrances, hover lifts and state changes */
/* Hallmark · waive 65 · the user's own reference screenshot pins cream paper, a high-contrast serif and a terracotta accent for BeingOne · the look is the client's brief, not a model default */
/* Hallmark · waive 38ii · guard: true italic of the display face is loaded, font-synthesis none, one line of one h1 only · the closing line of the hero head mirrors the BeingOne reference the user supplied */
/* Hallmark · waive 38iii · one italic closing line of the hero head, once on the page · it mirrors the BeingOne reference the user supplied */
/* Hallmark · dismissed 59 · the path strip under the search bar is one row of five links that shows how the visitor moves through BeingOne, so it is wayfinding and not a content section */
/* Hallmark · dismissed F7 · the pill radius sits on controls only: nav links, choice chips, map pins and their ping ring are all pressed to act */
2026-10-23 08:13:06 +00:00
@ import url ( "./tokens.css" ) ;
@ import url ( "./base.css" ) ;
: root {
2026-10-25 23:29:40 +00:00
--color-navy-3 : oklch ( 20 % 0.06 255 );
--color-accent-on-dark : oklch ( 70 % 0.14 38 );
--nav-h : 76 px ;
--color-rule-on-navy : oklch ( 44 % 0.05 255 );
2026-10-23 08:13:06 +00:00
}
2026-10-25 23:29:40 +00:00
/* type */
h1 , h2 { font-weight : 400 ; letter-spacing : var ( -- tracking - display ); }
h1 { max-width : none ; font-size : clamp ( 3.25 rem , 6.4 vw , 6 rem ); line-height : 1 ; }
h2 { max-width : 22 ch ; font-size : clamp ( 2.25 rem , 3.6 vw , 3.5 rem ); line-height : 1.04 ; }
h3 { max-width : 40 ch ; font-weight : 400 ; font-size : var ( -- text - title ); line-height : 1.2 ; letter-spacing : -0.01 em ; }
. lead { font-size : var ( -- text - lead ); line-height : 1.45 ; max-width : 46 ch ; color : var ( -- color - ink -2 ); }
. label { font-size : var ( -- text - sm ); font-weight : 700 ; color : var ( -- color - muted ); }
. muted { color : var ( -- color - muted ); }
body { font-weight : 500 ; }
/* local dark surfaces: components keep using the same tokens */
. on-dark { --color-ink : var ( -- color - on - navy ); --color-ink-2 : var ( -- color - on - navy ); --color-muted : var ( -- color - on - navy - muted ); --color-paper-2 : var ( -- color - navy -2 ); --color-paper-3 : var ( -- color - navy -3 ); --color-rule : var ( -- color - rule - on - navy ); --color-card : var ( -- color - navy -2 ); --color-card-ink : var ( -- color - on - navy ); background : var ( -- color - navy ); color : var ( -- color - on - navy ); }
/* frame */
2026-10-23 08:13:06 +00:00
. skip { position : absolute ; left : var ( -- space - md ); top : calc ( -1 * var ( -- space -3 xl )); z-index : var ( -- z - toast ); padding : var ( -- space - xs ) var ( -- space - md ); background : var ( -- color - card ); color : var ( -- color - card - ink ); border-radius : var ( -- radius - control ); font-weight : 700 ; }
. skip : focus-visible { top : var ( -- space - md ); }
. grid { display : grid ; grid-template-columns : repeat ( 12 , minmax ( 0 , 1 fr )); column-gap : var ( -- gap - columns ); }
. sec { padding-block : var ( -- space -3 xl ); }
. sec--tall { padding-block : var ( -- space -4 xl ); }
2026-10-25 23:29:40 +00:00
. band { background : var ( -- color - paper -2 ); padding-block : var ( -- section - gap - s ); }
. band--navy { background : var ( -- color - navy ); color : var ( -- color - on - navy ); padding-block : var ( -- section - gap - s ); }
2026-10-23 08:13:06 +00:00
. head { display : grid ; gap : var ( -- space - md ); align-content : start ; }
. icon { width : 24 px ; height : 24 px ; flex-shrink : 0 ; fill : none ; stroke : currentColor ; stroke-width : 2 ; stroke-linecap : round ; stroke-linejoin : round ; }
. icon--sm { width : 20 px ; height : 20 px ; }
2026-10-25 23:29:40 +00:00
. fill { padding : 0 0.25 em ; border : 1 px dashed color-mix ( in oklch , var ( -- color - muted ) 70 % , transparent ); border-radius : 3 px ; color : var ( -- color - muted ); -webkit- box-decoration-break : clone ; box-decoration-break : clone ; }
2026-10-23 08:13:06 +00:00
/* nav: edge-aligned */
2026-10-25 23:29:40 +00:00
. nav { position : sticky ; top : 0 ; z-index : var ( -- z - sticky - nav ); height : var ( -- nav - h ); background : var ( -- color - paper ); border-bottom : var ( -- rule - hair ) solid var ( -- color - rule ); }
. nav__bar { height : 100 % ; display : flex ; align-items : center ; justify-content : space-between ; gap : var ( -- space - lg ); }
. wordmark { display : inline-flex ; align-items : center ; gap : var ( -- space - xs ); font : 400 var ( -- text -2 xl ) / 1 var ( -- font - display ); letter-spacing : -0.01 em ; text-decoration : none ; color : var ( -- color - ink ); }
. wordmark b { font-weight : 400 ; color : var ( -- color - accent ); }
. mark { width : 34 px ; height : 34 px ; fill : none ; stroke : var ( -- color - accent ); stroke-width : 2.5 ; transition : transform var ( -- dur - long ) var ( -- ease-out ); }
. wordmark : hover . mark { transform : rotate ( -18 deg ); }
2026-10-23 08:13:06 +00:00
. nav__links { display : flex ; align-items : center ; gap : var ( -- space - xs ); }
2026-10-25 23:29:40 +00:00
. nav__links a { padding : var ( -- space - xs ) var ( -- space - md ); border-radius : var ( -- radius - pill ); text-decoration : none ; font-weight : 700 ; white-space : nowrap ; transition : background-color var ( -- dur - short ) var ( -- ease-out ); }
. nav__links a : hover { background : var ( -- color - paper -2 ); }
. nav__actions { display : flex ; align-items : center ; gap : var ( -- space - md ); }
. nav__signin { white-space : nowrap ; font-weight : 700 ; color : var ( -- color - accent ); text-decoration : none ; padding : var ( -- space - xs ); }
. nav__signin : hover { text-decoration : underline ; text-decoration-thickness : 2 px ; }
. nav__actions . nav__menu { display : none ; }
. nav__links . only-sm { display : none ; }
@ media ( max-width : 68rem ) {
. nav__actions . nav__menu { display : inline-flex ; }
. nav__links { position : absolute ; top : var ( -- nav - h ); left : 0 ; right : 0 ; flex-direction : column ; align-items : stretch ; gap : 0 ; padding : var ( -- space - md ) var ( -- gutter ); background : var ( -- color - paper ); border-bottom : var ( -- rule - hair ) solid var ( -- color - rule ); display : none ; }
. nav__links . is-open { display : flex ; }
. nav__links a { padding : var ( -- space - md ) 0 ; border-radius : 0 ; border-top : var ( -- rule - hair ) solid var ( -- color - rule ); }
. nav__links a : first-child { border-top : 0 ; }
}
@ media ( max-width : 40rem ) { . nav__signin { display : none ; } . nav__links . only-sm { display : block ; } . nav__actions { gap : var ( -- space - xs ); } }
2026-10-23 08:13:06 +00:00
/* controls */
2026-10-25 23:29:40 +00:00
. btn { display : inline-flex ; align-items : center ; justify-content : center ; gap : var ( -- space - xs ); min-height : 52 px ; padding : 0 var ( -- space - lg ); border : var ( -- rule - bar ) solid var ( -- color - ink ); border-radius : var ( -- radius - control ); background : transparent ; color : var ( -- color - ink ); font : 700 var ( -- text - md ) / 1.25 var ( -- font - body ); text-decoration : none ; white-space : nowrap ; cursor : pointer ; transition : transform var ( -- dur - short ) var ( -- ease-out ), background-color var ( -- dur - short ) var ( -- ease-out ), color var ( -- dur - short ) var ( -- ease-out ), border-color var ( -- dur - short ) var ( -- ease-out ), box-shadow var ( -- dur - short ) var ( -- ease-out ); }
2026-10-23 08:13:06 +00:00
. btn : hover { background : var ( -- color - paper -3 ); }
. btn : active { transform : translateY ( 1 px ); }
. btn--sm { min-height : 44 px ; padding : 0 var ( -- space - md ); font-size : var ( -- text - sm ); }
2026-10-25 23:29:40 +00:00
. btn--primary { background : var ( -- color - accent ); border-color : var ( -- color - accent ); color : var ( -- color - accent - ink ); box-shadow : 0 14 px 24 px -14 px color-mix ( in oklab , var ( -- color - accent ) 80 % , transparent ); }
. btn--primary : hover { background : var ( -- color - accent -2 ); border-color : var ( -- color - accent -2 ); transform : translateY ( -2 px ); }
. btn--primary : active { transform : translateY ( 1 px ); }
. btn . icon { width : 20 px ; height : 20 px ; transition : transform var ( -- dur - short ) var ( -- ease-out ); }
. btn : hover . icon { transform : translateX ( 4 px ); }
2026-10-23 08:13:06 +00:00
. btn : disabled , . btn [ aria-disabled = "true" ] { opacity : 0.55 ; cursor : not-allowed ; transform : none ; }
. btn [ aria-busy = "true" ] { cursor : progress ; }
2026-10-25 23:29:40 +00:00
. btn [ aria-pressed = "true" ] { background : var ( -- color - paper -3 ); box-shadow : inset 0 0 0 2 px var ( -- color - ink ); }
. on-dark . btn--primary { color : var ( -- color - accent - ink ); }
. on-dark . btn--primary : hover { background : var ( -- color - accent -2 ); }
2026-10-23 08:13:06 +00:00
. choices { position : relative ; display : flex ; flex-wrap : wrap ; gap : var ( -- space - xs ); border : 0 ; margin : 0 ; padding : 0 ; min-width : 0 ; }
. choices legend { padding : 0 ; margin-bottom : var ( -- space - sm ); font-size : var ( -- text - sm ); font-weight : 700 ; color : var ( -- color - muted ); }
. choices input { position : absolute ; opacity : 0 ; width : 1 px ; height : 1 px ; }
2026-10-25 23:29:40 +00:00
. choices label { display : inline-flex ; align-items : center ; min-height : 44 px ; padding : 0 var ( -- space - md ); border : var ( -- rule - bar ) solid var ( -- color - rule ); border-radius : var ( -- radius - pill ); background : var ( -- color - card ); font-weight : 700 ; font-size : var ( -- text - sm ); cursor : pointer ; transition : transform var ( -- dur - short ) var ( -- ease-out ), background-color var ( -- dur - short ) var ( -- ease-out ), color var ( -- dur - short ) var ( -- ease-out ), border-color var ( -- dur - short ) var ( -- ease-out ); }
. choices label : hover { border-color : var ( -- color - ink ); }
. choices label : active { transform : translateY ( 1 px ); }
. choices input : checked + label { background : var ( -- color - ink ); border-color : var ( -- color - ink ); color : var ( -- color - paper ); }
. on-dark . choices input : checked + label { color : var ( -- color - navy ); }
. choices input : focus-visible + label { outline : 2 px solid var ( -- color - focus ); outline-offset : 3 px ; }
2026-10-23 08:13:06 +00:00
. choices--stack { flex-direction : column ; flex-wrap : nowrap ; }
. choices--stack label { border-radius : var ( -- radius - control ); width : 100 % ; }
. field { display : grid ; gap : var ( -- space - xs ); }
. field label { font-size : var ( -- text - sm ); font-weight : 700 ; }
2026-10-25 23:29:40 +00:00
. field input : not ([ type = "range" ]), . field select , . chat__form input { width : 100 % ; min-height : 52 px ; padding : 0 var ( -- space - md ); border : var ( -- rule - bar ) solid var ( -- color - muted ); border-radius : var ( -- radius - control ); background : var ( -- color - card ); color : var ( -- color - card - ink ); outline : 2 px solid transparent ; outline-offset : -3 px ; transition : border-color var ( -- dur - short ) var ( -- ease-out ); }
. field input : not ([ type = "range" ]) : hover , . field select : hover { border-color : var ( -- color - ink ); }
. field input : not ([ type = "range" ]) : focus-visible , . field select : focus-visible , . chat__form input : focus-visible { outline-color : var ( -- color - focus ); border-color : var ( -- color - focus ); }
2026-10-23 08:13:06 +00:00
. field input [ aria-invalid ] { border-color : var ( -- color - error ); }
. field input [ type = "range" ] { width : 100 % ; accent-color : var ( -- color - accent ); min-height : 32 px ; cursor : pointer ; }
2026-10-25 23:29:40 +00:00
. field output { font : 400 var ( -- text - xl ) / 1 var ( -- font - display ); font-variant-numeric : tabular-nums ; }
2026-10-23 08:13:06 +00:00
. field__row { display : flex ; align-items : baseline ; justify-content : space-between ; gap : var ( -- space - md ); }
2026-10-25 23:29:40 +00:00
/* hero: photo bleeds off the right edge, head on the left */
. hero { position : relative ; background : var ( -- color - paper ); }
. hero__inner { position : relative ; z-index : 2 ; padding-block : var ( -- space -2 xl ) var ( -- space - xl ); }
. hero__text { display : grid ; gap : var ( -- space - lg ); justify-items : start ; max-width : 46 % ; }
. hero h1 . line { display : block ; overflow : hidden ; padding : 0 0.12 em 0.12 em 0 ; margin-bottom : -0.12 em ; }
. hero h1 . line > span { display : block ; animation : line-up 1000 ms var ( -- ease-out ) backwards ; animation-delay : calc ( var ( -- i ) * 120 ms + 120 ms ); }
. hero h1 . line--it > span { font-style : italic ; }
. hero__lead { animation : rise 800 ms var ( -- ease-out ) 650 ms backwards ; }
. hero__cta { animation : rise 800 ms var ( -- ease-out ) 780 ms backwards ; }
. hero__photo { position : absolute ; z-index : 1 ; top : 0 ; right : 0 ; bottom : var ( -- space -2 xl ); width : 50 % ; margin : 0 ; border-radius : var ( -- radius - card ) 0 0 var ( -- radius - card ); animation : curtain 1300 ms var ( -- ease-in-out ) 200 ms backwards ; }
. hero__photo > img { object-position : 60 % 40 % ; animation : settle 2200 ms var ( -- ease-out ) 200 ms backwards ; }
@ keyframes line-up { from { transform : translateY ( 110 % ); } }
@ keyframes rise { from { opacity : 0 ; transform : translateY ( 16 px ); } }
@ keyframes curtain { from { clip-path : inset ( 0 0 0 100 % round var ( -- radius - card )); } to { clip-path : inset ( 0 0 0 0 round var ( -- radius - card )); } }
@ keyframes settle { from { transform : scale ( 1.16 ); } }
@ media ( max-width : 60rem ) {
. hero__inner { padding-block : var ( -- space -2 xl ) var ( -- space - xl ); }
. hero__text { max-width : none ; }
. hero__photo { position : relative ; width : 100 % ; aspect-ratio : 4 / 3 ; border-radius : 0 ; }
. hero { display : flex ; flex-direction : column ; }
. hero__inner { order : 1 ; }
. hero__photo { order : 2 ; }
. quick__wrap { order : 3 ; }
}
/* floating search bar */
. quick__wrap { position : relative ; z-index : 5 ; margin-bottom : calc ( -1 * var ( -- space -2 xl )); }
. quick { display : grid ; grid-template-columns : repeat ( 3 , minmax ( 0 , 1 fr )) auto ; gap : var ( -- space - md ); align-items : end ; max-width : 1120 px ; margin-inline : auto ; padding : var ( -- space - lg ); background : var ( -- color - card ); border-radius : var ( -- radius - card ); box-shadow : var ( -- shadow - card ); animation : rise-lg 900 ms var ( -- ease-out ) 900 ms backwards ; }
. quick__field { display : grid ; gap : var ( -- space -2 xs ); }
. quick__field label { font-size : var ( -- text - sm ); font-weight : 700 ; color : var ( -- color - muted ); }
. quick select { width : 100 % ; min-height : 52 px ; padding : 0 var ( -- space - md ); border : var ( -- rule - bar ) solid var ( -- color - muted ); border-radius : var ( -- radius - control ); background : var ( -- color - card ); color : var ( -- color - card - ink ); font-weight : 700 ; transition : border-color var ( -- dur - short ) var ( -- ease-out ); }
. quick select : hover { border-color : var ( -- color - ink ); }
. quick select : focus-visible { outline : 2 px solid var ( -- color - focus ); outline-offset : 2 px ; }
. quick__go { min-width : 160 px ; }
@ keyframes rise-lg { from { opacity : 0 ; transform : translateY ( 40 px ); } }
@ media ( max-width : 60rem ) { . quick__wrap { margin-bottom : 0 ; padding-block : var ( -- space - lg ); } . quick { grid-template-columns : minmax ( 0 , 1 fr ); } }
2026-10-23 08:13:06 +00:00
/* path: a real ol */
2026-10-25 23:29:40 +00:00
. band--path { padding-block : calc ( var ( -- space -2 xl ) + var ( -- space - md )) var ( -- space -2 xl ); }
2026-10-23 08:13:06 +00:00
. path { list-style : none ; margin : 0 ; padding : 0 ; display : grid ; grid-template-columns : repeat ( 5 , minmax ( 0 , 1 fr )); gap : var ( -- gap - columns ); counter-reset : step ; }
2026-10-25 23:29:40 +00:00
. path li { counter-increment : step ; position : relative ; display : grid ; gap : var ( -- space -2 xs ); align-content : start ; padding-top : var ( -- space - lg ); }
. path li :: after { content : "" ; position : absolute ; inset : 0 0 auto 0 ; height : 3 px ; background : var ( -- color - ink ); transform-origin : left ; transition : transform 1000 ms var ( -- ease-out ); transition-delay : calc ( var ( -- i , 0 ) * 120 ms + 150 ms ); }
. js . path li : not ( . is-in ) :: after { transform : scaleX ( 0 ); }
. path li :: before { content : counter ( step ); font : 400 clamp ( 3.5 rem , 6 vw , 5.25 rem ) / 0.95 var ( -- font - display ); color : var ( -- color - accent ); font-variant-numeric : lining-nums tabular-nums ; }
. path a { font : 700 var ( -- text - lg ) / 1.15 var ( -- font - body ); text-decoration : none ; }
. path a : hover { text-decoration : underline ; text-decoration-color : var ( -- color - accent ); text-decoration-thickness : 3 px ; text-underline-offset : 0.25 em ; }
@ media ( max-width : 60rem ) { . path { grid-template-columns : minmax ( 0 , 1 fr ); gap : var ( -- space - md ); } . path li { grid-template-columns : 72 px minmax ( 0 , 1 fr ); align-items : center ; } . path li :: before { font-size : var ( -- text -3 xl ); } }
2026-10-23 08:13:06 +00:00
/* finder */
. finder__top { align-items : end ; margin-bottom : var ( -- space -2 xl ); }
. finder__top h2 { grid-column : 1 / 8 ; }
2026-10-25 23:29:40 +00:00
. finder__top . lead { grid-column : 8 / 13 ; }
2026-10-23 08:13:06 +00:00
. finder__body { align-items : stretch ; }
. map { grid-column : 1 / 6 ; position : relative ; aspect-ratio : 605 / 516 ; background : var ( -- color - paper -2 ); border-radius : var ( -- radius - card ); }
. map svg { position : absolute ; inset : 0 ; width : 100 % ; height : 100 % ; }
2026-10-25 23:29:40 +00:00
. map path { fill : var ( -- color - land ); stroke : var ( -- color - card ); stroke-width : 3 ; stroke-linejoin : round ; }
2026-10-23 08:13:06 +00:00
. pin { position : absolute ; left : var ( -- x ); top : var ( -- y ); width : 36 px ; height : 36 px ; transform : translate ( -50 % , -50 % ); padding : 0 ; border : 0 ; background : transparent ; cursor : pointer ; border-radius : var ( -- radius - pill ); }
2026-10-25 23:29:40 +00:00
. pin :: before { content : "" ; position : absolute ; inset : 10 px ; border-radius : var ( -- radius - pill ); background : var ( -- color - ink ); box-shadow : 0 0 0 3 px var ( -- color - card ); transition : transform var ( -- dur - short ) var ( -- ease-out ), background-color var ( -- dur - short ) var ( -- ease-out ); }
. js . map . is-in . pin :: before { animation : pop 600 ms var ( -- ease-out ) backwards ; animation-delay : calc ( var ( -- i ) * 90 ms + 250 ms ); }
. pin : hover :: before { transform : scale ( 1.4 ); }
. pin [ aria-pressed = "true" ] :: before { background : var ( -- color - accent ); transform : scale ( 1.9 ); }
2026-10-23 08:13:06 +00:00
. pin : focus-visible { outline : 2 px solid var ( -- color - focus ); outline-offset : 0 ; }
2026-10-25 23:29:40 +00:00
. ping { position : absolute ; inset : 8 px ; border-radius : var ( -- radius - pill ); border : 2 px solid var ( -- color - accent ); pointer-events : none ; animation : ping 800 ms var ( -- ease-out ) both ; }
. map__city { position : absolute ; left : var ( -- space - md ); bottom : var ( -- space - md ); padding : var ( -- space - xs ) var ( -- space - md ); border-radius : var ( -- radius - control ); background : var ( -- color - card ); box-shadow : var ( -- shadow - card ); font-size : var ( -- text - sm ); font-weight : 700 ; }
@ keyframes pop { from { transform : scale ( 0 ); } }
@ keyframes ping { from { opacity : 0.9 ; transform : scale ( 0.6 ); } to { opacity : 0 ; transform : scale ( 2.8 ); } }
. controls { grid-column : 6 / 13 ; display : grid ; gap : var ( -- space - xl ); align-content : center ; padding : var ( -- space - xl ); background : var ( -- color - paper -2 ); border-radius : var ( -- radius - card ); }
2026-10-23 08:13:06 +00:00
. controls__ages { display : grid ; grid-template-columns : repeat ( 2 , minmax ( 0 , 1 fr )); gap : var ( -- gap - columns ); }
2026-10-25 23:29:40 +00:00
. results { margin-top : var ( -- space - xl ); display : grid ; grid-template-columns : repeat ( 4 , minmax ( 0 , 1 fr )); gap : var ( -- gap - columns ); min-height : 300 px ; scroll-margin-top : var ( -- space -3 xl ); }
. person { display : grid ; gap : var ( -- space - md ); align-content : space-between ; padding : var ( -- space - lg ); background : var ( -- color - card ); border-radius : var ( -- radius - card ); box-shadow : var ( -- shadow - card ); animation : rise var ( -- dur - long ) var ( -- ease-out ) backwards ; animation-delay : calc ( var ( -- i , 0 ) * 80 ms ); transition : transform var ( -- dur - short ) var ( -- ease-out ), box-shadow var ( -- dur - short ) var ( -- ease-out ); }
. person : hover { transform : translateY ( -5 px ); box-shadow : var ( -- shadow - lift ); }
2026-10-23 08:13:06 +00:00
. person__who { display : flex ; align-items : center ; gap : var ( -- space - md ); }
2026-10-25 23:29:40 +00:00
. person h3 { font-size : var ( -- text - xl ); }
. avatar { width : 56 px ; height : 56 px ; flex-shrink : 0 ; display : grid ; place-items : center ; border-radius : var ( -- radius - pill ); background : var ( -- tone , var ( -- tone - a )); color : var ( -- color - navy ); font : 400 var ( -- text - xl ) / 1 var ( -- font - display ); }
2026-10-23 08:13:06 +00:00
. score { display : flex ; align-items : baseline ; gap : var ( -- space - xs ); }
2026-10-25 23:29:40 +00:00
. score b { font : 400 var ( -- text -3 xl ) / 1 var ( -- font - display ); font-variant-numeric : lining-nums tabular-nums ; }
2026-10-23 08:13:06 +00:00
. bar { height : 8 px ; margin-top : var ( -- space - xs ); border-radius : var ( -- radius - pill ); background : var ( -- color - paper -3 ); overflow : hidden ; }
2026-10-25 23:29:40 +00:00
. bar i { display : block ; height : 100 % ; background : var ( -- color - accent ); transform-origin : left ; transform : scaleX ( calc ( var ( -- s , 0 ) / 100 )); animation : grow 1100 ms var ( -- ease-out ) backwards ; animation-delay : calc ( var ( -- i , 0 ) * 80 ms + 200 ms ); }
2026-10-23 08:13:06 +00:00
. tags { display : flex ; flex-wrap : wrap ; gap : var ( -- space - xs ); padding : 0 ; margin : 0 ; list-style : none ; }
2026-10-25 23:29:40 +00:00
. tags li { padding : var ( -- space -3 xs ) var ( -- space - sm ); border-radius : var ( -- radius - pill ); border : var ( -- rule - bar ) solid var ( -- color - rule ); font-size : var ( -- text - sm ); font-weight : 700 ; transition : background-color var ( -- dur - short ) var ( -- ease-out ); }
2026-10-23 08:13:06 +00:00
. tags li . is-shared { background : var ( -- color - paper -3 ); border-color : var ( -- color - paper -3 ); }
2026-10-25 23:29:40 +00:00
. results__empty { grid-column : 1 / -1 ; align-self : center ; font : 400 var ( -- text -2 xl ) / 1.2 var ( -- font - display ); max-width : 30 ch ; animation : rise var ( -- dur - long ) var ( -- ease-out ) backwards ; }
2026-10-23 08:13:06 +00:00
. finder__note { margin-top : var ( -- space - md ); font-size : var ( -- text - sm ); color : var ( -- color - muted ); }
@ keyframes grow { from { transform : scaleX ( 0 ); } }
@ media ( max-width : 60rem ) {
. finder__top h2 , . finder__top . lead , . map , . controls { grid-column : 1 / -1 ; }
. finder__top . lead { margin-top : var ( -- space - md ); }
. controls { margin-top : var ( -- space - lg ); padding : var ( -- space - lg ); }
. results { grid-template-columns : repeat ( 2 , minmax ( 0 , 1 fr )); }
}
@ media ( max-width : 40rem ) { . results { grid-template-columns : minmax ( 0 , 1 fr ); } . controls__ages { grid-template-columns : minmax ( 0 , 1 fr ); } }
/* checks */
. checks . head { grid-column : 1 / 6 ; }
2026-10-25 23:29:40 +00:00
. checks__panel { grid-column : 7 / 13 ; background : var ( -- color - paper -2 ); border-radius : var ( -- radius - card ); padding : var ( -- space - lg ); display : grid ; gap : var ( -- space - md ); }
. checks__who { display : flex ; align-items : center ; gap : var ( -- space - md ); }
. checks__who h3 { font-size : var ( -- text - xl ); }
2026-10-23 08:13:06 +00:00
. status { margin-left : auto ; display : inline-flex ; align-items : center ; gap : var ( -- space - xs ); padding : var ( -- space - xs ) var ( -- space - md ); border-radius : var ( -- radius - pill ); background : var ( -- color - paper -3 ); font-size : var ( -- text - sm ); font-weight : 700 ; }
. status . icon { display : none ; }
2026-10-25 23:29:40 +00:00
. status [ data-state = "done" ] { background : var ( -- color - on - navy ); color : var ( -- color - navy ); animation : settle-in 600 ms var ( -- ease-out ) both ; }
2026-10-23 08:13:06 +00:00
. status [ data-state = "done" ] . icon { display : block ; }
2026-10-25 23:29:40 +00:00
@ keyframes settle-in { from { transform : scale ( 0.9 ); opacity : 0.4 ; } }
. progress { height : 6 px ; border-radius : var ( -- radius - pill ); background : var ( -- color - paper -3 ); overflow : hidden ; }
. progress i { display : block ; height : 100 % ; background : var ( -- color - accent - on - dark ); transform-origin : left ; transform : scaleX ( var ( -- p , 0 )); transition : transform 700 ms var ( -- ease-out ); }
2026-10-23 08:13:06 +00:00
. rows { list-style : none ; margin : 0 ; padding : 0 ; }
. rows > li { display : grid ; grid-template-columns : 24 px minmax ( 0 , 1 fr ) auto ; gap : var ( -- space - md ); align-items : center ; padding-block : var ( -- space - md ); border-top : var ( -- rule - hair ) solid var ( -- color - rule ); }
2026-10-25 23:29:40 +00:00
. rows h3 { font : 700 var ( -- text - md ) / 1.3 var ( -- font - body ); letter-spacing : 0 ; }
2026-10-23 08:13:06 +00:00
. rows p { font-size : var ( -- text - sm ); color : var ( -- color - muted ); }
2026-10-25 23:29:40 +00:00
. rows . tick { display : none ; color : var ( -- color - accent - on - dark ); }
. rows . is-done . tick { display : block ; animation : pop 500 ms var ( -- ease-out ) backwards ; }
2026-10-23 08:13:06 +00:00
. rows . is-done . idle { display : none ; }
. rows . passed { font-weight : 700 ; font-size : var ( -- text - sm ); }
. checks__foot { display : flex ; justify-content : space-between ; align-items : center ; gap : var ( -- space - md ); border-top : var ( -- rule - hair ) solid var ( -- color - rule ); padding-top : var ( -- space - md ); }
@ media ( max-width : 60rem ) { . checks . head , . checks__panel { grid-column : 1 / -1 ; } . checks__panel { margin-top : var ( -- space - xl ); } }
@ media ( max-width : 40rem ) { . rows > li { grid-template-columns : 24 px minmax ( 0 , 1 fr ); } . rows . btn , . rows . passed { grid-column : 2 ; justify-self : start ; } . checks__who { flex-wrap : wrap ; } }
/* photo privacy */
2026-10-25 23:29:40 +00:00
. privacy__photo { grid-column : 1 / 8 ; position : relative ; aspect-ratio : 4 / 3 ; border-radius : var ( -- radius - card ); overflow : hidden ; background : var ( -- color - paper -3 ); box-shadow : var ( -- shadow - card ); margin : 0 ; }
2026-10-23 08:13:06 +00:00
. privacy__photo img { position : absolute ; inset : 0 ; width : 100 % ; height : 100 % ; object-fit : cover ; object-position : 35 % 40 % ; filter : saturate ( 1.06 ) contrast ( 1.04 ); }
. privacy__photo . blur { filter : blur ( 28 px ) saturate ( 1.06 ); transform : scale ( 1.15 ); transition : opacity var ( -- dur - long ) var ( -- ease-in-out ); }
. js . privacy__photo : not ( . is-hidden ) . blur { opacity : 0 ; }
2026-10-25 23:29:40 +00:00
. privacy__badge { position : absolute ; left : var ( -- space - lg ); bottom : var ( -- space - lg ); display : inline-flex ; align-items : center ; gap : var ( -- space - xs ); padding : var ( -- space - xs ) var ( -- space - md ); border-radius : var ( -- radius - pill ); background : var ( -- color - card ); font-size : var ( -- text - sm ); font-weight : 700 ; z-index : 2 ; box-shadow : var ( -- shadow - card ); }
2026-10-23 08:13:06 +00:00
. privacy__lock { position : absolute ; inset : 0 ; display : grid ; place-items : center ; z-index : 2 ; transition : opacity var ( -- dur - long ) var ( -- ease-in-out ); }
2026-10-25 23:29:40 +00:00
. privacy__disc { display : grid ; place-items : center ; width : 112 px ; height : 112 px ; border-radius : var ( -- radius - pill ); background : var ( -- color - card ); box-shadow : var ( -- shadow - card ); transition : transform var ( -- dur - long ) var ( -- ease-out ); }
. privacy__disc . icon { width : 44 px ; height : 44 px ; }
2026-10-23 08:13:06 +00:00
. js . privacy__photo : not ( . is-hidden ) . privacy__lock { opacity : 0 ; }
2026-10-25 23:29:40 +00:00
. js . privacy__photo : not ( . is-hidden ) . privacy__disc { transform : scale ( 0.7 ); }
2026-10-23 08:13:06 +00:00
. privacy__badge . icon-open , . privacy__badge . icon-shut { display : none ; }
. privacy__photo : not ( . is-hidden ) . icon-open { display : block ; }
. privacy__photo . is-hidden . icon-shut { display : block ; }
2026-10-25 23:29:40 +00:00
. privacy__panel { grid-column : 9 / 13 ; display : grid ; gap : var ( -- space - lg ); align-content : center ; }
2026-10-23 08:13:06 +00:00
@ media ( max-width : 60rem ) { . privacy__photo , . privacy__panel { grid-column : 1 / -1 ; } . privacy__panel { margin-top : var ( -- space - xl ); } }
/* talk */
. talk__top { margin-bottom : var ( -- space -2 xl ); }
. talk__body { align-items : stretch ; }
2026-10-25 23:29:40 +00:00
. invite { grid-column : 1 / 6 ; display : grid ; gap : var ( -- space - lg ); align-content : space-between ; padding : var ( -- space - xl ); background : var ( -- color - card ); border-radius : var ( -- radius - card ); box-shadow : var ( -- shadow - card ); }
2026-10-23 08:13:06 +00:00
. invite__who { display : flex ; align-items : center ; gap : var ( -- space - md ); }
. invite h3 { font-size : var ( -- text - xl ); }
. invite__actions { display : flex ; flex-wrap : wrap ; gap : var ( -- space - sm ); }
. invite__result { min-height : 1 lh ; font-weight : 700 ; }
2026-10-25 23:29:40 +00:00
. chat { grid-column : 6 / 13 ; position : relative ; display : grid ; grid-template-rows : minmax ( 0 , 1 fr ) auto ; min-height : 380 px ; padding : var ( -- space - lg ); border-radius : var ( -- radius - card ); }
2026-10-23 08:13:06 +00:00
. chat__log { list-style : none ; margin : 0 ; padding : 0 ; display : flex ; flex-direction : column ; justify-content : flex-end ; gap : var ( -- space - xs ); overflow-y : auto ; }
2026-10-25 23:29:40 +00:00
. chat__log li { max-width : 80 % ; padding : var ( -- space - xs ) var ( -- space - md ); border-radius : var ( -- radius - control ); background : var ( -- color - paper -2 ); animation : rise var ( -- dur - short ) var ( -- ease-out ) backwards ; overflow-wrap : break-word ; }
. chat__log li . me { align-self : flex-end ; background : var ( -- color - accent ); color : var ( -- color - accent - ink ); }
2026-10-23 08:13:06 +00:00
. chat__log li . note { align-self : center ; max-width : 100 % ; background : transparent ; color : var ( -- color - muted ); font-size : var ( -- text - sm ); font-weight : 700 ; }
. chat__form { display : flex ; gap : var ( -- space - sm ); margin-top : var ( -- space - md ); }
. chat__form input { flex : 1 ; min-width : 0 ; }
. chat . is-locked . chat__log , . chat . is-locked . chat__form { visibility : hidden ; }
2026-10-25 23:29:40 +00:00
. chat__lock { position : absolute ; inset : 0 ; display : none ; place-items : center ; align-content : center ; gap : var ( -- space - sm ); text-align : center ; padding : var ( -- space - lg ); font : 400 var ( -- text -2 xl ) / 1.2 var ( -- font - display ); }
2026-10-23 08:13:06 +00:00
. chat__lock . icon { width : 48 px ; height : 48 px ; margin-inline : auto ; }
. chat . is-locked . chat__lock { display : grid ; }
@ media ( max-width : 60rem ) { . invite , . chat { grid-column : 1 / -1 ; } . chat { margin-top : var ( -- space - lg ); } }
2026-10-25 23:29:40 +00:00
/* family and safety */
2026-10-23 08:13:06 +00:00
. together { align-items : stretch ; row-gap : var ( -- gap - columns ); }
. tile { display : grid ; gap : var ( -- space - lg ); align-content : start ; padding : var ( -- space - xl ); background : var ( -- color - paper -2 ); border-radius : var ( -- radius - card ); }
. tile--wide { grid-column : 1 / 8 ; }
2026-10-25 23:29:40 +00:00
. tile--narrow { grid-column : 8 / 13 ; }
. tile h2 { font-size : clamp ( 2 rem , 3 vw , 3 rem ); }
. tile . lead { color : var ( -- color - ink -2 ); }
2026-10-23 08:13:06 +00:00
. safety__who { display : flex ; align-items : center ; gap : var ( -- space - md ); }
2026-10-25 23:29:40 +00:00
. safety__who h3 { font-size : var ( -- text - xl ); }
2026-10-23 08:13:06 +00:00
. safety__actions { display : flex ; flex-wrap : wrap ; gap : var ( -- space - sm ); }
. live { min-height : 1 lh ; font-weight : 700 ; }
@ media ( max-width : 60rem ) { . tile--wide , . tile--narrow { grid-column : 1 / -1 ; } . tile { padding : var ( -- space - lg ); } }
/* questions and join */
. join . head { grid-column : 1 / 7 ; align-content : start ; gap : var ( -- space - xl ); }
. qa { margin : 0 ; display : grid ; }
. qa > div { display : grid ; grid-template-columns : minmax ( 0 , 5 fr ) minmax ( 0 , 7 fr ); gap : var ( -- space - md ); padding-block : var ( -- space - md ); border-top : var ( -- rule - hair ) solid var ( -- color - rule ); }
2026-10-25 23:29:40 +00:00
. qa dt { font : 700 var ( -- text - md ) / 1.3 var ( -- font - body ); }
. qa dd { margin : 0 ; color : var ( -- color - ink -2 ); }
2026-10-23 08:13:06 +00:00
. card { grid-column : 8 / 13 ; background : var ( -- color - card ); color : var ( -- color - card - ink ); border-radius : var ( -- radius - card ); box-shadow : var ( -- shadow - card ); padding : var ( -- space - xl ); display : grid ; gap : var ( -- space - lg ); align-content : start ; }
2026-10-25 23:29:40 +00:00
. tabs { display : flex ; gap : var ( -- space - xs ); border-bottom : var ( -- rule - bar ) solid var ( -- color - rule ); }
2026-10-23 08:13:06 +00:00
. tabs button { min-height : 44 px ; padding : 0 var ( -- space - md ); border : 0 ; border-bottom : 4 px solid transparent ; margin-bottom : calc ( -1 * var ( -- space -3 xs )); background : transparent ; color : inherit ; font-weight : 700 ; cursor : pointer ; transition : border-color var ( -- dur - short ) var ( -- ease-out ); }
2026-10-25 23:29:40 +00:00
. tabs button : hover { border-bottom-color : var ( -- color - rule ); }
. tabs button [ aria-selected = "true" ] { border-bottom-color : var ( -- color - accent ); }
2026-10-23 08:13:06 +00:00
. form-help { min-height : 1 lh ; font-size : var ( -- text - sm ); }
. form-help . is-error { color : var ( -- color - error ); font-weight : 700 ; }
. panel { display : grid ; gap : var ( -- space - md ); }
@ media ( max-width : 60rem ) { . join . head , . card { grid-column : 1 / -1 ; } . card { margin-top : var ( -- space - xl ); padding : var ( -- space - lg ); } . qa > div { grid-template-columns : minmax ( 0 , 1 fr ); gap : var ( -- space -2 xs ); } }
/* footer: letter close */
. foot { padding-block : var ( -- space -3 xl ) var ( -- space - xl ); }
2026-10-25 23:29:40 +00:00
. foot__sign { font : 400 var ( -- text - display - s ) / 1.05 var ( -- font - display ); letter-spacing : var ( -- tracking - display ); max-width : 18 ch ; text-wrap : balance ; }
2026-10-23 08:13:06 +00:00
. foot__row { margin-top : var ( -- space -2 xl ); display : flex ; flex-wrap : wrap ; justify-content : space-between ; gap : var ( -- space - lg ); font-size : var ( -- text - sm ); }
. foot__links { display : flex ; flex-wrap : wrap ; gap : var ( -- space - lg ); list-style : none ; margin : 0 ; padding : 0 ; }
. foot__links a { font-weight : 700 ; }
2026-10-25 23:29:40 +00:00
. foot__links a : hover { text-decoration-color : var ( -- color - accent - on - dark ); text-decoration-thickness : 3 px ; }
2026-10-23 08:13:06 +00:00
. foot [ data-credits ] { margin-top : var ( -- space - lg ); color : var ( -- color - muted ); font-size : var ( -- text - xs ); max-width : 80 ch ; }
2026-10-25 23:29:40 +00:00
/* one scroll reveal, visible without script */
. js [ data-reveal ] { opacity : 0 ; transform : translateY ( 18 px ); transition : opacity 800 ms var ( -- ease-out ), transform 800 ms var ( -- ease-out ); transition-delay : calc ( var ( -- i , 0 ) * 110 ms ); }
2026-10-23 08:13:06 +00:00
. js [ data-reveal ] . is-in { opacity : 1 ; transform : none ; }
2026-10-25 23:29:40 +00:00
. js . person [ data-reveal ], . js li [ data-reveal ] { transition-property : opacity , transform ; }
@ media ( prefers-reduced-motion : reduce ) {
. js [ data-reveal ] { opacity : 1 ; transform : none ; transition : none ; }
. hero h1 . line > span , . hero__lead , . hero__cta , . hero__photo , . hero__photo > img , . quick , . person , . bar i , . chat__log li , . ping , . status , . rows . is-done . tick , . js . map . is-in . pin :: before { animation : none ; }
. bar i { transform : scaleX ( calc ( var ( -- s , 0 ) / 100 )); }
. js . path li : not ( . is-in ) :: after { transform : none ; }
}