/* Imli landing site · full-screen "Coming soon" for pages that aren't open yet.
   Same moving sand, colours and display type as the home hero. Built into landing/assets/soon.css by src/build_landing.py. */
/* plain hosting: no browser default margin around the page (the Claude preview used to remove it) */
body{margin:0}
html:has(.soon-dlg[open]){overflow:hidden}
.soon-dlg{position:fixed;inset:0;width:100%;height:100%;max-width:none;max-height:none;margin:0;padding:0;border:0;background:transparent;color:var(--ink);overflow:hidden}
.soon-dlg::backdrop{background:transparent}
.soon-dlg[open]{animation:soonFade .8s var(--e) both}
.soon-dlg.out{opacity:0;transition:opacity .45s ease}
@keyframes soonFade{from{opacity:0}}

.soon{position:relative;min-height:100%;height:100%;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden;isolation:isolate;background:radial-gradient(120% 90% at 70% 20%,#FBF8F4,#EDE3D7 70%,#E4D6C6)}
.soon-dlg .soon::after{content:"";position:absolute;inset:0;pointer-events:none;z-index:3;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
.soon-sand{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:0}
.soon-top{position:relative;z-index:2;display:flex;align-items:center;justify-content:space-between;gap:20px;width:100%;padding-top:calc(env(safe-area-inset-top,0px) + 30px);padding-left:max(var(--g),env(safe-area-inset-left,0px));padding-right:max(var(--g),env(safe-area-inset-right,0px))}
.soon-x{display:inline-flex;align-items:center;gap:10px;height:44px;padding:0 4px;font:inherit;font-size:.88rem;color:var(--ink);background:none;border:0;cursor:pointer}
.soon-x i{position:relative;width:22px;height:8px}
.soon-x i::before,.soon-x i::after{content:"";position:absolute;left:0;right:0;top:3.5px;height:1.2px;background:var(--ink);transform:rotate(45deg)}
.soon-x i::after{transform:rotate(-45deg)}
.soon-x.back i{display:none}
.soon-in{position:relative;z-index:2;width:100%;padding-bottom:calc(env(safe-area-inset-bottom,0px) + clamp(44px,10vh,120px))}
.soon-lb{margin-bottom:clamp(18px,2.4vw,30px)}
.soon-h{font-size:clamp(5rem,1rem + 10.4vw,12.5rem);line-height:.9;letter-spacing:-.03em}
.soon-h .ln{display:block;overflow:hidden;padding:.06em .06em .22em;margin:-.06em -.06em -.22em}
.soon-h .ln>span{display:inline-block}
.soon-h .ln:nth-child(2){padding-left:clamp(0em,6vw,1.2em)}
.soon-sub{margin-top:clamp(26px,3.6vw,48px);color:var(--ink-2);font-size:clamp(1.02rem,.95rem + .3vw,1.2rem);line-height:1.6}
.soon-sub a{color:var(--ink);border-bottom:1px solid var(--line-2);transition:border-color .4s}
.soon-sub a:hover{border-color:var(--bronze)}
.soon-dlg[open] .soon-h .ln>span,.soon-page .soon-h .ln>span{animation:soonRise 1.5s var(--e) both}
.soon-dlg[open] .soon-h .ln:nth-child(2)>span,.soon-page .soon-h .ln:nth-child(2)>span{animation-delay:.1s}
.soon-dlg[open] .soon-lb,.soon-dlg[open] .soon-sub,.soon-page .soon-sub{animation:soonUp 1.2s var(--e) .3s both}
@keyframes soonRise{from{transform:translateY(115%) rotate(3deg)}}
@keyframes soonUp{from{transform:translateY(20px);opacity:0}}

/* soon.html and 404.html: the same panel as a whole page */
.soon-page{min-height:100svh}
.soon-page .soon{min-height:100svh;height:auto}
@media (prefers-reduced-motion:reduce){.soon-dlg[open],.soon-dlg[open] *,.soon-page *{animation:none!important}}
