    /* ── Villa login (#637) — page-scoped on top of site tokens ─────────────── */
    .villa-wrap{max-width:680px;margin:0 auto;padding:4.5rem 1.25rem 6rem}
    .villa-card{background:var(--bg-2);border:1px solid var(--line);border-radius:10px;
      padding:2rem 1.75rem;margin:1.5rem 0}
    .villa-card h2{font-family:var(--serif);color:var(--gold);font-weight:normal;
      font-size:1.35rem;margin:0 0 .75rem;letter-spacing:.02em}
    .villa-card p{color:var(--muted);line-height:1.65;margin:.5rem 0}
    .v-label{display:block;color:var(--muted);font-size:.8rem;letter-spacing:.08em;
      text-transform:uppercase;margin:1.1rem 0 .35rem}
    .v-input, .v-area{width:100%;background:var(--bg);border:1px solid var(--line);border-radius:6px;
      color:var(--ink);padding:.65rem .8rem;font-size:1rem;font-family:var(--sans)}
    .v-area{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.85rem;min-height:4.5rem;resize:vertical}
    .v-input:focus,.v-area:focus{outline:none;border-color:var(--gold-soft)}
    .v-btn{display:inline-block;background:transparent;border:1px solid var(--gold);color:var(--gold);
      font-family:var(--serif);font-size:1.05rem;letter-spacing:.04em;border-radius:6px;
      padding:.6rem 1.6rem;margin-top:1.2rem;cursor:pointer;transition:background .2s,color .2s}
    .v-btn:hover:not(:disabled){background:var(--gold);color:var(--bg)}
    .v-btn:disabled{opacity:.35;cursor:not-allowed}
    .v-btn--ghost{border-color:var(--line);color:var(--muted);font-size:.9rem;padding:.45rem 1.1rem}
    .v-btn--ghost:hover{background:transparent;border-color:var(--gold-soft);color:var(--gold-soft)}
    .v-row{display:flex;gap:.75rem;flex-wrap:wrap;align-items:center}
    .v-note{font-size:.85rem;color:var(--muted);margin-top:.9rem;line-height:1.55}
    .v-mono{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.85rem;color:var(--ink);
      word-break:break-all;background:var(--bg);border:1px solid var(--line);border-radius:6px;
      padding:.6rem .8rem;margin:.4rem 0}
    .v-phrase{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:.4rem;margin:.8rem 0}
    .v-phrase span{background:var(--bg);border:1px solid var(--line);border-radius:5px;
      padding:.35rem .5rem;font-size:.85rem;color:var(--ink)}
    .v-phrase b{color:var(--gold-soft);font-weight:normal;margin-right:.35rem;font-size:.75rem}
    .v-status{margin-top:1rem;padding:.7rem .9rem;border-radius:6px;font-size:.9rem;display:none;line-height:1.5}
    .v-status.ok{display:block;border:1px solid rgba(120,180,120,.4);color:#a8d5a8;background:rgba(60,120,60,.08)}
    .v-status.err{display:block;border:1px solid rgba(155,35,53,.5);color:#e0a3ad;background:rgba(155,35,53,.1)}
    .v-status.info{display:block;border:1px solid var(--line);color:var(--muted);background:var(--bg)}
    .v-warn{border:1px solid rgba(155,35,53,.5);border-radius:8px;background:rgba(155,35,53,.07);
      padding:1rem 1.2rem;margin:1rem 0;color:var(--ink);font-size:.92rem;line-height:1.6}
    .v-warn strong{color:#e0a3ad}
    .v-check{display:flex;gap:.6rem;align-items:flex-start;margin-top:.8rem;color:var(--muted);font-size:.9rem}
    .v-check input{margin-top:.25rem;accent-color:var(--gold)}
    .v-handle{font-family:var(--serif);color:var(--gold);font-size:1.4rem;letter-spacing:.03em;word-break:break-all}
    .v-screen{display:none}
    .v-screen.active{display:block}
    .v-tabs{display:flex;gap:.5rem;border-bottom:1px solid var(--line);margin-bottom:1.2rem}
    .v-tab{background:none;border:none;color:var(--muted);font-family:var(--serif);font-size:1rem;
      padding:.5rem .9rem;cursor:pointer;border-bottom:2px solid transparent}
    .v-tab.active{color:var(--gold);border-bottom-color:var(--gold)}
    .v-divider{border:none;border-top:1px solid var(--line);margin:1.6rem 0}
    .v-kicker{color:var(--muted);letter-spacing:.14em;text-transform:uppercase;font-size:.78rem;text-align:center}
    .v-title{font-family:var(--serif);color:var(--ink);font-weight:normal;text-align:center;
      font-size:2rem;margin:.4rem 0 .2rem}
    .v-sub{text-align:center;color:var(--muted);font-size:.95rem}
/* CSP: utilidades que sustituyen a los style= inline (el VPS sirve style-src 'self') */
.v-hide{display:none}
.v-center{text-align:center}
.v-left{text-align:left}
.v-handle--sm{font-size:1.05rem}
.v-row--center{justify-content:center;margin-top:.8rem}
