/* =========================================================
   Moldar — visual polish (animations, transitions, page details)
   Loaded after kra.css + kra-features.css
   ========================================================= */

/* ---------- Page transitions (cross-document View Transitions) ---------- */
@view-transition{navigation:auto}
header.site{view-transition-name:site-header}
.tabbar{view-transition-name:tabbar}
::view-transition-old(root),::view-transition-new(root){animation-duration:.28s}
/* the clicked card photo grows into the listing photo */
.mosaic .mo-tile:first-child img,#galleryMainImg{view-transition-name:listing-photo}
::view-transition-group(listing-photo){animation-duration:.5s;animation-timing-function:cubic-bezier(.2,.8,.2,1)}
::view-transition-old(listing-photo),::view-transition-new(listing-photo){height:100%;object-fit:cover;overflow:hidden}
@media (prefers-reduced-motion:reduce){@view-transition{navigation:none}}

/* ---------- Theme toggle ---------- */
.theme-btn{cursor:pointer;font:inherit;padding:0}
.theme-btn .th-sun{display:none}
:root[data-theme=dark] .theme-btn .th-sun{display:block}
:root[data-theme=dark] .theme-btn .th-moon{display:none}
@media (prefers-color-scheme:dark){
  :root:not([data-theme]) .theme-btn .th-sun{display:block}
  :root:not([data-theme]) .theme-btn .th-moon{display:none}
}
.theme-btn .ic{transition:transform .5s var(--ease)}
.theme-btn:hover .ic{transform:rotate(-25deg)}
::view-transition-old(root),::view-transition-new(root){mix-blend-mode:normal}

/* ---------- Scrollbar ---------- */
html{scrollbar-color:color-mix(in srgb,var(--brand) 45%,var(--surface-3)) transparent;scrollbar-width:thin}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--brand) 40%,var(--surface-3));border-radius:99px;border:2px solid var(--bg)}
::-webkit-scrollbar-thumb:hover{background:var(--brand)}

/* ---------- Scroll reveal (uses `translate` so hover `transform`s keep working) ---------- */
.reveal{opacity:0;translate:0 24px;
  transition:opacity .7s var(--ease) var(--rv-d,0ms),translate .7s var(--ease) var(--rv-d,0ms),transform var(--t),box-shadow var(--t),border-color var(--t)}
.reveal.reveal-in{opacity:1;translate:none}

