mirror of
https://github.com/hanzoai/karma-style.git
synced 2026-10-30 18:33:08 +00:00
The page view, SPA navigations, errors and every ecommerce event go to /v1/event; pixels load only when the visitor's choice or region allows (the tag reads hz_consent and the rule cloud serves). (no attribution lines in commits)
276 lines
13 KiB
HTML
276 lines
13 KiB
HTML
<!doctype html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>Karma Bikinis — Swimwear, made to photograph</title>
|
||
<meta name="description" content="Karma Bikinis — high-fashion swimwear designed in San Francisco by Antje Worring. The 2026 collection: eight designs in velvet, mesh and matte lycra.">
|
||
<meta property="og:title" content="Karma Bikinis">
|
||
<meta property="og:description" content="The 2026 collection — eight designs, made to photograph.">
|
||
<meta property="og:image" content="/img/hero/hero.webp">
|
||
<meta property="og:type" content="website">
|
||
<meta name="theme-color" content="#ffffff">
|
||
<link rel="icon" type="image/png" sizes="512x512" href="/favicon.png?v=049">
|
||
<link rel="apple-touch-icon" href="/favicon.png?v=049">
|
||
<!-- Zen is the one typeface. The faces and the @font-face that names them come
|
||
from @hanzo/design, copied under /zen at image build (see Dockerfile) —
|
||
nothing is vendored into this repo. The preload carries NO ?v= so it
|
||
matches the url() inside fonts.css byte for byte; a mismatch downloads the
|
||
face twice and the preload warns in console. -->
|
||
<link rel="preload" href="/zen/assets/fonts/Zen-Variable.woff2" as="font" type="font/woff2" crossorigin>
|
||
<!-- Fixed-name assets are edge-cached 24h (hanzoai/spa max-age=86400); index.html
|
||
is no-cache. Bump ?v= on every release so CSS/JS never serve stale. -->
|
||
<link rel="stylesheet" href="/zen/tokens/fonts.css?v=055">
|
||
<link rel="stylesheet" href="/style.css?v=055">
|
||
<!-- schema.org JSON-LD: brand + site. Hanzo Analytics' Annotate() reads this and
|
||
emits a `content-schema` signal; it also feeds SEO / rich results. -->
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "https://schema.org",
|
||
"@graph": [
|
||
{ "@type": "Organization", "@id": "https://karma.style/#org", "name": "Karma Bikinis",
|
||
"url": "https://karma.style", "logo": "https://karma.style/img/brand/karma-black.png",
|
||
"sameAs": ["https://www.instagram.com/karma_bikinis", "https://www.tiktok.com/@karma_bikinis"] },
|
||
{ "@type": "WebSite", "@id": "https://karma.style/#site", "name": "Karma Bikinis",
|
||
"url": "https://karma.style", "publisher": { "@id": "https://karma.style/#org" } }
|
||
]
|
||
}
|
||
</script>
|
||
</head>
|
||
<body>
|
||
|
||
<header id="hdr" class="on-hero">
|
||
<div class="wrap">
|
||
<a class="logo" href="/" data-link aria-label="Karma">
|
||
<img class="lb" src="/img/brand/karma-black.png" alt="Karma">
|
||
<img class="lw" src="/img/brand/karma-white.png" alt="Karma">
|
||
</a>
|
||
<nav>
|
||
<a href="/shop" data-link>Shop</a>
|
||
<a href="/#lookbook" data-link>Lookbook</a>
|
||
<a href="/journal" data-link>Journal</a>
|
||
<a href="https://tryon.karma.style">Virtual Try-On</a>
|
||
<a href="/about" data-link>About</a>
|
||
</nav>
|
||
<span class="sp"></span>
|
||
<button class="search-btn" id="searchBtn" aria-label="Search">
|
||
<svg width="19" height="19" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="M20.5 20.5 16 16"/></svg>
|
||
<kbd class="kk">⌘K</kbd>
|
||
</button>
|
||
<button class="bag" id="bagBtn" data-slot="cart-open" aria-label="Open bag">
|
||
<svg class="ico" width="21" height="21" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 2 3 6.2V20a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6.2L18 2H6Z"/><path d="M3 6.2h18"/><path d="M16 10.2a4 4 0 0 1-8 0"/></svg>
|
||
<span class="n" id="bagCount">0</span>
|
||
</button>
|
||
<button class="menu-btn" id="menuBtn" aria-label="Menu">
|
||
<svg width="23" height="23" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" aria-hidden="true"><path d="M4 7h16M4 12h16M4 17h16"/></svg>
|
||
</button>
|
||
</div>
|
||
</header>
|
||
|
||
<!-- ============ MOBILE MENU ============ -->
|
||
<div class="mmenu" id="mmenu" aria-hidden="true">
|
||
<div class="mm-top">
|
||
<a class="logo" href="/" data-link aria-label="Karma"><img src="/img/brand/karma-black.png" alt="Karma"></a>
|
||
<button class="mm-close" id="mmClose" aria-label="Close menu">
|
||
<svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" aria-hidden="true"><path d="M6 6l12 12M18 6 6 18"/></svg>
|
||
</button>
|
||
</div>
|
||
<nav class="mm-nav">
|
||
<a href="/shop" data-link>Shop</a>
|
||
<a href="/#lookbook" data-link>Lookbook</a>
|
||
<a href="/journal" data-link>Journal</a>
|
||
<a href="https://tryon.karma.style">Virtual Try-On</a>
|
||
<a href="/about" data-link>About</a>
|
||
</nav>
|
||
<div class="mm-foot">
|
||
<a href="/shipping" data-link>Shipping</a>
|
||
<a href="/returns" data-link>Returns</a>
|
||
<a href="mailto:[email protected]">Contact</a>
|
||
<a href="https://www.instagram.com/karma_bikinis" target="_blank" rel="noopener">Instagram</a>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ============ HOME ============ -->
|
||
<div class="home">
|
||
<section class="hero" id="top">
|
||
<img src="/img/hero/hero.webp" alt="Karma Bikinis — scarlet one-piece">
|
||
<div class="wrap inner">
|
||
<div class="eyebrow">The 2026 Collection</div>
|
||
<h1>Swimwear made to photograph.</h1>
|
||
<p>Eight designs in crushed velvet, botanical mesh and matte lycra — cut clean, finished by hand in San Francisco, shot for the light.</p>
|
||
<div class="cta">
|
||
<a href="/shop" data-link class="btn inv">Shop the collection</a>
|
||
<a href="https://tryon.karma.style" class="btn line" style="color:#fff;border-color:#fff">Virtual Try-On</a>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="press">
|
||
<div class="wrap">
|
||
<span class="lab">As seen in</span>
|
||
<div class="marks">
|
||
<img src="/img/brand/press-vogue.png" alt="Vogue" loading="lazy">
|
||
<img src="/img/brand/press-cosmopolitan.png" alt="Cosmopolitan" loading="lazy">
|
||
<img src="/img/brand/press-daily-mail.png" alt="Daily Mail" loading="lazy">
|
||
<img src="/img/brand/press-miami-fashion-week.png" alt="Miami Fashion Week" loading="lazy">
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="sec" id="shop">
|
||
<div class="wrap">
|
||
<div class="sec-head">
|
||
<div><div class="eyebrow">The Collection</div><h2>The full house.</h2></div>
|
||
<p>The 2026 line, in stock — plus every archive collection, back by pre-order. Hover to turn.</p>
|
||
</div>
|
||
<nav class="coll-nav" id="collNav" aria-label="Collections"></nav>
|
||
<div id="shopSections"></div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="sec" id="lookbook">
|
||
<div class="wrap">
|
||
<div class="sec-head">
|
||
<div><div class="eyebrow">Lookbook</div><h2>On location.</h2></div>
|
||
<p>Editorial and lifestyle from the 2026 shoot.</p>
|
||
</div>
|
||
<div class="look" id="look"></div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="sec" style="padding:0" id="story">
|
||
<div class="split">
|
||
<div class="txt">
|
||
<div class="eyebrow">The House</div>
|
||
<h2>Swimwear with an eye for the frame.</h2>
|
||
<p>Designed in San Francisco by Antje Worring, Karma is cut for the moment the shutter opens — sculpted lines, honest colour, hardware that catches the light.</p>
|
||
<p>Small runs, made carefully, worn everywhere from the pool deck to the front row.</p>
|
||
<div class="pillars">
|
||
<div><b>Hand-finished</b><span>Small-batch runs</span></div>
|
||
<div><b>True colour</b><span>Shot, not filtered</span></div>
|
||
<div><b>Made to move</b><span>Salt & chlorine ready</span></div>
|
||
</div>
|
||
<div style="margin-top:30px"><a href="/about" data-link class="btn line">Read our story</a></div>
|
||
</div>
|
||
<div class="pic"><img src="/img/hero/portrait.webp" alt="Karma editorial" loading="lazy"></div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="quote">
|
||
<div class="wrap">
|
||
<blockquote>Design that serves women and improves their quality of life.</blockquote>
|
||
<div class="cite">Antje Worring · Founder</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="tryon">
|
||
<div class="wrap">
|
||
<div class="eyebrow">Virtual Try-On · Beta</div>
|
||
<h2>See it on you.</h2>
|
||
<p>Upload a photo, pick a design, and our studio renders you in it — in seconds, on our own GPUs.</p>
|
||
<a href="https://tryon.karma.style" class="btn">Open the Try-On studio</a>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="sec social" id="social">
|
||
<div class="wrap">
|
||
<div class="sec-head">
|
||
<div><div class="eyebrow">Community</div><h2>@karma_bikinis</h2></div>
|
||
<p><a href="https://www.instagram.com/karma_bikinis" target="_blank" rel="noopener" class="btn line">Follow on Instagram</a></p>
|
||
</div>
|
||
<div class="sgrid" id="sgrid"></div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
|
||
<!-- ============ PRODUCT PAGE ============ -->
|
||
<div class="pdp"><div class="wrap inner">
|
||
<div class="crumbs"><a href="/" data-link>Karma</a> / <a href="/shop" data-link>Shop</a> / <span id="pdpName"></span></div>
|
||
<div class="layout">
|
||
<div class="gallery" id="pdpGallery" data-slot="product-gallery"></div>
|
||
<div class="info" id="pdpInfo"></div>
|
||
</div>
|
||
</div></div>
|
||
|
||
<!-- ============ CONTENT PAGE ============ -->
|
||
<div class="page"><div class="inner" id="pageBody"></div></div>
|
||
|
||
<footer>
|
||
<div class="wrap">
|
||
<div class="fgrid">
|
||
<div class="fcol news">
|
||
<h4>Newsletter</h4>
|
||
<p>New collections, first.</p>
|
||
<form id="newsForm" autocomplete="off">
|
||
<input type="email" id="newsEmail" class="rr-mask" placeholder="Email address" aria-label="Email address" required>
|
||
<button type="submit">Join →</button>
|
||
</form>
|
||
<div class="ok" id="newsOk"></div>
|
||
</div>
|
||
<div class="fcol">
|
||
<h4>Client Services</h4>
|
||
<a href="/contact" data-link>Contact & FAQ</a>
|
||
<a href="/shipping" data-link>Shipping</a>
|
||
<a href="/returns" data-link>Exchanges & Returns</a>
|
||
<a href="/shipping" data-link>Track Order</a>
|
||
<a href="/privacy" data-link>Privacy Policy</a>
|
||
<a href="/terms" data-link>Terms of Service</a>
|
||
</div>
|
||
<div class="fcol">
|
||
<h4>The House</h4>
|
||
<a href="/about" data-link>About Karma</a>
|
||
<a href="https://antjeworr.ing" target="_blank" rel="noopener">Antje Worring</a>
|
||
<a href="/shop" data-link>The Collection</a>
|
||
<a href="https://tryon.karma.style">Virtual Try-On</a>
|
||
</div>
|
||
<div class="fcol">
|
||
<h4>Follow Us</h4>
|
||
<a href="https://www.instagram.com/karma_bikinis" target="_blank" rel="noopener">Instagram</a>
|
||
<a href="https://www.tiktok.com/@karma_bikinis" target="_blank" rel="noopener">TikTok</a>
|
||
<a href="https://www.pinterest.com/karma_bikinis" target="_blank" rel="noopener">Pinterest</a>
|
||
<a href="https://www.facebook.com/karmabikinis" target="_blank" rel="noopener">Facebook</a>
|
||
</div>
|
||
<div class="fcol">
|
||
<h4>Contact</h4>
|
||
<p><a href="mailto:[email protected]">[email protected]</a></p>
|
||
<p>Mon–Fri · reply in 1–2 days</p>
|
||
<p>Designed in San Francisco</p>
|
||
<p>Shipping worldwide</p>
|
||
</div>
|
||
</div>
|
||
<div class="flogo"><img src="/img/brand/karma-black.png" alt="Karma"></div>
|
||
<div class="legal"><span>© 2026 Karma Bikinis</span></div>
|
||
</div>
|
||
</footer>
|
||
|
||
<div class="scrim" id="scrim"></div>
|
||
<aside class="cart" id="cart" data-slot="cart">
|
||
<h3>Your bag <button id="cartClose" aria-label="Close">✕</button></h3>
|
||
<div class="items" id="cartItems"></div>
|
||
<div class="foot">
|
||
<div class="row"><span>Subtotal</span><span class="mono" id="cartTotal">$0</span></div>
|
||
<button class="btn block" id="checkoutBtn" data-slot="checkout" itemscope itemtype="https://schema.org/OrderAction">Checkout</button>
|
||
<div class="note" id="cartNote">Shipping calculated at checkout · exchanges within 10 days</div>
|
||
</div>
|
||
</aside>
|
||
|
||
<div class="toast" id="toast"></div>
|
||
|
||
<script>window.KARMA_ASSET_V="055";</script>
|
||
<!-- Hanzo commerce + analytics packages (published to npm, vendored locally — no
|
||
runtime CDN). track.min.js = [email protected] (window.HanzoTrack.Annotate only; events go through the hosted tag);
|
||
checkout.global.js = [email protected] (window.HanzoCheckout). -->
|
||
<script src="/vendor/track.min.js?v=055"></script>
|
||
<script src="/vendor/checkout.global.js?v=055"></script>
|
||
<script src="/content.js?v=055"></script>
|
||
<script src="/journal.js?v=055"></script>
|
||
<script src="/commerce.js?v=055"></script>
|
||
<!-- Karma layers: standard GA4 ecommerce events + Annotate, checkout widget, replay -->
|
||
<script src="/analytics.js?v=055"></script>
|
||
<script src="/checkout.js?v=055"></script>
|
||
<script src="/replay.js?v=055"></script>
|
||
<script src="/app.js?v=055"></script>
|
||
<!-- KARMA_AI_WIDGET -->
|
||
</body>
|
||
</html>
|