/* Alta de villas · Ivilling — "noche de mar y pino" */
:root{
  --cal:#F6F4EF; --ink:#14212B; --ink2:#44505A; --muted:#55606A; --faint:#6B747C;
  --line:#E2DDD3; --line2:#D9D3C8; --soft:#F1EEE8; --chip:#F3F0EA; --white:#FFFFFF;
  --pine:#2E5B4F; --pine-dark:#1F4238; --pine-tint:#E8EFEB; --pine-text:#24453C;
  --amber-bg:#F8EFDD; --amber-line:#E9D3A8; --amber-text:#4A3408; --amber-icon:#7A5310;
  --serif:'Instrument Serif', Georgia, serif; --sans:'Hanken Grotesk', system-ui, sans-serif;
  --ease:cubic-bezier(.2,.7,.2,1);
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--cal);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased}
a{color:var(--pine)}a:hover{color:var(--pine-dark)}
button{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--pine);outline-offset:2px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

.shell{max-width:560px;margin:0 auto;padding:0 24px 56px;min-height:100vh}
.stack{display:flex;flex-direction:column;gap:24px}
.stack.tight{gap:14px}

/* barra superior */
.topbar{display:flex;align-items:center;justify-content:space-between;padding:18px 0 0;gap:12px}
.wordmark{font-size:12px;letter-spacing:.3em;font-weight:600}
.wordmark.light{color:#fff}
.tb-right{display:flex;align-items:center;gap:12px}
.saved{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);transition:opacity .3s}
.saved svg{flex-shrink:0}
.lang{display:flex;padding:3px;gap:2px;border-radius:999px;border:1px solid var(--line2);background:var(--white)}
.lang button{height:32px;min-width:40px;padding:0 10px;border:0;border-radius:999px;background:transparent;font-size:12px;font-weight:700;letter-spacing:.06em;cursor:pointer;transition:background .2s,color .2s}
.lang button[aria-pressed="true"]{background:var(--ink);color:var(--cal)}
.lang.on-dark{border:0;background:rgba(246,244,239,.12)}
.lang.on-dark button{color:#fff}
.lang.on-dark button[aria-pressed="true"]{background:var(--cal);color:var(--ink)}

.progress{padding:20px 0 0}
.progress .pl{display:flex;justify-content:space-between;font-size:12px;color:var(--muted)}
.progress .bar{margin-top:8px;height:3px;background:var(--line);border-radius:3px;overflow:hidden}
.progress .bar i{display:block;height:100%;background:var(--pine);transition:width 1s var(--ease)}

/* tipografía */
.h1{margin:0;font-family:var(--serif);font-weight:400;font-size:40px;line-height:1.04;letter-spacing:-.01em}
.h1.xl{font-size:46px;line-height:1.02}
.h1 em{font-style:italic;color:var(--pine)}
.lead{margin:0;font-size:16px;line-height:1.55;color:var(--ink2)}
.eyebrow{font-size:12px;letter-spacing:.18em;text-transform:uppercase;font-weight:600;color:var(--pine)}
.label{font-size:12px;letter-spacing:.16em;text-transform:uppercase;font-weight:600;color:var(--muted)}
.small{font-size:13px;color:var(--muted);margin:0}
.center{text-align:center}
.serif-num{font-family:var(--serif);line-height:1}

/* campos */
.field{display:flex;flex-direction:column;gap:8px}
.field > label,.field > .flabel{font-size:13px;font-weight:600}
.field .opt{font-weight:400;color:var(--muted)}
.inp,.ta{width:100%;border:1px solid var(--line2);border-radius:12px;background:var(--white);font:inherit;font-size:16px;color:var(--ink);outline:none;transition:border-color .2s,box-shadow .2s}
.inp{height:52px;padding:0 16px}
.ta{min-height:110px;padding:14px 16px;line-height:1.5;resize:vertical}
.inp:focus,.ta:focus{border-color:var(--pine);box-shadow:0 0 0 4px rgba(46,91,79,.14)}
.inp::placeholder,.ta::placeholder{color:var(--faint)}
.inp.err,.ta.err{border-color:#B4462F;box-shadow:0 0 0 4px rgba(180,70,47,.10)}
.errmsg{font-size:13px;color:#9A3A26}
.suffix{position:relative}
.suffix .inp{padding-right:44px}
.suffix span{position:absolute;right:16px;top:50%;transform:translateY(-50%);color:var(--muted);pointer-events:none}

/* chips */
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{height:44px;padding:0 16px;border-radius:999px;border:1px solid var(--line2);background:var(--white);font-size:14px;font-weight:500;cursor:pointer;transition:background .2s,color .2s,border-color .2s}
.chip[aria-pressed="true"]{background:var(--ink);color:var(--cal);border-color:var(--ink)}
.chip.sm{height:36px;padding:0 12px;font-size:13px}
.chip.soft[aria-pressed="true"]{background:var(--pine-tint);color:var(--pine-dark);border-color:var(--pine)}
.tag{display:inline-flex;align-items:center;gap:6px;padding:8px 8px 8px 14px;border-radius:999px;background:var(--white);border:1px solid var(--line);font-size:14px}
.tag button{width:26px;height:26px;border:0;border-radius:999px;background:var(--soft);cursor:pointer;font-size:14px;line-height:1;color:var(--ink2)}
.tag.static{padding:8px 14px}
.tag.amber{background:var(--amber-bg);border-color:var(--amber-line);color:var(--amber-text);padding:8px 14px}

/* stepper */
.stepper{display:flex;align-items:center;justify-content:space-between;height:56px;border:1px solid var(--line2);border-radius:12px;background:var(--white);padding:0 6px}
.stepper button{width:44px;height:44px;border:0;border-radius:999px;background:var(--soft);font-size:22px;cursor:pointer}
.stepper .serif-num{font-size:30px}

/* botones */
.btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;height:56px;border:0;border-radius:999px;background:var(--ink);color:var(--cal);font-weight:600;font-size:16px;text-decoration:none;cursor:pointer;transition:transform .25s ease,box-shadow .25s ease,opacity .2s}
.btn:hover{transform:translateY(-2px);box-shadow:0 10px 24px rgba(20,33,43,.18);color:var(--cal)}
.btn.pine{background:var(--pine);color:#fff}
.btn.ghost{background:transparent;color:var(--ink2);height:44px;font-weight:500;font-size:14px}
.btn.ghost:hover{box-shadow:none;transform:none;color:var(--ink)}
.btn.line{background:var(--white);color:var(--ink);border:1px solid var(--line2)}
.btn[disabled]{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none}
.linkbtn{background:none;border:0;padding:6px 0;color:var(--pine);font-size:14px;cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.actions{display:flex;flex-direction:column;gap:6px;padding-top:4px}

/* cajas */
.card{border-radius:18px;background:var(--white);border:1px solid var(--line);padding:18px}
.card.lift{border:0;box-shadow:0 1px 2px rgba(20,33,43,.06),0 14px 36px rgba(20,33,43,.07)}
.note{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:12px;background:var(--pine-tint);color:var(--pine-text);font-size:13px;line-height:1.5}
.note svg{flex-shrink:0;margin-top:1px}
.warn{display:flex;flex-direction:column;gap:12px;padding:16px;border-radius:16px;background:var(--amber-bg);border:1px solid var(--amber-line);color:var(--amber-text);font-size:14px;line-height:1.5}
.warn .wrow{display:flex;gap:10px}
.warn .wrow svg{flex-shrink:0;margin-top:1px}

/* bienvenida */
.hero{position:relative;height:340px;margin:0 -24px;overflow:hidden;border-radius:0 0 28px 28px;background:var(--ink)}
.hero svg.horizon{position:absolute;inset:0;width:100%;height:100%}
.hero .hero-top{position:absolute;left:24px;right:24px;top:18px;display:flex;align-items:center;justify-content:space-between}
.hero .place{position:absolute;left:24px;bottom:22px;font-family:var(--serif);font-style:italic;font-size:20px;color:rgba(246,244,239,.75)}
.herovid{position:relative;margin:16px -24px 0;aspect-ratio:4/5;overflow:hidden;background:var(--ink)}
.herovid video{width:100%;height:100%;object-fit:cover;display:block}
.soundbtn{display:flex;align-items:center;justify-content:center;gap:8px;margin:12px auto 0;height:44px;padding:0 18px;border:1px solid var(--line2);border-radius:999px;background:var(--white);color:var(--ink);font:inherit;font-size:14px;font-weight:600;cursor:pointer;transition:background .2s,color .2s}
.soundbtn:hover{background:var(--ink);color:var(--cal)}
.facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding:18px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.facts div{display:flex;flex-direction:column;gap:4px}
.facts b{font-family:var(--serif);font-weight:400;font-size:30px;line-height:1}
.facts span{font-size:12px;color:var(--muted)}
.need{display:flex;flex-direction:column;gap:12px}
.need div{display:flex;gap:12px;align-items:center;font-size:15px}

/* dossier */
.drop{position:relative;display:flex;flex-direction:column;align-items:center;gap:10px;padding:28px 20px;border:1.5px dashed #C9C2B5;border-radius:18px;background:var(--white);text-align:center;cursor:pointer;transition:border-color .2s,background .2s}
.drop.over,.drop:hover{border-color:var(--pine);background:#FBFAF7}
.drop input{position:absolute;inset:0;opacity:0;cursor:pointer}
.drop strong{font-size:15px}
.filecard{display:flex;gap:14px;align-items:center}
.thumb{position:relative;width:56px;height:72px;flex-shrink:0;border-radius:8px;overflow:hidden;border:1px solid var(--line);background:var(--soft);display:flex;align-items:center;justify-content:center}
.thumb img{width:100%;height:100%;object-fit:cover;object-position:center top;display:block}
.scanline{position:absolute;left:0;right:0;height:2px;background:#9FE0C9;box-shadow:0 0 10px 2px rgba(159,224,201,.9);animation:scan 1.8s ease-in-out infinite}
.fmeta{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}
.fmeta strong{font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.minibar{height:4px;background:#EEEAE3;border-radius:4px;overflow:hidden}
.minibar i{display:block;height:100%;width:0;background:var(--pine);transition:width .4s var(--ease)}
.checklist{display:flex;flex-direction:column;gap:12px;padding-top:14px;margin-top:14px;border-top:1px solid #EEEAE3}
.ck{display:flex;align-items:center;gap:12px;font-size:15px;color:var(--faint);transition:color .3s}
.ck .ico{width:22px;height:22px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.ck .dot{width:8px;height:8px;border-radius:999px;background:var(--line2)}
.ck.active{color:var(--ink);font-weight:600}
.ck.active .dot{width:10px;height:10px;background:var(--pine);animation:pulse 1s ease-in-out infinite}
.ck.done{color:var(--ink)}
.ck.just svg{animation:pop .35s cubic-bezier(.2,.9,.3,1.3) both}

/* lo leído */
.tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.tile{display:flex;flex-direction:column;gap:4px;padding:14px;border:1px solid var(--line);border-radius:14px;background:var(--white)}
.tile input{width:100%;border:0;background:transparent;font-family:var(--serif);font-size:34px;line-height:1;color:var(--ink);padding:0;outline:none;-moz-appearance:textfield}
.tile input::-webkit-outer-spin-button,.tile input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.tile span{font-size:12px;color:var(--muted)}
.tile:focus-within{border-color:var(--pine);box-shadow:0 0 0 4px rgba(46,91,79,.12)}
.list{border-radius:16px;background:var(--white);border:1px solid var(--line);overflow:hidden}
.list .row{display:flex;align-items:center;gap:8px;padding:8px 10px 8px 16px;border-top:1px solid #F0ECE5}
.list .row:first-child{border-top:0}
.list .row input{border:0;background:transparent;font:inherit;font-size:15px;color:var(--ink);outline:none;padding:8px 0;min-width:0}
.list .row input.place{flex:1}
.list .row input.km{width:56px;text-align:right;font-weight:600}
.list .row .unit{font-size:14px;color:var(--muted)}
.xbtn{width:32px;height:32px;border:0;border-radius:999px;background:var(--soft);cursor:pointer;color:var(--ink2);flex-shrink:0}
.addrow{display:flex;gap:8px}
.addrow .inp{height:44px}
.addrow .chip{flex-shrink:0}

/* precios */
.calcard{display:flex;flex-direction:column;gap:14px}
.calcard .caltitle{font-family:var(--serif);font-size:26px;line-height:1.1}
.upbtn{position:relative;overflow:hidden}
.upbtn input{position:absolute;inset:0;opacity:0;cursor:pointer}
.shots{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.shot{position:relative;overflow:hidden;border-radius:8px;border:1px solid var(--line);aspect-ratio:3/4;background:var(--soft);animation:fadein .4s both}
.shot img{width:100%;height:100%;object-fit:cover;object-position:top;display:block}
/* precios por día */
.month{display:flex;flex-direction:column;gap:10px;padding:16px 12px;border-radius:16px;background:var(--white);border:1px solid var(--line)}
.mhead{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:0 4px}
.mhead b{font-family:var(--serif);font-weight:400;font-size:24px;line-height:1}
.mhead span{font-size:12px;color:var(--muted);text-align:right;line-height:1.4}
.cal7{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:3px}
.cal7 .dw{font-size:11px;color:var(--muted);text-align:center;padding:2px 0}
.dc{height:46px;border:0;border-radius:8px;padding:3px 1px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;cursor:pointer;transition:transform .15s ease}
.dc:hover{transform:scale(1.04)}
.dc i{font-style:normal;font-size:10px;color:var(--muted);line-height:1}
.dc b{font-size:12px;font-weight:600;color:var(--ink);line-height:1.1;letter-spacing:-.01em}
.dc.res{background:#F3F0EA}
.dc.res b{color:var(--faint);font-weight:400}
.dc.nod{background:transparent;cursor:default}
.dc.nod:hover{transform:none}
.dc.sel{outline:2px solid var(--pine);outline-offset:-2px}
.dayed{display:flex;flex-direction:column;gap:8px;padding:12px;border-radius:12px;background:var(--pine-tint)}
.dayed > span{font-size:13px;font-weight:600;color:var(--pine-text)}
.tiles3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.upl{position:relative;display:flex;flex-direction:column;align-items:center;gap:8px;padding:16px 8px;border:1px solid var(--line);border-radius:14px;background:var(--white);font-size:13px;font-weight:600;cursor:pointer;transition:border-color .2s}
.upl:hover{border-color:var(--pine)}
.upl input{position:absolute;inset:0;opacity:0;cursor:pointer}
.radio{display:flex;gap:14px;align-items:flex-start;width:100%;padding:16px;border-radius:14px;background:var(--white);border:1px solid var(--line);text-align:left;cursor:pointer;transition:border-color .2s,box-shadow .2s}
.radio[aria-pressed="true"]{border:1.5px solid var(--pine);box-shadow:0 0 0 4px rgba(46,91,79,.10)}
.radio .dot{flex-shrink:0;margin-top:2px;width:18px;height:18px;border-radius:999px;border:1.5px solid #B9B1A3;background:#fff}
.radio[aria-pressed="true"] .dot{border:5px solid var(--pine)}
.radio b{display:block;font-size:15px}
.radio span{display:block;font-size:13px;line-height:1.45;color:var(--muted);margin-top:4px}
.rate{display:flex;flex-direction:column;gap:12px;padding:16px;border-radius:16px;background:var(--white);border:1px solid var(--line)}
.rate.closed{background:#FBFAF7}
.rate-top{display:flex;gap:8px;align-items:center}
.rate-top input{flex:1;min-width:0;border:0;background:transparent;font-family:var(--serif);font-size:24px;color:var(--ink);outline:none;padding:0}
.rate-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.rate-grid label{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--muted)}
.rate-grid .inp{height:46px;padding:0 12px;font-size:15px}
.rate-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;font-size:13px;color:var(--muted)}
.rate-foot b{color:var(--pine);font-weight:600}
.skeleton{height:118px;border-radius:16px;background:linear-gradient(90deg,#EFEBE4 0%,#F7F5F0 50%,#EFEBE4 100%);background-size:200% 100%;animation:shimmer 1.4s linear infinite}

/* revisión */
.vcard{border-radius:20px;background:var(--white);overflow:hidden;box-shadow:0 1px 2px rgba(20,33,43,.06),0 16px 40px rgba(20,33,43,.08)}
.vcard .ph{height:210px;overflow:hidden;background:var(--ink);display:flex;align-items:flex-end}
.vcard .ph img{width:100%;height:100%;object-fit:cover;object-position:center top;display:block;animation:kb 12s var(--ease) both;transform-origin:center top}
.vcard .ph .ph-name{padding:20px;font-family:var(--serif);font-size:30px;color:var(--cal)}
.vcard .body{padding:18px 18px 20px;display:flex;flex-direction:column;gap:10px}
.vcard .name{font-family:var(--serif);font-size:32px;line-height:1}
.vcard .specs{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:14px;font-weight:600;padding:10px 0;border-top:1px solid #F0ECE5;border-bottom:1px solid #F0ECE5}
.vcard .pills{display:flex;flex-wrap:wrap;gap:6px}
.vcard .pills span{padding:6px 12px;border-radius:999px;background:var(--chip);font-size:13px}
.vcard .checks{display:flex;flex-wrap:wrap;gap:12px;font-size:12px;color:var(--pine);font-weight:600}
.qline{display:flex;justify-content:space-between;gap:12px;font-size:15px}
.qline.total{padding-top:10px;border-top:1px solid #F0ECE5;font-weight:600}
.qline.sub{font-size:14px;color:var(--muted)}
.owner-box{display:flex;flex-direction:column;gap:8px;padding:16px;border-radius:14px;background:var(--ink);color:var(--cal)}
.owner-box .ob1{display:flex;justify-content:space-between;gap:12px;font-size:14px;color:#C9CFD3}
.owner-box .ob1 span:last-child,.qline b,.qline span:last-child{white-space:nowrap}
.owner-box .ob2{display:flex;justify-content:space-between;align-items:baseline}
.owner-box .ob2 b{font-family:var(--serif);font-weight:400;font-size:36px;line-height:1}
.owner-box small{font-size:12px;color:#C9CFD3}
.confirm{display:flex;gap:12px;align-items:flex-start;font-size:14px;color:var(--ink2)}
.confirm input{width:22px;height:22px;margin:0;accent-color:var(--pine);flex-shrink:0}

/* enviada */
.timeline{display:flex;flex-direction:column}
.tl{display:flex;gap:14px}
.tl .rail{display:flex;flex-direction:column;align-items:center}
.tl .node{width:22px;height:22px;border-radius:999px;box-sizing:border-box;display:flex;align-items:center;justify-content:center}
.tl .node.done{background:var(--pine)}
.tl .node.now{border:2px solid var(--pine);background:#fff}
.tl .node.now i{width:8px;height:8px;border-radius:999px;background:var(--pine)}
.tl .node.next{border:2px solid var(--line2);background:#fff}
.tl .seg{width:2px;height:34px;background:var(--line2)}
.tl .seg.done{background:var(--pine)}
.tl b{display:block;font-size:15px}
.tl span{font-size:13px;color:var(--muted)}

/* animaciones */
@keyframes rise{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
@keyframes scan{0%{top:0}50%{top:calc(100% - 2px)}100%{top:0}}
@keyframes pulse{0%,100%{transform:scale(.8);opacity:.5}50%{transform:scale(1.15);opacity:1}}
@keyframes pop{from{transform:scale(.4);opacity:0}to{transform:scale(1);opacity:1}}
@keyframes kb{from{transform:scale(1.08)}to{transform:scale(1)}}
@keyframes shimmer{from{background-position:200% 0}to{background-position:-200% 0}}
@keyframes draw{from{stroke-dashoffset:var(--len,300)}to{stroke-dashoffset:0}}
@keyframes drift{from{transform:translateX(0)}to{transform:translateX(-80px)}}
@keyframes twinkle{0%,100%{opacity:.25}50%{opacity:.9}}
@keyframes fadein{from{opacity:0}to{opacity:1}}
.enter .rise{animation:rise .8s var(--ease) both}
.enter .d1{animation-delay:.08s}.enter .d2{animation-delay:.16s}.enter .d3{animation-delay:.24s}.enter .d4{animation-delay:.32s}.enter .d5{animation-delay:.4s}.enter .d6{animation-delay:.48s}
.fade{animation:fadein .4s ease both}
.horizon .sun{stroke-dasharray:240;--len:240;animation:draw 2.4s var(--ease) .3s both}
.horizon .hline{stroke-dasharray:420;--len:420;animation:draw 1.8s var(--ease) both}
.horizon .waves{animation:drift 9s linear infinite}
.horizon .waves.slow{animation-duration:14s}
.horizon .star{animation:twinkle 3.2s ease-in-out infinite}
.ring{stroke-dasharray:190;--len:190;animation:draw 1s var(--ease) both}
.tick{stroke-dasharray:60;--len:60;animation:draw .5s .7s var(--ease) both}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}

@media (min-width:720px){
  .shell{padding-top:24px}
  .hero{margin:0;border-radius:28px;height:360px}
  .herovid{margin:20px auto 0;max-width:460px;border-radius:24px}
}