/* ---------- Home: hero ---------- */
.arch img{position:absolute;inset:0;opacity:0;transform:scale(1.08);transition:opacity 1.2s ease,transform 7s ease}
.arch img.on{opacity:1;transform:scale(1)}
.hero-visual .float-chip{translate:var(--px,0px) var(--py,0px);transition:translate .4s var(--ease)}
.hero-visual .arch,.hero-visual .arch-ring{translate:calc(var(--px,0px) * -.45) calc(var(--py,0px) * -.45);transition:translate .4s var(--ease)}
.home-hero h1 .hl::after{transform-origin:right;animation:drawLine .9s .5s var(--ease) both}
@keyframes drawLine{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.home-stats .stat b{font-variant-numeric:tabular-nums}

/* ---------- Home: steps ---------- */
.step-box{overflow:visible}
.step-ic{position:absolute;top:22px;inset-inline-end:22px;width:48px;height:48px;border-radius:16px;background:var(--surface-2);color:var(--brand);display:grid;place-items:center;transition:transform .3s var(--ease)}
.step-ic .ic{width:24px;height:24px}
.step-box:hover .step-ic{transform:rotate(-8deg) scale(1.06)}
@media(min-width:721px){
  .step-box:not(:last-child)::after{content:"";position:absolute;top:45px;inset-inline-end:-20px;width:20px;border-top:2px dashed var(--brand);z-index:2}
  .step-box:not(:last-child)::before{content:"";position:absolute;top:41px;inset-inline-end:-24px;width:10px;height:10px;border-radius:50%;background:var(--brand);z-index:3}
}

/* ---------- Home: featured listings become a swipe rail on phones ---------- */
@media(max-width:700px){
  .grid-rail{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:14px;margin-inline:-20px;padding:4px 20px 18px;scrollbar-width:none}
  .grid-rail::-webkit-scrollbar{display:none}
  .grid-rail > .card{flex:0 0 84%;scroll-snap-align:center}
}

/* ---------- Footer watermark ---------- */
.foot-mark{position:absolute;bottom:-.2em;inset-inline:0;text-align:center;font-family:var(--font-display);font-weight:800;font-size:clamp(5rem,17vw,14rem);line-height:1;
  color:rgba(255,255,255,.045);pointer-events:none;white-space:nowrap;user-select:none}
footer.site .wrap{z-index:1}

/* ---------- Listings: sticky compact filters (desktop) ---------- */
.filters-sentinel{height:0}
@media(min-width:701px){
  .filters{position:sticky;top:calc(var(--hh) + 6px);transition:padding .25s var(--ease),box-shadow .25s,border-radius .25s}
  .filters.is-stuck{padding:7px;border-radius:999px;box-shadow:0 18px 40px -18px rgba(40,24,12,.45)}
  .filters.is-stuck .field label{opacity:0;height:0;overflow:hidden}
  .filters.is-stuck .field .picker-btn,.filters.is-stuck .field select{padding-top:11px;padding-bottom:11px;border-radius:999px}
  .filters.is-stuck .btn{padding-top:10px;padding-bottom:10px}
}

/* active filter chips */
.active-filters{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:14px 0 0}
.af-label{display:inline-flex;align-items:center;gap:5px;font-size:.82rem;font-weight:700;color:var(--muted)}
.af-chip{display:inline-flex;align-items:center;gap:7px;padding:6px 12px;border-radius:999px;background:var(--brand-050);color:var(--brand-700);font-size:.82rem;font-weight:700;transition:var(--t)}
.af-chip span{width:18px;height:18px;border-radius:50%;display:grid;place-items:center;font-size:.62rem;background:color-mix(in srgb,var(--brand) 18%,transparent)}
.af-chip:hover{background:var(--brand);color:#fff}
.af-chip:hover span{background:rgba(255,255,255,.25)}
.af-clear{font-size:.82rem;font-weight:700;color:var(--muted);text-decoration:underline;text-underline-offset:3px}
.af-clear:hover{color:var(--danger)}

/* loading state while the page reloads */
.browse-list{position:relative;transition:opacity .2s}
.browse-list.is-loading .grid{opacity:.4;filter:saturate(.4);pointer-events:none}
.browse-list.is-loading::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(100deg,transparent 30%,color-mix(in srgb,var(--surface) 55%,transparent) 50%,transparent 70%);background-size:300% 100%;animation:shimmer 1.1s linear infinite}

/* empty state illustration */
.em-art{display:block;width:210px;margin:0 auto 6px}
.em-art svg{width:100%;height:auto;display:block}
.ea-lens{transform-box:fill-box;transform-origin:center;animation:lens 3.2s ease-in-out infinite}
@keyframes lens{0%,100%{transform:translate(0,0) rotate(0)}50%{transform:translate(-10px,-6px) rotate(-8deg)}}

/* ---------- Listing page ---------- */
.sec-tabs{position:sticky;top:calc(var(--hh) + 6px);z-index:15;display:flex;gap:4px;overflow-x:auto;scrollbar-width:none;margin:0 0 18px;padding:5px;
  border-radius:999px;background:color-mix(in srgb,var(--surface) 88%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid var(--line);box-shadow:var(--shadow)}
.sec-tabs::-webkit-scrollbar{display:none}
.sec-tabs a{flex:none;padding:8px 16px;border-radius:999px;font-size:.86rem;font-weight:700;color:var(--muted);transition:background .2s,color .2s}
.sec-tabs a:hover{color:var(--text)}
.sec-tabs a.on{background:var(--ink);color:#fff}
.section-card{scroll-margin-top:calc(var(--hh) + 80px)}
.am .am-ic{font-size:1.05rem;line-height:1}
.desc-text{margin:0;white-space:pre-line;color:var(--muted);line-height:1.85;max-height:7.4em;overflow:hidden;
  -webkit-mask-image:linear-gradient(to bottom,#000 55%,transparent);mask-image:linear-gradient(to bottom,#000 55%,transparent);transition:max-height .45s var(--ease)}
.desc-text.is-open,.desc-text.is-short{max-height:200em;-webkit-mask-image:none;mask-image:none}
.desc-text.is-short + .more-btn{display:none}
.more-btn{margin-top:10px;padding:0;border:0;background:none;font:inherit;font-weight:700;color:var(--brand);cursor:pointer;text-decoration:underline;text-underline-offset:4px}
.bk-up-bar{display:flex;gap:3px;height:10px;margin:12px 0 8px;border-radius:99px;overflow:hidden}
.bk-up-bar i{display:block;min-width:8px}
.bk-up-bar i:first-child{background:var(--brand)}
.bk-up-bar i:last-child{background:var(--gold)}
.bk-up-legend{display:flex;gap:14px;font-size:.74rem;color:var(--muted)}
.bk-up-legend span{display:inline-flex;align-items:center;gap:5px}
.bk-up-legend em{width:8px;height:8px;border-radius:50%;display:inline-block}
.bk-up-legend .k1{background:var(--brand)}
.bk-up-legend .k2{background:var(--gold)}

/* published! */
@keyframes fadeIn2{from{opacity:0}to{opacity:1}}
@keyframes popIn{from{opacity:0;transform:translateY(16px) scale(.94)}to{opacity:1;transform:none}}
.pub-modal{position:fixed;inset:0;z-index:200;display:grid;place-items:center;padding:20px;background:rgba(15,12,10,.55);
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);animation:fadeIn2 .25s ease;transition:opacity .3s}
.pub-modal.out{opacity:0}
.confetti{position:fixed;inset:0;pointer-events:none;z-index:1}
.pub-card{position:relative;z-index:2;width:min(420px,100%);padding:30px 26px 24px;border-radius:28px;background:var(--surface);text-align:center;
  box-shadow:0 40px 80px -24px rgba(0,0,0,.6);animation:popIn .45s cubic-bezier(.2,1.2,.4,1) both}
.pub-ic{display:block;font-size:3.2rem;line-height:1;margin-bottom:8px;animation:popIn .6s .15s cubic-bezier(.2,1.6,.4,1) both}
.pub-card h2{margin:0 0 6px;font-size:1.45rem;font-weight:800}
.pub-card p{margin:0 0 16px;color:var(--muted);font-size:.92rem}
.pub-preview{display:flex;align-items:center;gap:12px;margin:0 0 16px;padding:10px;border-radius:18px;background:var(--surface-2);text-align:right}
.pub-preview img,.pub-ph{flex:none;width:64px;height:64px;border-radius:14px;object-fit:cover;display:grid;place-items:center;font-size:1.6rem}
.pub-preview b{display:block;font-size:.92rem;line-height:1.4}
.pub-preview span{display:block;color:var(--muted);font-size:.8rem}
.pub-card .btn + .btn{margin-top:8px}

/* ---------- Listing form: progress ---------- */
.form-progress{position:sticky;top:calc(var(--hh) + 8px);z-index:6;display:flex;align-items:center;gap:12px;margin-bottom:16px;padding:9px 16px;border-radius:999px;
  background:color-mix(in srgb,var(--surface) 90%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid var(--line);box-shadow:var(--shadow)}
.fp-label{display:inline-flex;align-items:center;gap:6px;font-size:.82rem;font-weight:700;white-space:nowrap}
.fp-label .ic{color:var(--brand)}
.fp-track{flex:1;height:8px;border-radius:99px;background:var(--surface-2);overflow:hidden}
.fp-track i{display:block;height:100%;width:0;border-radius:99px;background:linear-gradient(90deg,var(--gold),var(--brand));transition:width .45s var(--ease)}
.form-progress b{font-family:var(--font-display);font-size:.95rem;min-width:44px;text-align:left;font-variant-numeric:tabular-nums}
.form-progress.is-full .fp-track i{background:var(--ok)}
.form-progress.is-full b{color:var(--ok)}

/* ---------- Auth: photo collage behind the dark panel ---------- */
.auth-aside > .auth-collage{position:absolute;inset:0;z-index:0;display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:2px}
.auth-collage img{width:100%;height:100%;object-fit:cover;display:block}
.auth-collage::after{content:"";position:absolute;inset:0;background:linear-gradient(160deg,rgba(20,52,46,.94),rgba(20,52,46,.8) 55%,rgba(168,66,31,.78))}
.auth-aside.has-collage::before{opacity:.5;z-index:1}

/* ---------- Guides: featured guide ---------- */
.guide-feature{display:grid;grid-template-columns:1.15fr 1fr;margin:0 0 38px;border-radius:var(--r-xl);overflow:hidden;background:var(--surface);border:1px solid var(--line);
  box-shadow:var(--shadow);color:inherit;transition:transform var(--t),box-shadow var(--t)}
.guide-feature:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)}
.gf-media{position:relative;min-height:300px;overflow:hidden;background:var(--surface-2)}
.gf-media img,.gf-media .guide-ph{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform .7s var(--ease)}
.guide-feature:hover .gf-media img{transform:scale(1.05)}
.gf-body{display:flex;flex-direction:column;align-items:flex-start;gap:10px;padding:30px 30px 26px}
.gf-tag{display:inline-flex;align-items:center;gap:5px;padding:4px 11px;border-radius:999px;background:var(--gold-050);color:var(--text);font-size:.76rem;font-weight:800}
.gf-tag .ic{color:var(--gold)}
.gf-title{font-family:var(--font-display);font-size:clamp(1.25rem,2.6vw,1.65rem);line-height:1.4}
.gf-excerpt{color:var(--muted);line-height:1.7}
.gf-meta{display:flex;align-items:center;gap:6px;width:100%;margin-top:auto;padding-top:10px;color:var(--muted);font-size:.84rem;font-weight:600}
.gf-go{margin-inline-start:auto;display:inline-flex;align-items:center;gap:5px;color:var(--brand);font-weight:800}
@media(max-width:760px){.guide-feature{grid-template-columns:1fr}.gf-media{min-height:200px}.gf-body{padding:20px}}

/* ---------- Guide article: reading progress + table of contents ---------- */
.read-progress{position:fixed;top:0;inset-inline:0;height:3px;z-index:60;pointer-events:none}
.read-progress i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--gold),var(--brand));transition:width .1s linear}
.article-wrap{max-width:1120px}
.article-grid{display:grid;grid-template-columns:minmax(0,780px) 240px;gap:40px;justify-content:center;align-items:start}
.toc{position:sticky;top:calc(var(--hh) + 24px);margin-top:18px;padding:16px 18px;border-radius:var(--r-lg);background:var(--surface);border:1px solid var(--line)}
.toc b{display:flex;align-items:center;gap:6px;font-size:.86rem;margin-bottom:10px}
.toc b .ic{color:var(--brand)}
.toc ol{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:2px;counter-reset:toc}
.toc li{counter-increment:toc}
.toc a{display:flex;gap:8px;padding:6px 8px;border-radius:10px;font-size:.84rem;line-height:1.5;color:var(--muted);transition:background .2s,color .2s}
.toc a::before{content:counter(toc);font-family:var(--font-display);font-weight:700;color:var(--line-2)}
.toc a:hover{background:var(--surface-2);color:var(--text)}
.toc a.on{color:var(--brand-700);background:var(--brand-050);font-weight:700}
.toc a.on::before{color:var(--brand)}
@media(max-width:1100px){
  .article-grid{grid-template-columns:minmax(0,1fr)}
  .toc{position:static;order:-1;margin:18px 0 0}
  .toc ol{flex-direction:row;flex-wrap:wrap;gap:6px}
  .toc a{background:var(--surface-2)}
}

