/* Client portal. Porta website brand lock (ground #0C121B, gold hairlines, bone kickers, one champagne italic word per heading)
   with Porta OS depth: cards sit on layers, things rise and settle. Loaded after styles.css, so the tokens below re-theme it. 375 px first. */
@font-face{font-family:Cormorant;src:url('/assets/cormorant-500i.woff2') format('woff2');font-weight:500;font-style:italic;font-display:swap}
@font-face{font-family:Mono;src:url('/assets/jbmono-500.woff2') format('woff2');font-weight:500;font-display:swap}
:root{--bg:#0C121B;--navy:#090E15;--panel:#141D29;--panel2:#1A2533;--line:rgba(255,255,255,.09);--line2:rgba(255,255,255,.16);--text:#F2F5F9;--head:#F2EEE6;--body:#B9C1CB;--dim:#93A0AE;--steel:#A9BED2;--sky:#A9BED2;--bone:#E7DFD0;--gold:#D9B26A;--champ:#E9D9B4;--green:#7CC8A0;--red:#F2767E;--ease:cubic-bezier(.16,1,.3,1);--mono:Mono,ui-monospace,'SF Mono',Menlo,monospace}
body{color:var(--body);background:var(--bg)}
.ambient{background:radial-gradient(620px 420px at 82% -140px,rgba(96,132,170,.30),transparent 72%),radial-gradient(520px 360px at -10% 78%,rgba(217,178,106,.07),transparent 70%)}
a{color:var(--bone)}
header{border-bottom:1px solid var(--line)}header .eyebrow{font-size:9.5px}header .eyebrow:before{display:none}
footer{font-family:var(--mono);font-size:9px;letter-spacing:.2em}

/* type */
.eyebrow{display:flex;align-items:center;gap:12px;font:500 11px/1.4 var(--mono);letter-spacing:.22em;text-transform:uppercase;color:var(--bone)}
.eyebrow:before{content:"";width:28px;height:1px;background:var(--gold);flex-shrink:0}
h1{font-size:clamp(32px,9.6vw,44px);line-height:1.04;letter-spacing:-.03em;font-weight:600;color:var(--head);margin:16px 0 12px}
h1 em{font-family:Cormorant,Georgia,serif;font-style:italic;font-weight:500;font-size:1.12em;letter-spacing:-.01em;color:var(--champ);font-variant-numeric:lining-nums}
h2{color:var(--head);font-weight:600}
.sub{color:var(--body);font-size:16px;line-height:1.65}
.note{color:var(--dim);font-size:13.5px}
.view{padding-top:4px}.hd{margin-bottom:6px}
.section-title{font:500 11px/1.4 var(--mono);letter-spacing:.22em;text-transform:uppercase;color:var(--bone);margin:34px 0 4px}

/* motion: rise and settle, staggered */
.screen{animation:none}
.view>*{animation:rise .7s var(--ease) backwards}
.view>:nth-child(2){animation-delay:.07s}.view>:nth-child(3){animation-delay:.14s}.view>:nth-child(4){animation-delay:.21s}.view>:nth-child(5){animation-delay:.28s}.view>:nth-child(n+6){animation-delay:.34s}
.stack>*{animation:rise .7s var(--ease) backwards}.stack>:nth-child(2){animation-delay:.12s}.stack>:nth-child(3){animation-delay:.2s}
@keyframes rise{from{opacity:0;transform:translateY(18px);filter:blur(4px)}to{opacity:1;transform:none;filter:blur(0)}}

/* cards: layered and physical */
.card{background:linear-gradient(180deg,#152030,#0C121B);border:1px solid var(--line);border-radius:16px;padding:20px;margin:16px 0 0;box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 22px 40px -26px rgba(0,0,0,.85);transition:border-color .3s var(--ease),transform .3s var(--ease)}
.stack{display:grid;gap:12px;margin:26px 0 4px;position:relative}.stack>.card{margin:0}
.card.quiet{opacity:.62}
.step,.card.row{display:flex;gap:14px;align-items:flex-start}
.card.row{align-items:center;justify-content:space-between;margin:12px 0 0}
.step-body,.grow{flex:1;min-width:0}
.step h2,.card.row h2{margin:0;font-size:17px;letter-spacing:-.015em;overflow-wrap:anywhere}
.card.row h2{font-size:16px}.card.row .note{margin:2px 0 0}.card.row .pill{flex-shrink:0;max-width:44%;text-align:center}
.step .note{margin:6px 0 0;line-height:1.55}
.num{display:inline-block;margin-right:10px;font:500 11px var(--mono);letter-spacing:.16em;color:var(--gold);vertical-align:2px}
.ico{display:grid;place-items:center;flex-shrink:0;width:44px;height:44px;border-radius:12px;color:var(--steel);background:linear-gradient(180deg,rgba(255,255,255,.07),rgba(255,255,255,.02));border:1px solid var(--line)}
.step .item-title{align-items:flex-start}
.step .item-title h2{flex:1;min-width:0}
.card .btn{margin-top:16px}
.card.next{margin-top:22px;border-color:rgba(217,178,106,.28);background:linear-gradient(180deg,#182436,#0C121B)}
.card.next h2{font-size:23px;margin:8px 0 2px;letter-spacing:-.02em}.card.next .sub{margin:0}
.card.next .eyebrow{font-size:10.5px}

/* chips: mono caps pills */
.pill{font:500 10px/1.3 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--dim);border:1px solid var(--line2);border-radius:999px;padding:6px 10px;margin:0;display:inline-block;white-space:nowrap}
.item-title .pill{font-size:10px;margin:0}
.pill.green{color:var(--green);border-color:rgba(124,200,160,.4);background:rgba(124,200,160,.06)}.pill.amber{color:var(--gold);border-color:rgba(217,178,106,.45);background:rgba(217,178,106,.06)}.pill.dim{color:var(--dim);border-color:var(--line2)}.pill.red{color:var(--red);border-color:rgba(242,118,126,.45)}
a.pill{text-decoration:none;min-height:32px;display:inline-flex;align-items:center}
.card.row .pill,.file .pill{white-space:normal;text-align:center}
.view>.pill{margin:22px 0 0}

/* buttons: Porta site style. Solid is white with navy text, ghost is a thin outline. */
.btn{border-radius:2px;min-height:54px;font:400 12.5px/1.2 Inter,system-ui,sans-serif;letter-spacing:.2em;text-transform:uppercase;border:1px solid var(--line2);background:rgba(255,255,255,.04);color:var(--text);transition:transform .25s var(--ease),background .25s ease,box-shadow .35s var(--ease),border-color .25s ease;margin-top:16px}
.btn:hover{filter:none;background:rgba(255,255,255,.08)}.btn:active{transform:scale(.985)}
.btn.primary{background:#F5F6F7;color:#0C121B;border-color:#F5F6F7;font-weight:600;box-shadow:0 14px 30px -14px rgba(169,190,210,.5)}
.btn.primary:hover{background:#fff;box-shadow:0 18px 36px -14px rgba(169,190,210,.7)}
.btn.ghost{background:transparent;border-color:var(--line2);color:var(--body);margin-top:10px}
.btn.ghost:hover{border-color:var(--steel);color:var(--text)}
.btn:disabled{opacity:.55}
.btn.is-busy{opacity:1}
.arrow{width:16px}
.view>.btn{margin-top:20px}
.back{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 12px 0 0;margin:0 0 4px;background:none;border:0;color:var(--bone);font:500 11px var(--mono);letter-spacing:.2em;text-transform:uppercase}
.back:active{opacity:.7}
.lock{display:block}.lock svg{display:inline;vertical-align:-2px;margin-right:8px;color:var(--gold)}

/* code boxes: six visual cells painted from one transparent input on top (keeps one-time-code autofill, paste, backspace) */
.codeform{margin:28px 0 0}.codeform label{font:500 11px var(--mono);letter-spacing:.2em;text-transform:uppercase;color:var(--bone)}
.otp-wrap{position:relative;margin:12px 0 4px}
.otp-cells{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px}
.otp-cell{position:relative;display:grid;place-items:center;min-height:64px;border-radius:12px;border:1px solid var(--line2);background:linear-gradient(180deg,#182436,#101926);font:600 28px/1 Inter,system-ui,sans-serif;font-variant-numeric:tabular-nums lining-nums;letter-spacing:0;color:var(--head);box-shadow:inset 0 1px 0 rgba(255,255,255,.05);transition:border-color .25s var(--ease),box-shadow .25s var(--ease),transform .25s var(--ease)}
.otp-cell.filled{border-color:rgba(169,190,210,.5)}
.otp-cell.pop{animation:cellpop .35s var(--ease)}
.otp-wrap:focus-within .otp-cell.on{border-color:var(--gold);box-shadow:0 0 0 3px rgba(217,178,106,.18),inset 0 1px 0 rgba(255,255,255,.05)}
.otp-wrap:focus-within .otp-cell.on:empty:after{content:"";width:2px;height:28px;background:var(--gold);border-radius:1px;animation:blink 1.1s steps(1) infinite}
.otp{position:absolute;inset:0;width:100%;height:100%;min-height:0;margin:0;padding:0;border:0;border-radius:12px;background:transparent;color:transparent;-webkit-text-fill-color:transparent;caret-color:transparent;font-size:16px;letter-spacing:0;opacity:.01;outline:none;text-align:center}
.otp:focus{outline:none}
.otp::selection{background:transparent}
@keyframes blink{50%{opacity:0}}@keyframes cellpop{from{transform:scale(.9)}to{transform:none}}

/* steps rail */
.rail{list-style:none;display:flex;margin:26px 0 4px;padding:0}
.rail li{flex:1;position:relative;display:flex;flex-direction:column;align-items:center;gap:8px;font:500 10px var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--dim);min-width:0;text-align:center}
.rail li+li:before{content:"";position:absolute;top:15px;right:50%;width:100%;height:1px;background:var(--line2);z-index:0;transition:background .5s var(--ease)}
.rail li.done+li:before,.rail li.now:before{background:linear-gradient(90deg,var(--steel),var(--gold))}
.rail .dot{position:relative;z-index:1;width:31px;height:31px;border-radius:50%;display:grid;place-items:center;font:500 12px var(--mono);letter-spacing:0;background:var(--bg);border:1px solid var(--line2);transition:background .4s var(--ease),border-color .4s var(--ease),color .4s var(--ease)}
.rail .now{color:var(--head)}.rail .now .dot{border-color:var(--gold);color:var(--gold);box-shadow:0 0 0 4px rgba(217,178,106,.12)}
.rail .done .dot{background:var(--steel);border-color:var(--steel);color:#0C121B}
.progress{list-style:none;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin:20px 0 0;padding:0}
.progress li{font:500 9.5px/1.3 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--dim);text-align:center;padding:10px 2px;border-radius:999px;border:1px solid var(--line);overflow-wrap:anywhere}
.progress .done{color:var(--steel);border-color:rgba(169,190,210,.35)}.progress .now{color:#0C121B;background:var(--champ);border-color:var(--champ);font-weight:600}

/* payment choice */
.choice{display:grid;gap:12px;margin:26px 0 0}
.opt{display:grid;grid-template-columns:1fr auto;gap:2px 10px;text-align:left;min-height:68px;padding:16px 18px;border-radius:16px;border:1px solid var(--line2);background:linear-gradient(180deg,#152030,#0C121B);color:var(--text);transition:border-color .3s var(--ease),box-shadow .3s var(--ease),transform .25s var(--ease)}
.opt:active{transform:scale(.99)}.opt strong{font-weight:600;color:var(--head)}.opt span{font-size:18px;font-weight:600;color:var(--head)}.opt em{grid-column:1/-1;font:500 10px var(--mono);letter-spacing:.14em;text-transform:uppercase;font-style:normal;color:var(--green)}
.opt.on{border-color:var(--gold);box-shadow:0 0 0 3px rgba(217,178,106,.14),0 18px 36px -24px rgba(0,0,0,.9)}

/* face id + booked */
.face-icon{position:relative;width:84px;height:84px;border-radius:24px;border:1px solid rgba(169,190,210,.5);color:var(--steel);background:linear-gradient(180deg,rgba(169,190,210,.14),rgba(169,190,210,.03));margin:12px auto 30px;box-shadow:0 0 50px -8px rgba(127,168,216,.45)}
.face-icon:after{content:"";position:absolute;inset:-9px;border-radius:30px;border:1px solid rgba(217,178,106,.4);animation:halo 2.8s var(--ease) infinite}
.center .eyebrow{justify-content:center}
.check{position:relative;display:grid;place-items:center;width:84px;height:84px;border-radius:50%;border:1px solid rgba(124,200,160,.6);color:var(--green);margin:18px auto 28px;background:radial-gradient(circle,rgba(124,200,160,.16),transparent 70%);box-shadow:0 0 54px -8px rgba(124,200,160,.5);animation:pop .7s var(--ease)}
.check .tick{stroke-dasharray:30;stroke-dashoffset:0;animation:draw .7s .25s var(--ease) backwards}
@keyframes pop{from{opacity:0;transform:scale(.7)}to{opacity:1;transform:none}}@keyframes draw{from{stroke-dashoffset:30}to{stroke-dashoffset:0}}@keyframes halo{0%{opacity:.8;transform:scale(.96)}100%{opacity:0;transform:scale(1.18)}}

/* frames, help, files, tabs */
.frame{min-height:300px;border-radius:16px;border:1px solid var(--line);background:linear-gradient(180deg,#152030,#0C121B);display:grid;place-items:center;padding:14px;margin:22px 0 14px;overflow:hidden;box-shadow:0 22px 40px -26px rgba(0,0,0,.85)}.frame iframe{width:100%;height:520px;border:0;border-radius:10px;background:#fff}
.help{display:flex;align-items:center;gap:14px;margin:30px 0 8px;padding:14px 16px;border-radius:16px;background:rgba(255,255,255,.03);border:1px solid var(--line)}.help div{display:flex;flex-direction:column;font-size:14px;color:var(--head)}.help a{min-height:24px;font:500 11px/2 var(--mono);letter-spacing:.18em;text-transform:uppercase}
.avatar{display:grid;place-items:center;width:44px;height:44px;border-radius:50%;background:linear-gradient(180deg,#1f2d41,#141d29);border:1px solid rgba(217,178,106,.4);color:var(--champ);font:600 16px Cinzel,serif}
.file{display:grid;grid-template-columns:76px minmax(0,1fr);gap:16px;align-items:center;margin:12px 0 0}.file h2{margin:0 0 2px;font-size:16px}.file .note{margin:0 0 10px}.file .pill{font-size:9.5px}
.thumb{display:grid;place-items:center;width:76px;height:76px;border-radius:12px;color:var(--steel);background:radial-gradient(circle at 30% 20%,rgba(127,168,216,.28),transparent 65%),linear-gradient(135deg,#1c293b,#0b1018);border:1px solid var(--line)}
.tabs{position:sticky;bottom:10px;display:grid;grid-template-columns:repeat(4,1fr);gap:2px;margin:32px 0 0;padding:6px;border-radius:18px;border:1px solid var(--line2);background:rgba(14,21,31,.82);backdrop-filter:blur(16px) saturate(1.3);-webkit-backdrop-filter:blur(16px) saturate(1.3);box-shadow:0 18px 40px -16px rgba(0,0,0,.9);animation:none}
.tabs a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:50px;border-radius:13px;color:var(--dim);text-decoration:none;font:500 9.5px var(--mono);letter-spacing:.14em;text-transform:uppercase;transition:color .25s ease,background .35s var(--ease)}
.tabs a.on{color:var(--champ);background:rgba(255,255,255,.07)}
.tabs svg{opacity:.9}

.skeleton{height:96px;border-radius:16px;margin:14px 0;background:linear-gradient(90deg,#141d29 0 40%,#1a2533 50%,#141d29 60% 100%) 0 0/200% 100%;animation:shimmer 1.4s ease infinite}
@keyframes shimmer{to{background-position:-200% 0}}
.btn.is-busy{cursor:progress}.spin{width:16px;height:16px;border-radius:50%;border:2px solid currentColor;border-right-color:transparent;animation:spin .7s linear infinite;flex-shrink:0}@keyframes spin{to{transform:rotate(360deg)}}
input{border-radius:10px}input:focus{outline:2px solid var(--steel);outline-offset:2px}
.notice{border-radius:12px}

@media(hover:hover){.card:hover{border-color:var(--line2)}}
@media(max-width:340px){.otp-cells{gap:6px}.otp-cell{font-size:24px;min-height:60px}.btn{letter-spacing:.14em}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}.spin{border-right-color:currentColor;opacity:.6}.otp-wrap:focus-within .otp-cell.on:empty:after{animation:none}}
