@import url('https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=DM+Sans:wght@400;500;600;700&family=Fraunces:opsz,wght@9..144,600&display=swap');
:root{--ink:#173a32;--muted:#6f7b75;--paper:#f7f7f2;--card:#fff;--line:#e5e8df;--lime:#dfff58;--orange:#ee6e4c;--yellow:#f5bd44;--mint:#def1df}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:15px 'DM Sans',sans-serif}.shell{display:flex;min-height:100vh}.sidebar{background:#153c33;color:#dfe9e3;width:240px;position:fixed;inset:0 auto 0 0;padding:28px 16px;display:flex;flex-direction:column}.brand{color:#fff;text-decoration:none;display:flex;align-items:center;gap:10px;font:600 18px/15px 'DM Sans'}.brand b{color:var(--lime)}.brand-mark{background:var(--lime);color:var(--ink);border-radius:10px;width:36px;height:36px;display:grid;place-content:center;font:bold 23px Fraunces}.sidebar nav{margin-top:52px;display:grid;gap:7px}.nav-link{color:#b9ccc3;text-decoration:none;padding:12px;border-radius:9px;display:flex;gap:13px;align-items:center;font-weight:500}.nav-link.active,.nav-link:hover{color:white;background:#285045}.nav-link:first-letter{font-size:19px}.sidebar-foot{margin-top:auto;font-size:11px;color:#a2bbb0}.online-dot{width:7px;height:7px;background:var(--lime);border-radius:50%;display:inline-block;margin-right:6px}main{width:calc(100% - 240px);margin-left:240px}.topbar{height:112px;padding:25px 5.5%;display:flex;align-items:center;border-bottom:1px solid var(--line);justify-content:space-between}.topbar h1{font:600 30px Fraunces;margin:2px 0 0}.eyebrow{text-transform:uppercase;letter-spacing:1.3px;font:500 10px 'DM Mono';color:#77877e;margin:0 0 8px}.avatar{border:0;background:#f1c8ad;color:#65331e;font-weight:700;width:40px;height:40px;border-radius:50%}.menu-button{display:none}.view{display:none;padding:34px 5.5% 60px;max-width:1440px;margin:auto}.view.active{display:block}.hero{background:var(--ink);padding:30px 34px;min-height:148px;color:#fff;border-radius:15px;display:flex;justify-content:space-between;align-items:center;background-image:radial-gradient(circle at 80% -15%,#477a69 0 2%,transparent 27%)}.hero h2,.section-heading h2{font:600 29px Fraunces;margin:0}.hero .eyebrow{color:var(--lime)}.hero p:not(.eyebrow){margin:7px 0 0;color:#d2ddd6}.primary,.secondary,.filter{border:0;border-radius:8px;padding:11px 15px;font:600 13px 'DM Sans';cursor:pointer}.primary{background:var(--lime);color:#193a32}.secondary,.filter{background:#fff;border:1px solid var(--line);color:var(--ink)}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:20px 0}.metrics article{background:white;padding:18px;border:1px solid var(--line);border-radius:10px}.metrics span{display:block;color:var(--muted);font-size:12px}.metrics strong{display:block;font:600 26px Fraunces;margin:6px 0}.metrics small{color:#638176;font-size:11px}.dashboard-grid{display:grid;grid-template-columns:1.6fr 1fr;gap:16px}.card{background:var(--card);border:1px solid var(--line);border-radius:11px;padding:20px}.wide{grid-row:span 2}.card-head{display:flex;justify-content:space-between;gap:12px;align-items:start;margin-bottom:14px}.card h3{font:600 18px Fraunces;margin:0}.card p{font-size:12px;color:var(--muted);margin:4px 0 0}.text-button{border:0;color:#387463;background:none;font:600 12px 'DM Sans';cursor:pointer}.progress-item{display:grid;grid-template-columns:38px 1fr auto;gap:11px;align-items:center;padding:13px 0;border-top:1px solid var(--line)}.progress-item:first-child{border-top:0}.initials{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;background:#edf4e7;font-size:11px;font-weight:700}.progress-item b{display:block;font-size:13px}.progress-item small{color:var(--muted);font-size:11px}.delta{font-size:11px;font-weight:700;color:#398068;text-align:right}.delta.warn{color:#bd7741}.agenda-list,.alerts{display:grid;gap:10px}.agenda-item{padding:10px 0;border-bottom:1px solid var(--line);display:flex;gap:11px}.agenda-time{font:500 11px 'DM Mono';color:#54796c;width:40px}.agenda-item b,.alert-item b{font-size:12px;display:block}.agenda-item span,.alert-item span{font-size:11px;color:var(--muted)}.alert-item{padding:11px;background:#fff6de;border-radius:7px;border-left:3px solid var(--yellow)}.section-heading{display:flex;align-items:end;justify-content:space-between;margin-bottom:24px}.toolbar{display:flex;gap:10px;margin-bottom:18px}.toolbar input{min-width:260px;padding:11px 13px;border:1px solid var(--line);border-radius:8px;font:14px 'DM Sans';outline-color:#7faf9e}.client-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px}.client-card{background:#fff;border:1px solid var(--line);padding:18px;border-radius:10px}.client-card header{display:flex;align-items:center;gap:10px}.client-card h3{font:600 16px Fraunces;margin:0}.status{font-size:10px;border-radius:99px;padding:4px 7px;margin-left:auto;background:var(--mint);color:#2f765e}.client-card p{color:var(--muted);font-size:12px;margin:14px 0}.mini-data{display:flex;gap:15px;border-top:1px solid var(--line);padding-top:11px}.mini-data b{font-size:13px;display:block}.mini-data span{font-size:10px;color:var(--muted)}.client-actions{margin-top:13px;display:flex;gap:7px}.client-actions button{font-size:11px;padding:7px 9px}.calendar-connect{display:flex;align-items:center;justify-content:space-between;background:white;border:1px solid var(--line);border-radius:10px;padding:17px;margin-bottom:18px}.calendar-connect>div{display:flex;align-items:center;gap:11px}.calendar-connect p{margin:3px 0 0;color:var(--muted);font-size:12px}.google-g{font:bold 22px 'DM Sans';color:#4285f4}.week-card{background:#fff;padding:18px;border-radius:10px;border:1px solid var(--line)}.week-head{display:flex;justify-content:center;align-items:center;gap:18px}.week-head h3{font:600 19px Fraunces}.week-head button{border:0;background:none;color:var(--ink);font-size:25px}.week-calendar{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}.day-col{min-height:260px;padding:11px 8px;border-radius:8px;background:#f8faf5}.day-col.today{background:#edf5df}.day-name{font-size:11px;color:var(--muted);text-transform:uppercase}.day-num{font:600 17px Fraunces;margin:3px 0 16px}.session-chip{font-size:10px;background:#d8ede3;border-left:3px solid #4e9a7d;padding:6px;margin-bottom:6px;border-radius:3px}.routine-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px}.routine-card{background:#fff;border:1px solid var(--line);padding:20px;border-radius:11px}.routine-icon{font-size:22px}.routine-card h3{font:600 19px Fraunces;margin:13px 0 7px}.routine-card p{font-size:12px;color:var(--muted);margin:0 0 16px}.routine-card footer{font-size:11px;color:#4c7c6c;border-top:1px solid var(--line);padding-top:12px}.billing-metrics{grid-template-columns:repeat(3,1fr)}table{border-collapse:collapse;width:100%;text-align:left}th{font:500 10px 'DM Mono';color:var(--muted);text-transform:uppercase;padding:6px 8px 12px}td{padding:13px 8px;border-top:1px solid var(--line);font-size:12px}.payment-status{padding:4px 7px;border-radius:30px;font-size:10px;font-weight:700;background:#fff1d6;color:#97620b}.payment-status.confirmed{background:#e5f5e9;color:#31745b}dialog{border:0;border-radius:13px;padding:28px;max-width:480px;width:calc(100% - 32px);box-shadow:0 25px 80px #0004;color:var(--ink)}dialog::backdrop{background:#0c221bbb}.modal-close{position:absolute;right:14px;top:10px;background:none;border:0;font-size:24px;color:#6d7973;cursor:pointer}dialog h2{font:600 27px Fraunces;margin:0 0 20px}form{display:grid;gap:14px}label{font-size:12px;font-weight:600;display:grid;gap:6px}input,select{border:1px solid #dbe2d9;border-radius:7px;padding:10px;font:14px 'DM Sans';width:100%}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}.wide-button{margin-top:6px;width:100%}.empty{padding:20px 0;color:var(--muted);font-size:13px}@media(max-width:850px){.sidebar{width:68px;padding:20px 10px}.brand span:last-child,.nav-link span,.sidebar-foot{display:none}.brand{justify-content:center}.sidebar nav{margin-top:40px}.nav-link{justify-content:center;padding:12px 5px}main{width:calc(100% - 68px);margin-left:68px}.topbar{padding:20px}.view{padding:24px 20px}.metrics{grid-template-columns:repeat(2,1fr)}.dashboard-grid{grid-template-columns:1fr}.wide{grid-row:auto}.week-calendar{overflow:auto;grid-template-columns:repeat(7,110px)}}@media(max-width:560px){.shell{display:block}.sidebar{display:none}main{width:100%;margin:0}.menu-button{display:block;border:0;background:none;font-size:21px}.topbar h1{font-size:25px}.hero{padding:23px;align-items:start;gap:20px;flex-direction:column}.metrics{grid-template-columns:1fr 1fr;gap:8px}.metrics article{padding:13px}.metrics strong{font-size:21px}.section-heading h2{font-size:27px}.section-heading{align-items:start}.calendar-connect{align-items:start;gap:12px;flex-direction:column}.billing-metrics{grid-template-columns:1fr}.table-wrap{overflow-x:auto}.form-row{grid-template-columns:1fr}}
/* Metriva visual system */
:root{--ink:#142d2a;--ink-2:#23443d;--paper:#f8f7f1;--line:#e9e8df;--lime:#dcff53;--coral:#ff8b6b;--lavender:#e4defc;--aqua:#c9ede3}body{background:var(--paper);letter-spacing:-.1px}.sidebar{width:266px;padding:29px 17px 22px;background:linear-gradient(155deg,#102b28 0%,#1d4840 100%);box-shadow:7px 0 35px #11262010}.brand{padding:0 11px;gap:12px;letter-spacing:-.6px}.brand-mark{width:39px;height:39px;border-radius:13px;transform:rotate(-5deg);box-shadow:4px 5px 0 #fff2}.sidebar nav{margin-top:60px;gap:8px}.nav-link{position:relative;border-radius:12px;padding:13px 14px;transition:all .18s ease}.nav-link.active{background:#ffffff19;color:#fff;box-shadow:inset 0 0 0 1px #ffffff12}.nav-link.active:before{content:"";width:4px;height:18px;border-radius:9px;background:var(--lime);position:absolute;left:-2px}.sidebar-foot{padding:13px 11px;border-top:1px solid #ffffff18;line-height:1.45}.online-dot{box-shadow:0 0 0 4px #dfff5322}main{width:calc(100% - 266px);margin-left:266px}.topbar{height:118px;padding:29px 6.2%;border:0;background:linear-gradient(180deg,#fbfaf5 0%,#f8f7f100 100%)}.topbar h1{font-size:32px;letter-spacing:-1.5px}.avatar{width:43px;height:43px;background:linear-gradient(135deg,#ffb18f,#ed866e);box-shadow:0 5px 13px #eb977a42}.view{padding:26px 6.2% 75px;max-width:1530px}.hero{position:relative;overflow:hidden;min-height:298px;padding:42px 46px;border-radius:23px;background:linear-gradient(125deg,#123b35 0%,#1f554b 58%,#557365 140%);box-shadow:0 20px 35px #173f361c}.hero:after{content:"";position:absolute;width:450px;height:450px;right:-220px;bottom:-300px;border-radius:50%;border:1px solid #dfff5344}.hero-copy{position:relative;z-index:2}.hero h2{font-size:48px;line-height:.94;letter-spacing:-2.7px}.hero h2 i{font-style:normal;color:var(--lime)}.hero p:not(.eyebrow){max-width:390px;font-size:14px;line-height:1.5}.hero-actions{display:flex;align-items:center;gap:22px;margin-top:25px}.primary{border-radius:9px;padding:12px 16px;transition:transform .15s,box-shadow .15s}.primary:hover{transform:translateY(-2px);box-shadow:0 8px 15px #0002}.hero-link{background:transparent;border:0;color:#fff;font:600 13px 'DM Sans';padding:8px 0;cursor:pointer}.hero-link span{color:var(--lime);font-size:18px;margin-left:4px}.hero-visual{position:absolute;right:52px;top:21px;width:315px;height:255px}.orbit{position:absolute;border-radius:50%;border:1px solid #fff3}.orbit-one{width:260px;height:260px;right:-23px;top:-22px}.orbit-two{width:180px;height:180px;right:17px;top:18px;border-color:#dfff5366}.hero-score{position:absolute;right:57px;top:48px;width:142px;height:142px;border-radius:50%;display:flex;flex-direction:column;justify-content:center;align-items:center;background:#edffd0;color:var(--ink);border:8px solid #a4d66c;box-shadow:0 0 0 8px #fff1}.hero-score > span,.hero-score small{font:500 8px 'DM Mono';letter-spacing:.6px}.hero-score strong{font:600 42px/38px Fraunces;letter-spacing:-2px}.hero-score em{font:600 16px 'DM Sans';letter-spacing:0;font-style:normal}.hero-score small{color:#54715f}.floating-stat{position:absolute;background:#fff;border-radius:10px;padding:9px 11px;box-shadow:0 14px 23px #001b162e;color:var(--ink);z-index:2}.floating-stat b{display:block;font:600 18px Fraunces}.floating-stat span{font-size:9px;line-height:1.15;color:#637970}.stat-one{top:22px;left:4px;display:flex;align-items:center;gap:7px}.stat-one b{color:#4a895f}.stat-two{bottom:7px;right:3px;min-width:108px}.stat-two .spark{float:right;background:var(--lime);color:var(--ink);width:24px;height:24px;border-radius:50%;display:grid;place-content:center;font-size:15px}.stat-two small{font-size:9px;color:#637970}.metrics{gap:17px;margin:23px 0}.metrics article{border:0;border-radius:15px;padding:18px 19px;box-shadow:0 5px 17px #19352d08;position:relative;overflow:hidden}.metrics article:after{position:absolute;content:"";right:15px;top:15px;width:28px;height:28px;border-radius:9px;background:#e8f5dc}.metrics article:nth-child(2):after{background:var(--lavender)}.metrics article:nth-child(3):after{background:#ffe0d4}.metrics article:nth-child(4):after{background:#fdf0bf}.metrics strong{font-size:29px;letter-spacing:-1.2px}.metrics small{font-weight:600;color:#668478}.dashboard-grid{gap:18px}.card{border:0;border-radius:15px;padding:23px;box-shadow:0 5px 18px #1a392e08}.card h3{font-size:20px;letter-spacing:-.6px}.card-head{margin-bottom:17px}.progress-item{padding:15px 0;grid-template-columns:42px 1fr auto}.initials{width:39px;height:39px;background:linear-gradient(145deg,#d9edbf,#f3f4e9);color:#355d4a}.progress-item b{font-size:13px}.delta{background:#e9f5e7;color:#317760;border-radius:7px;padding:6px 8px;font-size:10px}.delta.warn{background:#fff0df;color:#a1682d}.agenda-item{padding:13px 0}.agenda-time{color:#3f9b7d;font-weight:500}.alert-item{background:#fff7e8;border:0;border-radius:9px;padding:12px 13px}.section-heading{margin:7px 0 28px}.section-heading h2{font-size:34px;letter-spacing:-1.5px}.toolbar input{border-radius:10px;border:0;box-shadow:0 3px 12px #173a3010;padding:13px 15px}.secondary,.filter{border-radius:9px}.client-card,.routine-card{border:0;border-radius:15px;box-shadow:0 5px 17px #19352d08}.client-card{padding:20px}.client-card h3{font-size:18px}.status{background:#e8f6e8;padding:5px 8px}.routine-card{transition:transform .18s,box-shadow .18s}.routine-card:hover{transform:translateY(-3px);box-shadow:0 16px 24px #19352d12}.calendar-connect,.week-card{border:0;border-radius:15px;box-shadow:0 5px 17px #19352d08}.week-card{padding:22px}.day-col{border-radius:11px;background:#f5f7f0}.day-col.today{background:#e5f3c9;box-shadow:inset 0 0 0 1px #cce39a}.session-chip{border-left:0;border-radius:6px;background:#d9eee6;padding:7px;color:#255447}.billing-metrics article:after{display:none}.table-wrap table tr:last-child td{border-bottom:0}.payment-status{border-radius:99px;padding:5px 8px}.topbar:after{content:"";position:absolute;left:266px;right:0;top:117px;border-bottom:1px solid var(--line)}
@media(max-width:1060px){.hero-visual{right:20px;transform:scale(.86);transform-origin:right center}.hero h2{font-size:43px}}@media(max-width:850px){.sidebar{width:68px}.topbar:after{left:68px}main{width:calc(100% - 68px);margin-left:68px}.hero{padding:36px}.hero-visual{opacity:.55;right:-40px}.hero h2{font-size:43px}}@media(max-width:560px){.topbar:after{left:0}.hero{min-height:315px;padding:29px;border-radius:18px}.hero h2{font-size:42px}.hero-visual{transform:scale(.7);transform-origin:right bottom;right:-50px;top:119px;opacity:.72}.hero-actions{margin-top:20px}.hero p:not(.eyebrow){max-width:260px}.metrics article:after{width:22px;height:22px}.dashboard-grid{gap:12px}.card{padding:18px}.section-heading h2{font-size:29px}}
/* Refined sidebar navigation */
.sidebar nav{margin-top:52px;gap:5px}.nav-caption{margin:0 13px 10px;color:#7ea096;font:500 9px 'DM Mono';letter-spacing:1.8px}.nav-link{min-height:47px;padding:0 13px;gap:13px;color:#abc1ba;border:1px solid transparent}.nav-link:hover{color:#fff;background:#ffffff0b;transform:translateX(2px)}.nav-link.active{color:#fff;background:linear-gradient(90deg,#ffffff17,#ffffff0d);border-color:#ffffff12;box-shadow:none}.nav-link.active:before{left:-1px;width:3px;height:22px;background:var(--lime);box-shadow:0 0 12px #dcff5377}.nav-icon{width:21px;height:21px;display:grid;place-items:center;flex:0 0 21px}.nav-icon svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}.nav-link.active .nav-icon{color:var(--lime)}.nav-link>span:last-child{font-size:14px;letter-spacing:-.15px}.sidebar-foot{display:flex;align-items:flex-start;gap:9px;margin:0 4px;padding:14px 12px;background:#ffffff0a;border:1px solid #ffffff0d;border-radius:11px}.sidebar-foot .online-dot{margin:5px 0 0;flex:0 0 7px}.sidebar-foot b{display:block;color:#d7e4df;font-size:10px;font-weight:600}.sidebar-foot small{display:block;color:#779c90;font-size:8px;margin-top:2px}.brand-mark{font:700 15px 'DM Sans';letter-spacing:-1px}
@media(max-width:850px){.nav-caption{display:none}.nav-link>span:last-child{display:none}.sidebar nav{margin-top:42px}.nav-link{justify-content:center;padding:0}.nav-link:hover{transform:none}.nav-link.active:before{left:-10px}.sidebar-foot{display:none}}
/* Memberships and session packages */
.billing-metrics{grid-template-columns:repeat(4,1fr)}.package-card{margin-top:18px}.commercial-summary{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:3px 9px;margin:13px 0;padding:11px 12px;border-radius:9px;background:#f4f7ef}.commercial-summary b{font-size:12px}.commercial-summary small{grid-column:2;color:var(--muted);font-size:10px}.commercial-label{grid-row:span 2;border-radius:99px;padding:5px 7px;background:#e4f3df;color:#39715f;font:600 9px 'DM Sans';text-transform:uppercase;letter-spacing:.5px}.commercial-label.package-label{background:#eee9ff;color:#65568e}.session-balance{display:inline-grid;place-content:center;min-width:29px;height:29px;border-radius:50%;background:#e5f4d7;color:#2d7058}.session-use{white-space:nowrap;padding:7px 9px;font-size:10px}.conditional-fields{padding:11px;border-radius:9px;background:#f4f7ef;border:1px solid var(--line)}.conditional-fields[hidden]{display:none}.alerta-credito{margin:0 0 11px;padding:8px 11px;border-radius:8px;background:#fff1d6;color:#97620b;font:600 11px 'DM Sans';display:flex;align-items:center;gap:6px}.alerta-credito:before{content:"\26A0";font-size:12px;line-height:1}
@media(max-width:850px){.billing-metrics{grid-template-columns:repeat(2,1fr)}}@media(max-width:560px){.billing-metrics{grid-template-columns:1fr 1fr}}
.plans-card .plan-filters{display:flex;gap:10px;flex-wrap:wrap;margin:14px 0}.plans-card .plan-filters label{display:grid;gap:4px;min-width:170px;color:var(--muted);font-size:10px;font-weight:600}.plans-card .plan-filters select{min-width:170px}.plan-zone,.plan-special{display:block;margin-top:6px;color:var(--muted);font:600 9px 'DM Sans';letter-spacing:.25px}.plan-special{color:#9b607a}.billing-reference-picker{display:grid;gap:7px;margin:4px 0 9px;padding:10px 11px;border:1px solid var(--line);border-radius:10px;background:#faf7f8}.billing-reference-picker legend{padding:0 4px;color:var(--muted);font-size:10px;font-weight:600}.billing-reference-picker small{color:var(--muted);font-size:10px;line-height:1.35}
/* Metriva feminine-neutral palette */
:root{--ink:#3d3238;--ink-2:#594751;--muted:#7c7077;--paper:#faf7f6;--card:#fffdfc;--line:#ece5e7;--lime:#efbfd0;--coral:#e7a08e;--yellow:#e7c889;--mint:#dde9e1;--lavender:#e7dff0;--aqua:#dce9e3}body{background:radial-gradient(circle at 82% 3%,#f1e7ed 0,transparent 24%),var(--paper);color:var(--ink)}.sidebar{background:linear-gradient(155deg,#392d34 0%,#58404c 100%);box-shadow:7px 0 35px #49353f17}.brand b{color:#f3cad8}.brand-mark{background:linear-gradient(145deg,#f3cada,#deb0c3);color:#4b3943;box-shadow:4px 5px 0 #ffffff1c}.online-dot{background:#eebbcf}.nav-link{color:#cbbbc3}.nav-link.active .nav-icon{color:#f2bfd2}.nav-link.active:before{background:#f2bfd2;box-shadow:0 0 12px #f2bfd277}.nav-caption{color:#a58b98}.sidebar-foot b{color:#f0e6eb}.sidebar-foot small{color:#ad929f}.topbar{background:linear-gradient(180deg,#fcf9f8 0%,#faf7f600 100%)}.avatar{background:linear-gradient(135deg,#efc5d3,#dba4b8);color:#573848;box-shadow:0 5px 13px #d69eb64a}.hero{background:linear-gradient(125deg,#44343d 0%,#684b59 58%,#89717b 140%);box-shadow:0 20px 35px #50384220}.hero:after{border-color:#f1bfd04b}.hero h2 i,.hero-link span{color:#f3c4d5}.primary{background:linear-gradient(135deg,#f3c4d5,#e6b2c6);color:#49343e}.hero-score{background:#f9e9ef;border-color:#ce9db1;color:#47343d}.hero-score small{color:#765d69}.orbit-two{border-color:#efbfd06b}.stat-one b{color:#a25e7c}.stat-two .spark{background:#ecc0d1;color:#553a46}.metrics article,.card,.client-card,.routine-card,.calendar-connect,.week-card{background:rgba(255,253,252,.94);box-shadow:0 7px 20px #6d4a5909}.metrics article:after{background:#eddde5}.metrics article:nth-child(2):after{background:#e8e0f1}.metrics article:nth-child(3):after{background:#f3ded7}.metrics article:nth-child(4):after{background:#eee7d5}.text-button{color:#9b607a}.initials{background:linear-gradient(145deg,#eedde5,#f8f2f0);color:#714a5c}.delta{background:#e6efe9;color:#567461}.delta.warn{background:#f7e6e1;color:#9c6558}.status{background:#e6efe9;color:#55715f}.alert-item{background:#f8eee8;border-left-color:#dca78f}.agenda-time{color:#a56581}.day-col.today{background:#f0e1e8;box-shadow:inset 0 0 0 1px #dfc5d0}.session-chip{background:#e6e0ef;color:#5e526f}.payment-status.confirmed{background:#e5efe8;color:#52705e}.commercial-label{background:#e4eee7;color:#52705e}.commercial-label.package-label{background:#eee6f3;color:#6f5a82}.session-balance{background:#eee4ef;color:#705474}.toolbar input:focus,input:focus,select:focus{outline:2px solid #d8a7bc;outline-offset:1px}.primary:hover{box-shadow:0 8px 16px #b8789528}
/* Discreet founder portrait */
.hero-visual{right:34px;width:385px}.hero-photo{position:absolute;inset:0 2px 0 32px;overflow:hidden;border-radius:50% 22px 50% 22px;opacity:.36;filter:contrast(1.08);mask-image:linear-gradient(90deg,transparent 0,#000 25%,#000 86%,transparent 100%);-webkit-mask-image:linear-gradient(90deg,transparent 0,#000 25%,#000 86%,transparent 100%)}.hero-photo:after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,#5a414d 0%,transparent 46%,#6d5260 100%);mix-blend-mode:color}.hero-photo img{width:100%;height:100%;object-fit:cover;object-position:59% 43%;filter:grayscale(1)}.hero-visual .orbit{opacity:.55}.hero-score{right:44px}.stat-two{right:-2px}.stat-one{left:18px}
@media(max-width:1060px){.hero-visual{right:3px}}@media(max-width:850px){.hero-photo{opacity:.26}}@media(max-width:560px){.hero-photo{inset:13px 0 0 55px;opacity:.22}.hero-score{right:46px}}
/* Stronger founder image presence */
.hero-photo{inset:-2px -8px -2px 6px;border-radius:44% 22px 44% 22px;opacity:.68;mask-image:linear-gradient(90deg,transparent 0,#000 15%,#000 96%);-webkit-mask-image:linear-gradient(90deg,transparent 0,#000 15%,#000 96%)}.hero-photo:after{background:linear-gradient(90deg,#57404caa 0%,#57404c22 30%,transparent 72%);mix-blend-mode:normal}.hero-photo img{object-position:59% 42%;filter:grayscale(1) contrast(1.13)}.hero-score{width:124px;height:124px;right:-7px;top:26px;border-width:7px;box-shadow:0 0 0 7px #fff1}.hero-score strong{font-size:37px;line-height:34px}.hero-score > span,.hero-score small{font-size:7px}.stat-one{left:4px;top:17px}.stat-two{right:-4px;bottom:5px}.hero-visual .orbit{opacity:.28}.orbit-one{right:-52px;top:-41px}.orbit-two{right:-12px;top:-1px}
@media(max-width:850px){.hero-photo{opacity:.52}.hero-score{right:-9px}}@media(max-width:560px){.hero-photo{inset:2px -12px 0 23px;opacity:.45}.hero-score{right:18px;top:24px}}
/* Operational session and routine flows */
.session-control{margin-top:18px}.session-list{display:grid}.session-row{display:grid;grid-template-columns:92px minmax(180px,1fr) auto auto;gap:14px;align-items:center;padding:13px 0;border-top:1px solid var(--line)}.session-row:first-child{border-top:0}.session-date{display:grid}.session-date b{font-size:12px;text-transform:capitalize}.session-date span,.session-person span{font-size:10px;color:var(--muted)}.session-person{display:grid}.session-person b{font-size:12px}.session-state{display:inline-flex;align-items:center;justify-content:center;border-radius:99px;padding:5px 8px;background:#eee8e5;color:#7b6b72;font-size:9px;font-weight:700;white-space:nowrap}.session-state.completed{background:#e3eee6;color:#51715e}.session-complete{font-size:10px;padding:7px 9px;white-space:nowrap}.session-done{display:grid;place-content:center;width:28px;height:28px;border-radius:50%;background:#e5efe8;color:#557563}.session-chip.completed{background:#e1ebe4;color:#52705e;text-decoration:none}.session-chip b{font-weight:700}.exercise-preview{display:grid;gap:5px;margin:0 0 15px;padding:11px;border-radius:8px;background:#f8f4f5}.exercise-preview span{font-size:10px;color:#6f6269}.exercise-preview span:before{content:"·";margin-right:6px;color:#b87391;font-weight:700}textarea{width:100%;resize:vertical;border:1px solid #dbe2d9;border-radius:7px;padding:10px;font:14px 'DM Sans';color:var(--ink)}.form-summary{margin:-9px 0 3px;padding:11px;border-radius:8px;background:#f7f1f3;color:#6e5963;font-size:12px}
.calendar-connect-title{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.calendar-connect-actions{display:flex;align-items:center;gap:12px}.integration-status{display:inline-flex;align-items:center;border-radius:99px;padding:4px 8px;background:#f1ebed;color:#7c6b73;font-size:9px;font-weight:700}.integration-status.connected{background:#e4f0e8;color:#52745f}.integration-status.error{background:#f8e3df;color:#a15c52}.calendar-connect.connected{box-shadow:inset 3px 0 #82aa91,0 7px 20px #6d4a5909}.calendar-connect.integration-error{box-shadow:inset 3px 0 #c97f72,0 7px 20px #6d4a5909}.danger-link{color:#a45d67}.google-session-state{width:max-content;margin-top:4px;border-radius:99px;padding:3px 6px;background:#f0ebed;color:#84747b;font-size:8px!important;font-weight:700}.google-session-state.synced{background:#e5efe8;color:#52705e}.google-session-state.error{background:#f7e3df;color:#9d5a51}.session-charge{display:block;padding:5px 13px 0;color:#8a5c73;font-size:9px!important;font-weight:600}
@media(max-width:700px){.session-row{grid-template-columns:74px 1fr auto}.session-complete,.session-done{grid-column:2/4;justify-self:start}.session-state{align-self:start}}
/* Private access */
[hidden]{display:none!important}.auth-screen{min-height:100vh;display:grid;place-items:center;padding:34px;background:radial-gradient(circle at 10% 10%,#f0dfe7 0,transparent 29%),linear-gradient(135deg,#faf7f6,#f3ebee)}.auth-panel{display:grid;grid-template-columns:minmax(310px,1fr) minmax(360px,440px);width:min(980px,100%);min-height:620px;border-radius:28px;overflow:hidden;background:#fffdfc;box-shadow:0 35px 90px #52374426}.auth-portrait{position:relative;overflow:hidden;background:#4d3943}.auth-portrait:after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,#4c344022,transparent 48%,#4a343eaa)}.auth-portrait img{width:100%;height:100%;object-fit:cover;object-position:54% center;filter:grayscale(1) contrast(1.08)}.auth-card{display:flex;flex-direction:column;justify-content:center;padding:58px 54px}.auth-brand{display:flex;align-items:center;gap:11px;margin-bottom:54px;color:var(--ink);font-size:18px;text-decoration:none}.auth-brand b{color:#a86682}.auth-card h1{font:600 39px/1.05 Fraunces;margin:5px 0 12px;letter-spacing:-1.5px}.auth-copy{margin:0 0 27px;color:var(--muted);font-size:13px;line-height:1.55}.auth-card form{gap:16px}.auth-card label small{color:var(--muted);font-weight:400}.form-error{min-height:16px;margin:0;color:#a44753;font-size:11px}.auth-status{display:flex;align-items:center;gap:8px;margin:34px 0 0;color:var(--muted);font-size:10px}.auth-status .online-dot{display:inline-block;box-shadow:0 0 0 4px #eebbcf33}.loading-state{opacity:.65;pointer-events:none}.toast{position:fixed;right:24px;bottom:24px;z-index:100;background:#3e3037;color:#fff;padding:12px 16px;border-radius:10px;box-shadow:0 12px 30px #0003;font-size:12px;animation:toast-in .2s ease}.toast.error{background:#8d4750}@keyframes toast-in{from{transform:translateY(8px);opacity:0}}
@media(max-width:760px){.auth-screen{padding:18px}.auth-panel{display:block;min-height:0}.auth-portrait{height:180px}.auth-portrait img{object-position:50% 38%}.auth-card{padding:35px 27px}.auth-brand{margin-bottom:32px}.auth-card h1{font-size:34px}}
.auth-link{border:0;background:transparent;color:#9b607a;font:600 11px 'DM Sans';cursor:pointer;padding:4px}.auth-link:hover{text-decoration:underline}
/* iPad, touch and standalone PWA refinements */
html{min-height:100%;background:var(--paper)}body{min-height:100dvh;overscroll-behavior-y:none;-webkit-text-size-adjust:100%}.shell{min-height:100dvh}.topbar{position:sticky;top:0;z-index:20;background:rgba(250,247,246,.9);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);padding-top:max(29px,env(safe-area-inset-top))}.sidebar{padding-top:max(29px,env(safe-area-inset-top));padding-bottom:max(22px,env(safe-area-inset-bottom))}.table-wrap{max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:thin}dialog{max-height:calc(100dvh - 40px);overflow-y:auto}.primary,.secondary,.filter,.text-button,.hero-link,.nav-link,.avatar,.week-head button,.modal-close{touch-action:manipulation;-webkit-tap-highlight-color:transparent}
@media(min-width:601px) and (max-width:1180px){.sidebar{width:84px;padding-left:13px;padding-right:13px}.sidebar .brand{justify-content:center;padding:0}.sidebar .brand>span:last-child,.sidebar .nav-caption,.sidebar .sidebar-foot,.sidebar .nav-link>span:last-child{display:none}.sidebar nav{margin-top:46px;gap:9px}.sidebar .nav-link{min-height:52px;justify-content:center;padding:0}.sidebar .nav-link .nav-icon{display:grid;width:24px;height:24px;flex-basis:24px}.sidebar .nav-icon svg{width:22px;height:22px}.sidebar .nav-link.active:before{left:-13px;height:26px}.sidebar .nav-link:hover{transform:none}main{width:calc(100% - 84px);margin-left:84px}.topbar:after{left:84px}.view{padding-left:4.5%;padding-right:4.5%}}
@media(min-width:901px) and (max-width:1180px){.hero{padding-left:40px;padding-right:40px}.hero-visual{right:8px;transform:scale(.9);transform-origin:right center}.metrics{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.metrics article{padding:16px}.dashboard-grid{grid-template-columns:1.45fr 1fr}}
@media(min-width:601px) and (max-width:900px){.topbar{height:108px}.view{padding-top:24px;padding-bottom:max(60px,env(safe-area-inset-bottom))}.hero{min-height:280px;padding:34px 30px}.hero-copy{max-width:57%}.hero h2{font-size:41px}.hero-visual{width:360px;right:-62px;top:14px;transform:scale(.92);opacity:.62}.metrics,.billing-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.dashboard-grid{grid-template-columns:1fr}.client-grid,.routine-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.week-card{padding:20px 14px}.week-calendar{grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;overflow:visible}.day-col{min-height:220px;padding:10px 6px}.session-chip{font-size:9px;padding:6px 4px;overflow:hidden}.table-wrap table{min-width:720px}dialog{width:min(560px,calc(100% - 48px));max-width:560px;padding:34px}.auth-screen{padding:28px}.auth-panel{width:min(712px,100%)}.auth-card{padding:45px 38px}.auth-brand{margin-bottom:38px}}
@media(max-width:600px){.shell{display:block}.sidebar{display:block;position:fixed;inset:auto 0 0;width:100%;height:calc(70px + env(safe-area-inset-bottom));padding:7px 8px max(7px,env(safe-area-inset-bottom));z-index:40;border-radius:18px 18px 0 0;box-shadow:0 -8px 30px #432f391f}.sidebar .brand,.sidebar .nav-caption,.sidebar .sidebar-foot{display:none}.sidebar nav{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:2px;margin:0}.sidebar .nav-link{min-height:56px;display:flex;flex-direction:column;justify-content:center;gap:3px;padding:4px 2px;border-radius:10px}.sidebar .nav-link .nav-icon{display:grid;width:21px;height:21px;flex-basis:21px}.sidebar .nav-link>span:last-child{display:block;font-size:9px}.sidebar .nav-link.active:before{width:20px;height:3px;left:50%;top:-7px;transform:translateX(-50%)}main{width:100%;margin:0;padding-bottom:calc(78px + env(safe-area-inset-bottom))}.topbar:after{left:0}.menu-button{display:none}.view{padding-left:18px;padding-right:18px}.toolbar{align-items:stretch}.toolbar input{min-width:0;flex:1}.filter{max-width:125px}.client-grid,.routine-grid{grid-template-columns:1fr}.toast{right:16px;bottom:calc(86px + env(safe-area-inset-bottom));left:16px;text-align:center}}
@media(pointer:coarse){.primary,.secondary,.filter{min-height:44px}.avatar,.week-head button,.modal-close{min-width:44px;min-height:44px}.client-actions button,.session-complete{min-height:42px;padding-left:12px;padding-right:12px}input,select,textarea{min-height:44px;font-size:16px}.nav-link{min-height:48px}}
@media(min-width:601px) and (max-width:900px){.hero-visual{width:330px;right:0}}
@media(max-width:600px){.metrics article>span{min-height:28px;padding-right:22px;line-height:1.25}}

/* Developer credit on the private login */
.developer-credit{display:flex;align-items:center;gap:9px;margin:20px 0 0;padding-top:16px;border-top:1px solid #eee4e8;color:#91848a;font-size:10px;line-height:1.35}
.developer-credit img{display:block;width:30px;height:30px;flex:0 0 30px;object-fit:contain;border-radius:7px}
.developer-credit strong{color:#6f5361;font-weight:700}
@media(max-width:600px){.developer-credit{font-size:9px;margin-top:17px;padding-top:13px}}
/* Focused mobile composition */
@media(max-width:600px){.topbar{height:104px;padding:max(16px,env(safe-area-inset-top)) 20px 13px}.topbar h1{font-size:29px}.topbar .eyebrow{margin-bottom:4px}.view{padding-top:18px;padding-left:16px;padding-right:16px}.hero{min-height:292px;padding:25px 24px;border-radius:18px}.hero h2{font-size:40px;line-height:.96}.hero p:not(.eyebrow){max-width:275px;font-size:13px;line-height:1.45}.hero-actions{position:relative;z-index:5;gap:16px;margin-top:19px}.hero-actions .primary{padding:11px 14px}.hero-link{font-size:12px}.hero-link span{font-size:17px}.hero-visual{width:258px;height:166px;right:-4px;top:auto;bottom:0;transform:none;opacity:.78}.hero-photo{inset:0 -8px -2px 5px;opacity:.56;border-radius:52% 0 18px 24%;mask-image:linear-gradient(90deg,transparent 0,#000 22%,#000 100%);-webkit-mask-image:linear-gradient(90deg,transparent 0,#000 22%,#000 100%)}.hero-photo:after{background:linear-gradient(90deg,#5c4350aa 0%,transparent 52%)}.hero-photo img{object-position:58% 34%}.hero-score{width:94px;height:94px;right:12px;top:auto;bottom:16px;border-width:5px;box-shadow:0 0 0 5px #fff1}.hero-score strong{font-size:29px;line-height:27px}.hero-score em{font-size:12px}.hero-score > span,.hero-score small{font-size:6px}.hero-visual .orbit,.hero-visual .floating-stat{display:none}.metrics{gap:10px;margin:16px 0}.metrics article{min-height:126px;padding:15px}.metrics strong{font-size:27px;margin:5px 0}.metrics small{line-height:1.25}.metrics article:after{right:12px;top:12px;width:21px;height:21px}.dashboard-grid{gap:11px}.card{padding:17px}.sidebar{height:calc(58px + env(safe-area-inset-bottom));padding:3px 6px max(3px,env(safe-area-inset-bottom));border-radius:16px 16px 0 0}.sidebar .nav-link{min-height:50px;gap:2px}.sidebar .nav-link .nav-icon{width:19px;height:19px;flex-basis:19px}.sidebar .nav-icon svg{width:19px;height:19px}.sidebar .nav-link>span:last-child{font-size:8px}.sidebar .nav-link.active:before{top:-3px;width:18px}main{padding-bottom:calc(66px + env(safe-area-inset-bottom))}.toast{bottom:calc(72px + env(safe-area-inset-bottom))}}
dialog.modal-wide{max-width:920px}
.inbody-review-copy{color:var(--muted);line-height:1.55;margin-top:-10px}.inbody-review-list{display:grid;gap:12px}.inbody-review-item{border:1px solid var(--line);border-radius:12px;padding:14px;background:#fff}.inbody-review-item-head{display:flex;align-items:end;justify-content:space-between;gap:14px;margin-bottom:12px}.inbody-review-item-head>b{font:600 16px Fraunces}.inbody-review-item-head label{width:180px}.inbody-review-fields{display:grid;grid-template-columns:repeat(4,1fr);gap:9px}.inbody-cell{position:relative;display:block;min-width:0}.inbody-cell span{display:block;margin-bottom:2px}.inbody-cell input{padding-right:24px}.inbody-cell small{position:absolute;right:8px;bottom:12px;color:var(--muted);font-size:9px}.inbody-warnings{display:grid;gap:5px;background:#f8eee8;border-radius:10px;padding:13px 15px;color:#8e5c52;font-size:11px}.inbody-warnings b{font-size:12px}.inbody-warnings span:before{content:"• ";color:#cc91a9}.inbody-review-note{color:var(--muted);font-size:11px;line-height:1.5}.inbody-retry .secondary{width:max-content;margin-top:4px}
@media(max-width:650px){.inbody-review-fields{grid-template-columns:repeat(2,1fr)}.inbody-review-item-head{align-items:start;flex-direction:column}.inbody-review-item-head label{width:100%}}
.exercise-builder{display:grid;gap:12px;margin:4px 0;padding:16px;border:1px solid var(--line);border-radius:12px}.exercise-builder legend{padding:0 7px;font:600 17px Fraunces}.exercise-filters,.exercise-prescription{display:grid;grid-template-columns:1fr 1fr;gap:9px}.exercise-prescription{grid-template-columns:90px minmax(150px,1fr) auto;align-items:end}.exercise-reference{display:grid;grid-template-columns:1fr auto;gap:7px;padding:12px;border-radius:9px;background:#f8f3f5}.exercise-reference div{display:grid}.exercise-reference div span,.exercise-reference small{font-size:10px;color:var(--muted)}.exercise-reference small{grid-column:1/-1;line-height:1.55}.exercise-reference .exercise-level{align-self:start;border-radius:99px;padding:4px 7px;background:#eadce3;font-size:9px;font-weight:700}.selected-exercises{display:grid;gap:7px}.selected-exercises>.empty{padding:13px;text-align:center;border:1px dashed var(--line);border-radius:8px}.selected-exercise{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 11px;border-radius:8px;background:#f7f3f4}.selected-exercise div{display:grid}.selected-exercise b{font-size:11px}.selected-exercise span{font-size:9px;color:var(--muted)}.exercise-remove{width:30px;height:30px;border:0;border-radius:50%;background:#eadde2;color:#81566a;font-size:19px;cursor:pointer}.custom-exercise-row{display:grid;grid-template-columns:1fr auto;align-items:end;gap:10px}.custom-exercise-row .text-button{padding:10px 0}
@media(max-width:650px){dialog.modal-wide{width:calc(100% - 18px);padding:23px 18px}.exercise-filters,.exercise-prescription,.custom-exercise-row{grid-template-columns:1fr}.exercise-prescription .secondary{width:100%}}
@media(max-width:420px){.hero-actions{gap:10px}.hero-score{width:80px;height:80px;right:0;bottom:8px}.hero-score strong{font-size:25px;line-height:23px}.hero-score em{font-size:10px}.hero-score > span,.hero-score small{font-size:5px}.metrics article{padding:14px 13px}.metrics article>span{max-width:112px}}
/* Keep the portrait unobstructed on phones. */
@media(max-width:600px){.hero{min-height:378px}.hero-visual{left:0;right:auto;bottom:0;width:100%;height:140px;opacity:1}.hero-photo{inset:0;opacity:.82;border-radius:0 0 18px 18px;mask-image:none;-webkit-mask-image:none}.hero-photo:after{background:linear-gradient(180deg,#5c435080 0%,transparent 48%)}.hero-photo img{object-position:58% 24%}.hero-score{display:none}}
/* Calendar views: day, week and month. */
.calendar-card{padding:18px}.calendar-tools{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:18px}.calendar-view-switch{display:grid;grid-template-columns:repeat(3,1fr);gap:3px;padding:4px;border-radius:11px;background:#f5eff2}.calendar-view-button{min-width:76px;border:0;border-radius:8px;padding:8px 13px;background:transparent;color:var(--muted);font:600 11px 'DM Sans';cursor:pointer}.calendar-view-button.active{background:#fff;color:#8f5770;box-shadow:0 3px 10px #5a3e4a12}.calendar-period-nav{display:grid;grid-template-columns:36px minmax(175px,auto) 36px auto;align-items:center;gap:6px}.calendar-period-nav h3{margin:0;text-align:center;font:600 18px Fraunces}.calendar-nav-button,.calendar-today-button{border:1px solid var(--line);background:#fff;color:var(--ink);cursor:pointer}.calendar-nav-button{width:36px;height:36px;border-radius:50%;font-size:22px;line-height:1}.calendar-today-button{height:36px;border-radius:9px;padding:0 12px;font:600 10px 'DM Sans'}.calendar-grid{width:100%}.calendar-week{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:7px}.calendar-week .day-col{display:block;width:100%;border:0;text-align:left;color:var(--ink);cursor:pointer}.calendar-week .day-col:hover,.calendar-week .day-col.selected,.month-day:hover{box-shadow:inset 0 0 0 1px #d9bdc8}.calendar-week .day-name,.calendar-week .day-num,.calendar-week .session-chip{display:block}.calendar-week .session-chip{margin-bottom:6px}.calendar-day{display:grid;grid-template-columns:150px minmax(0,1fr);gap:18px;min-height:260px}.day-focus{display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:14px;background:linear-gradient(155deg,#ead6df,#f7eff2);color:#604753}.day-focus>span{text-transform:uppercase;letter-spacing:1px;font:500 10px 'DM Mono'}.day-focus strong{font:600 72px/.95 Fraunces;margin:8px 0}.day-focus small{font-size:10px;color:#7a6871}.day-timeline{display:grid;align-content:start;gap:9px}.day-session{display:grid;grid-template-columns:62px minmax(0,1fr) auto;align-items:center;gap:12px;padding:13px 14px;border-radius:11px;background:#f8f4f5;border-left:4px solid #d69bb3}.day-session.completed{border-left-color:#9db9a8}.day-session time{font:600 12px 'DM Mono';color:#995f78}.day-session div{display:grid;gap:2px}.day-session div b{font-size:12px}.day-session div span,.day-session div small{font-size:10px;color:var(--muted)}.calendar-empty{display:flex;min-height:240px;flex-direction:column;align-items:center;justify-content:center;gap:7px;border:1px dashed #ddced4;border-radius:13px;color:var(--muted)}.calendar-empty b{color:var(--ink)}.calendar-empty span{font-size:11px}.calendar-empty button{margin-top:8px}.calendar-month{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:5px}.month-weekday{padding:4px;text-align:center;color:var(--muted);text-transform:uppercase;font:500 9px 'DM Mono'}.month-day{display:block;min-width:0;min-height:108px;padding:8px;border:0;border-radius:9px;background:#f8f5f6;color:var(--ink);text-align:left;cursor:pointer}.month-day.outside{opacity:.42}.month-day.today{background:#f0e1e8;box-shadow:inset 0 0 0 1px #dfc5d0}.month-day-number{display:grid;place-content:center;width:24px;height:24px;border-radius:50%;font:600 12px Fraunces}.month-day.today .month-day-number{background:#b46f8e;color:#fff}.month-events{display:grid;gap:4px;margin-top:5px}.month-event{display:block;min-width:0;overflow:hidden;padding:4px 5px;border-radius:5px;background:#eee5ea;color:#6b4e5b;font-size:8px;white-space:nowrap;text-overflow:ellipsis}.month-event.completed{background:#e3ece6;color:#52705e}.month-event i{display:inline-block;width:5px;height:5px;margin-right:3px;border-radius:50%;background:#c1819c}.month-event.completed i{background:#72947f}.month-events small{padding-left:4px;color:var(--muted);font-size:8px}
@media(min-width:601px) and (max-width:900px){.calendar-tools{align-items:flex-start;flex-direction:column}.calendar-period-nav{width:100%;grid-template-columns:40px minmax(0,1fr) 40px auto}.calendar-week{gap:5px}.calendar-week .day-col{min-height:220px}.calendar-month .month-day{min-height:92px;padding:6px}}
@media(max-width:600px){.calendar-card{padding:14px 10px}.calendar-tools{align-items:stretch;flex-direction:column;gap:12px}.calendar-view-button{min-width:0;padding:9px 7px}.calendar-period-nav{grid-template-columns:38px minmax(0,1fr) 38px}.calendar-period-nav h3{font-size:16px}.calendar-today-button{grid-column:1/-1;width:100%}.calendar-connect-actions{width:100%;flex-wrap:wrap}.calendar-connect-actions .secondary{flex:1}.calendar-week{grid-template-columns:repeat(7,126px);gap:7px;overflow-x:auto;scroll-snap-type:x proximity;padding-bottom:8px;-webkit-overflow-scrolling:touch}.calendar-week .day-col{min-height:205px;scroll-snap-align:start}.calendar-day{grid-template-columns:1fr;gap:10px}.day-focus{min-height:112px;display:grid;grid-template-columns:auto 62px 1fr;justify-content:start;gap:10px;padding:16px;text-align:left}.day-focus>span{grid-column:1/2}.day-focus strong{grid-column:2/3;grid-row:1/3;margin:0;font-size:55px}.day-focus small{grid-column:3/4}.day-session{grid-template-columns:52px minmax(0,1fr);gap:9px}.day-session>.session-state{grid-column:2;justify-self:start}.calendar-empty{min-height:180px}.calendar-month{gap:3px}.month-weekday{font-size:7px;padding:3px 0}.month-day{min-height:68px;padding:4px}.month-day-number{width:20px;height:20px;font-size:10px}.month-event{height:8px;padding:0;font-size:0;border-radius:99px}.month-event i{display:block;width:100%;height:100%;margin:0;background:#d5a0b6}.month-events small{font-size:7px}.session-control{margin-top:12px}}
@media(pointer:coarse){.calendar-view-button,.calendar-nav-button,.calendar-today-button,.month-day,.calendar-week .day-col{touch-action:manipulation;-webkit-tap-highlight-color:transparent}.calendar-view-button,.calendar-nav-button,.calendar-today-button{min-height:44px}.calendar-nav-button{min-width:44px}}

/* Multi-exercise routine builder. */
.exercise-helper{margin:-3px 0 3px;color:var(--muted);font-size:11px;line-height:1.55}.routine-exercise-plan{display:grid;gap:13px;margin:17px 0;padding:16px;border:1px solid var(--line);border-radius:12px;background:#fcfafb}.routine-plan-heading{display:flex;align-items:end;justify-content:space-between;gap:14px}.routine-plan-heading .eyebrow{margin-bottom:3px}.routine-plan-heading h3{margin:0;font:600 20px Fraunces}.exercise-count{flex:none;padding:6px 9px;border-radius:99px;background:#eadce3;color:#765465;font-size:9px;font-weight:700}.selected-exercise{display:grid;grid-template-columns:30px minmax(150px,1fr) minmax(210px,260px) 30px;align-items:center}.selected-exercise-number{display:grid;place-items:center;width:25px;height:25px;border-radius:50%;background:#eadce3;color:#765465;font:700 10px 'DM Mono'}.selected-exercise-dose{display:grid!important;grid-template-columns:70px minmax(120px,1fr);gap:7px}.selected-exercise-field{gap:3px;font-size:8px;color:var(--muted)}.selected-exercise-field input{min-height:36px;padding:7px 8px;font-size:12px}.exercise-more{color:#9b6079!important;font-weight:700}
@media(max-width:650px){.routine-plan-heading{align-items:flex-start;flex-direction:column;gap:7px}.selected-exercise{grid-template-columns:28px minmax(0,1fr) 30px;align-items:start}.selected-exercise-number{grid-column:1;grid-row:1}.selected-exercise>div:not(.selected-exercise-dose){grid-column:2;grid-row:1}.selected-exercise-dose{grid-column:2;grid-row:2;margin-top:7px}.selected-exercise>.exercise-remove{grid-column:3;grid-row:1}.selected-exercise-field input{font-size:16px}}

/* Plans, compliance and reminders. */
.topbar-actions{display:flex;align-items:center;gap:10px}.notification-button{position:relative;display:grid;place-content:center;width:43px;height:43px;border:1px solid var(--line);border-radius:50%;background:#fff;color:var(--muted);font-size:19px;cursor:pointer}.notification-button span{position:absolute;right:-3px;top:-4px;display:grid;place-content:center;min-width:18px;height:18px;padding:0 4px;border-radius:99px;background:#387463;color:#fff;font:700 9px 'DM Sans'}.full-card{grid-column:1/-1}.compliance-actions{display:flex;align-items:center;gap:12px}.compliance-actions select{min-width:110px;padding:8px;font-size:11px}.compliance-list{display:grid}.compliance-row{display:grid;grid-template-columns:40px minmax(0,1fr) auto;align-items:center;gap:11px;padding:12px 0;border-top:1px solid var(--line)}.compliance-row:first-child{border-top:0}.compliance-row>div{display:grid;gap:3px}.compliance-row b{font-size:12px}.compliance-row small{color:var(--muted);font-size:9px}.compliance-row>strong{font:600 19px Fraunces}.compliance-track{display:block;height:5px;margin-top:4px;overflow:hidden;border-radius:99px;background:#e4ede8}.compliance-track i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#4e9a7d,#6dbfa3)}.plans-card{margin:18px 0}.plan-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}.plan-card{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px 12px;padding:15px;border:1px solid var(--line);border-radius:12px;background:#fcfafb}.plan-card.inactive{opacity:.58}.plan-card h4{margin:9px 0 3px;font:600 16px Fraunces}.plan-card p{margin:0;color:var(--muted);font-size:10px}.plan-price{display:grid;align-content:start;justify-items:end}.plan-price strong{font:600 19px Fraunces}.plan-price small{font-size:9px;color:var(--muted)}.plan-card .text-button{grid-column:1/-1;justify-self:start;padding:3px 0}.checkbox-line{display:flex;align-items:center;gap:9px}.checkbox-line input{width:18px;height:18px;min-height:0}.detail-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:14px}.session-compliance,.portal-session-form{display:grid;grid-template-columns:auto 76px auto;align-items:end;gap:7px}.completion-check{display:flex;align-items:center;gap:5px;white-space:nowrap}.completion-check input{width:18px;height:18px;min-height:0}.completion-percent{position:relative}.completion-percent input{padding-right:24px}.completion-percent>span{position:absolute;right:8px;bottom:12px;color:var(--muted);font-size:9px}.session-compliance .secondary{min-height:38px;padding:8px;font-size:9px}.session-state.no_show{background:#f7e5e5;color:#95515a}.notification-list{display:grid;gap:8px;max-height:280px;overflow:auto}.notification-item{display:grid;gap:3px;padding:12px 13px;border-radius:10px;background:#f0f7f3;border-left:3px solid #4e9a7d}.notification-item.payment{border-left-color:#d8b85c;background:#fbf7e8}.notification-item b{font-size:12px}.notification-item span{color:var(--muted);font-size:10px;line-height:1.45}.notification-settings{display:grid;gap:12px;margin-top:5px;padding:14px;border-radius:11px;background:#f2f8f4}

/* Private client portal. */
.portal-shell{min-height:100dvh;background:var(--paper,#f8f9f6)}.portal-header{position:sticky;top:0;z-index:30;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:22px;min-height:96px;padding:max(18px,env(safe-area-inset-top)) 5vw 18px;border-bottom:1px solid var(--line,#e4ebe4);background:#ffffffeb;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.portal-brand{display:flex;align-items:center;gap:10px;color:var(--ink);font-weight:600;text-decoration:none}.portal-brand b{color:var(--ink)}.portal-greeting{text-align:center}.portal-greeting h1{margin:0;font:600 30px Fraunces}.portal-greeting .eyebrow{margin-bottom:4px}.portal-header>.topbar-actions{justify-self:end}.portal-main{width:min(1120px,100%);margin:auto;padding:34px 28px 110px}.portal-view{display:none}.portal-view.active{display:block}.portal-hero{display:flex;align-items:center;justify-content:space-between;gap:25px;padding:34px 38px;border-radius:23px;background:linear-gradient(130deg,#122b27,#1e4a3e);color:#fff;box-shadow:0 20px 40px #12312416}.portal-hero .eyebrow{color:var(--lime,#dcff53)}.portal-hero h2{margin:0;font:600 42px Fraunces}.portal-hero p{margin:7px 0 0;color:#b8d4c8}.portal-score{display:grid;place-content:center;width:140px;height:140px;flex:none;border-radius:50%;background:#d8f0e4;color:#132d28;text-align:center;box-shadow:0 0 0 8px #ffffff1f}.portal-score strong{font:600 36px Fraunces}.portal-score span{font-size:9px;text-transform:uppercase;letter-spacing:1px}.portal-metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:18px 0}.portal-metrics article{display:grid;gap:5px;padding:20px;border-radius:15px;background:#fff;box-shadow:0 5px 18px #13312410}.portal-metrics span,.portal-metrics small{color:var(--muted);font-size:10px}.portal-metrics strong{font:600 28px Fraunces}.portal-view>.card{margin-top:16px}.portal-chart{display:flex;align-items:end;gap:14px;height:190px;padding:15px 8px 0}.chart-column{display:grid;grid-template-rows:22px 1fr 18px;align-items:end;justify-items:center;gap:4px;flex:1;height:100%}.chart-column span,.chart-column small{font-size:9px;color:var(--muted);text-transform:capitalize}.chart-column i{width:min(38px,70%);min-height:4px;border-radius:9px 9px 3px 3px;background:linear-gradient(180deg,#4e9a7d,#6dbfa3)}.portal-inbody-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(155px,1fr));gap:9px}.portal-inbody-grid article{display:grid;gap:4px;padding:13px;border-radius:10px;background:#f5faf7}.portal-inbody-grid span,.portal-inbody-grid small{font-size:9px;color:var(--muted)}.portal-inbody-grid b{font:600 18px Fraunces}.portal-routines{display:grid;grid-template-columns:repeat(auto-fit,minmax(310px,1fr));gap:14px}.portal-completion-form{display:grid;grid-template-columns:1fr 120px;gap:10px;align-items:end;margin-top:13px}.portal-completion-form .primary{grid-column:1/-1}.portal-help{margin:-15px 0 20px;color:var(--muted);font-size:11px}.portal-calendar{display:grid;gap:9px}.portal-slot{display:grid;grid-template-columns:150px minmax(0,1fr) auto;align-items:center;gap:14px;padding:15px 18px;border-radius:12px;background:#fff;box-shadow:0 4px 14px #4a34400a}.portal-slot.busy{background:#f0ecee;color:#776c71}.portal-slot.mine{border-left:4px solid #4e9a7d}.portal-slot time,.portal-slot>div{display:grid;gap:2px}.portal-slot time span,.portal-slot>div span{color:var(--muted);font-size:10px}.portal-plan{display:flex;align-items:center;gap:12px;margin-bottom:16px;padding:18px;border-radius:14px;background:#fff;box-shadow:0 4px 14px #4a34400a}.portal-plan h3{margin:0;font:600 18px Fraunces}.portal-plan p{margin:3px 0 0;color:var(--muted);font-size:11px}.portal-nav{position:fixed;left:50%;bottom:max(16px,env(safe-area-inset-bottom));z-index:35;display:grid;grid-template-columns:repeat(5,1fr);width:min(560px,calc(100% - 28px));padding:7px;border-radius:19px;background:#132d28;box-shadow:0 16px 45px #0d221c50;transform:translateX(-50%)}.portal-nav a{display:flex;flex-direction:column;align-items:center;gap:3px;padding:9px 5px;border-radius:12px;color:#9bbfb4;font-size:9px;text-decoration:none}.portal-nav a span{font-size:18px}.portal-nav a.active{background:#ffffff17;color:var(--lime,#dcff53)}
@media(max-width:760px){.compliance-actions{align-items:flex-end;flex-direction:column;gap:5px}.session-row{grid-template-columns:72px minmax(0,1fr) auto}.session-compliance{grid-column:1/-1;grid-template-columns:minmax(95px,1fr) 80px auto}.portal-header{grid-template-columns:1fr auto;padding-left:18px;padding-right:18px}.portal-brand span{display:none}.portal-greeting{display:none}.portal-main{padding:20px 15px 105px}.portal-hero{padding:25px 22px}.portal-hero h2{font-size:32px}.portal-score{width:100px;height:100px}.portal-score strong{font-size:27px}.portal-metrics{grid-template-columns:1fr 1fr;gap:9px}.portal-metrics article:last-child{grid-column:1/-1}.portal-routines{grid-template-columns:1fr}.portal-slot{grid-template-columns:100px minmax(0,1fr)}.portal-slot .portal-session-form{grid-column:1/-1}.portal-chart{gap:5px}.detail-actions{grid-template-columns:1fr}}
.billing-period-bar{display:flex;align-items:end;gap:12px;padding:16px 18px;margin:-4px 0 22px;background:rgba(255,255,255,.82);border:1px solid #eadfe3;border-radius:16px;box-shadow:0 12px 30px rgba(77,52,63,.05)}.billing-period-copy{margin-right:auto;display:grid;gap:2px}.billing-period-copy .eyebrow{margin:0}.billing-period-copy strong{font:600 20px Fraunces;color:#493740}.billing-period-bar label{display:grid;gap:6px;color:#756870;font-size:11px;font-weight:700}.billing-period-bar select{min-width:140px;padding:10px 36px 10px 12px;border:1px solid #e4d8dd;border-radius:10px;background:#fff;color:#493740;font:600 13px 'DM Sans';outline-color:#d8a7bc}.billing-period-bar .secondary{min-height:39px}@media(max-width:720px){.billing-period-bar{display:grid;grid-template-columns:1fr 1fr}.billing-period-copy{grid-column:1/-1}.billing-period-bar label,.billing-period-bar select{min-width:0;width:100%}.billing-period-bar .secondary{grid-column:1/-1}}
.billing-insights{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(300px,1fr);gap:18px;margin:0 0 18px}.billing-insights .card{min-width:0}.insight-year{padding:6px 10px;border-radius:99px;background:#f3e4ea;color:#8d5870;font:700 11px 'DM Mono'}.billing-line-chart{display:grid;min-height:245px;place-items:center;overflow:hidden}.billing-line-chart svg{display:block;width:100%;height:auto;overflow:visible}.billing-chart-grid line{stroke:#eadfe3;stroke-width:1}.billing-chart-grid text{fill:#88767f;font:10px 'DM Sans'}.billing-chart-area{fill:#edbfd126}.billing-chart-line{fill:none;stroke:#b76f8d;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.billing-line-chart circle{fill:#fff;stroke:#b76f8d;stroke-width:3}.top-payers-list{display:grid}.top-payer{display:grid;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;gap:10px;padding:12px 0;border-top:1px solid #eee4e8}.top-payer:first-child{border-top:0}.top-payer-rank{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;background:#f2e3e9;color:#945d75;font:700 10px 'DM Mono'}.top-payer-person{display:grid;gap:3px;min-width:0}.top-payer-person b{overflow:hidden;font-size:12px;text-overflow:ellipsis;white-space:nowrap}.top-payer-person small{color:var(--muted);font-size:9px}.top-payer-person i{display:block;width:100%;height:4px;margin-top:3px;overflow:hidden;border-radius:99px;background:#f0e8eb}.top-payer-person i span{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,#c4809e,#e8aec5)}.top-payer>strong{font:600 15px Fraunces;white-space:nowrap}@media(max-width:980px){.billing-insights{grid-template-columns:1fr}}@media(max-width:600px){.billing-line-chart{min-height:190px;margin:0 -8px}.billing-chart-grid text{font-size:12px}.top-payer{grid-template-columns:26px minmax(0,1fr) auto}.top-payer>strong{font-size:13px}}
.zoho-migration-controls{display:flex;align-items:center;justify-content:flex-end;gap:9px;flex-wrap:wrap}.zoho-invoice-shortcut{white-space:nowrap}.billing-load-more{display:block;margin:18px auto 0}.billing-load-more[hidden]{display:none}@media(max-width:720px){.billing-period-bar label:nth-of-type(3){grid-column:1/-1}.zoho-migration-controls{width:100%;justify-content:stretch}.zoho-migration-controls .secondary{flex:1}.zoho-migration-controls .zoho-status{margin-left:auto}}

/* Metriva themeable system: colors driven by JS via --theme-* custom properties. */
:root{--ink:#1f2937;--ink-2:#334155;--muted:#64748b;--paper:#f5f7fa;--card:#ffffff;--line:#e2e8f0;--lime:#cbd5e1;--coral:#94a3b8;--yellow:#cbd5e1;--mint:#e2e8f0;--lavender:#e2e8f0;--aqua:#e2e8f0;--theme-accent:#cbd5e1;--theme-accent-text:#dbe3ec;--theme-sidebar:linear-gradient(155deg,#17212b,#243442);--theme-sidebar-text:#cbd5e1;--theme-sidebar-active:#ffffff12;--theme-sidebar-accent:#cbd5e1;--theme-sidebar-hover:#fff;--theme-hero:linear-gradient(135deg,#1f2937,#334155);--theme-hero-accent:#dbe3ec;--theme-hero-score:#e2e8f0;--theme-hero-score-border:#94a3b8;--theme-primary:#243240;--theme-primary-text:#fff;--theme-initials:#eef2f7;--theme-initials-text:#334155;--theme-chip:#f1f5f9;--theme-chip-border:#94a3b8;--theme-chip-text:#334155;--theme-portal:linear-gradient(130deg,#122b27,#1e4a3e);--theme-portal-nav:#132d28;--theme-auth:linear-gradient(145deg,#17212b,#334155)}
body{background:var(--paper);color:var(--ink)}
.sidebar{background:var(--theme-sidebar);box-shadow:8px 0 28px #0f172a18}.brand b,.nav-link.active .nav-icon,.hero h2 i,.hero-link span{color:var(--theme-accent-text)}.brand-mark{background:var(--theme-accent);color:var(--ink);box-shadow:none;transform:none}.nav-caption,.sidebar-foot small{color:var(--theme-sidebar-text)}.nav-link{color:var(--theme-sidebar-text)}.nav-link:hover,.nav-link.active{background:var(--theme-sidebar-active);color:var(--theme-sidebar-hover);border-color:#ffffff18}.nav-link.active:before{background:var(--theme-sidebar-accent);box-shadow:none}.sidebar-foot{background:#ffffff08;border-color:#ffffff12}.sidebar-foot b{color:#e2e8f0}.online-dot{background:var(--theme-accent);box-shadow:none}
.topbar{background:linear-gradient(180deg,var(--card) 0%,transparent 100%)}.topbar:after{border-color:var(--line)}.avatar{background:var(--theme-accent);color:var(--ink);box-shadow:none}.primary{background:var(--theme-primary);color:var(--theme-primary-text);box-shadow:none}.primary:hover{box-shadow:none;filter:brightness(.9)}.secondary,.filter{background:#fff;border-color:var(--line);color:var(--ink-2)}.text-button,.auth-link{color:var(--muted)}.text-button:hover,.auth-link:hover{color:var(--ink)}.eyebrow{color:var(--muted)}
.hero{background:var(--theme-hero);box-shadow:0 16px 30px #1e293716}.hero:after{border-color:#ffffff22}.hero .eyebrow,.hero p:not(.eyebrow){color:var(--theme-accent-text)}.hero-score{background:var(--theme-hero-score);border-color:var(--theme-hero-score-border);color:var(--ink);box-shadow:0 0 0 7px #ffffff15}.hero-score small{color:var(--muted)}.floating-stat{box-shadow:0 10px 22px #0f172a22}.stat-one b,.agenda-time{color:var(--muted)}.stat-two .spark{background:var(--theme-accent);color:var(--ink)}.hero-photo,.portal-hero-photo{display:none!important}
.metrics article,.card,.client-card,.routine-card,.week-card,.calendar-connect{border:1px solid var(--line);box-shadow:0 4px 14px #0f172a08}.metrics article:after{background:#e8f5dc}.metrics article:nth-child(2):after{background:#e4defc}.metrics article:nth-child(3):after{background:#ffe0d4}.metrics article:nth-child(4):after{background:#fdf0bf}.initials{background:var(--theme-initials);color:var(--theme-initials-text)}.delta,.status,.payment-status.confirmed{background:var(--theme-chip);color:var(--theme-chip-text)}.delta.warn,.payment-status{background:var(--theme-chip);color:var(--theme-chip-text)}.day-col,.day-col.today,.session-chip{background:var(--theme-chip);color:var(--theme-chip-text);box-shadow:none}.session-chip{border-left:3px solid var(--theme-chip-border)}.alert-item{background:var(--theme-chip);border-left-color:var(--theme-chip-border)}.toolbar input,input,select,textarea{border-color:var(--line);outline-color:var(--muted)}
.portal-shell{background:var(--paper)}.portal-header{background:#ffffffeb;border-color:var(--line)}.portal-brand b{color:var(--muted)}.portal-hero{background:var(--theme-portal);box-shadow:0 14px 28px #1e293716}.portal-hero .eyebrow,.portal-hero p{color:var(--theme-accent-text)}.portal-score{background:var(--theme-hero-score);color:var(--ink);box-shadow:0 0 0 7px #ffffff18}.portal-nav{background:var(--theme-portal-nav);box-shadow:0 14px 34px #0f172a30}.portal-nav a{color:var(--theme-sidebar-text)}.portal-nav a.active{background:#ffffff16;color:#fff}.portal-slot,.portal-plan{box-shadow:0 3px 12px #0f172a08}.portal-slot.mine{border-left-color:var(--theme-accent)}.chart-column i,.compliance-track i,.billing-chart-line,.billing-line-chart circle{background:var(--muted);stroke:var(--muted)}
.auth-screen{background:linear-gradient(135deg,var(--paper),#f8fafc)}.auth-panel{min-height:600px;grid-template-columns:minmax(260px,.8fr) minmax(360px,440px);background:#fff;border:1px solid var(--line);box-shadow:0 24px 70px #0f172a18}.auth-portrait{background:var(--theme-auth)}.auth-portrait:before{content:'METRIVA';position:absolute;left:34px;bottom:38px;z-index:1;color:#f8fafc;font:700 32px/1 system-ui,sans-serif;letter-spacing:.18em}.auth-portrait:after{background:radial-gradient(circle at 75% 20%,#ffffff22 0 2%,transparent 2.4%),linear-gradient(180deg,transparent,#0f172a66)}.auth-portrait img{display:none}.auth-brand{color:var(--ink)}.auth-brand .brand-logo{box-shadow:none}.auth-card h1{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-weight:720;letter-spacing:-1.8px}.auth-copy{color:var(--muted)}.form-error{color:#b91c1c}.auth-status .online-dot{box-shadow:0 0 0 4px #cbd5e166}.toast{background:var(--ink)}.toast.error{background:#991b1b}
dialog{color:var(--ink);box-shadow:0 22px 70px #0f172a30}dialog::backdrop{background:#0f172a88}.notification-button{border-color:var(--line);color:var(--muted)}.notification-button span{background:var(--muted)}.portal-weight-chart polyline{stroke:var(--muted)!important}.portal-weight-chart circle{fill:var(--muted)!important}.billing-period-bar,.billing-reports-card,.recurring-billing{border-color:var(--line);background:#fff}.billing-chart-area{fill:var(--muted)}.insight-year,.top-payer-rank{background:var(--theme-chip);color:var(--theme-chip-text)}.top-payer-person i,.compliance-track{background:var(--theme-chip)}.top-payer-person i span{background:var(--muted)}
@media(max-width:760px){.auth-portrait{height:150px}.auth-portrait:before{left:28px;bottom:27px;font-size:25px}.auth-panel{grid-template-columns:1fr}.auth-card{padding:38px 30px}}

/* Automatic monthly billing and cutoff visibility. */
.recurring-billing{margin-bottom:18px;background:linear-gradient(135deg,#fff,#fbf6f8)}.recurring-billing-state{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;border-radius:13px;background:#edf6f1;color:#4f705f}.recurring-billing-state.paused{background:#fbf1e8;color:#8a6652}.recurring-billing-icon{display:grid;place-content:center;width:30px;height:30px;flex:0 0 30px;border-radius:50%;background:#d8eade;font-weight:900}.recurring-billing-state.paused .recurring-billing-icon{background:#f1ddcb}.recurring-billing-state b{display:block;color:var(--ink);font-size:12px}.recurring-billing-state p{margin:3px 0 0;font-size:10px;line-height:1.5}.recurring-billing-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:13px}.recurring-billing-metrics article{display:grid;gap:5px;padding:13px;border:1px solid var(--line);border-radius:11px;background:#fff}.recurring-billing-metrics span{color:var(--muted);font-size:9px}.recurring-billing-metrics strong{font:600 23px Fraunces}.recurring-billing-metrics .recurring-date{font-size:15px;line-height:1.2}.recurring-billing-actions{display:flex;align-items:center;gap:9px;margin-top:13px}.recurring-billing-actions .commercial-note{margin-left:auto}@media(max-width:760px){.recurring-billing-metrics{grid-template-columns:1fr 1fr}.recurring-billing-actions{align-items:stretch;flex-direction:column}.recurring-billing-actions button{width:100%}.recurring-billing-actions .commercial-note{margin-left:0}}@media(max-width:430px){.recurring-billing-metrics{grid-template-columns:1fr}.recurring-billing-metrics article{grid-template-columns:1fr auto;align-items:center}.recurring-billing-metrics strong{font-size:20px}}

/* Private billing documents and exports. */
.billing-reports-card{display:flex;align-items:center;justify-content:space-between;gap:24px;margin:0 0 18px;padding:19px 22px;background:linear-gradient(120deg,#fff,#fbf2f6)}.billing-reports-card .eyebrow{margin-bottom:5px}.billing-reports-card h3{font-size:20px}.billing-reports-card p{max-width:620px;line-height:1.5}.billing-report-actions,.invoice-actions,.report-format-actions,.pdf-actions{display:flex;align-items:center;gap:8px}.billing-report-actions{flex:none}.invoice-actions{justify-content:flex-end}.invoice-actions .session-use{white-space:nowrap}.report-form-copy{margin:-10px 0 4px;color:var(--muted);font-size:12px;line-height:1.55}.report-format-actions{display:grid;grid-template-columns:1fr 1fr;margin-top:5px}.report-format-actions button{width:100%}.pdf-loading{min-height:180px;display:grid;align-content:center;justify-items:center;text-align:center}.pdf-loading h2{margin-bottom:5px}.pdf-loading p:last-child{color:var(--muted)}.pdf-preview-head{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:16px}.pdf-preview-head h2{margin:0}.pdf-actions a{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;white-space:nowrap}.pdf-preview iframe{display:block;width:100%;height:min(68vh,760px);border:1px solid #eadfe3;border-radius:12px;background:#f6f1f3}.pdf-mobile-note{margin:10px 0 0;color:var(--muted);font-size:10px;text-align:center}
@media(max-width:760px){.billing-reports-card,.pdf-preview-head{align-items:stretch;flex-direction:column}.billing-report-actions,.pdf-actions{display:grid;grid-template-columns:1fr 1fr;width:100%}.billing-report-actions button,.pdf-actions a{width:100%}.invoice-actions{align-items:stretch;flex-direction:column}.pdf-preview iframe{height:58vh}}
@media(max-width:480px){.report-format-actions,.billing-report-actions,.pdf-actions{grid-template-columns:1fr}.pdf-preview iframe{height:52vh}dialog.modal-wide:has(.pdf-preview){width:calc(100% - 12px);padding:22px 14px}}

/* Bidirectional calendar schedule controls. */
.session-management{display:grid;grid-template-columns:auto minmax(290px,1fr);align-items:end;gap:8px}.edit-session{min-height:38px;padding:8px 10px;font-size:9px;white-space:nowrap}.calendar-edit-help{margin:0;padding:11px 12px;border-radius:10px;background:#f8f2f5;color:var(--muted);font-size:10px;line-height:1.5}.session-date span{white-space:nowrap}
@media(max-width:980px){.session-row{grid-template-columns:80px minmax(0,1fr) auto}.session-management{grid-column:1/-1;grid-template-columns:auto minmax(270px,1fr);justify-content:end}.session-management .session-compliance{min-width:290px}}
@media(max-width:600px){.session-management{grid-template-columns:1fr}.session-management .edit-session{width:100%;min-height:44px}.session-management .session-compliance{min-width:0;grid-template-columns:minmax(95px,1fr) 80px auto}}
/* Expediente: comparativo InBody, asistencia, lesiones y fotos de progreso */
.delta.good{background:#e6efe9;color:#4b7360}.delta.bad{background:#f7e6e1;color:#9c6558}.delta.neutral{background:#f1ecee;color:#7c7077}.delta-cell{display:flex;flex-wrap:wrap;gap:4px;justify-content:flex-end}.comparison-caption{margin:0 0 10px;font-size:11px;color:var(--muted)}.comparison-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(128px,1fr));gap:9px;margin-bottom:4px}.comparison-grid article{display:grid;gap:7px;justify-items:start;padding:13px;border-radius:11px;background:rgba(255,253,252,.94);box-shadow:0 5px 15px #6d4a5909}.comparison-grid span{font-size:11px;color:var(--muted)}.section-note{margin:10px 0 0;font-size:11px;line-height:1.45;color:var(--muted)}
.condition-list{display:grid;gap:10px}.condition-item{padding:14px;border-radius:11px;background:rgba(255,253,252,.94);box-shadow:0 5px 15px #6d4a5909;border-left:3px solid #dca78f}.condition-item.monitoring{border-left-color:#e7c889}.condition-item.recovered{border-left-color:#a9c4b3;opacity:.72}.condition-item header{display:flex;align-items:center;gap:9px}.condition-item header b{font-size:13px}.condition-item small{display:block;margin-top:5px;font-size:10px;color:var(--muted)}.condition-item p{margin:9px 0 0;font-size:12px;line-height:1.45}.condition-restriction{color:#9c6558;font-weight:600}.condition-tag{margin-left:auto;border-radius:99px;padding:4px 8px;font:700 9px 'DM Sans';text-transform:uppercase;letter-spacing:.4px;background:#e6efe9;color:#52705e}.condition-tag.moderate{background:#f6ecd9;color:#8a6b34}.condition-tag.severe{background:#f7e0da;color:#9c5544}.condition-actions{display:flex;gap:7px;margin-top:12px}
.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(152px,1fr));gap:12px}.photo-card{margin:0;border-radius:12px;overflow:hidden;background:rgba(255,253,252,.94);box-shadow:0 5px 15px #6d4a5909}.photo-card img{display:block;width:100%;aspect-ratio:3/4;object-fit:cover;background:#f1ecee}.photo-missing{display:grid;place-content:center;aspect-ratio:3/4;background:#f1ecee;color:var(--muted);font-size:11px;text-align:center;padding:10px}.photo-card figcaption{display:grid;gap:3px;padding:11px}.photo-card figcaption b{font-size:12px}.photo-card figcaption span{font-size:10px;color:#8a5c73;font-weight:600}.photo-card figcaption small{font-size:10px;line-height:1.4;color:var(--muted)}.photo-card figcaption button{margin-top:8px}
/* Catálogo de ejercicios y video de demostración */
.catalog-toolbar{display:flex;gap:9px;align-items:center;margin:16px 0 12px}.catalog-toolbar select{flex:1}.catalog-list{display:grid;gap:8px;max-height:52vh;overflow-y:auto;padding-right:3px}.catalog-item{display:grid;grid-template-columns:1fr auto;gap:6px 12px;align-items:center;padding:12px 13px;border-radius:11px;background:rgba(255,253,252,.94);box-shadow:0 4px 13px #6d4a5909}.catalog-item-copy b{display:block;font-size:13px}.catalog-item-copy small{display:block;margin-top:3px;font-size:10px;color:var(--muted)}.catalog-video{justify-self:end;border-radius:99px;padding:4px 9px;font:700 9px 'DM Sans';text-transform:uppercase;letter-spacing:.4px;background:#f1ecee;color:#7c7077;white-space:nowrap}.catalog-video.ready{background:#e6efe9;color:#4b7360}.catalog-item-actions{grid-column:1/-1;display:flex;gap:7px}
.exercise-video{margin:10px 0 0;border-radius:10px;overflow:hidden;background:#000}.exercise-video video{display:block;width:100%;max-height:58vh;background:#000}.exercise-video-variant{margin-top:12px;padding-top:10px;border-top:1px solid var(--line)}.exercise-video-variant:first-child{margin-top:0;border-top:0}.exercise-video-variant>b{display:block;font-size:12px;color:var(--ink)}.exercise-video-list{display:grid;gap:7px;margin:10px 0 15px}.exercise-video-list-item{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:9px 11px;border-radius:9px;background:#f8f2f5}.exercise-video-list-item span{display:grid;gap:2px}.exercise-video-list-item small{color:var(--muted);font-size:10px}.exercise-video-toggle{margin-top:9px}.portal-exercise{display:grid;gap:4px;padding:12px 0;border-top:1px solid var(--line)}.portal-exercise:first-child{border-top:0}.portal-exercise b{font-size:13px}.portal-exercise small{font-size:10px;color:var(--muted)}
/* Registro diario de entrenamientos y fecha límite de rutinas */
.daily-list{display:grid;gap:6px;max-height:52vh;overflow-y:auto;margin:12px 0;padding-right:3px}.daily-item{display:flex;align-items:center;gap:11px;padding:11px 13px;border-radius:10px;background:rgba(255,253,252,.94);box-shadow:0 4px 12px #6d4a5909;cursor:pointer;font-weight:400}.daily-item.locked{opacity:.62;cursor:default}.daily-item input{width:19px;height:19px;flex:0 0 19px;accent-color:#c98aa6;cursor:inherit}.daily-name{display:grid;gap:2px}.daily-name b{font-size:13px}.daily-name small{font-size:10px;color:var(--muted)}
.routine-due{display:inline-block;margin-top:6px;border-radius:99px;padding:4px 9px;font:700 9px 'DM Sans';text-transform:uppercase;letter-spacing:.4px;background:#e6efe9;color:#4b7360}.routine-due.overdue{background:#f7e6e1;color:#9c6558}
/* Menú de cuenta */
.account-card{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:4px 0 14px;padding:14px;border-radius:11px;background:rgba(255,253,252,.94);box-shadow:0 4px 13px #6d4a5909}.account-card b{display:block;font-size:13px}.account-card small{display:block;margin-top:3px;font-size:10px;color:var(--muted)}
/* Enlace de acceso de un solo uso */
.access-link{margin:12px 0;padding:13px;border-radius:10px;background:#f7f1f3;border:1px dashed #d8a7bc}.access-link code{display:block;font:500 11px/1.5 'DM Mono',monospace;color:#6e5963;word-break:break-all;user-select:all}
.sin-video{color:#a2969c;font-style:italic}
/* Área táctil de las casillas: la etiqueta ya envolvía a la casilla, pero la
   fila medía 24 px de alto y con el dedo se falla. 44 px es el mínimo cómodo. */
.checkbox-line,.completion-check{display:flex;align-items:center;gap:10px;min-height:44px}
.checkbox-line input[type=checkbox],.completion-check input[type=checkbox]{width:20px;height:20px;flex:0 0 20px;accent-color:#c98aa6}
/* Saldos de sesiones en el expediente */
.balance-list{display:grid;gap:8px}.balance-item{display:grid;grid-template-columns:1fr auto;gap:8px 12px;align-items:center;padding:13px;border-radius:11px;background:rgba(255,253,252,.94);box-shadow:0 4px 13px #6d4a5909;border-left:3px solid #a9c4b3}.balance-item.expired{border-left-color:#dca78f}.balance-item b{display:block;font-size:13px}.balance-item small{display:block;margin-top:3px;font-size:10px;color:var(--muted)}.balance-warning{color:#9c6558;font-weight:600}.balance-item button{grid-column:1/-1;min-height:44px}
/* Gráfica de cumplimiento mes a mes */
.compliance-chart{display:block;width:100%;height:auto;margin:14px 0;border-radius:11px;background:rgba(255,253,252,.94);box-shadow:0 4px 13px #6d4a5909;padding:6px}
.catalog-toolbar input[type=search]{flex:1 1 100%;min-height:44px;border:1px solid #dbe2d9;border-radius:8px;padding:10px 12px;font:14px 'DM Sans'}
.catalog-toolbar{flex-wrap:wrap}
/* Archivos del expediente */
.document-list{display:grid;gap:8px}.document-item{display:grid;gap:8px;padding:13px;border-radius:11px;background:rgba(255,253,252,.94);box-shadow:0 4px 13px #6d4a5909}.document-item b{display:block;font-size:13px;word-break:break-word}.document-item small{display:block;margin-top:3px;font-size:10px;color:var(--muted)}.document-actions{display:flex;gap:7px;flex-wrap:wrap}.document-actions button{min-height:44px}
.document-image{display:block;width:100%;height:auto;border-radius:10px;background:#f1ecee}.document-embed{display:block;width:100%;height:62vh;border:0;border-radius:10px;background:#f1ecee}.document-open{display:block;text-align:center;text-decoration:none;line-height:44px;margin-top:10px}
.pago-nota{display:inline-block;margin-top:6px;border-radius:99px;padding:4px 9px;font:700 9px 'DM Sans';text-transform:uppercase;letter-spacing:.4px;background:#eee4ef;color:#705474}
/* Registro rápido de cobros */
.pending-list{display:grid;gap:8px;max-height:56vh;overflow-y:auto;padding-right:3px}.pending-item{display:grid;grid-template-columns:1fr auto;gap:8px 12px;align-items:center;padding:13px;border-radius:11px;background:rgba(255,253,252,.94);box-shadow:0 4px 13px #6d4a5909;border-left:3px solid #a9c4b3}.pending-item.overdue{border-left-color:#dca78f}.pending-item b{display:block;font-size:13px}.pending-item small{display:block;margin-top:3px;font-size:10px;color:var(--muted)}.pending-amount{font:600 15px Fraunces;white-space:nowrap}.pending-actions{grid-column:1/-1;display:flex;gap:7px}.pending-actions select{flex:1;min-height:44px;border:1px solid #dbe2d9;border-radius:8px;padding:0 10px;font:13px 'DM Sans'}.pending-actions button{min-height:44px;white-space:nowrap}
/* Gastos */
.gasto-lista{display:grid;gap:8px;max-height:48vh;overflow-y:auto;padding-right:3px;margin-top:10px}.gasto-item{display:grid;grid-template-columns:1fr auto;gap:8px 12px;align-items:center;padding:13px;border-radius:11px;background:rgba(255,253,252,.94);box-shadow:0 4px 13px #6d4a5909}.gasto-item b{display:block;font-size:13px}.gasto-item small{display:block;margin-top:3px;font-size:10px;color:var(--muted)}.gasto-monto{font:600 15px Fraunces;white-space:nowrap;color:#9c6558}.gasto-acciones{grid-column:1/-1;display:flex;gap:7px}.gasto-acciones button,.gasto-item>button{min-height:44px}
.gasto-resumen{display:flex;flex-wrap:wrap;gap:7px;margin:10px 0}.gasto-resumen span{display:grid;gap:2px;padding:9px 12px;border-radius:10px;background:#f8f1f3;font-size:10px;color:var(--muted)}.gasto-resumen b{font:600 14px Fraunces;color:var(--ink)}
/* Panel de finanzas */
.finance-chart{display:block;width:100%;height:auto;margin:14px 0 6px;border-radius:11px;background:rgba(255,253,252,.94);box-shadow:0 4px 13px #6d4a5909;padding:6px}
.chart-leyenda{display:flex;gap:16px;justify-content:center;margin-bottom:6px;font-size:10px;color:var(--muted)}.chart-leyenda span{display:flex;align-items:center;gap:6px}.chart-leyenda i{width:10px;height:10px;border-radius:3px;display:inline-block}
.neto-positivo{color:#4b7360}.neto-negativo{color:#9c6558}

/* Ámbito de las categorías: el negocio y lo personal conviven en la app, pero
   no se suman en el mismo margen. En el teléfono el selector baja a su propia
   línea en vez de apretujarse contra el botón de eliminar. */
.categoria-acciones{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.ambito-select{padding:7px 9px;border-radius:9px;border:1px solid #e6d7dc;background:#fffdfc;font-size:12px;color:var(--ink);max-width:150px}
.aviso-ambito{background:#fbf3e8;border-left:3px solid #c9a227;padding:9px 12px;border-radius:8px;margin:10px 0}
.gasto-resumen span.ambito-negocio{background:#eef4f0}
.gasto-resumen span.ambito-personal{background:#f6f0f6}
.gasto-resumen span.ambito-ninguno{background:#faf4ea}
@media (max-width:520px){
  /* .gasto-item es una rejilla de dos columnas: sin ocupar la fila entera, el
     selector y el botón se estrujan en la columna estrecha de la derecha. */
  .categoria-acciones{grid-column:1/-1;width:100%;justify-content:space-between;margin-top:8px}
  .ambito-select{flex:1 1 auto;max-width:none;min-height:44px}
}

/* Rutinas: cuatro acciones en una tarjeta estrecha. Sin permitir que bajen de
   línea, "Ver rutina" partía en dos y los botones llegaban al borde. */
.routine-card .client-actions{flex-wrap:wrap;gap:6px}
.routine-card .client-actions button{flex:0 1 auto;white-space:nowrap}

/* Tablas en el teléfono: cada fila pasa a ser una ficha.
   Antes seguían siendo tablas de 500 px dentro de un contenedor con scroll
   lateral, así que las acciones —"Ver PDF", "Editar pago", "Editar"— vivían en
   la última columna, fuera de la pantalla, y había que arrastrar de lado para
   descubrirlas. Estaban ahí, pero era como si no. */
@media(max-width:600px){
  .stack-mobile thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
  .stack-mobile,.stack-mobile tbody,.stack-mobile tr,.stack-mobile td{display:block;width:auto}
  .stack-mobile tr{margin-bottom:10px;padding:13px;border-radius:12px;background:rgba(255,253,252,.94);box-shadow:0 4px 13px #6d4a5909}
  .stack-mobile td{border:0;padding:5px 0;display:grid;grid-template-columns:minmax(78px,auto) 1fr;gap:10px;align-items:baseline;font-size:13px}
  .stack-mobile td:before{content:attr(data-label);font:500 10px 'DM Mono';letter-spacing:1px;text-transform:uppercase;color:var(--muted)}
  .stack-mobile td[data-label="Acciones"]{grid-template-columns:1fr;gap:6px;margin-top:6px;padding-top:10px;border-top:1px solid var(--line)}
  .stack-mobile td[data-label="Acciones"]:before{display:none}
  .stack-mobile .invoice-actions{display:flex;flex-wrap:wrap;gap:6px}
  .stack-mobile .invoice-actions button{flex:1 1 auto;min-height:44px}
  .stack-mobile td.empty:before{display:none}
  /* La fila vacía no debe parecer una ficha con datos. */
  .stack-mobile tr:has(td.empty){background:none;box-shadow:none;padding:0}
  .table-wrap:has(.stack-mobile){overflow-x:visible}
}

/* Sesiones individuales: la tercera modalidad. Se distingue de mensualidad y
   paquete para que no haya que leer la letra pequeña. */
.commercial-label.single-label{background:#f4ece2;color:#7d6144}

/* Agendar varios días a la vez. Los días son botones cuadrados y no una lista
   de casillas: en el teléfono hay que poder tocarlos con el pulgar. */
.repetir-semanal{border:1px solid var(--line);border-radius:12px;padding:13px 14px;margin:0;display:grid;gap:10px}
.repetir-semanal legend{font-size:12px;font-weight:600;padding:0 6px;color:var(--ink)}
.dias-semana{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.dias-semana label{display:grid;place-items:center;margin:0}
.dias-semana input{position:absolute;opacity:0;width:0;height:0}
.dias-semana span{display:grid;place-items:center;width:100%;min-height:44px;border-radius:10px;border:1px solid var(--line);background:var(--card);font:600 13px 'DM Sans';cursor:pointer;user-select:none}
.dias-semana input:checked+span{background:var(--lime);border-color:transparent;color:#49343e}
.dias-semana input:focus-visible+span{outline:2px solid #d8a7bc;outline-offset:2px}

/* Cuentas por cobrar: lo vencido salta a la vista sin leer fechas. */
.por-cobrar-vencida{color:#9c6558;font-weight:600}

/* Peso del ejercicio: la pista del historial se toca para copiarla. */
.peso-anterior{display:block;margin-top:4px;font-size:10px;color:#9b607a;cursor:pointer;text-decoration:underline dotted}
.peso-anterior:hover{color:#7d4a60}
.peso-equivalencia{display:block;margin-top:3px;font-size:10px;color:var(--muted)}

/* Clientes agrupados por estado. El encabezado ocupa la fila entera: dentro de
   una rejilla de tarjetas, si no, se colocaría como una tarjeta más. */
.grupo-clientes{grid-column:1/-1;display:flex;align-items:center;gap:9px;margin:6px 0 0;font:500 10px 'DM Mono';letter-spacing:1.3px;text-transform:uppercase;color:var(--muted)}
.grupo-clientes:not(:first-child){margin-top:20px;padding-top:16px;border-top:1px solid var(--line)}
.grupo-clientes span{padding:2px 8px;border-radius:99px;background:#eddde5;color:#7d4a60;font-size:10px}
/* El desplegable de estados no lleva max-width:none: esa regla ganaba por
   especificidad a la del móvil y se comía el ancho del buscador, que quedaba
   reducido a una rendija. En pantalla estrecha cada uno ocupa su propia fila:
   "Todos los estados" no cabe en los 125 px que tenía el botón anterior. */
select.filter{padding:11px 13px;font:600 13px 'DM Sans';cursor:pointer}
@media(max-width:600px){
  .toolbar{flex-wrap:wrap}
  .toolbar input{flex:1 1 100%}
  select.filter{flex:1 1 100%;max-width:none}
}

/* Estado del cliente. Quien ya no entrena se ve en rojo, y quien está en pausa
   en ámbar: son tres situaciones distintas y la etiqueta debía notarlo. */
.status.estado-inactive{background:#f7e2dc;color:#9c4f3a}
.status.estado-paused{background:#f7eddc;color:#8a6a2f}

/* Agenda semanal del portal. Ocho columnas: la hora y los siete días. En el
   teléfono cada columna baja a ~40 px, que sigue siendo tocable. */
.portal-mes{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}
.portal-mes b{font:600 15px Fraunces;letter-spacing:-.3px}
.portal-mes-nav{width:40px;height:40px;border-radius:50%;border:1px solid var(--line);background:var(--card);font-size:20px;line-height:1;color:var(--ink);cursor:pointer}
.portal-semana-rejilla{display:grid;grid-template-columns:38px repeat(7,minmax(0,1fr));gap:2px;align-items:stretch}
.portal-hora{font:500 9px 'DM Mono';color:var(--muted);display:flex;align-items:center;justify-content:flex-end;padding-right:4px}
.portal-col-dia{border:0;background:none;cursor:pointer;color:var(--ink);display:grid;place-items:center;padding:4px 0 6px;line-height:1.15}
.portal-col-dia b{font:500 10px 'DM Mono';color:var(--muted)}
.portal-col-dia i{font-style:normal;font:600 13px 'DM Sans'}
.portal-col-dia.hoy i{background:var(--ink);color:#fff;border-radius:50%;width:22px;height:22px;display:grid;place-items:center}
.portal-tramo{min-height:17px;border:0;border-radius:4px;padding:0;display:grid;place-items:center;font-size:9px;line-height:1}
.portal-tramo.libre{background:#f2f4f0}
.portal-bloque{border:0;border-radius:6px;padding:0;display:grid;place-items:center;font-size:10px;line-height:1;cursor:pointer;margin:0}
.portal-bloque.ocupada{background:#cdc4c8;color:#5f545a}
.portal-bloque.mia{background:#b0dece;color:#1a4a38}
.portal-leyenda{margin:12px 0 4px;font-size:11px;color:var(--muted)}
.portal-leyenda .marca-mia{color:#4e9a7d}
.portal-leyenda .marca-ocupada{color:#b8adb2}
.portal-leyenda .marca-libre{color:#8fa08b}
.portal-dia-titulo{margin:14px 0 10px;font:600 16px Fraunces;text-transform:capitalize}
.portal-tramo.pasado{background:#efeeec;opacity:.5}
.portal-leyenda .marca-pasada{color:#c9c6c2}
.portal-mes-nav:disabled{opacity:.35;cursor:default}

/* Aplicar un cobro a las mensualidades que cubre. En móvil cada persona se
   apila: tres columnas a 375 px dejan los campos de monto ilegibles. */
.coverage-list{display:grid;gap:10px;margin:12px 0}
.coverage-row{display:grid;grid-template-columns:1fr 96px 96px;gap:10px;align-items:end;padding:11px;border:1px solid var(--line);border-radius:11px;background:#fff}
.coverage-row-done{opacity:.55}
.coverage-pick{display:flex;align-items:center;gap:9px}
.coverage-pick input{width:auto;margin:0}
.coverage-pick span{display:block;line-height:1.3}
.coverage-pick small{display:block;color:var(--muted);font-size:9px}
.coverage-warn{color:#a8674c}
.coverage-applied{margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}
.coverage-applied-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 0;font-size:11px}
@media(max-width:560px){
  .coverage-row{grid-template-columns:1fr 1fr}
  .coverage-pick{grid-column:1/-1}
  .coverage-applied-row{flex-direction:column;align-items:stretch}
}

/* Aviso de choque de horario. Ámbar, no rojo: no es un error, es un dato que
   la entrenadora puede ignorar a propósito cuando dos entrenan juntos. */
.conflict-warn{margin:8px 0 0;padding:9px 11px;border-radius:10px;background:#fbf1e8;color:#8a6652;font-size:11px;line-height:1.45}

/* Resultado de la sesión: tres estados en claro, no una casilla que al
   desmarcarse significaba "no cumplió". */
.completion-outcome select{font-size:11px;padding:7px 8px;min-width:118px}
.completion-percent input:disabled{opacity:.45}
@media(max-width:560px){.completion-outcome{flex:1 1 100%}.completion-outcome select{width:100%}}

/* Clases que ya pasaron y siguen sin marcar. Ámbar, como el aviso de choque:
   pide una decisión, no denuncia un error. */
.notification-item.pending{background:#fbf1e8;border-left:3px solid #c9a288}
.notification-item.overdue{background:#f9e7e0;border-left:3px solid #cf6a4f}
.notification-actions{display:flex;flex-wrap:wrap;gap:7px;margin-top:9px}
.notification-actions button{flex:1 1 auto;font-size:11px;padding:8px 10px}
@media(max-width:560px){.notification-actions button{flex:1 1 100%}}

/* Días con nombre de tres letras: siete columnas de una letra caben, pero
   "M" vale igual para martes y miércoles y ese fue justo el error. A 375 px
   siete columnas de tres letras no entran, así que se parten en cuatro. */
.dias-semana span{font-size:11px;letter-spacing:-.2px}
@media(max-width:560px){
  .dias-semana{grid-template-columns:repeat(4,minmax(0,1fr))}
  .dias-semana span{min-height:46px;font-size:12px}
}

/* Movimientos del ciclo en la ficha: dato de contexto, no titular. */
.ciclo-movimientos{display:block;margin-top:9px;color:var(--muted);font-size:10px}

/* Mover una clase desde el calendario. La que va "en la mano" se marca, y los
   días se resaltan como destino posible: sin eso, el segundo toque es a ciegas. */
.session-chip[data-mover-sesion]{cursor:pointer}
.session-chip.moviendo{outline:2px solid var(--ink);outline-offset:1px;opacity:.6}
.calendar-week.eligiendo-dia .day-col{background:#f3eef7;box-shadow:inset 0 0 0 1px #d8cbe4}
.calendar-week.eligiendo-dia .day-col:hover,.day-col.destino-posible{background:#e9dff2;box-shadow:inset 0 0 0 2px #a98cc4}
#calendar-mover-aviso{display:flex;flex-wrap:wrap;align-items:center;gap:9px;margin-bottom:10px}
#calendar-mover-aviso button{margin-left:auto;font-size:11px;padding:6px 11px}
@media(max-width:560px){#calendar-mover-aviso button{margin-left:0;width:100%}}

/* Huecos libres para colocar una reposición. Botones grandes: se eligen con el
   pulgar y con prisa, entre clase y clase. */
.huecos-dia{margin-top:14px}
.huecos-dia>b{display:block;margin-bottom:7px;font-size:12px}
/* Sólo la primera letra: capitalize pondría "Martes, 1 De Septiembre". */
.huecos-dia>b::first-letter{text-transform:uppercase}
.huecos-lista{display:grid;grid-template-columns:repeat(auto-fill,minmax(78px,1fr));gap:7px}
.huecos-lista button{padding:11px 6px;font-size:12px}

/* Mi horario de trabajo. Cada día con sus turnos, y en móvil el turno se
   apila para que los dos campos de hora no queden de 40 px. */
.turnos-dia{margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}
.turnos-cabecera{display:flex;align-items:center;justify-content:space-between;gap:10px}
.turnos-cabecera button{font-size:11px;padding:6px 11px}
.turno-fila{display:flex;align-items:center;gap:8px;margin-top:9px}
.turno-fila input{flex:1 1 auto;min-width:0}
.turno-fila span{color:var(--muted);font-size:11px}
.turno-fila button{flex:0 0 auto;font-size:11px;padding:8px 11px}
@media(max-width:430px){.turno-fila{flex-wrap:wrap}.turno-fila button{width:100%}}

/* Paleta de baja fatiga: conserva el contraste de marca, pero reduce el rosa
   saturado y el fondo blanco puro en sesiones largas. */
:root{--ink:#463941;--ink-2:#65565e;--muted:#81767c;--paper:#fbf9f8;--card:#fffefd;--line:#eee8ea;--lime:#e9bfd0;--coral:#e9b3a6;--yellow:#e8d9b5;--mint:#e4eee8;--lavender:#ebe5f2;--aqua:#e3eeea}
body{background:radial-gradient(circle at 12% 0%,#fffafa 0,#fbf9f8 42%,#f7f3f4 100%)}
.sidebar{background:var(--theme-sidebar)}
.hero{background:var(--theme-hero)}
.hero-photo{opacity:.62}

.inbody-detail-panel{margin-top:20px;padding:18px;border:1px solid var(--line);border-radius:16px;background:linear-gradient(145deg,#fffefd,#faf5f7)}
.inbody-detail-grid,.inbody-control-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px}
.inbody-detail-card{padding:11px 12px;border:1px solid var(--line);border-radius:11px;background:rgba(255,255,255,.72)}
.inbody-detail-card span{display:block;color:var(--muted);font-size:10px;line-height:1.25}.inbody-detail-card strong{display:block;margin-top:5px;color:var(--ink);font:600 17px Fraunces,serif}
.inbody-detail-heading{margin:20px 0 9px;font:600 16px Fraunces,serif;color:var(--ink)}
.inbody-segment-table{min-width:680px}.inbody-segment-table th{font-size:10px;color:var(--muted)}.inbody-segment-table td{font-size:11px}
.saved-inbody-list{display:grid;gap:6px;margin:10px 0}.saved-inbody-list label{display:flex;align-items:center;gap:7px;font-size:11px}.saved-inbody-list input{width:auto;margin:0}
@media(max-width:760px){.inbody-detail-grid,.inbody-control-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.inbody-detail-panel{padding:14px}.inbody-segment-table{min-width:620px}}
@media(min-width:761px) and (max-width:1100px){.inbody-detail-grid,.inbody-control-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}

/* Mobile/tablet ergonomics: account for iOS safe areas and keep dialogs usable. */
@media(max-width:560px){
  body{padding-bottom:env(safe-area-inset-bottom)}
  .topbar{padding-top:max(20px,env(safe-area-inset-top))}
  .view{padding-bottom:calc(78px + env(safe-area-inset-bottom))}
  dialog{width:min(100% - 20px,720px);max-height:calc(100dvh - env(safe-area-inset-top) - 24px);overflow-y:auto;padding:22px 16px}
  .hero-actions{flex-wrap:wrap;gap:10px}
  .hero-actions button{flex:1 1 160px}
  .session-row{grid-template-columns:1fr;gap:12px}
  .session-management{flex-wrap:wrap}
}
@media(min-width:561px) and (max-width:1100px){
  .dashboard-grid{grid-template-columns:1fr 1fr}
  .dashboard-grid .wide{grid-column:1/-1}
  dialog{max-height:calc(100dvh - 32px);overflow-y:auto}
}

/* Descuento a favor del cliente: se debe hasta que baje un cobro, así que no
   se pinta como un dato más del mes. */
.ciclo-movimientos.credito{color:#8a6652;font-weight:600}

/* Una línea por clase; el detalle se abre al pulsarla. */
details.session-row{display:block;padding:0;margin-bottom:6px;border:1px solid var(--line);border-radius:11px;background:#fff;overflow:hidden}
details.session-row>summary{display:flex;align-items:center;gap:11px;padding:11px 13px;cursor:pointer;list-style:none}
details.session-row>summary::-webkit-details-marker{display:none}
details.session-row[open]>summary{border-bottom:1px solid var(--line)}
.sesion-hora{flex:0 0 auto;font:700 12px 'DM Sans';font-variant-numeric:tabular-nums}
.sesion-quien{flex:1 1 auto;min-width:0;display:block;font-size:12px;line-height:1.3}
.sesion-quien small{display:block;color:var(--muted);font-size:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
details.session-row .session-state{flex:0 0 auto}
details.session-row .session-management,details.session-row .google-session-state{padding:0 13px 12px}
details.session-row .google-session-state{display:block;padding-top:10px}

/* Tira de días de la agenda: el día se elige aquí y la lista enseña sólo ése.
   Toda la semana de golpe, aun plegada, seguía siendo una pared. */
.session-day-picker{margin-bottom:13px}
.tira-semana{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.tira-semana b{font:600 12px Fraunces}
.tira-semana button{padding:7px 13px;font-size:15px;line-height:1}
.dia-tira{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:5px}
.dia-chip{display:grid;gap:1px;padding:8px 2px;border:1px solid var(--line);border-radius:10px;background:#fff;cursor:pointer;text-align:center}
.dia-chip span{color:var(--muted);font-size:9px;text-transform:uppercase;letter-spacing:.04em}
.dia-chip b{font:700 14px 'DM Sans';font-variant-numeric:tabular-nums}
.dia-chip small{color:var(--muted);font-size:9px}
.dia-chip.hoy{border-color:#c9a288}
.dia-chip.activo{background:var(--ink);border-color:var(--ink);color:#fff}
.dia-chip.activo span,.dia-chip.activo small{color:#ffffffb3}

/* Portal del cliente: su foto en el saludo, iconos de verdad en el menú y las
   tarjetas de saldo, que es lo primero que quiere saber quien entrena. */
.portal-hero-photo{flex:0 0 auto;width:124px;height:124px;border-radius:50%;overflow:hidden;border:3px solid #ffffff33;box-shadow:0 10px 26px #2a1a2233}
.portal-hero-photo img{width:100%;height:100%;object-fit:cover;object-position:58% 22%}
.portal-nav a span{display:grid;place-items:center;font-size:0;line-height:0}
.portal-nav a svg{display:block}
.portal-metrics article strong em{font-style:normal;font-size:.5em;color:var(--muted);font-weight:600}
.portal-metrics article.destacada{background:#fbf1e8;border-color:#e6d2c1}
.portal-metrics article.destacada span{color:#8a6652}
.portal-reports{display:grid;gap:11px}
.portal-report-section{display:grid;gap:16px;padding:22px;border:1px solid var(--line);border-radius:16px;background:#fff;box-shadow:0 5px 18px #4a34400b}.portal-report-section+.portal-report-section{margin-top:14px}.portal-report-period{color:#5b8877;font-size:12px;font-weight:700}.portal-report-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:9px}.portal-report-stats article{display:grid;gap:4px;padding:12px;border-radius:11px;background:#f4faf7}.portal-report-stats strong{font:600 24px Fraunces}.portal-report-stats span{color:var(--muted);font-size:10px}.portal-weight-chart{width:100%;height:auto;min-height:180px;padding:8px;border-radius:12px;background:#f4faf7}.portal-weight-chart line{stroke:#e8dfe3;stroke-width:1}.portal-weight-chart text{fill:#7c7077;font-size:11px}.portal-unit-select{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:11px}.portal-unit-select select{width:auto;padding:8px 28px 8px 10px}.portal-payment-alert,.portal-payment-ok{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px;padding:14px 18px;border-radius:13px;background:#fff0f2;color:#7f4b5c}.portal-payment-alert strong{font-size:14px}.portal-payment-alert span,.portal-payment-ok{font-size:12px}.portal-payment-ok{justify-content:flex-start;background:#eef7f2;color:#547b69}.portal-weight-fab{position:fixed;right:22px;bottom:calc(92px + env(safe-area-inset-bottom));z-index:34;border:0;border-radius:999px;padding:14px 18px;background:#132d28;color:var(--lime,#dcff53);box-shadow:0 12px 30px #0d231a44;font-weight:700;cursor:pointer}.portal-report-downloads{display:grid;gap:11px;margin-top:14px}
@media(max-width:760px){.portal-report-section{padding:16px}.portal-report-stats{grid-template-columns:repeat(2,1fr)}.portal-weight-fab{right:16px;bottom:calc(88px + env(safe-area-inset-bottom));padding:13px 15px}.portal-weight-fab span{font-size:12px}}
.portal-report{display:flex;align-items:center;justify-content:space-between;gap:14px}
.portal-report h3{margin:0 0 3px}
.portal-report p{margin:0;color:var(--muted);font-size:11px;line-height:1.45}
.portal-report button{flex:0 0 auto}
@media(max-width:560px){
  .portal-hero-photo{width:82px;height:82px;border-width:2px}
  .portal-report{flex-direction:column;align-items:stretch}
  .portal-report button{width:100%}
}

/* Filtros del período del portal: mes y corte son dos formas de consultar el
   mismo expediente; el corte queda deliberadamente destacado. */
.portal-period-controls{display:grid;grid-template-columns:minmax(190px,1fr) auto auto auto;align-items:end;gap:11px;width:100%;max-width:100%;box-sizing:border-box;margin:0 0 18px;padding:15px 17px;border:1px solid #e2c4d2;border-left:6px solid #a86682;border-radius:15px;background:linear-gradient(120deg,#fff8fb,#f8edf3);box-shadow:0 8px 22px #6d4a5910}
.portal-period-copy{display:grid;gap:4px;min-width:0}.portal-period-copy .eyebrow{margin:0;color:#95627a}.portal-period-copy strong{font:600 20px Fraunces;color:#493a41}.portal-period-copy small{color:#81767c;font-size:11px}.portal-period-controls label{display:grid;gap:4px;color:var(--muted);font-size:10px;font-weight:600}.portal-period-controls input{min-height:39px}.portal-cutoff-button{min-height:39px;white-space:nowrap}.portal-cutoff-button.active-filter{box-shadow:0 0 0 3px #e7bfd0}.portal-period-nav{display:flex;gap:5px}.portal-period-nav button{min-height:39px;padding:8px 10px;white-space:nowrap}.portal-period-nav button:first-child,.portal-period-nav button:last-child{font-size:17px}.portal-period-nav button:disabled{opacity:.4;cursor:not-allowed}
.portal-metrics article.portal-balance-card{border:2px solid #d7a3b8;background:linear-gradient(145deg,#fff,#fff4f8)}.portal-metrics article.portal-balance-card.con-aviso{border-color:#c58a67;background:linear-gradient(145deg,#fffaf4,#fff0e8)}.portal-metrics article.portal-balance-card.con-aviso .aviso-pago{color:#9b5d35}.portal-metrics article.portal-debt-card{border:2px solid #d7a3b8;background:#fff8fb}.portal-metrics article.portal-debt-card.pendiente{border-color:#d08b68;background:linear-gradient(145deg,#fffaf4,#ffefe7);box-shadow:0 8px 24px #c9856240}.portal-metrics article.portal-debt-card.pendiente span,.portal-metrics article.portal-debt-card.pendiente small{color:#9b5d35}.portal-metrics article.portal-debt-card.pendiente strong{color:#8f4c35}.portal-metrics article.portal-debt-card.pagado{border-color:#b9d8c3;background:#f5fbf6}.portal-metrics article.portal-debt-card.pagado strong{color:#3f7d54}
.portal-metrics article.portal-cancel-card{border:2px solid #d7a3b8;background:#fff8fb}.portal-metrics article.portal-cancel-card.con-aviso{border-color:#d08b68;background:linear-gradient(145deg,#fffaf4,#ffefe7);box-shadow:0 8px 24px #c9856240}.portal-metrics article.portal-cancel-card.con-aviso strong,.portal-metrics article.portal-cancel-card.con-aviso span,.portal-metrics article.portal-cancel-card.con-aviso small{color:#9b5d35}.portal-metrics article.portal-reprogram-card{border:2px solid #c9b1d6;background:linear-gradient(145deg,#fff,#faf5fc)}.portal-metrics article.portal-reprogram-card strong{color:#765687}
.portal-chart .chart-column{min-width:0}.portal-chart .chart-column span{font-size:10px;line-height:1.15;text-align:center;white-space:nowrap}.portal-chart .chart-column i{transition:height .2s ease}
@media(max-width:900px){.portal-period-controls{grid-template-columns:1fr 1fr}.portal-period-copy{grid-column:1/-1}.portal-cutoff-button{width:100%}.portal-period-nav{justify-content:stretch}.portal-period-nav button{flex:1}}
@media(max-width:560px){.portal-period-controls{grid-template-columns:1fr;padding:14px}.portal-period-copy{grid-column:auto}.portal-period-nav{width:100%}.portal-period-nav button{min-height:43px}.portal-cutoff-button{min-height:45px}.portal-chart{gap:3px;padding-left:0;padding-right:0}.portal-chart .chart-column span{font-size:8px;white-space:normal;min-height:23px}.portal-chart .chart-column small{font-size:9px}}

/* A 375 px la foto, el saludo y el círculo en fila dejan el texto en una
   columna de dos palabras. Se apila: foto y nombre arriba, el porcentaje
   debajo y a lo ancho, que es donde se lee de un vistazo. */
@media(max-width:560px){
  .portal-hero{flex-wrap:wrap;align-items:flex-start;gap:14px}
  .portal-hero>div:not(.portal-hero-photo):not(.portal-score){flex:1 1 60%;min-width:0}
  .portal-hero .portal-score{width:100%;height:auto;flex:1 1 100%;border-radius:15px;padding:13px;display:flex;align-items:baseline;justify-content:center;gap:9px;box-shadow:none}
  .portal-hero .portal-score strong{font-size:29px}
  .portal-hero .portal-score span{font-size:10px}
}

/* El lema, con el mismo corte que en el panel de la entrenadora: es la misma
   marca vista desde el otro lado. */
.portal-lema{margin:6px 0 4px !important;font:600 21px Fraunces;line-height:1.1;color:#fff}
.portal-lema i{font-style:normal;color:#f0c9d9}
@media(max-width:560px){.portal-lema{font-size:19px}}

/* Aviso de pago pendiente sobre las clases del mes: las clases siguen ahí,
   pero el cobro no está saldado y eso se dice donde se mira. */
.portal-metrics article.con-aviso{border-color:#e6d2c1}
.portal-metrics .aviso-pago{display:block;margin-top:7px;padding-top:7px;border-top:1px solid var(--line);color:#8a6652;font-weight:600}

/* Cliente en pausa: la sesión sigue reservada pero congelada. Neutro cálido
   con una trama tenue que dice "en espera", distinto del verde de programada
   y del rojo de cancelada. Un solo color en toda la app vía estadoSesion(). */
.session-chip.pausa{background:#efece5;color:#6f6857;border-left:0;background-image:repeating-linear-gradient(135deg,transparent 0 5px,#0000000a 5px 10px)}
.month-event.pausa{background:#e9e5db;color:#6f6857}
.month-event.pausa i{background:#b0a389}
.session-chip.cancelled{background:#f6e2dd;color:#a3503d;text-decoration:line-through;opacity:.9}
.session-state.cancelled{background:#f6e0da;color:#a3503d}
.month-event.cancelled{background:#f4ddd7;color:#a3503d;text-decoration:line-through}
.month-event.cancelled i{background:#d0806c}
.day-session.cancelled{border-left-color:#d98a76}
.day-session.cancelled div b{text-decoration:line-through;color:#a3503d}
.subtabs{display:flex;gap:3px;padding:4px;border-radius:12px;background:#f5eff2;margin:0 0 22px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.subtabs::-webkit-scrollbar{display:none}
.subtab{flex:1 0 auto;min-width:88px;border:0;border-radius:9px;padding:10px 14px;background:transparent;color:var(--muted);font:600 12px 'DM Sans';cursor:pointer;white-space:nowrap}
.subtab.active{background:#fff;color:#8f5770;box-shadow:0 3px 10px #5a3e4a12}
.subpanel{display:none}
.subpanel.active{display:block}
.subpanel-toolbar{display:flex;gap:9px;justify-content:flex-end;flex-wrap:wrap;margin-bottom:16px}
@media(max-width:600px){.subtab{min-width:0;padding:9px 12px;font-size:11px}.subpanel-toolbar{margin-bottom:14px}.subpanel-toolbar button{flex:1 1 auto}}
.report-clients{display:grid;gap:8px}
.report-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}
.report-chip{display:inline-flex;align-items:center;gap:6px;background:#efe4ee;color:#6f5474;border-radius:99px;padding:4px 6px 4px 12px;font:600 12px 'DM Sans'}
.report-chip button{border:0;background:#d9c3d6;color:#5a3f5e;width:18px;height:18px;border-radius:50%;cursor:pointer;font:700 13px/1 'DM Sans'}
.report-client-detail{margin-top:16px}
.report-client-detail h3{font:600 16px Fraunces;margin:0 0 8px}
.pack-origin{display:block;color:#9b8b95;font-size:10px;margin-top:2px}
.pack-renovar{display:inline-block;color:#8a5a12;background:#fbeccb;border-radius:6px;padding:1px 7px;font-size:10px;font-weight:600;margin-top:3px}
.pack-vencido{display:inline-block;color:#8f3d2e;background:#f7ddd3;border-radius:6px;padding:1px 7px;font-size:10px;font-weight:600;margin-top:3px}
.pack-adeuda{display:inline-block;color:#8a5a12;background:#fbeccb;border-radius:6px;padding:1px 7px;font-size:10px;font-weight:600;margin-top:3px}
.inv-tag{display:inline-block;border-radius:6px;padding:1px 7px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.02em}
.inv-manual{color:#2f6f4f;background:#d8efe1}
.inv-auto{color:#3a5a8f;background:#dde7f6}
.inv-zoho{color:#6b5a2e;background:#efe6cf}
button.active-filter{background:#2f6f4f;color:#fff;border-color:#2f6f4f}
.inline-field{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--muted);white-space:nowrap}.inline-field input{min-height:38px;padding:6px 8px;font-size:12px}
.session-state.pausa{background:#ece6da;color:#7a6c50}
.day-session.pausa{background:#f6f3ec;border-left-color:#c4b79b}

/* A 375 px la fila de acciones del encabezado (hasta cinco botones: Finanzas,
   Gastos, Registro, Registrar cobros, + Crear cobro) no cabía en una línea y
   empujaba la página ~138 px de ancho. Que envuelva y ocupe el ancho completo. */
@media(max-width:560px){
  .section-heading{flex-wrap:wrap;gap:12px}
  .section-heading>div{flex-wrap:wrap;width:100%}
  .section-heading>div button{flex:1 1 auto}
}
.invoice-family-note{display:block;color:#8e5d76;font-weight:600;margin-top:3px}.invoice-payer-note,.invoice-family-total{display:block;color:#8a7a82;font-size:10px;margin-top:3px}.invoice-family-total{color:#9a607a;font-weight:600}

.attendance-toolbar{display:flex;align-items:end;gap:10px;flex-wrap:wrap}.attendance-toolbar label{min-width:160px}.attendance-custom-range{display:flex;align-items:end;gap:8px;flex-wrap:wrap;padding:8px 10px;border:1px solid #eadfe4;border-radius:10px;background:#fffafb}.attendance-custom-range>span{width:100%;color:var(--muted);font:600 10px 'DM Sans';text-transform:uppercase;letter-spacing:.08em}.attendance-range-fields{display:flex;gap:8px}.attendance-range-fields label{min-width:125px;font-size:10px}.attendance-range-fields input{margin-top:4px}.attendance-range-actions{display:flex;gap:6px}.attendance-status-filters{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding-bottom:9px}.attendance-filter{display:flex;align-items:center;gap:7px;min-width:auto!important;padding-bottom:0;color:var(--muted);font-size:11px;white-space:nowrap}.attendance-filter input{width:auto;min-height:auto;margin:0;accent-color:#a86682}.attendance-filter-help{font-size:10px;color:#9a8a91}.attendance-cut-filter{padding-left:8px;border-left:1px solid #eadfe4}.attendance-cut-filter input:disabled{opacity:.45}.attendance-cut-filter:has(input:disabled){opacity:.65}.attendance-metrics{grid-template-columns:repeat(6,1fr);margin:16px 0 22px}.attendance-metrics article small{display:block;color:var(--muted);font-size:11px}.attendance-client-status{display:inline-block;padding:3px 7px;border:1px solid;border-radius:999px;font-size:10px;font-weight:700;line-height:1.2}.attendance-status-active{color:#28623f;background:#e4f3e8;border-color:#b8dcc4}.attendance-status-paused{color:#8a5d16;background:#fff2d3;border-color:#ead49d}.attendance-status-inactive{color:#6f646a;background:#f0ecee;border-color:#d8cdd2}.attendance-percent{color:#3f7d54}.applied-action{background:#e5f5e9;color:#31745b;border-color:#b9dfc3}.applied-pill{display:inline-flex;align-items:center;padding:7px 9px;border:1px solid #b9dfc3;border-radius:8px;background:#e5f5e9;color:#31745b;font:600 10px 'DM Sans';white-space:nowrap}.section-note{margin:18px 0 0;color:var(--muted);font-size:11px;line-height:1.55}@media(max-width:900px){.attendance-metrics{grid-template-columns:repeat(3,1fr)}}@media(max-width:560px){.attendance-toolbar{width:100%;flex-wrap:wrap}.attendance-toolbar label{flex:1}.attendance-custom-range{width:100%;align-items:stretch}.attendance-range-fields{flex:1;flex-wrap:wrap}.attendance-range-fields label{flex:1}.attendance-range-actions{width:100%}.attendance-status-filters{width:100%;padding-bottom:0}.attendance-filter{flex:0 0 auto!important}.attendance-cut-filter{width:100%;padding:8px 0 0;border-left:0;border-top:1px solid #eadfe4}.attendance-metrics{grid-template-columns:repeat(2,1fr)}}
.billing-client-filter{min-width:180px}.billing-client-filter input{margin-top:4px}
.attendance-client-filter{min-width:180px}.attendance-client-filter input{margin-top:4px}
@media(max-width:600px){
  .billing-period-bar{align-items:stretch}
  .billing-period-bar>label,.billing-period-bar>.billing-client-filter{flex:1 1 calc(50% - 8px);min-width:0}
  .billing-period-bar>button{flex:1 1 100%}
}

/* En iPhone la barra inferior tiene seis destinos. Cinco columnas hacían que
   Facturación saltara a una segunda fila y su icono quedara recortado. */
@media(max-width:600px){
  .sidebar nav{grid-template-columns:repeat(6,minmax(0,1fr))}
  .sidebar .nav-link .nav-icon{width:20px;height:20px;flex-basis:20px}
  .sidebar .nav-icon svg{width:20px;height:20px;stroke-width:2}
  .sidebar .nav-link.active .nav-icon{color:#fff7fb;filter:drop-shadow(0 0 3px #f2bfd2)}
}

.billing-flow-note{display:flex;align-items:center;justify-content:space-between;gap:18px;margin:0 0 18px;padding:17px 20px;background:linear-gradient(120deg,#fff,#f8f1f5)}
.billing-flow-note h3{margin:0;font-size:17px}
.billing-flow-note p:not(.eyebrow){max-width:760px;line-height:1.5}
.client-billing-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px;margin:14px 0;padding:12px;border:1px solid var(--line);border-radius:11px;background:#fbf7f8}
.client-billing-summary article{display:grid;gap:4px;padding:4px 8px;border-left:1px solid var(--line)}
.client-billing-summary article:first-child{border-left:0}
.client-billing-summary span{color:var(--muted);font-size:10px}
.client-billing-summary strong{font:600 18px Fraunces}
.client-billing-summary .due{color:#9a6011}
.client-billing-summary .credit{color:#31745b}
.declarative-billing{margin-top:18px;padding:14px;border:1px solid #eadfe4;border-radius:11px;background:#fffafb}.declarative-billing-lines,.declarative-billing-proposals{display:grid;gap:8px;margin-top:10px}.declarative-billing-line{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px;border:1px solid var(--line);border-radius:9px;background:#fff}.declarative-billing-line strong,.declarative-billing-line small{display:block}.declarative-billing-line small{margin-top:4px;color:var(--muted);font-size:11px}.declarative-billing-line.proposal{border-style:dashed;background:#fffdfc}.declarative-billing-auto{display:flex!important;align-items:center;gap:6px;margin-top:8px!important;color:var(--muted);font-size:11px}.declarative-billing-auto input{width:auto;min-height:auto}.declarative-billing-actions{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.declarative-billing-actions .secondary{padding:7px 9px;font-size:11px}.declarative-billing-summary{display:grid;gap:4px;margin:10px 0;padding:12px;border-radius:9px;background:#f5efeF}.declarative-billing-summary small{color:var(--muted)}
.client-invoice-list{display:grid;gap:7px;margin-top:9px}
.client-invoice-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center;padding:10px 12px;border:1px solid var(--line);border-radius:9px;background:#fff}
.client-invoice-row b{display:block;font-size:11px}
.client-invoice-row small{display:block;margin-top:3px;color:var(--muted);font-size:10px}
.client-invoice-row .payment-status{justify-self:end}
@media(max-width:600px){.billing-flow-note{align-items:stretch;flex-direction:column}.billing-flow-note .applied-pill{align-self:flex-start}.client-billing-summary{grid-template-columns:1fr}.client-billing-summary article{border-left:0;border-top:1px solid var(--line);padding:8px}.client-billing-summary article:first-child{border-top:0}.client-invoice-row{grid-template-columns:1fr}.client-invoice-row .payment-status{justify-self:start}}

/* Asistencia: el ciclo consultado debe ser evidente y las tarjetas deben
   conservar sus etiquetas legibles en pantallas estrechas. */
.attendance-period-highlight{display:flex;align-items:center;justify-content:space-between;gap:18px;margin:0 0 18px;padding:16px 18px;border:1px solid #e1c4d1;border-left:5px solid #a86682;border-radius:12px;background:linear-gradient(120deg,#fff7fa,#f7edf3)}
.attendance-period-highlight>div:first-child{min-width:0}
.attendance-period-highlight span{display:block;color:#95627a;font:700 10px 'DM Sans';text-transform:uppercase;letter-spacing:.12em}
.attendance-period-highlight strong{display:block;margin-top:4px;color:#463941;font:600 clamp(22px,3vw,32px) Fraunces;line-height:1.1}
.attendance-period-highlight small{display:block;margin-top:5px;color:#81767c;font-size:11px}
.attendance-cut-nav{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.attendance-cut-nav span{display:inline-block;min-width:100px;text-align:center;color:#6f4e60;font-size:11px;font-weight:700}
.attendance-cut-nav button{padding:8px 10px;font-size:11px;white-space:nowrap}
.attendance-cut-nav button:disabled{opacity:.45;cursor:not-allowed}
.attendance-metrics{grid-template-columns:repeat(6,minmax(0,1fr))}
.attendance-metrics article{min-width:0}
.attendance-metrics article>*{position:relative;z-index:1}
.attendance-metrics article>span{min-height:30px;padding-right:30px;line-height:1.25}
.attendance-metrics article strong{white-space:nowrap}
@media(max-width:900px){.attendance-period-highlight{align-items:flex-start;flex-direction:column}.attendance-cut-nav{justify-content:flex-start}.attendance-metrics{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:560px){.attendance-period-highlight{padding:14px}.attendance-period-highlight strong{font-size:24px}.attendance-cut-nav{width:100%;justify-content:space-between}.attendance-cut-nav button{flex:1}.attendance-cut-nav span{min-width:0}.attendance-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* Asistencia: cinco métricas ocupan la fila completa; en móvil conservamos
   los cortes responsivos definidos arriba. */
@media(min-width:901px){.attendance-metrics{grid-template-columns:repeat(5,minmax(0,1fr))}}

/* Portal: los datos de progreso deben leerse de un vistazo, especialmente
   saldo, deuda y el detalle numerador/denominador del gráfico. */
.portal-metrics article>span{font-size:13px;font-weight:600;color:#6d5e65}
.portal-metrics article>small{font-size:13px;line-height:1.35}
.portal-metrics article strong{font-size:34px;line-height:1.05}
.portal-metrics article strong em{font-size:.55em}
.portal-metrics article .aviso-pago{font-size:13px;line-height:1.35}
.portal-chart .chart-column{grid-template-rows:34px 1fr 24px}
.portal-chart .chart-column span{display:grid;gap:2px;font-size:14px;font-weight:700;color:#5a4851;line-height:1.2}
.portal-chart .chart-column span b{font:600 22px Fraunces;color:#503d48}
.portal-chart .chart-column span small{font-size:11px;font-weight:600;color:#6d5e65;text-transform:none}
.portal-chart .chart-column small{font-size:12px;font-weight:600;color:#6d5e65}
.portal-chart .chart-column i{width:min(46px,72%)}
.portal-report-period{display:grid;gap:3px;text-align:right}.portal-report-period b{font-size:13px}.portal-report-period small{font-size:11px;color:#9b5d35;font-weight:700}
.portal-inbody-grid article span,.portal-inbody-grid article small{font-size:12px}
@media(max-width:560px){
  .portal-metrics article>span{font-size:12px}
  .portal-metrics article>small,.portal-metrics article .aviso-pago{font-size:12px}
  .portal-metrics article strong{font-size:30px}
  .portal-chart .chart-column{grid-template-rows:34px 1fr 24px}
  .portal-chart .chart-column span{font-size:11px;min-height:0;white-space:normal}.portal-chart .chart-column span b{font-size:18px}.portal-chart .chart-column span small{font-size:10px}
  .portal-chart .chart-column small{font-size:11px}
}

/* Portal: las vistas secundarias comparten la jerarquía visual de Progreso.
   La información y los flujos no cambian; aquí sólo se ordenan títulos,
   tarjetas, controles y tablas para que el portal se sienta como una sola
   experiencia. */
.portal-view:not(#portal-dashboard)>.section-heading{display:grid;align-items:start;gap:5px;margin:0 0 22px;padding:0 3px}
.portal-view:not(#portal-dashboard)>.section-heading .eyebrow{margin:0;color:#95627a;font-size:11px;font-weight:600;letter-spacing:1.5px}
.portal-view:not(#portal-dashboard)>.section-heading h2{margin:0;font:600 34px/1.05 Fraunces;letter-spacing:-1.1px;color:#493a41}
.portal-view:not(#portal-dashboard)>.portal-help{margin:-9px 3px 20px;color:#7c7077;font-size:13px;line-height:1.55}
.portal-view:not(#portal-dashboard)>.card{border:0;border-radius:18px;padding:24px;background:rgba(255,253,252,.96);box-shadow:0 8px 24px #6d4a5910}
.portal-view:not(#portal-dashboard)>.card .card-head{margin-bottom:20px}
.portal-view:not(#portal-dashboard)>.card .card-head h3,.portal-view:not(#portal-dashboard) .portal-report h3{margin:0;font:600 22px/1.15 Fraunces;letter-spacing:-.4px;color:#493a41}
.portal-view:not(#portal-dashboard)>.card .card-head p,.portal-view:not(#portal-dashboard) .portal-report p{margin:6px 0 0;color:#7c7077;font-size:13px;line-height:1.45}
.portal-view:not(#portal-dashboard) button{font-family:'DM Sans',sans-serif}
.portal-view:not(#portal-dashboard) .primary,.portal-view:not(#portal-dashboard) .secondary{min-height:42px;border-radius:10px;padding:10px 15px;font-size:12px}

/* Rutinas */
.portal-routines{grid-template-columns:repeat(auto-fit,minmax(330px,1fr));gap:18px}
.portal-routine-card{border:0!important;border-radius:18px!important;padding:24px!important;background:rgba(255,253,252,.96)!important;box-shadow:0 8px 24px #6d4a5910!important}
.portal-routine-card .card-head{margin-bottom:18px}
.portal-routine-card .card-head h3{margin:0;font:600 24px/1.1 Fraunces;letter-spacing:-.5px;color:#493a41}
.portal-routine-card .card-head p{margin:7px 0 0;color:#7c7077;font-size:13px;line-height:1.45}
.portal-routine-card .routine-due{margin-top:9px;padding:6px 10px;font-size:10px}
.portal-routine-card .exercise-preview{margin:0 0 18px;padding:15px 16px;border:1px solid #eee3e8;border-radius:13px;background:#fbf6f8}
.portal-routine-card .exercise-preview span{font-size:12px;line-height:1.45}
.portal-routine-card .portal-completion-form{gap:12px;margin-top:0;padding-top:18px;border-top:1px solid #eee3e8}
.portal-routine-card .completion-check{font-size:12px;line-height:1.35}
.portal-routine-card .completion-percent input{min-height:42px}
.portal-routine-card .portal-completion-form .primary{grid-column:1/-1;width:100%;margin-top:2px}
.portal-routine-history{margin-top:18px;padding:22px!important}.portal-routine-history .card-head{margin-bottom:12px}.portal-routine-history-item{display:flex;justify-content:space-between;gap:16px;padding:15px 0;border-top:1px solid #eee3e8}.portal-routine-history-main{min-width:0;display:grid;gap:5px}.portal-routine-history-title{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.portal-routine-history-title strong{font:600 17px Fraunces;color:#493a41}.portal-routine-history-item small{color:#8a7b83;font-size:11px}.portal-routine-history-item p{margin:0;color:#665860;font-size:12px;line-height:1.45}.routine-history-status{display:inline-flex;align-items:center;padding:4px 8px;border-radius:999px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;background:#edf5ef;color:#46755b}.routine-history-status.completed{background:#e8f2ec;color:#407258}.routine-history-status.expired{background:#fae7e4;color:#9a4a43}.routine-history-status.active{background:#f4e8ef;color:#8b5470}.portal-routine-history-item.expired p{color:#9a4a43;font-weight:600}.portal-routine-history-item.completed p{color:#46755b}
.routine-round-summary{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:0 0 12px;padding:12px 13px;border-radius:11px;background:#f7eef2}.routine-round-summary strong{font:600 17px Fraunces;color:#5b424e}.routine-round-summary span{font-size:11px;color:#8b707d;text-align:right}.routine-timer-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px;padding:10px 0;border-bottom:1px solid #eee3e8;color:#7c7077;font-size:11px}.routine-timer-row b{margin-left:4px;color:#513b46;font:600 20px 'DM Mono';letter-spacing:.5px}.routine-exercise-checks{display:grid;gap:8px;margin-bottom:14px}.routine-exercise-check{display:flex;align-items:center;gap:10px;padding:10px 11px;border:1px solid #eee3e8;border-radius:10px;background:#fff;cursor:pointer}.routine-exercise-check input{width:18px;height:18px;accent-color:#b86e8d}.routine-exercise-check span{display:grid;gap:2px;min-width:0}.routine-exercise-check b{font-size:12px;font-weight:600}.routine-exercise-check small{color:#9b8991;font-size:10px}.routine-exercise-check.done{border-color:#c6decf;background:#f3faf5}.routine-exercise-check.done small{color:#52705e;font-weight:600}.routine-complete-button:disabled{opacity:.7;cursor:default}.routine-timer-required{margin:0 0 8px;padding:10px 12px;border-radius:10px;background:#fff7e9;color:#8b5c24;font-size:12px;font-weight:600}.routine-feedback-form{display:grid;gap:10px;margin-top:14px;padding:14px;border:1px solid #eadce3;border-radius:12px;background:#fffafd}.routine-feedback-form>strong{font:600 16px Fraunces;color:#5b424e}.routine-feedback-options{display:grid;grid-template-columns:1fr 1fr;gap:8px}.routine-feedback-form label{display:grid;gap:4px;color:#8b707d;font-size:10px}.routine-feedback-form select,.routine-feedback-form textarea{width:100%;font:inherit}.routine-feedback-form textarea{min-height:64px;resize:vertical}.routine-feedback-form button{justify-self:start}
.routine-timer-actions{display:flex;gap:7px;align-items:center}.routine-countdown{display:grid;place-items:center;gap:2px;margin:-2px 0 12px;padding:14px;border-radius:14px;background:linear-gradient(135deg,#5b424e,#b86e8d);color:#fff;text-align:center;box-shadow:0 10px 24px #5b424e2b}.routine-countdown span{font-size:10px;letter-spacing:.12em;text-transform:uppercase;opacity:.85}.routine-countdown strong{font:700 42px Fraunces;line-height:1}.routine-celebration{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;padding:20px;background:#3f2d3880;animation:routine-fade-in .2s ease}.routine-celebration-card{width:min(430px,100%);padding:32px 24px;border:1px solid #f2d9e4;border-radius:24px;background:#fff9fc;text-align:center;box-shadow:0 24px 70px #3f2d3852;animation:routine-pop .45s cubic-bezier(.2,1.4,.4,1)}.routine-celebration-emoji{font-size:30px;letter-spacing:7px;margin-bottom:8px}.routine-celebration-card h2{margin:0;font:700 30px Fraunces;color:#5b424e}.routine-celebration-card p{margin:8px 0;color:#8b707d}.routine-celebration-card strong{display:block;margin:16px 0 22px;color:#b05f83;font:600 17px 'DM Mono'}.routine-history-controls{display:flex;flex-wrap:wrap;align-items:end;gap:8px;margin-bottom:14px;padding:12px;border:1px solid #eadce3;border-radius:12px;background:#fffafd}.routine-history-controls label{display:grid;gap:4px;color:#8b707d;font-size:10px}.routine-history-controls select,.routine-history-controls input{min-height:36px}.routine-history-controls [data-routine-history-range]{display:none}.routine-history-controls.range-mode [data-routine-history-range]{display:grid}.routine-history-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:14px}.routine-history-summary article{padding:11px;border-radius:11px;background:#f7eef2}.routine-history-summary strong{display:block;font:600 20px Fraunces;color:#5b424e}.routine-history-summary span{font-size:10px;color:#8b707d}.routine-history-item{padding:13px 0;border-bottom:1px solid #eee3e8}.routine-history-item:last-child{border-bottom:0}.routine-history-item header{display:flex;justify-content:space-between;gap:10px}.routine-history-item header b{color:#513b46}.routine-history-item small{color:#8b707d}.routine-history-item p{margin:7px 0;color:#6f6068;font-size:12px}.routine-history-exercises{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}.routine-history-exercises span{padding:4px 7px;border-radius:999px;background:#f8edf1;color:#8b707d;font-size:10px}.routine-history-exercises span.done{background:#eaf5ed;color:#52705e}.routine-history-feedback{padding:8px 10px;border-left:3px solid #cf88a5;background:#fff7fb}.routine-history-edit{margin-top:8px}@keyframes routine-pop{0%{transform:scale(.7) rotate(-3deg);opacity:0}100%{transform:scale(1) rotate(0);opacity:1}}@keyframes routine-fade-in{from{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.routine-celebration,.routine-celebration-card{animation:none}}

/* Agenda */
#portal-calendar-list{display:grid;gap:16px;padding:24px;border:0;border-radius:18px;background:rgba(255,253,252,.96);box-shadow:0 8px 24px #6d4a5910}
#portal-calendar-list .portal-mes{margin:0;padding-bottom:17px;border-bottom:1px solid #eee3e8}
#portal-calendar-list .portal-mes b{font:600 22px/1.1 Fraunces;letter-spacing:-.4px;color:#493a41}
#portal-calendar-list .portal-mes-nav{width:42px;height:42px;border-color:#ead9e1;background:#fff8fb;color:#8e5871;box-shadow:0 3px 10px #6d4a590d}
#portal-calendar-list .portal-semana-rejilla{margin-top:1px;padding:12px 7px 7px;border-radius:14px;background:#fcf8fa}
#portal-calendar-list .portal-hora{font-size:10px;color:#897a82}
#portal-calendar-list .portal-col-dia{padding:7px 0 9px}
#portal-calendar-list .portal-col-dia b{font-size:11px;color:#897a82}
#portal-calendar-list .portal-col-dia i{font-size:14px}
#portal-calendar-list .portal-col-dia.hoy i{width:26px;height:26px;background:#59434f}
#portal-calendar-list .portal-tramo{min-height:19px;border-radius:5px}
#portal-calendar-list .portal-bloque{border-radius:7px;font-size:11px}
#portal-calendar-list .portal-leyenda{margin:0;padding:0 2px;color:#7c7077;font-size:12px;line-height:1.5}
#portal-calendar-list .portal-dia-titulo{margin:3px 0 0;padding-top:16px;border-top:1px solid #eee3e8;font:600 22px/1.15 Fraunces;color:#493a41}
#portal-calendar-list>.empty{padding:18px 0 0;font-size:13px}
.portal-slot{grid-template-columns:165px minmax(0,1fr) auto;padding:17px 19px;border:1px solid #eee3e8;border-radius:14px;background:#fff;box-shadow:0 5px 16px #6d4a5909}
.portal-slot.busy{background:#f5f0f2;color:#766b71}
.portal-slot.mine{border-left:4px solid #c47f9d;background:#fff8fb}
.portal-slot time b,.portal-slot>div b{font-size:13px}
.portal-slot time span,.portal-slot>div span{font-size:11px}
.portal-session-status{display:block;grid-column:3;color:#766b71;font-size:11px;font-weight:600;text-align:right}
.portal-session-status.reprogramada{color:#765687}
.portal-session-status.cobrada{color:#9b5d35}

/* Pagos e informes */
.invoice-line-detail{display:inline-block;margin-top:4px;color:#8b596f;line-height:1.45}
#portal-plan{margin-bottom:18px;padding:21px 22px;border:0;border-radius:18px;background:linear-gradient(120deg,#fff,#fbf2f6);box-shadow:0 8px 24px #6d4a5910}
#portal-plan h3{font:600 22px/1.15 Fraunces;letter-spacing:-.4px;color:#493a41}
#portal-plan p{font-size:13px}
#portal-pending-payment{margin-bottom:18px}
#portal-billing>.card{padding:24px}
#portal-billing .table-wrap{margin:0 -4px}
#portal-billing table th{padding-top:4px;font-size:11px}
#portal-billing table td{padding:16px 8px;font-size:13px}
#portal-billing table td b{font-size:13px}
#portal-billing table td small{color:#897a82;font-size:11px}
#portal-billing table .secondary{min-height:36px;padding:8px 12px;font-size:11px}
.portal-payment-alert,.portal-payment-ok{margin:0;padding:17px 20px;border-radius:15px;box-shadow:0 5px 16px #6d4a5909}
.portal-payment-alert strong{font:600 17px Fraunces}
.portal-payment-alert span,.portal-payment-ok{font-size:13px}
.portal-reports{gap:18px}
.portal-report-section{gap:20px;padding:24px;border:0;border-radius:18px;background:rgba(255,253,252,.96);box-shadow:0 8px 24px #6d4a5910}
.portal-report-section+.portal-report-section{margin-top:0}
.portal-report-section .card-head{margin-bottom:0}
.portal-report-section .card-head h3{font:600 22px/1.15 Fraunces;letter-spacing:-.4px;color:#493a41}
.portal-report-section .card-head p{font-size:13px}
.portal-report-period b{font-size:14px}
.portal-report-period small{font-size:12px}
.portal-report-stats{gap:12px}
.portal-report-stats article{padding:15px;border:1px solid #eee3e8;border-radius:13px;background:#fbf6f8}
.portal-report-stats strong{font-size:28px;color:#493a41}
.portal-report-stats span{font-size:12px}
.portal-weight-chart{min-height:210px;border:1px solid #eee3e8;border-radius:14px;background:#fcf8fa}
.portal-weight-chart text{font-size:12px}
.portal-unit-select{font-size:12px}
.portal-unit-select select{min-height:38px;border-radius:9px;font-size:12px}
.portal-report-downloads{gap:14px;margin-top:0}
.portal-report-downloads .card{margin:0;padding:20px 22px;border:0;border-radius:16px;background:rgba(255,253,252,.96);box-shadow:0 7px 20px #6d4a5909}
.portal-report-downloads .secondary{min-width:145px}

@media(max-width:760px){
  .portal-view:not(#portal-dashboard)>.section-heading h2{font-size:30px}
  .portal-view:not(#portal-dashboard)>.card,#portal-calendar-list,#portal-billing>.card,.portal-report-section{padding:18px}
  .portal-routines{grid-template-columns:1fr}
  .portal-slot{grid-template-columns:120px minmax(0,1fr);gap:12px}
  .portal-session-status{grid-column:1/-1;text-align:left}
  .portal-slot .portal-session-form{grid-column:1/-1}
  .portal-report-section .card-head{align-items:flex-start;flex-direction:column}
  .portal-report-period{text-align:left}
  .portal-report-downloads .card{padding:18px}
}
@media(max-width:560px){
  .portal-view:not(#portal-dashboard)>.section-heading{margin-bottom:18px}
  .portal-view:not(#portal-dashboard)>.section-heading h2{font-size:28px}
  #portal-calendar-list{padding:14px}
  #portal-calendar-list .portal-mes b{font-size:18px}
  #portal-calendar-list .portal-semana-rejilla{overflow:hidden;padding-left:2px;padding-right:2px}
  #portal-calendar-list .portal-leyenda{font-size:10px}
  .portal-slot{grid-template-columns:100px minmax(0,1fr);padding:14px}
  #portal-billing table{min-width:680px}
  .portal-report-stats{grid-template-columns:repeat(2,1fr)}
  .portal-report-downloads .portal-report{align-items:stretch}
  .portal-report-downloads .secondary{width:100%}
}

/* Mobile QA: evitar que los datos útiles se escondan detrás de scroll lateral
   y conservar objetivos táctiles cómodos en teléfonos pequeños. */
@media(max-width:600px){
  .sidebar .nav-link>span:last-child{font-size:9px;white-space:nowrap}
  .view button.primary,.view button.secondary,.view button.filter,.view input,.view select{min-height:44px}
  .portal-view:not(#portal-dashboard) .stack-mobile{width:100%;min-width:0}
  .portal-view:not(#portal-dashboard) .stack-mobile thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
  .portal-view:not(#portal-dashboard) .stack-mobile,.portal-view:not(#portal-dashboard) .stack-mobile tbody,.portal-view:not(#portal-dashboard) .stack-mobile tr,.portal-view:not(#portal-dashboard) .stack-mobile td{display:block;width:auto}
  .portal-view:not(#portal-dashboard) .stack-mobile tr{margin-bottom:10px;padding:13px;border:1px solid #eee3e8;border-radius:13px;background:#fff;box-shadow:0 4px 13px #6d4a5909}
  .portal-view:not(#portal-dashboard) .stack-mobile td{display:grid;grid-template-columns:minmax(78px,auto) 1fr;gap:10px;align-items:baseline;border:0;padding:5px 0;font-size:13px}
  .portal-view:not(#portal-dashboard) .stack-mobile td:before{content:attr(data-label);font:500 10px 'DM Mono';letter-spacing:1px;text-transform:uppercase;color:#897a82}
  .portal-view:not(#portal-dashboard) .stack-mobile td[data-label="Acciones"],.portal-view:not(#portal-dashboard) .stack-mobile td[data-label="Comprobante"]{grid-template-columns:1fr;gap:7px;margin-top:6px;padding-top:10px;border-top:1px solid #eee3e8}
  .portal-view:not(#portal-dashboard) .stack-mobile td[data-label="Acciones"]:before,.portal-view:not(#portal-dashboard) .stack-mobile td[data-label="Comprobante"]:before{display:none}
  .portal-view:not(#portal-dashboard) .stack-mobile td[data-label="Comprobante"] button{width:100%;min-height:42px}
  .portal-view:not(#portal-dashboard) .stack-mobile tr:has(td.empty){background:none;border:0;box-shadow:none;padding:0}
  .portal-view:not(#portal-dashboard) .stack-mobile tr:has(td.empty) td{display:block}
  .portal-view:not(#portal-dashboard) .stack-mobile tr:has(td.empty) td:before{display:none}
}
@media(max-width:390px){
  #portal-calendar-list .portal-semana-rejilla{overflow-x:auto;grid-template-columns:38px repeat(7,minmax(42px,1fr))!important}
  #portal-calendar-list .portal-semana-rejilla>*{min-width:0}
  .portal-nav{bottom:max(10px,env(safe-area-inset-bottom));width:calc(100% - 18px);padding:5px}
  .portal-nav a{padding:8px 2px;font-size:8px}
  .portal-nav a span svg{width:18px;height:18px}
}

/* Facturas del módulo nuevo (1B-2): una fila por beneficiario. El diálogo es angosto,
   así que la fila nunca usa más de dos columnas (sin desbordamiento horizontal). */
.new-billing-line{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:10px;padding:10px;border-radius:12px;background:#fdfafb;box-shadow:0 2px 8px #6d4a590d}
.new-billing-line select,.new-billing-line input{min-width:0;width:100%;box-sizing:border-box}
.new-billing-line select,.new-billing-line input[name=description],.new-billing-line button,.new-billing-line .new-billing-field:last-of-type{grid-column:1/-1}
.new-billing-field{display:grid;gap:3px;font-size:.78rem;font-weight:600}.new-billing-field small{font-weight:400;color:var(--muted,#7a6a72)}

/* Cobros del módulo nuevo (1B-3): reparto del cobro entre facturas abiertas */
.new-billing-allocs{display:grid;gap:8px;margin:8px 0}
.new-billing-alloc{display:grid;grid-template-columns:1fr minmax(90px,130px);gap:10px;align-items:center;padding:10px;border-radius:12px;background:#fdfafb;box-shadow:0 2px 8px #6d4a590d}
.new-billing-alloc small{display:block;color:var(--muted);font-size:12px;margin-top:2px}
.new-billing-alloc input{min-width:0;width:100%;box-sizing:border-box}
.new-billing-alloc button{justify-self:end}
.form-summary.error{color:#a14a4a}
@media(max-width:600px){.new-billing-alloc{grid-template-columns:1fr}.new-billing-alloc button{justify-self:stretch}}

/* Reportes del módulo nuevo (1B-5): ninguna celda debe ensanchar la tabla en el teléfono */
#reportes-nuevo-mount td{overflow-wrap:anywhere;word-break:break-word;min-width:0}

.new-billing-metrics{grid-template-columns:repeat(3,1fr)}.new-billing-metrics strong{font-size:22px;white-space:nowrap}@media(max-width:720px){.new-billing-metrics{grid-template-columns:repeat(2,1fr)}.new-billing-metrics strong{font-size:18px}}

.declarative-billing-history{margin-top:10px}.declarative-billing-history summary{cursor:pointer;font-size:12px;color:var(--muted,#7a6a72);padding:6px 0}

/* Estados bien visibles (J-097): pago pendiente, pagada, pago parcial, anulada y en pausa. */
.estado-chip{display:inline-block;padding:3px 10px;border-radius:99px;font:700 11px 'DM Sans',sans-serif;letter-spacing:.2px;white-space:nowrap;border:1px solid transparent}
.estado-chip.pago-pendiente{background:#fff0d2;color:#8a5200;border-color:#f0c26c}
.estado-chip.pagada{background:#e2f4e5;color:#226a38;border-color:#aedbb9}
.estado-chip.parcial{background:#e5edfb;color:#294d92;border-color:#b3c6ea}
.estado-chip.anulada{background:#eeeeee;color:#666;border-color:#d4d4d4}
.estado-chip.en-pausa{background:#efe6fa;color:#5a3889;border-color:#c9b0ec}
.status.estado-paused{background:#efe6fa;color:#5a3889;border:1px solid #c9b0ec;font-weight:700}
.session-state.pausa{background:#efe6fa;color:#5a3889;font-weight:700}
.session-chip.pausa{border-left:4px solid #8e63c7}
.kpi-pendiente{border-color:#f0c26c!important;background:linear-gradient(145deg,#fff,#fff7e3)}

/* Estado de la clase: sin estado / cumplió (verde) / cancelar (rojo) */
.outcome-group{display:flex;gap:6px;min-width:0}
.outcome-btn{position:relative;flex:1 1 0;display:flex;align-items:center;justify-content:center;min-height:38px;padding:7px 10px;border:1.5px solid #ddd2d7;border-radius:10px;background:#fff;color:#6f6168;font:700 11px 'DM Sans',sans-serif;text-align:center;cursor:pointer;white-space:nowrap}
.outcome-btn input{position:absolute;opacity:0;pointer-events:none}
.outcome-none:has(input:checked){background:#efe9ec;border-color:#a99aa2;color:#3d2f36}
.outcome-done{border-color:#a9d1b9;color:#2f7a52}
.outcome-done:has(input:checked){background:#2f8a5b;border-color:#2f8a5b;color:#fff}
.outcome-cancel{border-color:#e3a9ac;background:#fbeaea;color:#b13d45}
.outcome-cancel:hover{background:#b13d45;border-color:#b13d45;color:#fff}
.outcome-btn:has(input:focus-visible){outline:2px solid #ae6686;outline-offset:2px}
.session-compliance:has(.outcome-group){grid-template-columns:minmax(0,1fr) 76px auto}
@media(max-width:600px){.session-management .session-compliance:has(.outcome-group){grid-template-columns:minmax(0,1fr) auto}.session-compliance .outcome-group{grid-column:1/-1}}
.outcome-solid{background:#2f8a5b;border-color:#2f8a5b;color:#fff}
.notification-actions .outcome-btn{flex:1 1 0}

/* ===== Ajustes de pantalla para iPhone 15 Plus / Pro Max (430 px) e iPad Pro 11" (834 px) — v271 =====
   Lo que sigue va al final a propósito: corrige tamaños de letra demasiado chicos (7–10 px), el calendario semanal (columnas con la fecha centrada y chips
   diminutos) y la barra de navegación del calendario, sin tocar la versión de escritorio. */
@media (max-width:1180px){
  body .topbar p.eyebrow,body .section-heading p.eyebrow,body .hero-copy p.eyebrow,body .eyebrow{font-size:11px}
  body th,body thead th{font-size:11px}
  body .status,body .estado-chip,body .attendance-client-status,body .session-state,body .integration-status{font-size:11px}
  body .commercial-label{font-size:10.5px}
  body .commercial-summary small,body .mini-data span,body .compliance-row small,body .ciclo-movimientos{font-size:11px}
  body .attendance-custom-range>span,body .attendance-range-fields label,body .attendance-filter-help,body .attendance-period-highlight>div>span{font-size:11px}
  body .calendar-today-button{font-size:12px}
  body .session-management .secondary,body .session-compliance .secondary{font-size:11px}
  body .completion-percent>span{font-size:11px}
  body .dia-chip span,body .dia-chip small,body .sesion-quien small{font-size:11px}
  body .notification-button span{font-size:10px}
  /* Los días de la semana: fecha arriba, no centrada; chips legibles. */
  body .calendar-week .day-col{display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;gap:0}
  body .calendar-week .day-name{font-size:11px}
  body .calendar-week .session-chip{font-size:11.5px;padding:7px 7px;line-height:1.25;margin-bottom:6px}
  body .calendar-week .session-chip b{font-size:11.5px}
  body .text-button{min-height:34px;padding-top:7px;padding-bottom:7px}
}
@media (max-width:600px){
  /* Barra inferior: etiquetas legibles. */
  body .sidebar .nav-link>span:last-child,body .nav-link>span:last-child{font-size:10.5px;letter-spacing:0}
  /* Navegación del calendario: "Hoy" al lado de las flechas, no en una fila entera. */
  body .calendar-period-nav{grid-template-columns:44px minmax(0,1fr) 44px 58px;gap:6px}
  body .calendar-today-button{grid-column:auto;width:auto;min-width:0;padding:0 8px}
  body .calendar-period-nav h3{font-size:16px}
  /* Tarjetas de cliente más compactas: caben más por pantalla. */
  body .client-card{padding:16px}
  body .client-card>p{margin:8px 0}
  body .commercial-summary{padding:10px 12px}
}
@media (max-width:400px){
  body .sidebar .nav-link>span:last-child,body .nav-link>span:last-child{font-size:10px}
}
@media (min-width:601px) and (max-width:960px){
  /* iPad en vertical: columnas de ~70 px; la hora siempre arriba y el nombre debajo, en vez de que unos chips se partan y otros no. */
  body .calendar-week .session-chip b{display:block;margin-bottom:1px}
}
@media (max-width:1180px){
  /* La etiqueta de estado no se estira a lo alto de la fila (quedaba como un óvalo). */
  body .agenda-item .session-state{align-self:center;height:auto;min-height:0;flex:0 0 auto}
}
@media (min-width:601px) and (max-width:1180px){
  /* La burbuja de adherencia del Resumen se salía 8 px del cuadro en iPad vertical. */
  body .hero-score{right:20px}
}
@media (max-width:1180px){
  body .compliance-actions{flex-wrap:wrap;justify-content:flex-end;row-gap:6px}
  body .compliance-actions .text-button{white-space:nowrap}
  body .hero-score>span,body .hero-score small{font-size:8.5px}
}
@media (max-width:1100px){
  /* Asistencia: el título y los filtros se apilan; en iPad vertical el título quedaba en una columna de 95 px y los filtros descuadrados. */
  body .section-heading:has(.attendance-toolbar){flex-direction:column;align-items:stretch;gap:10px}
  body .section-heading:has(.attendance-toolbar) .attendance-toolbar{width:100%;max-width:none}
}
@media (max-width:1180px){
  body .client-actions .secondary,body .client-actions button{min-height:40px;font-size:12px}
}

/* Tablas de Facturación como tarjetas (teléfono y iPad en vertical). Las celdas llevan su etiqueta a la izquierda con posición absoluta, de modo que el contenido
   (que mezcla texto, <br> y <small>) fluye normal a la derecha; con la rejilla de antes, el "vence …" caía bajo la etiqueta y las acciones quedaban sangradas.
   En iPad (601–1100 px) antes la tabla tenía 720 px mínimos dentro de ~620 y las acciones quedaban cortadas a la derecha. */
@media (max-width:1100px){
  .view:has(#billing-subtabs) .table-wrap:has(.stack-mobile){overflow-x:visible}
  .view:has(#billing-subtabs) .stack-mobile thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
  .view:has(#billing-subtabs) .stack-mobile,.view:has(#billing-subtabs) .stack-mobile tbody{display:block;width:auto;min-width:0}
  .view:has(#billing-subtabs) .stack-mobile tr{display:block;margin-bottom:12px;padding:12px 16px 14px;border-radius:14px;background:rgba(255,253,252,.94);box-shadow:0 4px 13px #6d4a5909;border:1px solid #f0e6ea}
  .view:has(#billing-subtabs) .stack-mobile td{display:block;position:relative;width:auto;min-height:28px;padding:6px 0 6px 100px;border:0;font-size:13px;line-height:1.4;text-align:left}
  .view:has(#billing-subtabs) .stack-mobile td:before{content:attr(data-label);position:absolute;left:0;top:8px;width:92px;font:500 10.5px 'DM Mono';letter-spacing:1px;text-transform:uppercase;color:var(--muted)}
  .view:has(#billing-subtabs) .stack-mobile td small{display:block;margin-top:2px;font-size:11.5px;color:var(--muted)}
  /* La celda de acciones no lleva etiqueta: ocupa todo el ancho, con los botones en fila. */
  .view:has(#billing-subtabs) .stack-mobile td[data-label=""],.view:has(#billing-subtabs) .stack-mobile td[data-label="Acciones"]{display:flex;flex-wrap:wrap;gap:8px;padding:12px 0 0;margin-top:8px;border-top:1px solid var(--line)}
  .view:has(#billing-subtabs) .stack-mobile td[data-label=""]:before,.view:has(#billing-subtabs) .stack-mobile td[data-label="Acciones"]:before{display:none}
  .view:has(#billing-subtabs) .stack-mobile td[data-label=""] button,.view:has(#billing-subtabs) .stack-mobile td[data-label="Acciones"] button{flex:1 1 calc(50% - 8px);min-height:44px;margin:0}
  .view:has(#billing-subtabs) .stack-mobile td[data-label=""] button.primary{flex-basis:100%}
  .view:has(#billing-subtabs) .stack-mobile td.empty{padding-left:0}
  .view:has(#billing-subtabs) .stack-mobile td.empty:before{display:none}
  .view:has(#billing-subtabs) .stack-mobile tr:has(td.empty){background:none;box-shadow:none;border:0;padding:0}
}
@media (min-width:601px) and (max-width:1100px){
  /* En iPad las fichas muestran sus datos en dos columnas. */
  .view:has(#billing-subtabs) .stack-mobile tr{display:grid;grid-template-columns:1fr 1fr;column-gap:30px}
  .view:has(#billing-subtabs) .stack-mobile td[data-label=""],.view:has(#billing-subtabs) .stack-mobile td[data-label="Acciones"]{grid-column:1/-1}
  .view:has(#billing-subtabs) .stack-mobile td[data-label=""] button{flex:0 1 auto;min-width:150px}
  .view:has(#billing-subtabs) .stack-mobile td[data-label=""] button.primary{flex-basis:auto}
  .view:has(#billing-subtabs) .stack-mobile tr:has(td.empty){display:block}
}
@media (max-width:600px){
  /* Tarjetas de totales de Facturación: de 126 px a lo que ocupa su contenido; seis tarjetas de 126 px empujaban las facturas fuera de la primera pantalla. */
  body .new-billing-metrics article{min-height:0;padding:12px 14px}
  body .new-billing-metrics{gap:8px}
}
@media (max-width:600px){
  body .metrics article{min-height:0}
  body label + p.eyebrow{margin-top:20px}
}
/* Portal: el cuadro "Consulta tu período" se salía por la derecha en 430 px (los tres botones de mes no cabían en una fila y empujaban la rejilla). */
.portal-period-controls{grid-template-columns:minmax(0,1fr)}
.portal-period-controls>*{min-width:0}
.portal-period-controls input{max-width:100%;min-width:0}
.portal-period-nav{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
.portal-period-nav button{min-width:0;padding:10px 6px;font-size:12px;line-height:1.2;white-space:normal}
body .portal-period-nav button,body .portal-view .portal-period-nav button.secondary{font-size:12.5px;line-height:1.2;min-height:44px}
body .portal-period-nav button{white-space:nowrap;padding-left:4px;padding-right:4px}

/* Rutina ofrecida, cronómetro y tarjeta de rutinas cumplidas (J-102) */
.portal-offer-card{margin:0 0 14px;padding:18px 20px;border-radius:18px;background:linear-gradient(135deg,#fdeef3,#f4e7f0);border:1.5px solid #e2b4c8;box-shadow:0 8px 24px #b46f8e22}
.portal-offer-card h3{margin:6px 0 4px;font:600 22px Fraunces}
.portal-offer-card p{margin:0 0 12px;color:#5a4650;font-size:14px;line-height:1.45}
.portal-offer-tag{display:inline-block;padding:4px 10px;border-radius:99px;background:#b46f8e;color:#fff;font:700 11px 'DM Sans';letter-spacing:.3px}
.portal-offer-inline{margin:0 0 12px;padding:10px 12px;border-radius:12px;background:#fdeef3;color:#7a4560;font-size:13px;font-weight:600}
.routine-timer{display:flex;align-items:center;gap:14px;margin:14px 0;padding:12px 14px;border-radius:14px;background:#f6f1f3}
.routine-timer-display{font:600 34px/1 'DM Mono',monospace;letter-spacing:1px;color:#5a3f4c;min-width:104px}
.routine-timer.corriendo{background:#e8f4ec}.routine-timer.corriendo .routine-timer-display{color:#2f7a52}
.routine-timer-button{flex:1;min-height:48px;font-size:15px}
.routine-timer-button.en-marcha{background:linear-gradient(135deg,#d7625f,#b13d45);color:#fff;border-color:#b13d45}
.portal-routines-done-card{background:linear-gradient(135deg,#f1f8f3,#e4f1e8);border-color:#b5d6c1}
.session-routine-offer{color:#7a4560;font-weight:700}.session-routine-done{color:#2f7a52;font-weight:700}
.notification-item.routine{border-left-color:#5fae84;background:#eef7f1}
@media(max-width:600px){.routine-timer{flex-wrap:wrap}.routine-timer-button{flex:1 1 100%}.routine-timer-display{font-size:40px;flex:1 1 100%;text-align:center}}
/* En Rutinas el botón flotante de peso tapaba el de guardar. */
body:has(#portal-routines.active) .portal-weight-fab{display:none}

/* Aviso "Proponer rutina" en el diálogo de cancelación (J-105) */
.aviso-rutina{display:grid;gap:8px;margin:10px 0 14px;padding:14px 16px;border-radius:14px;background:linear-gradient(135deg,#fdeef3,#f4e7f0);border:1.5px solid #e2b4c8}
.aviso-rutina b{font-size:15px;color:#7a4560}.aviso-rutina span{font-size:13px;line-height:1.45;color:#5a4650}
.aviso-reprogramar{margin:0 0 8px;padding:10px 12px;border-radius:12px;background:#eef4fb;color:#3d5a7a;font-size:13px}

/* Guía de cancelaciones (J-106) */
.agenda-ayuda{margin:2px 0 10px}
.guia-cancelaciones h3{margin:18px 0 6px;font:600 17px Fraunces;color:#5a3f4c}.guia-cancelaciones h3 small{font:500 12px 'DM Sans';color:#8a7a82;margin-left:6px}
.guia-cancelaciones ul{margin:0;padding-left:20px;display:grid;gap:8px}.guia-cancelaciones li{font-size:14px;line-height:1.5;color:#4a3a42}

/* ===== Cliente de viaje y rutina por enlace (J-107) ===== */
.session-chip.viaje{background:#dcedfa;color:#245d86;border-left:3px solid #5aa7dc}
.month-event.viaje{color:#245d86}.month-event.viaje i{background:#5aa7dc}
.session-state.viaje{background:#dcedfa;color:#245d86;font-weight:700}
.day-session.viaje,.session-row:has(.session-state.viaje){border-left-color:#5aa7dc}
.calendar-leyenda{display:flex;flex-wrap:wrap;gap:6px 14px;margin:12px 2px 0;font-size:12px;color:#7a6b73}
.calendar-leyenda span{display:inline-flex;align-items:center;gap:6px}
.calendar-leyenda .ley{display:inline-block;width:12px;height:12px;border-radius:4px;border:1px solid #0001}
.ley.programada{background:#dde8df}.ley.hoy{background:#f0e1e8}.ley.viaje{background:#dcedfa;border-color:#5aa7dc}.ley.pausa{background:#efe6fa}.ley.completed{background:#cfe6d8}
.viaje-etiqueta{margin:8px 0 0;padding:7px 11px;border-radius:10px;background:#dcedfa;color:#245d86;font-size:13px;font-weight:700}
.viaje-etiqueta.proximo{background:#eef6fc;font-weight:600}
.viaje-fila{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;justify-content:space-between;margin-top:10px;padding:11px 13px;border-radius:12px;background:#f6f1f3;border-left:4px solid #c9b8c1}
.viaje-fila.en-curso,.viaje-fila.próximo{background:#eaf4fb;border-left-color:#5aa7dc}.viaje-fila.pasado{opacity:.7}
.viaje-fila small{display:block;margin-top:2px;color:#6f6168}.viaje-acciones{display:flex;flex-wrap:wrap;gap:6px}
.viaje-acciones .secondary{min-height:38px;padding:6px 12px;font-size:12px}
.enlace-vigencia{border:1px solid #e7dce1;border-radius:12px;padding:10px 14px;margin:10px 0;display:grid;gap:8px}.enlace-vigencia legend{font-size:12px;color:#7a6b73;padding:0 6px}
.enlace-whatsapp{display:flex;align-items:center;justify-content:center;margin-top:8px;text-decoration:none;color:#1f6b3e;border-color:#9fd3b2;background:#eef9f1;font-weight:700}
/* Página pública de la rutina */
.public-routine{min-height:100vh;padding:18px 16px 60px;background:#fbf8f9}.public-routine[hidden]{display:none}
.public-brand{display:flex;align-items:center;gap:10px;max-width:640px;margin:0 auto 14px;font-size:17px;color:#4a3a42}.public-brand .brand-mark{display:grid;place-content:center;width:36px;height:36px;border-radius:10px;background:#4f3a45;color:#fff;font:700 13px 'DM Sans'}
.public-card{max-width:640px;margin:0 auto;padding:22px 20px;border-radius:20px;background:#fff;box-shadow:0 8px 28px #5a3e4a14}
.public-card h1{margin:2px 0 0;font:600 30px Fraunces;color:#4a3a42}.public-card h2{margin:4px 0 10px;font:600 22px Fraunces;color:#7a4560}
.public-instrucciones{margin:0 0 14px;color:#5a4650;line-height:1.5;font-size:15px}.public-vigencia{display:block;margin-top:18px;color:#8a7a82;text-align:center}
.public-porcentaje{display:flex;align-items:center;gap:8px;margin:14px 0 8px}.public-porcentaje input{max-width:90px}
.notification-item.travel{border-left-color:#5aa7dc;background:#eaf4fb}
.session-viaje-razon{color:#245d86;font-weight:600}

/* Demostraciones en bucle dentro del editor de rutinas (J-110) */
.selected-exercise .exercise-demo{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:10px;margin-top:6px}
.exercise-demo-item{flex:1 1 220px;max-width:340px;margin:0;border-radius:12px;overflow:hidden;background:#000}
.exercise-demo-item video{display:block;width:100%;max-height:240px;background:#000;object-fit:contain}
.exercise-demo-item figcaption{padding:5px 9px;background:#2b2227;color:#f2e8ed;font-size:11px}
.exercise-demo-espera,.exercise-demo-sin{grid-column:1/-1;color:#8a7a82;font-size:12px;font-style:italic}
.exercise-demo-sin{display:block;margin-top:4px}

/* La demostración ocupa su propia fila bajo el nombre (la regla de móvil mandaba todos los div a la fila 1 y tapaba el título). */
.selected-exercise>div.exercise-demo,.selected-exercise>.exercise-demo-sin{grid-column:1/-1;grid-row:2}
@media(max-width:650px){.selected-exercise>div.exercise-demo,.selected-exercise>.exercise-demo-sin{grid-column:1/-1;grid-row:2}.selected-exercise-dose{grid-row:3}}

/* Bloques o circuitos de una rutina (J-113) */
.routine-block-title{display:grid;gap:2px;margin:14px 0 4px;padding:9px 12px;border-radius:10px;background:#f4e0ea;color:#7a4560;font-size:14px}
.routine-block-title:first-child{margin-top:0}.routine-block-title small{color:#8a6577;font-size:12px;font-weight:500}
.bloques-herramienta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 10px;padding:10px 12px;border-radius:12px;background:#f6f1f3;font-size:13px;color:#5a4650}
.bloques-herramienta select{min-height:36px;padding:4px 8px;border-radius:8px;width:auto}.bloques-herramienta .secondary{min-height:36px;padding:4px 12px;font-size:12px}
.bloque-cabecera{display:flex;flex-wrap:wrap;align-items:center;gap:6px 14px;margin:12px 0 2px;padding:9px 12px;border-radius:10px;background:#f4e0ea;color:#7a4560}
.bloque-cabecera.suelto{background:#efe9ec;color:#6f6168}.bloque-cabecera small{flex:1 1 100%;color:#8a6577;font-size:12px}
.bloque-cabecera label{display:inline-flex;align-items:center;gap:6px;font-size:13px}.bloque-cabecera input{width:64px;min-height:36px}

/* Dosis del ejercicio en dos columnas: el selector de bloque ocupa la fila entera para que se lea "Bloque 1" completo. */
.selected-exercise-dose{grid-template-columns:repeat(2,minmax(0,1fr))!important}
.selected-exercise-field.campo-bloque{grid-column:1/-1}

/* Días de viaje en el portal del cliente (J-114) */
.portal-viaje-card{margin:0 0 14px;padding:16px 18px;border-radius:18px;background:linear-gradient(135deg,#e6f2fb,#dcedfa);border:1.5px solid #9cc9ea}
.portal-viaje-card h3{margin:6px 0 4px;font:600 20px Fraunces;color:#245d86}.portal-viaje-card p{margin:0;color:#35566f;font-size:14px;line-height:1.45}
.portal-viaje-tag{background:#3c86bd}
.portal-col-dia.viaje{background:#dcedfa;border-color:#9cc9ea;color:#245d86}.portal-avion{display:block;font-style:normal;font-size:12px;line-height:1}
.portal-tramo.viaje{background:#eaf4fb}.portal-tramo.viaje.pasado{background:#e3eef6}
.marca-viaje{color:#3c86bd}
.portal-viaje-dia{margin:6px 0 10px;padding:9px 12px;border-radius:12px;background:#dcedfa;color:#245d86;font-size:13px;font-weight:600}

/* Editar una rutina: mover, cambiar y agregar a un bloque */
.mover-ejercicio{display:flex;gap:6px;margin-top:6px}
.mover-ejercicio button{min-width:44px;min-height:36px;padding:2px 10px;font-size:16px;line-height:1}
.campo-agregar-a{display:grid;gap:4px;margin:8px 0}.campo-agregar-a select{width:100%}
.routine-descripcion{white-space:pre-line}

/* Versión activa de la PWA: útil para confirmar rápidamente qué caché está ejecutando el dispositivo. */
.pwa-version{display:inline-flex;align-items:center;padding:5px 8px;border:1px solid #e7dce1;border-radius:999px;background:#fff;color:#9b607a;font:500 10px 'DM Mono';letter-spacing:.2px;white-space:nowrap}
@media(max-width:600px){.pwa-version{padding:4px 6px;font-size:9px}}
.routine-usage{font-weight:600;color:#a25e7c}.routine-delivery-list{display:grid;gap:8px}.routine-delivery-item{padding:12px;border:1px solid #eee3e8;border-radius:11px;background:#fffafd}.routine-delivery-item header{display:flex;justify-content:space-between;gap:10px;align-items:start}.routine-delivery-item header div{min-width:0}.routine-delivery-item b{display:block;color:#513b46}.routine-delivery-item small{display:block;color:#8b707d;font-size:10px;margin-top:4px}.routine-delivery-status{flex:0 0 auto;color:#8b707d;font-size:10px;text-align:right}.routine-delivery-status.done{color:#52705e;font-weight:600}.routine-delivery-actions{display:flex;gap:6px;flex-wrap:wrap;margin-top:9px}.routine-delivery-actions button{font-size:11px;padding:7px 9px}.routine-delivery-summary{white-space:pre-line;margin-top:9px;padding:10px;border-left:3px solid #cf88a5;background:#fff7fb;color:#6f6068;font-size:12px;line-height:1.5}.routine-repeat-overlay{position:fixed;inset:0;z-index:1100;display:grid;place-items:center;padding:16px;background:#3f2d3880}.routine-repeat-dialog{width:min(440px,100%);max-height:calc(100dvh - 32px);overflow:auto;padding:25px 21px;border:1px solid #f2d9e4;border-radius:18px;background:#fff9fc;color:var(--ink);box-shadow:0 24px 70px #3f2d3852}.routine-repeat-dialog h2{font:600 25px Fraunces;margin:0 0 12px}.routine-repeat-dialog>p:not(.eyebrow){color:var(--muted);font-size:13px;line-height:1.45}.routine-repeat-list{display:grid;gap:8px;padding:0;margin:16px 0;list-style:none}.routine-repeat-list li{padding:9px 10px;border-radius:9px;background:#f7eef2;color:#5b424e;font-size:12px}.routine-repeat-list small{display:block;margin-top:3px;color:#8b707d}.routine-repeat-actions{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap;margin-top:16px}.routine-repeat-actions button{min-height:42px}@media(max-width:480px){.routine-delivery-item header{display:block}.routine-delivery-status{text-align:left;margin-top:6px}.routine-repeat-actions{display:grid;grid-template-columns:1fr}.routine-repeat-actions button{width:100%}}
/* El aviso de envío repetido es un <dialog> modal propio (se apila sobre el editor); el contenido mantiene .routine-repeat-dialog */
.routine-repeat-host{border:0;padding:16px;background:transparent;width:min(472px,100vw);max-width:100vw;max-height:100dvh;overflow:visible}.routine-repeat-host::backdrop{background:#3f2d3880}.routine-repeat-host .routine-repeat-dialog{width:100%}

.exercise-preview:not(.expanded) .exercise-extra{display:none}
.exercise-preview button.exercise-more{justify-self:start;min-height:36px;padding:6px 0;border:0;background:none;font:inherit;font-size:12px;line-height:1.45;cursor:pointer;text-align:left}
.demo-client-panel,.portal-demo-banner{border:1px solid #e7c6d4;border-radius:16px;background:#fff7fa;padding:16px;margin:16px 0}.demo-client-panel .eyebrow{margin-top:0}.demo-actions{display:flex;gap:10px;flex-wrap:wrap}.demo-actions button{min-height:44px}.demo-routine-position{display:inline-flex;color:#8c5870;background:#f4e4ec;border-radius:999px;padding:5px 10px;font-size:.78rem;font-weight:700;letter-spacing:.04em;margin-bottom:8px}.portal-demo-banner{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:0 0 18px;background:#fff3d9;border-color:#edcf91}.portal-demo-banner strong{color:#60404f}.portal-demo-banner span{color:#6f7b75}.portal-demo-banner.ended{background:#f7edf2;border-color:#e4cad7}.demo-whatsapp-link{margin-left:auto;min-height:44px;display:inline-flex;align-items:center;justify-content:center}.client-card .status.estado-demo{background:#f4e4ec;color:#8c5870}
/* Resumen de demos: cifras del servidor y lista accionable para Metriva. */
.demo-summary-card{min-width:0}.demo-summary-card .card-head{align-items:center}.demo-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.demo-metrics article{padding:12px;border:1px solid var(--line);border-radius:10px;background:#fff8fb;min-width:0}.demo-metrics article span,.demo-metrics article small{display:block;color:var(--muted);font-size:10px;line-height:1.25}.demo-metrics article strong{display:block;margin:4px 0;font:600 23px Fraunces}.demo-funnel{display:grid;gap:4px;margin-top:14px;padding:12px;border-radius:10px;background:#f5edf2}.demo-funnel b{font-size:12px}.demo-funnel span,.demo-funnel small{color:var(--muted);font-size:11px;line-height:1.4}.demo-expiring{display:grid;gap:7px;margin-top:15px}.demo-expiring>b{font-size:12px}.demo-expiring-row{display:grid;grid-template-columns:34px minmax(0,1fr) 16px;align-items:center;gap:9px;width:100%;padding:9px 0;border:0;border-top:1px solid var(--line);background:transparent;color:var(--ink);text-align:left;cursor:pointer}.demo-expiring-row .initials{width:34px;height:34px;font-size:10px}.demo-expiring-row span:nth-child(2){min-width:0}.demo-expiring-row b,.demo-expiring-row small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.demo-expiring-row b{font-size:12px}.demo-expiring-row small{color:var(--muted);font-size:10px;line-height:1.45}.demo-expiring-row>span:last-child{font-size:20px;color:#a86682}.demo-expiring-row.expired b,.demo-expiring-row.expired small{color:#a34f52}.demo-empty{display:grid;gap:9px;padding:15px;border-radius:10px;background:#f8eff3}.demo-empty strong{font-size:13px}.demo-empty span{color:var(--muted);font-size:11px;line-height:1.45}.demo-empty button{justify-self:start}@media(max-width:560px){.demo-summary-card{padding:16px}.demo-metrics article strong{font-size:21px}}
:root{--contract-paper:#fbf7f8}
.contract-text{white-space:pre-wrap;max-height:360px;overflow:auto;background:var(--contract-paper);border:1px solid var(--line,#eadfe3);border-radius:10px;padding:14px;font:14px/1.55 system-ui,sans-serif;color:var(--ink,#493740)}
.portal-contracts{margin:0 0 18px}.portal-contract-item{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:14px 0;border-top:1px solid var(--line,#eadfe3)}.portal-contract-item small{display:block;color:var(--muted,#7a6d73);margin-top:4px}
.contract-pdf-preview{display:block;width:100%;height:380px;border:1px solid var(--line);margin:12px 0}
#portal-contracts{position:sticky;top:0;z-index:20;margin:0 auto;max-width:1120px;padding:8px 12px}
#portal-contracts:empty{display:none}
.contract-overdue{background:#fff0cf!important;border-left:3px solid #be8016}
.portal-contract-item{display:flex;flex-wrap:wrap;align-items:center;gap:12px;justify-content:space-between}
.portal-contract-item small{display:block}
.portal-contract-item button,#client-contracts button,#contract-editor button,#portal-sign-contract button{min-height:44px}
.contract-warning,.contract-missing{margin:10px 0;padding:12px 14px;border-radius:10px;font-size:12px;line-height:1.5}.contract-warning{border:1px solid #e5bd69;background:#fff4d7;color:#76520d}.contract-missing{border:1px solid #d7a6a6;background:#fff0f0;color:#8a3434}.contract-reschedule{margin:14px 0;padding:13px;border:1px solid var(--line,#eadfe3);border-radius:12px}.contract-reschedule legend{padding:0 6px;font-weight:700;color:var(--ink,#493740)}.contract-reschedule small{display:block;color:var(--muted,#7a6d73);line-height:1.45}.contract-options{display:grid;gap:8px;margin:16px 0}.contract-options .eyebrow{margin-bottom:0}.contract-options article{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px;border:1px solid var(--line,#eadfe3);border-radius:12px;background:#fffafd}.contract-options article>div{min-width:0}.contract-options article b{font-size:12px;line-height:1.45}.contract-options article button{flex:0 0 auto}
@media(max-width:560px){.portal-contracts{padding:12px!important}.contract-text{max-width:100%;overflow-wrap:anywhere}.contract-pdf-preview{height:280px}.contract-options article{align-items:stretch;display:grid}.contract-options article button{width:100%}.contract-reschedule{padding:11px}.contract-warning,.contract-missing{overflow-wrap:anywhere}}
.signature-dialog-host{width:min(680px,calc(100vw - 24px));max-height:calc(100dvh - 24px);padding:0;border:0;border-radius:18px;background:#fffafd;color:var(--ink);box-shadow:0 24px 70px #3f2d3852;overflow:auto}.signature-dialog-host::backdrop{background:#38283199}.signature-dialog{padding:24px}.signature-dialog h2{margin-top:0}.signature-pad{position:relative;overflow:hidden;border:2px solid #cda6b7;border-radius:14px;background:#fff;touch-action:none;user-select:none}.signature-pad canvas{display:block;width:100%;height:190px;touch-action:none}.signature-pad>span{position:absolute;left:16px;bottom:11px;color:#bba6af;font-size:11px;pointer-events:none}.signature-tools,.signature-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.signature-actions{justify-content:flex-end}.signature-tools button,.signature-tools label,.signature-actions button{min-height:44px}.signature-upload{display:inline-flex;align-items:center;justify-content:center;cursor:pointer}.signature-cleanup{display:grid;grid-template-columns:auto minmax(120px,1fr);align-items:center;gap:12px;margin-top:12px}.signature-cleanup input{width:100%}.signature-upload-note{display:block;color:var(--muted);margin-top:5px}.signature-preview{display:grid;gap:10px;padding:14px;border:1px solid var(--line);border-radius:12px;background:#fff}.signature-preview img{display:block;max-width:100%;max-height:110px;margin:auto}.signature-status{font-size:12px;color:var(--muted)}.contract-sign-state{display:block;margin:8px 0;color:#7b5a68;font-size:12px}.contract-in-person{min-height:44px}
.signature-contract-example{display:grid;gap:5px;margin-top:14px;padding:12px;border:1px solid var(--line);border-radius:12px;background:#fff;text-align:center}.signature-contract-example>b{font-size:10px;letter-spacing:.14em;color:var(--muted)}.signature-contract-example>div{display:grid;place-items:center;min-height:72px;border-bottom:1px solid var(--line)}.signature-contract-example img{max-width:100%;max-height:68px}.signature-contract-example span,.signature-contract-example small{font-size:11px;color:var(--muted)}
@media(max-width:560px){.signature-dialog{padding:18px 14px}.signature-actions{display:grid;grid-template-columns:1fr}.signature-actions button{width:100%}.signature-tools{display:grid;grid-template-columns:1fr 1fr}.signature-cleanup{grid-template-columns:1fr}.signature-pad canvas{height:210px}}

.theme-swatch{display:flex;align-items:flex-end;justify-content:center;width:72px;height:52px;border-radius:10px;cursor:pointer;padding:6px 0;font-size:11px;font-weight:600;transition:border-color .2s,transform .15s}.theme-swatch:hover{transform:scale(1.06)}.theme-swatch.active{box-shadow:0 2px 10px #0002}
.secondary.danger{color:#a33a3a;border-color:#e3b9b9}

/* ── Landing page pública ─────────────────────────────────────────── */
.landing{display:flex;flex-direction:column;min-height:100dvh;background:#f5f7fa;color:#1f2937}
.landing-nav{display:flex;align-items:center;justify-content:space-between;padding:18px 6%;position:sticky;top:0;z-index:50;background:rgba(245,247,250,.92);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid #e2e8f0}
.landing-brand{display:flex;align-items:center;gap:10px;text-decoration:none;color:#1f2937;font:600 17px 'DM Sans',sans-serif}
.landing-brand img{border-radius:8px;width:32px;height:32px}
.landing-login-btn{border:1px solid #cbd5e1;background:#fff;color:#1f2937;border-radius:8px;padding:9px 16px;font:600 13px 'DM Sans';cursor:pointer;transition:background .15s,box-shadow .15s}
.landing-login-btn:hover{background:#f1f5f9;box-shadow:0 2px 8px #0002}
.landing-hero{background:linear-gradient(135deg,#1f2937 0%,#334155 60%,#475569 100%);color:#fff;padding:72px 6% 80px;display:flex;gap:48px;align-items:center;justify-content:space-between;overflow:hidden;position:relative}
.landing-hero::before{content:"";position:absolute;width:600px;height:600px;border-radius:50%;border:1px solid #ffffff0a;right:-160px;top:-200px}
.landing-hero-inner{flex:0 0 auto;max-width:520px;position:relative;z-index:2}
.landing-eyebrow{font:500 10px 'DM Mono',monospace;letter-spacing:1.8px;color:#94a3b8;margin:0 0 16px;text-transform:uppercase}
.landing-h1{font:700 52px/1 Fraunces,Georgia,serif;letter-spacing:-2.5px;margin:0 0 20px}
.landing-h1 em{font-style:normal;color:#cbd5e1}
.landing-sub{font-size:16px;line-height:1.6;color:#cbd5e1;margin:0 0 32px;max-width:420px}
.landing-hero-actions{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.landing-cta-btn{background:#fff;color:#1f2937;border:0;border-radius:9px;padding:14px 22px;font:700 14px 'DM Sans';cursor:pointer;transition:transform .15s,box-shadow .15s}
.landing-cta-btn:hover{transform:translateY(-2px);box-shadow:0 8px 20px #0003}
.landing-cta-btn.large{padding:16px 28px;font-size:15px}
.landing-ghost-btn{background:transparent;border:0;color:#94a3b8;font:600 14px 'DM Sans';cursor:pointer;padding:8px 0;transition:color .15s}
.landing-ghost-btn:hover{color:#fff}
.landing-hero-visual{flex:0 0 auto;position:relative;z-index:2}
.landing-mockup{display:flex;background:#fff;border-radius:16px;overflow:hidden;box-shadow:0 30px 80px #0f172a44;width:340px;height:220px}
.lm-sidebar{background:#243242;width:54px;flex:0 0 54px;padding:16px 10px;display:flex;flex-direction:column;gap:10px}
.lm-brand-dot{width:28px;height:28px;border-radius:8px;background:#cbd5e1;margin-bottom:12px}
.lm-nav-item{height:10px;border-radius:5px;background:#ffffff22}
.lm-nav-item.lm-active{background:#ffffff66}
.lm-main{flex:1;display:flex;flex-direction:column;background:#f5f7fa}
.lm-topbar{height:36px;background:#fff;border-bottom:1px solid #e2e8f0;flex:0 0 36px}
.lm-hero-card{margin:12px;background:linear-gradient(135deg,#1f2937,#334155);border-radius:10px;padding:14px;display:flex;align-items:center;justify-content:center}
.lm-score{text-align:center;color:#fff}.lm-score span{font:700 22px/1 Fraunces,Georgia,serif;display:block}.lm-score small{font-size:8px;color:#cbd5e1}
.lm-metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin:0 12px 12px}
.lm-metric{background:#fff;border-radius:7px;padding:7px 8px;text-align:center}.lm-metric span{display:block;font:700 13px/1 Fraunces,Georgia,serif;color:#1f2937;margin-bottom:3px}.lm-metric small{font-size:8px;color:#64748b}
.landing-stats{display:grid;grid-template-columns:repeat(4,1fr);background:#1f2937;padding:28px 6%}
.landing-stat{padding:0 16px;border-left:1px solid #334155}.landing-stat:first-child{border-left:0;padding-left:0}
.landing-stat strong{display:block;color:#fff;font:600 14px 'DM Sans';margin-bottom:4px}
.landing-stat span{display:block;color:#94a3b8;font-size:12px}
.landing-features{padding:72px 6%;background:#f5f7fa}
.landing-section-head{text-align:center;margin-bottom:48px}
.landing-section-head h2{font:600 36px Fraunces,Georgia,serif;letter-spacing:-1.2px;margin:10px 0 12px;color:#1f2937}
.landing-section-head p{color:#64748b;font-size:15px;max-width:480px;margin:0 auto}
.landing-feature-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;max-width:1100px;margin:0 auto}
.landing-feature-card{background:#fff;border-radius:14px;padding:26px 24px;box-shadow:0 4px 16px #1f293708;transition:transform .2s,box-shadow .2s}
.landing-feature-card:hover{transform:translateY(-4px);box-shadow:0 12px 30px #1f293712}
.lf-icon{width:44px;height:44px;background:#f1f5f9;border-radius:10px;display:grid;place-items:center;margin-bottom:14px;color:#334155}
.lf-icon svg{width:22px;height:22px}
.landing-feature-card h3{font:600 16px Fraunces,Georgia,serif;margin:0 0 8px;color:#1f2937}
.landing-feature-card p{font-size:13px;line-height:1.6;color:#64748b;margin:0}
.landing-pricing{padding:72px 6%;background:#fff}
.landing-pricing-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;max-width:980px;margin:0 auto}
.landing-plan{background:#f8fafc;border:1px solid #e2e8f0;border-radius:16px;padding:28px 24px;display:flex;flex-direction:column}
.landing-plan-featured{background:#1f2937;border-color:#1f2937;color:#fff;position:relative}
.plan-badge{font:700 9px 'DM Mono',monospace;letter-spacing:1.5px;color:#94a3b8;background:#334155;display:inline-block;padding:4px 8px;border-radius:4px;margin:0 0 10px}
.plan-name{font:600 18px Fraunces,Georgia,serif;margin:0 0 8px;color:inherit}
.landing-plan:not(.landing-plan-featured) .plan-name{color:#1f2937}
.plan-price{margin:0 0 14px;display:flex;align-items:baseline;gap:4px}
.plan-price strong{font:700 36px/1 Fraunces,Georgia,serif;color:inherit}
.landing-plan:not(.landing-plan-featured) .plan-price strong{color:#1f2937}
.plan-price span{font-size:13px;color:#94a3b8}
.landing-plan-featured .plan-price span{color:#94a3b8}
.plan-desc{font-size:13px;line-height:1.5;color:#64748b;margin:0 0 18px}
.landing-plan-featured .plan-desc{color:#94a3b8}
.plan-features{list-style:none;padding:0;margin:0 0 24px;display:grid;gap:9px;flex:1}
.plan-features li{font-size:13px;color:#475569;padding-left:18px;position:relative}
.plan-features li::before{content:"✓";position:absolute;left:0;color:#22c55e;font-weight:700}
.landing-plan-featured .plan-features li{color:#cbd5e1}
.landing-plan-featured .plan-features li::before{color:#86efac}
.landing-plan-btn{border-radius:9px;padding:12px 16px;font:600 13px 'DM Sans';cursor:pointer;width:100%;margin-top:auto;transition:transform .15s,box-shadow .15s}
.landing-plan-btn.primary{background:#fff;color:#1f2937;border:0}
.landing-plan-btn.secondary{background:#fff;border:1px solid #e2e8f0;color:#1f2937}
.landing-plan-btn:hover{transform:translateY(-2px);box-shadow:0 6px 16px #0002}
.landing-final-cta{background:linear-gradient(135deg,#1f2937,#334155);color:#fff;padding:72px 6%;text-align:center}
.landing-final-cta h2{font:600 36px Fraunces,Georgia,serif;letter-spacing:-1.2px;margin:0 0 12px}
.landing-final-cta p{color:#94a3b8;font-size:15px;margin:0 0 28px}
.landing-footer{background:#0f172a;color:#64748b;padding:20px 6%;display:flex;align-items:center;justify-content:space-between;font-size:12px}
.landing-footer-link{background:none;border:0;color:#64748b;font:12px 'DM Sans';cursor:pointer;padding:0;text-decoration:underline}
.landing-footer-link:hover{color:#94a3b8}
/* Platform dashboard */
.platform-stats{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin:0 0 24px}
.platform-stat{background:var(--bg-card,#f8fafc);border:1px solid var(--border,#e2e8f0);border-radius:10px;padding:14px 16px;display:flex;flex-direction:column;gap:4px}
.platform-stat-accent{background:var(--theme-hero);color:#fff}
.platform-stat-accent .platform-stat-label{opacity:.75}
.platform-stat-value{font:700 28px/1 'DM Sans',sans-serif;color:var(--fg,#1e293b)}
.platform-stat-accent .platform-stat-value{color:#fff}
.platform-stat-label{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--fg-muted,#64748b)}
.platform-recent{margin:0 0 28px}
.platform-log{list-style:none;padding:0;margin:0;border:1px solid var(--border,#e2e8f0);border-radius:10px;overflow:hidden}
.platform-log li{display:grid;grid-template-columns:160px 1fr auto;gap:12px;padding:10px 14px;border-top:1px solid var(--border,#e2e8f0);font-size:13px;align-items:center}
.platform-log li:first-child{border-top:0}
.platform-log-action{font-weight:600;color:var(--fg,#1e293b)}
.platform-log-tenant{color:var(--fg-muted,#64748b);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.platform-log-time{color:var(--fg-muted,#94a3b8);font-size:11px;white-space:nowrap}
@media(max-width:700px){.platform-stats{grid-template-columns:repeat(2,1fr)}.platform-log li{grid-template-columns:1fr auto}.platform-log-tenant{display:none}}
/* Team management */
/* Demo upgrade banner */
.demo-upgrade-banner{position:sticky;top:0;z-index:100;background:linear-gradient(90deg,#1a4035,#2a5a4a);color:#fff;padding:0}.demo-upgrade-inner{display:flex;align-items:center;gap:12px;padding:11px 5.5%;flex-wrap:wrap}.demo-upgrade-badge{font:700 9px 'DM Mono';letter-spacing:1.5px;background:var(--lime,#dcff53);color:#132d28;border-radius:99px;padding:3px 8px;white-space:nowrap}.demo-upgrade-banner p{margin:0;font-size:13px;color:#cde3da;flex:1;min-width:160px}.demo-upgrade-btn{background:var(--lime,#dcff53);color:#132d28;border:0;border-radius:7px;padding:8px 14px;font:600 12px 'DM Sans';cursor:pointer;white-space:nowrap;flex-shrink:0}.demo-upgrade-btn:hover{opacity:.9}.demo-upgrade-dismiss{margin-left:auto;background:none;border:0;color:#a0b8ae;font-size:22px;cursor:pointer;padding:0 4px;line-height:1;flex-shrink:0}@media(max-width:560px){.demo-upgrade-inner{padding:11px 20px}}
/* Onboarding wizard */
.onboarding-steps{display:grid;gap:8px;margin:20px 0}.onboarding-step{background:var(--paper,#f8f7f1);border:1px solid var(--line,#e9e8df);border-radius:11px;padding:14px 16px;display:flex;align-items:center;gap:13px;cursor:pointer;text-align:left;width:100%;transition:background .15s,border-color .15s}.onboarding-step:hover{background:#f0f5eb;border-color:#c3d9b3}.ob-num{width:28px;height:28px;border-radius:50%;background:var(--lime,#dcff53);color:#132d28;font:700 13px 'DM Sans';display:grid;place-content:center;flex-shrink:0}.onboarding-step div{flex:1}.onboarding-step b{display:block;font-size:13px;color:var(--ink)}.onboarding-step small{display:block;font-size:11px;color:var(--muted);margin-top:2px;font-weight:400}.ob-arrow{color:var(--muted);font-size:18px;flex-shrink:0}
/* Password reset success/form-success */
.form-success{padding:10px 12px;border-radius:8px;background:#e8f5e7;color:#2d7058;font-size:13px;margin:0}
.team-member-list{list-style:none;padding:0;margin:0 0 4px;display:flex;flex-direction:column;gap:0}
.team-member-item{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--border,#e2e8f0)}
.team-member-item:last-child{border-bottom:0}
.team-member-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.team-member-info b{font-size:14px;color:var(--fg,#1e293b)}
.team-member-info small{font-size:12px;color:var(--fg-muted,#64748b);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.team-badge{font-size:11px;font-weight:600;background:var(--theme-accent,#2563eb);color:#fff;padding:2px 8px;border-radius:20px;white-space:nowrap}
/* Tenant audit log */
.audit-log-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:2px}
.audit-log-item{display:flex;gap:12px;align-items:flex-start;padding:12px 0;border-bottom:1px solid var(--border,#e2e8f0)}
.audit-log-item:last-child{border-bottom:0}
.audit-log-icon{flex-shrink:0;width:32px;height:32px;border-radius:8px;background:var(--bg-card,#f1f5f9);display:flex;align-items:center;justify-content:center}
.audit-log-body{display:flex;flex-direction:column;gap:2px;min-width:0}
.audit-log-action{font-size:14px;font-weight:500;color:var(--fg,#1e293b);line-height:1.4}
.audit-log-meta{font-size:12px;color:var(--fg-muted,#64748b)}
@media(max-width:900px){.landing-hero{flex-direction:column;padding:52px 6% 56px;gap:36px}.landing-h1{font-size:40px}.landing-hero-visual{width:100%}.landing-mockup{width:100%;max-width:340px;margin:0 auto}.landing-stats{grid-template-columns:repeat(2,1fr);gap:16px}.landing-stat{padding:12px 0;border-left:0;border-top:1px solid #334155}.landing-stat:nth-child(-n+2){border-top:0}.landing-feature-grid,.landing-pricing-grid{grid-template-columns:1fr}}
@media(max-width:600px){.landing-hero{padding:40px 18px 48px}.landing-h1{font-size:34px;letter-spacing:-1.5px}.landing-sub{font-size:14px}.landing-features,.landing-pricing,.landing-final-cta{padding:48px 18px}.landing-stats{padding:24px 18px}.landing-nav{padding:14px 18px}.landing-footer{flex-direction:column;gap:10px;text-align:center}}
/* Platform shell — pantalla dedicada para super_admin */
.platform-shell{min-height:100vh;background:var(--paper,#f7f7f2);display:flex;flex-direction:column}
.platform-shell-header{background:#132d28;color:#fff;position:sticky;top:0;z-index:50;box-shadow:0 1px 0 rgba(255,255,255,.08)}
.platform-shell-inner{max-width:1100px;margin:0 auto;padding:14px 28px;display:flex;align-items:center;justify-content:space-between;gap:16px}
.platform-shell-brand{display:flex;align-items:center;gap:10px}.platform-shell-brand .brand-logo{width:28px;height:28px;border-radius:6px}
.platform-shell-brand strong{font:700 16px 'DM Sans';color:#fff}
.platform-shell-badge{font:700 10px 'DM Mono';letter-spacing:1.5px;background:var(--lime,#dfff58);color:#132d28;border-radius:99px;padding:3px 9px;white-space:nowrap}
.platform-shell-user{font-size:12px;color:rgba(255,255,255,.6)}
.platform-shell-actions{display:flex;align-items:center;gap:12px}
.platform-shell-actions .secondary{font-size:12px;padding:7px 14px;background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.2);color:#fff}
.platform-shell-actions .secondary:hover{background:rgba(255,255,255,.18)}
.platform-shell-main{max-width:1100px;margin:0 auto;padding:36px 28px;width:100%;flex:1}
@media(max-width:600px){.platform-shell-inner{padding:12px 16px}.platform-shell-main{padding:20px 16px}}
/* Demo credentials card inside platform shell */
.platform-demo-creds{margin:20px 0;border-left:3px solid var(--lime,#dfff58)}
.demo-creds-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.demo-cred-item{display:flex;flex-direction:column;gap:4px}
.demo-cred-role{font-size:11px;font-weight:600;color:var(--muted,#6f7b75);text-transform:uppercase;letter-spacing:.5px}
.demo-cred-email,.demo-cred-pw{font:13px 'DM Mono';background:#f0f4ee;border-radius:5px;padding:4px 8px;color:#1a3d2f;cursor:pointer;border:none;text-align:left;width:100%;transition:background .12s}
.demo-cred-email:hover,.demo-cred-pw:hover{background:#dff0d8}