/* ---------- Cover banners (my listings, profile, owner page) ---------- */
.page-band.has-cover .band-cover{position:absolute;inset:0;z-index:0;overflow:hidden}
.band-cover img{width:100%;height:100%;object-fit:cover;filter:saturate(.9);transform:scale(1.05)}
.band-cover::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(20,52,46,.82),rgba(20,52,46,.95) 85%)}

/* ---------- Dark theme: "ink" active states need more contrast on dark surfaces ---------- */
:root[data-theme=dark] :is(.home-seg input:checked + span,.seg a.on,.sec-tabs a.on,.view-toggle button.on,.chip.on){background:var(--brand);color:#fff;border-color:var(--brand)}
@media (prefers-color-scheme:dark){
  :root:not([data-theme=light]) :is(.home-seg input:checked + span,.seg a.on,.sec-tabs a.on,.chip.on){background:var(--brand);color:#fff;border-color:var(--brand)}
}

/* ---------- Listing header: location line + wrapping meta pills ---------- */
.detail-head{display:block;margin:14px 0 18px}
.detail-head .dtitle{margin:0 0 8px}
.dh-loc{display:flex;align-items:flex-start;gap:6px;color:var(--muted);font-size:.92rem;font-weight:600;line-height:1.5}
.dh-loc .ic{flex:none;margin-top:2px;color:var(--brand)}
.dh-addr{font-weight:500}
.dh-meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}
.dh-pill{display:inline-flex;align-items:center;gap:5px;padding:5px 12px;border-radius:999px;background:var(--surface);border:1px solid var(--line);
  font-size:.8rem;font-weight:600;color:var(--muted);white-space:nowrap}
.dh-pill .ic{width:15px;height:15px}
.dh-pill.is-type{background:var(--ink);border-color:var(--ink);color:#fff}
.dh-pill.is-rate{color:var(--text);font-weight:700}
.dh-pill.is-rate .ic{color:var(--gold)}
.dh-pill.is-rate small{color:var(--muted);font-weight:500}
a.dh-pill:hover{border-color:var(--text)}
:root[data-theme=dark] .dh-pill.is-type{background:var(--brand);border-color:var(--brand)}
@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .dh-pill.is-type{background:var(--brand);border-color:var(--brand)}}
@media(max-width:560px){.detail-head .dtitle{font-size:1.4rem}.dh-pill{font-size:.76rem;padding:4px 10px}}
