Files

411 lines
25 KiB
CSS
Raw Permalink 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.
/* Karma Bikinis — white, high-fashion, monochrome. Self-contained, no CDNs.
The only colour on the page is the product photography.
Type is Zen, sans and mono. The faces, their @font-face and the --font-sans
/ --font-mono tokens all come from @hanzo/design, served at
/zen/tokens/fonts.css and linked from index.html. Name the variable here,
never a family: the family is the package's to change. */
:root{
--bg:#ffffff; --fg:#0a0a0a; --mut:#767676; --dim:#9a9a9a;
--line:#ececec; --line2:#dcdcdc; --soft:#f6f6f4;
--maxw:1360px; --gutter:32px;
--hh:76px; /* header height */
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--fg);
font-family:var(--font-sans);
font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
body.no-scroll{overflow:hidden}
img{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button{font-family:inherit}
.mono{font-family:var(--font-mono)}
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 var(--gutter)}
.eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.34em;
text-transform:uppercase;color:var(--mut)}
/* ---------- header (transparent over hero -> solid white on scroll) ---------- */
header{position:fixed;top:0;left:0;right:0;z-index:50;height:var(--hh);
display:flex;align-items:center;transition:background .3s ease,border-color .3s ease,color .3s ease;
border-bottom:1px solid transparent;color:#fff}
header .wrap{display:flex;align-items:center;gap:26px;width:100%}
header .logo{height:32px;display:flex;align-items:center;flex-shrink:0}
header .logo img{height:100%;width:auto;display:block}
header .logo .lw{display:none} header .logo .lb{display:block}
header nav{display:flex;gap:26px;margin-left:8px}
header nav a{font-size:13px;letter-spacing:.02em;opacity:.9;transition:opacity .15s}
header nav a:hover{opacity:.55}
header .sp{flex:1}
header .bag{display:inline-flex;align-items:center;gap:8px;font-size:13px;letter-spacing:.04em;
background:none;border:0;color:inherit;cursor:pointer}
header .bag .n{min-width:20px;height:20px;border:1px solid currentColor;border-radius:0;
font-size:11px;letter-spacing:.02em;display:inline-flex;align-items:center;justify-content:center;padding:0 5px}
header .bag .ico{display:block}
.menu-btn{display:none;background:none;border:0;color:inherit;cursor:pointer;
padding:6px;margin-right:-6px;align-items:center;justify-content:center}
.menu-btn svg{display:block}
/* solid state */
header.solid{background:rgba(255,255,255,.9);backdrop-filter:blur(16px);
border-bottom-color:var(--line);color:var(--fg)}
header.solid .logo .lw{display:none} header.solid .logo .lb{display:block}
/* on hero (transparent) -> white logo */
header.on-hero .logo .lw{display:block} header.on-hero .logo .lb{display:none}
/* ---------- mobile menu (full-screen white overlay) ---------- */
.mmenu{position:fixed;inset:0;z-index:80;background:#fff;display:flex;flex-direction:column;
padding:0 var(--gutter) 40px;transform:translateY(-101%);opacity:0;pointer-events:none;
transition:transform .4s cubic-bezier(.4,0,.1,1),opacity .3s ease}
.mmenu.open{transform:none;opacity:1;pointer-events:auto}
.mm-top{display:flex;align-items:center;justify-content:space-between;height:var(--hh)}
.mm-top .logo{height:28px;display:flex;align-items:center}
.mm-top .logo img{height:100%;width:auto;display:block}
.mm-close{background:none;border:0;line-height:1;cursor:pointer;color:var(--fg);
display:inline-flex;align-items:center;justify-content:center;padding:6px;margin-right:-6px}
.mm-close svg{display:block}
.mm-nav{display:flex;flex-direction:column;margin-top:22px}
.mm-nav a{font-size:clamp(34px,11vw,54px);font-weight:600;letter-spacing:-.02em;line-height:1.16;
color:var(--fg);padding:6px 0}
.mm-foot{margin-top:auto;display:flex;flex-wrap:wrap;gap:16px 22px;border-top:1px solid var(--line);padding-top:22px}
.mm-foot a{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--mut)}
.mm-foot a:hover{color:var(--fg)}
@media(min-width:641px){.mmenu{display:none}}
/* ---------- hero ---------- */
.hero{position:relative;height:100vh;min-height:640px;display:flex;align-items:flex-end;overflow:hidden;background:#111}
.hero img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 30%}
.hero::after{content:"";position:absolute;inset:0;
background:linear-gradient(180deg,rgba(0,0,0,.22),rgba(0,0,0,0) 26%,rgba(0,0,0,0) 55%,rgba(0,0,0,.55))}
.hero .inner{position:relative;z-index:2;color:#fff;padding-bottom:56px}
.hero .eyebrow{color:rgba(255,255,255,.82)}
.hero h1{font-size:clamp(44px,8vw,112px);line-height:.92;font-weight:600;letter-spacing:-.02em;
margin:14px 0 20px;max-width:16ch;text-transform:none}
.hero p{max-width:44ch;font-size:16px;color:rgba(255,255,255,.86);margin:0 0 26px}
.hero .cta{display:flex;gap:14px;flex-wrap:wrap}
/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;
background:var(--fg);color:#fff;border:1px solid var(--fg);border-radius:0;
padding:15px 30px;min-height:52px;line-height:1;white-space:nowrap;
font-size:13px;font-weight:500;letter-spacing:.11em;text-transform:uppercase;
cursor:pointer;-webkit-tap-highlight-color:transparent;
transition:background .18s ease,color .18s ease,border-color .18s ease,opacity .18s ease}
.btn:not(:disabled):hover{background:#fff;color:var(--fg)}
.btn.inv{background:#fff;color:var(--fg);border-color:#fff}
.btn.inv:not(:disabled):hover{background:transparent;color:#fff}
.btn.line{background:transparent;color:var(--fg);border-color:var(--fg)}
.btn.line:not(:disabled):hover{background:var(--fg);color:#fff}
.btn.block{width:100%}
.btn:not(:disabled):active{transform:translateY(1px)}
.btn:disabled{opacity:.5;cursor:not-allowed}
/* ---------- accessibility: crisp square keyboard focus (adapts to bg) ---------- */
a:focus-visible,button:focus-visible,input:focus-visible,summary:focus-visible{
outline:2px solid currentColor;outline-offset:3px}
:focus:not(:focus-visible){outline:none}
/* ---------- section shell ---------- */
main{padding-top:0}
.sec{padding:104px 0;border-top:1px solid var(--line);scroll-margin-top:calc(var(--hh) + 8px)}
.sec:first-child{border-top:0}
.sec-head{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;margin-bottom:44px;flex-wrap:wrap}
.sec-head h2{font-size:clamp(30px,4.4vw,56px);font-weight:600;letter-spacing:-.02em;margin:10px 0 0;line-height:1}
.sec-head p{color:var(--mut);margin:0;max-width:46ch}
/* ---------- collection grid ---------- */
.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px 6px}
.card{cursor:pointer;position:relative;background:var(--soft)}
.card .frame{position:relative;aspect-ratio:3/4;overflow:hidden;background:var(--soft)}
.card .frame img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
transition:opacity .5s ease,transform 1.4s ease}
.card .frame img.b{opacity:0}
.card:hover .frame img.a{opacity:0}
.card:hover .frame img.b{opacity:1;transform:scale(1.04)}
.card .tag{position:absolute;top:14px;left:14px;z-index:2;font-family:var(--font-mono);
font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--fg);
background:rgba(255,255,255,.9);padding:5px 9px}
.card .meta{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:14px 4px 4px}
.card .meta .nm{font-size:14px;font-weight:500;letter-spacing:.01em}
.card .meta .pr{font-family:var(--font-mono);font-size:13px;color:var(--fg)}
.card .quick{position:absolute;left:0;right:0;bottom:0;z-index:2;opacity:0;transform:translateY(6px);
transition:.22s;pointer-events:none}
.card:hover .quick{opacity:1;transform:none;pointer-events:auto}
.card .quick .btn{width:100%;padding:14px;font-size:12px}
/* ---------- collections nav (sticky chip row) ---------- */
.coll-nav{display:flex;gap:8px;flex-wrap:wrap;margin:-14px 0 40px;position:sticky;top:var(--hh);z-index:12;
background:rgba(255,255,255,.92);backdrop-filter:blur(12px);padding:12px 0}
.coll-nav .chip{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
color:var(--mut);border:1px solid var(--line2);padding:8px 13px;cursor:pointer;transition:.15s;white-space:nowrap}
.coll-nav .chip:hover{color:var(--fg);border-color:var(--fg)}
/* ---------- collection section ---------- */
.coll-sec{margin:0 0 60px;scroll-margin-top:calc(var(--hh) + 70px)}
.coll-sec:last-child{margin-bottom:0}
.coll-head{display:flex;justify-content:space-between;align-items:flex-end;gap:20px;
border-bottom:1px solid var(--fg);padding-bottom:16px;margin-bottom:20px;flex-wrap:wrap}
.coll-head h3{font-size:clamp(22px,3vw,34px);font-weight:600;letter-spacing:-.02em;margin:0;line-height:1}
.coll-head .ch-txt p{color:var(--mut);margin:8px 0 0;max-width:64ch;font-size:14px}
.coll-head .count{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
color:var(--dim);white-space:nowrap}
/* ---------- sold-out / pre-order card state ---------- */
.card.pre .frame img{filter:saturate(.94)}
.card .soldout{position:absolute;top:14px;right:14px;z-index:3;font-family:var(--font-mono);
font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:#fff;background:var(--fg);padding:5px 9px}
.card.pre:hover .quick .btn{background:var(--fg);color:#fff}
/* ---------- lookbook ---------- */
.look{columns:3;column-gap:6px}
.look img{width:100%;margin-bottom:6px;break-inside:avoid;background:var(--soft)}
/* ---------- editorial split (story) ---------- */
.split{display:grid;grid-template-columns:1fr 1fr;gap:0;align-items:stretch}
.split .txt{padding:clamp(40px,6vw,96px)}
.split .txt h2{font-size:clamp(28px,3.6vw,48px);font-weight:600;letter-spacing:-.02em;margin:12px 0 20px;max-width:15ch}
.split .txt p{color:var(--mut);max-width:52ch;margin:0 0 16px}
.split .pic{background:var(--soft);min-height:520px}
.split .pic img{width:100%;height:100%;object-fit:cover}
.pillars{display:flex;gap:40px;flex-wrap:wrap;margin-top:26px}
.pillars b{display:block;font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase}
.pillars span{color:var(--mut);font-size:14px}
/* ---------- try-on band ---------- */
.tryon{background:var(--bg);color:var(--fg);text-align:center;padding:120px 0;border-top:1px solid var(--line)}
.tryon .eyebrow{color:var(--mut)}
.tryon h2{font-size:clamp(30px,5vw,64px);font-weight:600;letter-spacing:-.02em;margin:14px 0 16px}
.tryon p{color:var(--mut);max-width:50ch;margin:0 auto 30px}
/* ---------- press strip ---------- */
.press{border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.press .wrap{display:flex;align-items:center;justify-content:space-between;gap:40px;flex-wrap:wrap;padding:34px var(--gutter)}
.press .lab{font-family:var(--font-mono);font-size:10px;letter-spacing:.24em;text-transform:uppercase;color:var(--dim)}
.press .marks{display:flex;align-items:center;gap:48px;flex-wrap:wrap;flex:1;justify-content:space-around}
.press img{height:26px;width:auto;opacity:.7}
/* ---------- founder quote ---------- */
.quote{padding:120px 0;text-align:center}
.quote blockquote{max-width:24ch;margin:0 auto;font-size:clamp(24px,3.4vw,42px);font-weight:500;
letter-spacing:-.01em;line-height:1.2}
.quote .cite{margin-top:26px;font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--mut)}
/* ---------- social / @karma_bikinis ---------- */
.social .sgrid{display:grid;grid-template-columns:repeat(6,1fr);gap:6px}
.social .sgrid a{display:block;aspect-ratio:1;overflow:hidden;background:var(--soft);position:relative}
.social .sgrid img{width:100%;height:100%;object-fit:cover;transition:transform 1s ease}
.social .sgrid a:hover img{transform:scale(1.06)}
/* ---------- footer (organized, high-fashion) ---------- */
footer{background:var(--bg);border-top:1px solid var(--line)}
.fgrid{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr 1.2fr;border-bottom:1px solid var(--line)}
.fcol{padding:44px 28px;border-left:1px solid var(--line)}
.fcol:first-child{border-left:0;padding-left:0}
.fcol h4{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--fg);margin:0 0 18px;font-weight:600}
.fcol a{display:block;color:var(--mut);font-size:13px;margin-bottom:11px;transition:color .15s}
.fcol a:hover{color:var(--fg)}
.fcol p{color:var(--mut);font-size:13px;margin:0 0 8px}
.news form{display:flex;align-items:center;border-bottom:1px solid var(--line2);max-width:280px;
transition:border-color .18s ease}
.news form:hover{border-bottom-color:var(--dim)}
.news form:focus-within{border-bottom-color:var(--fg)}
.news input{flex:1;background:none;border:0;padding:9px 0;font-size:13px;letter-spacing:.01em;color:var(--fg);outline:none}
.news input:focus-visible{outline:none}
.news input::placeholder{color:var(--dim)}
.news button{background:none;border:0;cursor:pointer;font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--fg);transition:opacity .15s ease}
.news button:hover{opacity:.55}
.news .ok{font-size:12px;color:var(--mut);margin-top:10px}
.flogo{padding:0 var(--gutter);display:flex;justify-content:center}
.flogo img{height:30px;margin:40px 0 18px;opacity:.9}
.legal{padding:0 var(--gutter) 40px;display:flex;justify-content:center;gap:8px;flex-wrap:wrap;font-size:12px;color:var(--dim);text-align:center}
/* ---------- PDP accordion ---------- */
.acc{border-top:1px solid var(--line);margin-top:6px}
.acc details{border-bottom:1px solid var(--line)}
.acc summary{list-style:none;cursor:pointer;padding:16px 0;display:flex;justify-content:space-between;align-items:center;
font-size:12px;letter-spacing:.08em;text-transform:uppercase;font-weight:500}
.acc summary::-webkit-details-marker{display:none}
.acc summary::after{content:"+";font-size:16px;color:var(--mut)}
.acc details[open] summary::after{content:"–"}
.acc .body{padding:0 0 18px;color:var(--mut);font-size:14px;line-height:1.6}
/* ---------- product detail page (full page overlay/route) ---------- */
.pdp{display:none}
body.route-product .home,body.route-page .home{display:none}
body.route-product .pdp{display:block}
.pdp .inner{padding-top:calc(var(--hh) + 24px);padding-bottom:80px}
.pdp .crumbs{font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--mut);margin-bottom:22px}
.pdp .crumbs a:hover{color:var(--fg)}
.pdp .layout{display:grid;grid-template-columns:1.35fr .65fr;gap:48px;align-items:start}
.pdp .gallery{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.pdp .gallery img{width:100%;aspect-ratio:3/4;object-fit:cover;background:var(--soft)}
.pdp .gallery img.wide{grid-column:1/3;aspect-ratio:auto}
.pdp .info{position:sticky;top:calc(var(--hh) + 24px)}
.pdp .info .tag{font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--mut)}
.pdp .info h1{font-size:clamp(30px,3.4vw,44px);font-weight:600;letter-spacing:-.02em;margin:10px 0 8px}
.pdp .info .price{font-family:var(--font-mono);font-size:18px;margin-bottom:22px}
.pdp .info .desc{color:var(--mut);margin:0 0 26px}
.pdp .spec{border-top:1px solid var(--line);margin-bottom:26px}
.pdp .spec div{display:flex;justify-content:space-between;font-size:13.5px;padding:12px 0;border-bottom:1px solid var(--line)}
.pdp .spec div span:first-child{color:var(--dim);text-transform:uppercase;letter-spacing:.06em;font-size:11px}
.sizes{margin:0 0 22px}
.sizes .lab{font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--dim);margin-bottom:10px}
.sizes .row{display:flex;gap:8px;flex-wrap:wrap}
.sizes button{background:none;border:1px solid var(--line2);color:var(--fg);width:52px;height:48px;
cursor:pointer;font-family:var(--font-mono);font-size:13px;letter-spacing:.04em;
transition:background .15s ease,color .15s ease,border-color .15s ease}
.sizes button:hover{border-color:var(--fg);background:var(--soft)}
.sizes button.sel{background:var(--fg);color:#fff;border-color:var(--fg)}
.pdp .buys{display:flex;flex-direction:column;gap:10px}
.pdp .info .price .soldpill{font-family:var(--font-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;
color:#fff;background:var(--fg);padding:4px 8px;vertical-align:middle;margin-left:8px}
.pdp .prenote{font-size:13px;line-height:1.55;color:var(--mut);border-left:2px solid var(--fg);
padding:2px 0 2px 14px;margin-top:4px}
.opt{margin:0 0 22px}
.opt .lab{font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--dim);margin-bottom:10px}
.opt .chips{display:flex;gap:8px;flex-wrap:wrap}
.opt .cchip{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;color:var(--fg);
border:1px solid var(--line2);padding:7px 12px}
.pdp .trylink{margin-top:16px;font-size:13px;color:var(--mut)}
.pdp .trylink a{border-bottom:1px solid var(--line2)}
.pdp .trylink a:hover{border-color:var(--fg)}
/* ---------- content pages (about/legal) ---------- */
.page{display:none}
body.route-page .page{display:block}
.page .inner{max-width:760px;margin:0 auto;padding:calc(var(--hh) + 60px) var(--gutter) 100px}
.page h1{font-size:clamp(34px,5vw,60px);font-weight:600;letter-spacing:-.02em;margin:10px 0 34px;line-height:1}
.page .lead{font-size:19px;line-height:1.6;color:var(--fg);margin:0 0 26px}
.page p{color:#3a3a3a;margin:0 0 18px}
.page h3{font-size:15px;letter-spacing:.02em;margin:34px 0 10px;font-weight:600}
.page a{border-bottom:1px solid var(--line2)}
.page a:hover{border-color:var(--fg)}
.page .review-note{margin-top:32px;padding:14px 16px;background:var(--soft);border:1px solid var(--line);
font-size:12.5px;color:var(--mut);font-family:var(--font-mono);letter-spacing:.02em}
/* ---------- cart drawer ---------- */
.scrim{position:fixed;inset:0;z-index:60;background:rgba(10,10,10,.4);opacity:0;pointer-events:none;transition:.3s}
.scrim.open{opacity:1;pointer-events:auto}
.cart{position:fixed;top:0;right:0;bottom:0;width:420px;max-width:92vw;z-index:70;background:#fff;
border-left:1px solid var(--line);transform:translateX(100%);transition:transform .32s ease;
display:flex;flex-direction:column}
.cart.open{transform:none}
.cart h3{margin:0;padding:26px var(--gutter);font-size:13px;letter-spacing:.14em;text-transform:uppercase;
border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}
.cart h3 button{background:none;border:0;font-size:20px;cursor:pointer;color:var(--fg)}
.cart .items{flex:1;overflow-y:auto;padding:8px var(--gutter)}
.cart .empty{color:var(--dim);text-align:center;padding:70px 0;font-size:14px}
.ci{display:flex;gap:16px;padding:20px 0;border-bottom:1px solid var(--line)}
.ci img{width:72px;height:96px;object-fit:cover;background:var(--soft)}
.ci .g{flex:1}
.ci .g .n{font-size:14px;font-weight:500}
.ci .g .s{color:var(--dim);font-size:12px;font-family:var(--font-mono);margin-top:2px}
.ci .g .qty{display:flex;gap:0;align-items:center;margin-top:10px;border:1px solid var(--line2);width:max-content}
.ci .g .qty button{width:30px;height:30px;border:0;background:none;color:var(--fg);cursor:pointer;
font-size:14px;line-height:1;transition:background .15s ease,color .15s ease}
.ci .g .qty button:hover{background:var(--soft)}
.ci .g .qty span{width:34px;text-align:center;font-family:var(--font-mono);font-size:13px}
.ci .p{font-family:var(--font-mono);font-size:13px}
.ci .rm{background:none;border:0;color:var(--dim);cursor:pointer;font-size:11px;text-transform:uppercase;letter-spacing:.08em;align-self:flex-start;margin-top:4px}
.ci .rm:hover{color:var(--fg)}
.cart .foot{padding:24px var(--gutter);border-top:1px solid var(--line)}
.cart .foot .row{display:flex;justify-content:space-between;margin-bottom:16px;font-size:15px}
.cart .foot .row .mono{font-family:var(--font-mono)}
.cart .note{font-size:12px;color:var(--dim);text-align:center;margin-top:12px;line-height:1.5}
.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%) translateY(16px);
background:var(--fg);color:#fff;padding:13px 22px;font-size:12px;letter-spacing:.06em;text-transform:uppercase;
z-index:90;opacity:0;transition:.25s;pointer-events:none}
.toast.show{opacity:1;transform:translateX(-50%)}
/* ---------- responsive ---------- */
@media(max-width:1000px){
.grid{grid-template-columns:repeat(2,1fr)}
.look{columns:2}
.split{grid-template-columns:1fr}
.split .pic{min-height:420px;order:-1}
.pdp .layout{grid-template-columns:1fr;gap:28px}
.pdp .info{position:static}
.fgrid{grid-template-columns:1fr 1fr}
.fcol{padding:28px 20px}
.fcol:nth-child(odd){border-left:0;padding-left:0}
.social .sgrid{grid-template-columns:repeat(4,1fr)}
}
@media(max-width:640px){
:root{--gutter:20px}
header nav{display:none}
.menu-btn{display:inline-flex}
header .sp{flex:1}
.sec{padding:64px 0}
.look{columns:1}
.hero{height:88vh}
.quote{padding:72px 0}
.pdp .gallery{grid-template-columns:1fr}
.pdp .gallery img.wide{grid-column:auto}
.fgrid{grid-template-columns:1fr}
.fcol{border-left:0;padding:24px 0;border-top:1px solid var(--line)}
.fcol:first-child{border-top:0}
.social .sgrid{grid-template-columns:repeat(3,1fr)}
.press .marks{gap:28px}
.press img{height:20px}
}
/* ---------- header search affordance ---------- */
header .search-btn{display:inline-flex;align-items:center;gap:9px;background:none;border:0;
color:inherit;cursor:pointer;padding:0;-webkit-tap-highlight-color:transparent}
header .search-btn svg{display:block}
header .search-btn .kk{font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;
line-height:1;border:1px solid currentColor;padding:3px 5px;opacity:.6}
@media(max-width:640px){header .search-btn .kk{display:none}}
/* ---------- command palette (Cmd/Ctrl+K) ---------- */
.cmdk{position:fixed;inset:0;z-index:100;display:none}
.cmdk.open{display:block}
.cmdk-scrim{position:absolute;inset:0;background:rgba(10,10,10,.44)}
.cmdk-box{position:relative;width:600px;max-width:92vw;margin:11vh auto 0;background:#fff;
border:1px solid var(--fg);box-shadow:0 30px 90px rgba(0,0,0,.30);display:flex;flex-direction:column;
max-height:72vh;animation:cmdkin .16s ease}
@keyframes cmdkin{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:none}}
.cmdk-head{display:flex;align-items:center;gap:12px;padding:16px 18px;border-bottom:1px solid var(--line)}
.cmdk-head svg{color:var(--dim);flex-shrink:0;display:block}
.cmdk-head input{flex:1;min-width:0;border:0;outline:none;background:none;font-family:inherit;
font-size:16px;color:var(--fg)}
.cmdk-head input::placeholder{color:var(--dim)}
.cmdk-head input:focus-visible{outline:none}
.cmdk-head kbd{font-family:var(--font-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;
color:var(--mut);border:1px solid var(--line2);padding:3px 6px;line-height:1}
.cmdk-list{overflow-y:auto;padding:6px}
.cmdk-item{display:flex;align-items:center;gap:13px;padding:10px 12px;cursor:pointer}
.cmdk-item .ci-thumb{width:34px;height:44px;object-fit:cover;background:var(--soft);flex-shrink:0}
.cmdk-item .ci-l{flex:1;min-width:0}
.cmdk-item .ci-n{font-size:14px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cmdk-item .ci-s{font-size:12px;color:var(--dim);font-family:var(--font-mono);margin-top:2px;
white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cmdk-item .ci-k{font-family:var(--font-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;
color:var(--dim);flex-shrink:0}
.cmdk-item.sel{background:var(--fg)}
.cmdk-item.sel .ci-n{color:#fff}
.cmdk-item.sel .ci-s,.cmdk-item.sel .ci-k{color:rgba(255,255,255,.72)}
.cmdk-empty{padding:28px 14px;text-align:center;color:var(--dim);font-size:13px}
@media(max-width:640px){.cmdk-box{margin:0;width:100%;max-width:none;height:100%;max-height:100%;border:0}}
/* ---------- Journal (editorial) — monochrome, from /journal.json ---------- */
.jgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:36px 28px;margin-top:8px}
.jcard{display:block;border-bottom:1px solid var(--line);padding-bottom:20px}
.jcard .jhero{aspect-ratio:4/5;overflow:hidden;background:var(--soft)}
.jcard .jhero img{width:100%;height:100%;object-fit:cover;transition:transform .5s ease}
.jcard:hover .jhero img{transform:scale(1.03)}
.jcard .jmeta{padding-top:14px}
.jcard h2{font-size:22px;font-weight:600;letter-spacing:-.01em;line-height:1.15;margin:6px 0 8px}
.jcard p{color:var(--mut);font-size:14px;line-height:1.55;margin:0}
.jpost{max-width:640px;margin:0 auto}
.jback{display:inline-block;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--dim);margin-bottom:24px;border:0}
.jposthero{aspect-ratio:16/10;overflow:hidden;background:var(--soft);margin-bottom:36px}
.jposthero img{width:100%;height:100%;object-fit:cover}
.jbody h1{font-size:clamp(30px,4.4vw,50px);line-height:1.04;margin:0 0 24px}
.jbody h2{font-size:20px;font-weight:600;margin:32px 0 10px}
.jbody p{color:#3a3a3a;font-size:17px;line-height:1.7;margin:0 0 20px}
.jbody strong{color:var(--fg)}
.jbody a{border-bottom:1px solid var(--line2)}
@media(max-width:640px){.jgrid{grid-template-columns:1fr;gap:28px}}