*{box-sizing:border-box}body{margin:0;font-family:Arial,Helvetica,sans-serif;background:#f4f4f4;color:#171717}button,input,select{font:inherit}button{cursor:pointer}header{background:#111;color:#fff;padding:16px 22px;display:flex;justify-content:space-between;align-items:center}header h1{margin:0;font-size:22px}header small{color:#bbb}.layout{display:grid;grid-template-columns:210px 1fr;min-height:calc(100vh - 72px)}aside{background:#191919;padding:15px}.nav{width:100%;border:0;background:transparent;color:#ddd;text-align:left;padding:12px;border-radius:8px;margin-bottom:5px}.nav.active,.nav:hover{background:#333;color:#fff}.nav span{margin-left:9px}main{max-width:1100px;width:100%;margin:auto;padding:24px}.cards{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.card,.panel,.student,.row,.loginbox{background:#fff;border-radius:12px;padding:16px;box-shadow:0 2px 8px #0001}.card small,.muted{color:#666}.card strong{display:block;font-size:28px;margin-top:10px}.panel{margin-top:18px}.titlebar{display:flex;justify-content:space-between;align-items:center;gap:10px}.primary{background:#111;color:#fff;border:0;border-radius:8px;padding:11px 15px;font-weight:bold}.danger{background:#b00020;color:#fff;border:0;border-radius:8px;padding:9px}.secondary{background:#fff;border:1px solid #ccc;border-radius:7px;padding:9px}.search{display:flex;gap:8px;background:#fff;border:1px solid #ddd;border-radius:8px;padding:4px 10px;margin:14px 0}.search input{border:0;outline:0;width:100%;padding:10px}.student,.row{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:10px 0}.student-actions{display:flex;align-items:center;gap:7px}.student-actions button{background:#fff;border:1px solid #ccc;border-radius:7px;padding:8px}.badge{display:inline-block;margin-top:7px;font-size:13px;font-weight:bold}.ok{color:#16803c}.warn{color:#a86a00}.bad{color:#b00020}.notice{background:#fff3cd;border:1px solid #ffe69c;padding:11px;border-radius:8px;margin-bottom:15px}.modal{position:fixed;inset:0;background:#0009;display:grid;place-items:center;padding:15px}.modalbox{background:#fff;border-radius:14px;padding:20px;width:min(540px,100%);max-height:94vh;overflow:auto}.modalbox form{display:grid;gap:10px}.modalbox label{font-weight:bold;font-size:13px}.modalbox input,.modalbox select{width:100%;padding:11px;border:1px solid #ccc;border-radius:8px;margin-top:4px}.actions{display:flex;justify-content:flex-end;gap:8px;margin-top:8px}.login{min-height:100vh;display:grid;place-items:center;background:#111}.loginbox{width:min(410px,92vw);padding:28px}.loginbox input{width:100%;padding:12px;border:1px solid #ccc;border-radius:8px;margin:6px 0 12px}.error{color:#b00020;background:#fee;border:1px solid #fbb;padding:9px;border-radius:7px}.empty{padding:20px;text-align:center;color:#777}@media(max-width:800px){.layout{grid-template-columns:1fr}aside{display:flex;overflow:auto;padding:7px;position:sticky;top:0;z-index:5}.nav{width:auto;white-space:nowrap}.cards{grid-template-columns:repeat(2,1fr)}main{padding:15px}.student{align-items:flex-start;flex-direction:column}.student-actions{width:100%}}
.wide{width:min(900px,100%)}.detailgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:15px 0}.code{font-size:11px;word-break:break-all}@media(max-width:800px){.detailgrid{grid-template-columns:repeat(2,1fr)}}

.accesspanel{max-width:900px}.scannerbox{padding:10px 0 20px}.scanrow{display:flex;gap:8px}.scanrow input{flex:1;padding:12px;border:1px solid #ccc;border-radius:8px}.accessresult{margin-top:15px;padding:18px;border-radius:10px;font-size:17px}.accessgood{background:#e8f7ed;border:1px solid #9bd0aa;color:#14652e}.accessbad{background:#fff0f0;border:1px solid #e5aaaa;color:#9b1616}.qr-card{text-align:center}.qr{width:150px;height:150px;display:block;margin:10px auto}.small{font-size:13px}

.camera-actions{display:flex;gap:8px;margin:10px 0}.qr-reader{width:min(420px,100%);margin:12px auto;overflow:hidden;border-radius:12px;background:#111;min-height:20px}.qr-reader video{border-radius:10px}.qr-reader__dashboard{padding:8px!important}.qr-reader__dashboard select{padding:8px}.qr-reader__scan_region{min-height:250px}
@media(max-width:600px){.camera-actions{display:grid;grid-template-columns:1fr 1fr}.scanrow{flex-direction:column}.scanrow button{width:100%}}
.payment-request{background:#fff;border:1px solid #ddd;border-radius:12px;padding:15px;margin:10px 0;display:flex;justify-content:space-between;align-items:center;gap:12px}.payment-request small{display:block;margin-top:5px}.payment-request .student-actions{flex-wrap:wrap}@media(max-width:700px){.payment-request{flex-direction:column;align-items:flex-start}.payment-request .student-actions{width:100%}.payment-request .student-actions button{flex:1}}.inactive-student{opacity:.82;border-style:dashed}.titlebar .student-actions{display:flex;gap:8px;align-items:center}

.students-titlebar{align-items:center}.student-toolbar{display:flex;gap:10px;align-items:center}.add-student-btn{font-weight:800;min-height:44px;padding:10px 16px;white-space:nowrap}.empty .add-student-btn{margin-top:12px}@media(max-width:760px){.students-titlebar{display:flex;flex-direction:column;align-items:stretch;gap:12px}.student-toolbar{display:flex;flex-direction:column;align-items:stretch}.add-student-btn,.student-toolbar .secondary{width:100%;min-height:48px}}

.inactive-student{opacity:.82}.inactive-student .student-actions{align-items:center}.student-actions .danger{border:1px solid #b42318}.student-actions .primary{font-weight:700}


/* V10 — resultado QR grande y visible */
#accessResult{margin-top:18px;min-height:24px;position:relative;z-index:5}
.accessresult{border-radius:18px;padding:28px 22px;text-align:center;font-size:22px;line-height:1.45;border:4px solid;box-shadow:0 8px 25px rgba(0,0,0,.15);animation:accessIn .2s ease}
.accessgood{background:#eaffef;border-color:#18a957}
.accessbad{background:#fff0f0;border-color:#d32f2f}
.access-icon{font-size:52px;font-weight:900;line-height:1;margin-bottom:8px}
.access-title{font-size:32px;font-weight:900;margin-bottom:10px}
.accessreason,.access-reason{font-size:21px;font-weight:700;margin-top:8px}
@keyframes accessIn{from{transform:scale(.96);opacity:.3}to{transform:scale(1);opacity:1}}
@media(max-width:700px){.accessresult{padding:30px 14px;font-size:22px;min-height:180px;display:flex;flex-direction:column;justify-content:center}.access-title{font-size:30px}.access-icon{font-size:58px}.access-reason{font-size:20px}}


/* V11 — dashboard */
.dashboard-head,.section-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.dashboard-head{margin-bottom:14px}.dashboard-head h2{margin-bottom:2px}.dashboard-cards .card{min-height:125px;display:flex;flex-direction:column;gap:7px}.dashboard-cards .card strong{font-size:30px}.dashboard-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:16px}.section-head h3{margin:0}.clickable-row{cursor:pointer}.clickable-row:hover{transform:translateY(-1px)}.quick-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}.quick-actions button{min-height:46px}.detailgrid{grid-template-columns:repeat(2,minmax(0,1fr))}.detailgrid .card strong{display:block;margin-top:5px}.detailgrid .card .muted{display:block;margin-top:4px}@media(max-width:800px){.dashboard-grid{grid-template-columns:1fr}.dashboard-cards{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:520px){.dashboard-cards{grid-template-columns:1fr 1fr}.dashboard-head,.section-head{align-items:flex-start}.quick-actions{flex-direction:column}.quick-actions button{width:100%}.detailgrid{grid-template-columns:1fr}}


/* V12 — gestión de abonos */
.plan-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.plan-card{border:1px solid #ddd;border-radius:14px;padding:18px;background:#fff}.plan-disabled{opacity:.7}.plan-top{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.plan-top h3{margin:0 0 8px}.plan-top>strong{font-size:26px}.plan-info{padding:14px 0;color:#555;min-height:45px}.plan-card .student-actions{margin-top:8px}.plan-card .student-actions button{flex:1}@media(max-width:900px){.plan-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:600px){.plan-grid{grid-template-columns:1fr}.plan-card .student-actions{flex-direction:column}.plan-card .student-actions button{width:100%}}


/* V14 — renovación */
#renewForm .actions{display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap}#renewForm .primary{min-height:46px;font-weight:800}


/* V15 — Bizum */
.payment-request{display:flex;justify-content:space-between;gap:18px;align-items:center;border:1px solid #ddd;border-radius:14px;padding:16px;margin-bottom:12px;background:#fff}.payment-request-main{display:flex;flex-direction:column;gap:4px}.payment-request-main b{font-size:18px}.payment-request .student-actions{align-items:center;justify-content:flex-end}@media(max-width:700px){.payment-request{flex-direction:column;align-items:stretch}.payment-request .student-actions{flex-direction:column;align-items:stretch}.payment-request .student-actions button{width:100%;min-height:46px}}


/* V16 — Área del alumno */
.portal{min-height:100vh;background:#f5f6f8}.portal-head{display:flex;justify-content:space-between;align-items:center;padding:18px 24px;background:#111;color:#fff}.portal-head h1{margin:0}.portal-head small{opacity:.75}.portal-main{max-width:1000px;margin:0 auto;padding:22px}.portal-welcome{margin-bottom:18px}.portal-welcome h2{margin-bottom:4px}.portal-card{background:#fff;border:1px solid #ddd;border-radius:16px;padding:20px;margin-bottom:16px}.portal-status{display:flex;justify-content:space-between;align-items:center;gap:15px}.portal-status h2{margin:5px 0 8px}.portal-price{font-size:30px;font-weight:800}.portal-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:18px}.portal-grid>div{background:#f7f7f7;padding:14px;border-radius:10px}.portal-grid small,.portal-grid strong{display:block}.portal-grid strong{margin-top:5px}.qr-box{text-align:center;padding:12px}.qr-box #studentQr{display:flex;justify-content:center;margin:10px auto}.portal-two{display:grid;grid-template-columns:1fr 1fr;gap:16px}.portal-list .row{border-bottom:1px solid #eee;padding:10px 0}.success{color:#166534}.loginbox .secondary{margin-top:8px;width:100%}@media(max-width:650px){.portal-head{padding:15px}.portal-main{padding:14px}.portal-status{align-items:flex-start}.portal-grid,.portal-two{grid-template-columns:1fr}.portal-price{font-size:24px}}


/* V17 — grupos */


/* V19 — ficha de alumno */
.student-ficha{max-width:1050px!important;width:min(1050px,calc(100vw - 28px));max-height:92vh;overflow:auto;padding:0!important}.ficha-head{display:flex;justify-content:space-between;align-items:flex-start;gap:18px;padding:24px;border-bottom:1px solid #e5e7eb;background:#fafafa}.ficha-head h2{margin:5px 0;font-size:28px}.eyebrow{font-size:11px;font-weight:800;letter-spacing:.12em;color:#777}.ficha-sub{color:#666}.ficha-head-actions{display:flex;align-items:center;gap:10px}.ficha-sections{padding:18px 24px}.ficha-section{border:1px solid #e2e5e8;border-radius:14px;padding:18px;margin-bottom:16px;background:#fff}.ficha-section h3{margin:0 0 15px}.info-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.info-grid>div{background:#f7f8fa;border-radius:10px;padding:12px}.info-grid small,.info-grid strong{display:block}.info-grid small{color:#777;margin-bottom:5px}.section-title{display:flex;justify-content:space-between;align-items:center;gap:10px}.access-box{display:grid;grid-template-columns:220px 1fr;gap:25px;align-items:start}.qr-card{text-align:center}.qr-card .qr{display:block;width:180px;height:180px;margin:0 auto 8px}.qr-card code{font-size:11px;word-break:break-all}.exception-list{margin-top:10px}.ficha-actions{display:flex;gap:10px;flex-wrap:wrap;padding:18px 24px;border-top:1px solid #e5e7eb;background:#fafafa}.ficha-actions button{min-height:44px}.ficha-list .row{padding:10px 0;border-bottom:1px solid #eee}.small{padding:6px 10px;font-size:12px}@media(max-width:700px){.ficha-head{padding:18px;flex-direction:column}.ficha-head-actions{width:100%;justify-content:space-between}.ficha-sections{padding:12px}.info-grid,.access-box{grid-template-columns:1fr}.ficha-actions{padding:14px;flex-direction:column}.ficha-actions button,.section-title button{width:100%}}

.exception-modal{max-width:520px}.exception-modal form{display:grid;gap:12px}.exception-modal select{min-height:44px}.exception-modal .row{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px solid #eee}


/* V22 — RESPONSIVE GLOBAL */
*{box-sizing:border-box}
html,body{width:100%;max-width:100%;overflow-x:hidden}
img,video,canvas,svg{max-width:100%;height:auto}
button,input,select,textarea{font:inherit;max-width:100%}
button{min-height:42px}
.container,.main,.content,.page,.panel{max-width:100%;width:100%}
.main{padding-left:clamp(12px,3vw,28px);padding-right:clamp(12px,3vw,28px)}
.grid,.cards,.stats,.dashboard-grid{width:100%;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr))}
.table-wrap,.table-responsive{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}
table{min-width:650px}
.search{width:100%}
.search input{min-width:0;width:100%}
.titlebar{flex-wrap:wrap;gap:12px}
.titlebar>*{min-width:0}
.student-actions{display:flex;flex-wrap:wrap;gap:8px}
.student-actions button{flex:0 1 auto}
form{max-width:100%}
form label{min-width:0}
input,select,textarea{width:100%;min-width:0}
.overlay{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;padding:12px;overflow:auto}
.modal,.modalbox{max-width:100%;width:min(960px,100%);max-height:calc(100dvh - 24px);overflow:auto}
.login{min-height:100dvh;padding:16px;display:flex;align-items:center;justify-content:center}
.loginbox{width:min(440px,100%)}
.portal-main{width:min(1000px,100%);padding-left:clamp(12px,3vw,24px);padding-right:clamp(12px,3vw,24px)}
.portal-card{width:100%}
.portal-two{grid-template-columns:repeat(2,minmax(0,1fr))}
.ficha-sections{min-width:0}
.ficha-section{min-width:0}
.ficha-head,.section-title{flex-wrap:wrap}
.ficha-head-actions{flex-wrap:wrap}
.ficha-actions{flex-wrap:wrap}
.qr-box,.qr-card{max-width:100%}

@media(max-width:900px){
 .sidebar{position:static;width:100%;height:auto}
 .app-shell,.layout{display:block}
 .nav,.topbar{flex-wrap:wrap}
 .portal-two{grid-template-columns:1fr}
 .info-grid{grid-template-columns:1fr}
 .access-box{grid-template-columns:1fr}
 .ficha-head{flex-direction:column}
 .ficha-head-actions{width:100%;justify-content:space-between}
}

@media(max-width:640px){
 body{font-size:14px}
 h1{font-size:24px}h2{font-size:21px}h3{font-size:18px}
 .main{padding:10px}
 .titlebar{align-items:stretch;flex-direction:column}
 .titlebar button{width:100%}
 .student-actions{display:grid;grid-template-columns:1fr}
 .student-actions button{width:100%}
 .panel{padding:12px!important}
 .card{padding:14px!important}
 .modal,.modalbox,.student-ficha{width:100%!important;max-height:calc(100dvh - 16px);border-radius:12px}
 .modal-head{position:sticky;top:0;background:#fff;z-index:2}
 .ficha-head,.ficha-sections,.ficha-actions{padding:14px}
 .ficha-actions{display:grid;grid-template-columns:1fr}
 .ficha-actions button{width:100%}
 .section-title{align-items:stretch;flex-direction:column}
 .section-title button{width:100%}
 .portal-head{gap:10px;flex-wrap:wrap}
 .portal-head button{margin-left:auto}
 .portal-main{padding-top:12px}
 .portal-status{flex-direction:column}
 .portal-grid{grid-template-columns:1fr}
 .portal-card{padding:14px}
 .access-box{grid-template-columns:1fr}
 .qr-card .qr{width:180px;max-width:70vw;height:auto}
 .row{gap:8px;flex-wrap:wrap}
}

@media(max-width:380px){
 body{font-size:13px}
 .portal-head h1{font-size:20px}
 .ficha-head h2{font-size:22px}
 .badge{white-space:normal}
}


/* V23 — excepciones visibles para el alumno */
.portal-exceptions .exception-item{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:13px 14px;margin-top:10px;border:1px solid #e4e7eb;border-radius:10px;background:#fafafa}.portal-exceptions .exception-item>div{display:flex;flex-direction:column;gap:4px}.portal-exceptions .exception-item .badge{flex:0 0 auto}.empty-exception{padding:14px;border-radius:10px;background:#f7f8fa;color:#666}@media(max-width:640px){.portal-exceptions .exception-item{align-items:flex-start;flex-direction:column}.portal-exceptions .exception-item .badge{align-self:flex-start}}


.portal-exceptions .exception-item{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:13px 14px;margin-top:10px;border:1px solid #e4e7eb;border-radius:10px;background:#fafafa}.portal-exceptions .exception-item>div{display:flex;flex-direction:column;gap:4px}.portal-exceptions .exception-item .badge{flex:0 0 auto}.empty-exception{padding:14px;border-radius:10px;background:#f7f8fa;color:#666}@media(max-width:640px){.portal-exceptions .exception-item{align-items:flex-start;flex-direction:column}.portal-exceptions .exception-item .badge{align-self:flex-start}}


/* V25 — solicitudes de plaza */
.application-card{display:flex;justify-content:space-between;align-items:center;gap:20px;border:1px solid #ddd;border-radius:14px;padding:18px;margin-bottom:12px;background:#fff}.application-card h3{margin:0 0 10px}.application-meta{display:flex;flex-wrap:wrap;gap:8px;color:#555;font-size:14px}.application-box{max-width:520px}.application-box .checkline{display:flex;align-items:flex-start;gap:9px}.application-box .checkline input{width:auto;margin-top:4px}.application-page .loginbox{max-height:95dvh;overflow:auto}@media(max-width:700px){.application-card{flex-direction:column;align-items:stretch}.application-card .student-actions{display:grid;grid-template-columns:1fr}.application-card .student-actions button{width:100%}}


/* V26 — alta separada de abono */


/* V27 — acceso único */
.unified-access{min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:18px;background:#f4f5f7}.unified-card{width:min(520px,100%);background:#fff;border:1px solid #e1e4e8;border-radius:22px;padding:30px;box-shadow:0 12px 40px rgba(0,0,0,.08);text-align:center}.brand-mark{font-size:46px}.unified-card h1{margin:5px 0 0;font-size:30px;letter-spacing:.04em}.unified-sub{margin:2px 0 25px;color:#777}.unified-options{display:grid;gap:12px;text-align:left}.unified-option{width:100%;display:flex;align-items:center;gap:15px;padding:16px;border:1px solid #dfe3e8;border-radius:14px;background:#fff;cursor:pointer;text-align:left}.unified-option>span{font-size:27px;flex:0 0 34px;text-align:center}.unified-option b,.unified-option small{display:block}.unified-option small{margin-top:4px;color:#777}.unified-note{font-size:12px;color:#888;margin:20px 0 0}@media(max-width:480px){.unified-access{padding:10px}.unified-card{padding:22px 16px;border-radius:16px}.unified-card h1{font-size:25px}.unified-option{padding:14px}}


/* V28 — solicitud de plaza en 3 pasos */
.application-wizard{max-width:620px!important}.application-brand{text-align:center;font-size:22px;margin-bottom:20px}.application-brand small{display:block;font-size:12px;color:#777;margin-top:3px}.wizard-progress{display:grid;grid-template-columns:42px 1fr 42px 1fr 42px;align-items:center;margin:0 0 24px}.wizard-progress span{text-align:center;border:2px solid #ddd;border-radius:50%;width:42px;height:42px;padding-top:4px;font-weight:800;font-size:12px;background:#fff}.wizard-progress span.on{border-color:#111;background:#111;color:#fff}.wizard-progress i{height:2px;background:#ddd}.terms-box{max-height:310px;overflow:auto;border:1px solid #ddd;border-radius:12px;padding:16px;background:#fafafa;margin-bottom:14px}.terms-box li{margin:0 0 10px;line-height:1.45}.terms-check{display:flex!important;align-items:flex-start;gap:10px;padding:13px;border:1px solid #ddd;border-radius:10px;background:#fff}.terms-check input{width:auto!important;margin-top:4px}.wizard-actions{display:flex;justify-content:space-between;gap:10px;margin-top:20px}.wizard-actions button{min-width:150px}.review-card{display:grid;grid-template-columns:1fr 1fr;gap:10px}.review-card>div{background:#f7f8fa;padding:12px;border-radius:10px}.review-card small,.review-card strong{display:block}.review-card small{color:#777;margin-bottom:4px}.review-card .accepted-box{grid-column:1/-1;background:#ecfdf3;border:1px solid #bbf7d0;color:#166534;font-weight:700}.success-box{padding:16px;border-radius:12px;background:#ecfdf3;border:1px solid #bbf7d0;color:#166534;margin-top:15px}.field-help{display:block;color:#777;font-size:12px;margin-top:4px}@media(max-width:600px){.application-wizard{padding:18px!important}.review-card{grid-template-columns:1fr}.review-card .accepted-box{grid-column:auto}.wizard-actions{flex-direction:column-reverse}.wizard-actions button{width:100%}.terms-box{max-height:280px}}


/* V31 — solicitud de plaza: modo claro y legibilidad */
.application-page{background:#f4f5f7!important;color:#202124!important}
.application-page .application-wizard{background:#fff!important;color:#202124!important;border:1px solid #d9dde3!important;box-shadow:0 12px 35px rgba(0,0,0,.10)!important}
.application-page h1,.application-page h2,.application-page h3,.application-page b,.application-page strong{color:#202124!important}
.application-page p,.application-page .muted,.application-page small{color:#5f6368!important}
.application-page label{color:#303134!important}
.application-page input,.application-page select,.application-page textarea{background:#fff!important;color:#202124!important;border:1px solid #c9ced6!important}
.application-page input::placeholder,.application-page textarea::placeholder{color:#8a9098!important}
.application-page .terms-box{background:#fff!important;color:#303134!important;border:1px solid #c9ced6!important}
.application-page .terms-box h3{color:#202124!important}
.application-page .terms-box li{color:#303134!important}
.application-page .terms-check{background:#fff!important;color:#202124!important;border:1px solid #c9ced6!important}
.application-page .terms-check span{color:#303134!important}
.application-page .review-card>div{background:#f7f8fa!important;color:#202124!important}
.application-page .review-card small{color:#6b7078!important}
.application-page .review-card strong{color:#202124!important}
.application-page .wizard-progress span{background:#fff!important;color:#555!important;border-color:#c9ced6!important}
.application-page .wizard-progress span.on{background:#202124!important;color:#fff!important;border-color:#202124!important}
.application-page .wizard-progress i{background:#c9ced6!important}
.application-page .field-help{color:#6b7078!important}
.application-page .success-box{background:#ecfdf3!important;color:#166534!important;border-color:#bbf7d0!important}
.application-page .error{background:#fef2f2!important;color:#991b1b!important;border:1px solid #fecaca!important;padding:10px;border-radius:8px}
.application-page .secondary{background:#fff!important;color:#202124!important;border:1px solid #bfc5ce!important}
.application-page .primary{color:#fff!important}
@media(max-width:600px){.application-page{padding:10px!important}.application-page .application-wizard{padding:18px!important}.application-page .terms-box{font-size:14px;line-height:1.5}}


/* V32 — sistema visual profesional */
:root{--cp-bg:#f5f6f8;--cp-card:#fff;--cp-text:#17191c;--cp-muted:#68707a;--cp-border:#dfe3e8;--cp-accent:#111827;--cp-shadow:0 10px 30px rgba(16,24,40,.08)}
body{background:var(--cp-bg);color:var(--cp-text)}
.panel,.card,.modalbox,.modal,.loginbox,.application-wizard{border:1px solid var(--cp-border);box-shadow:var(--cp-shadow);border-radius:16px}
form label{display:block;font-weight:700;color:#30343a;margin-bottom:14px}
form label small{font-weight:400}
input,select,textarea{border:1px solid #cbd1d8!important;border-radius:10px!important;background:#fff!important;color:#17191c!important;padding:11px 12px!important;outline:none;transition:border-color .15s,box-shadow .15s}
input:focus,select:focus,textarea:focus{border-color:#59636f!important;box-shadow:0 0 0 3px rgba(17,24,39,.08)!important}
button{border-radius:10px!important;font-weight:700;transition:transform .08s,box-shadow .15s,opacity .15s}
button:hover{box-shadow:0 4px 12px rgba(0,0,0,.10)}
button:active{transform:translateY(1px)}
button:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}
.titlebar{margin-bottom:18px}
.titlebar h2{margin-bottom:4px}
.row{border-bottom:1px solid #edf0f2}
.badge{border-radius:999px;padding:5px 9px;font-weight:800}
.notice{padding:13px 14px;border-radius:10px;background:#f3f4f6;border:1px solid #e1e5e9;color:#454b53;margin:10px 0}
.error{border-radius:10px;padding:10px 12px}
.success{border-radius:10px;padding:10px 12px}
.modal-head{padding-bottom:14px;border-bottom:1px solid #edf0f2;margin-bottom:16px}
.modal-head h3{margin:0}
.actions{display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap;margin-top:18px}
.actions button{min-width:130px}
@media(max-width:640px){form label{margin-bottom:12px}.actions{display:grid;grid-template-columns:1fr}.actions button{width:100%}.titlebar{gap:10px}}


/* V33 — aforo máximo 10 por grupo */
.capacity-card strong{font-size:24px}.capacity-card{min-width:0}.application-page select option:disabled{color:#8b9098}@media(max-width:640px){.capacity-card strong{font-size:22px}}


/* V34 — Bizum */
.bizum-card .bizum-destination{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:14px 16px;margin:10px 0 16px;border:1px solid #dfe3e8;border-radius:12px;background:#f7f8fa}.bizum-destination strong{font-size:22px;letter-spacing:.04em}.bizum-destination small{width:100%;color:#68707a}.bizum-help{display:block;margin-top:10px;line-height:1.5}.bizum-card #bizumDone{margin-left:8px}@media(max-width:640px){.bizum-card #bizumDone{margin-left:0;margin-top:8px;width:100%}.bizum-card #openBizum{width:100%}.bizum-destination{flex-direction:column;align-items:flex-start}}


/* V35 — centro de avisos */
.alerts-panel{margin-bottom:18px}.section-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.section-head h3{margin:0}.alert-row{display:flex;align-items:center;gap:10px;padding:11px 12px;border:1px solid #e2e6ea;border-radius:10px;margin-top:8px;background:#fff}.alert-icon{font-size:19px}.alert-row>span:nth-child(2){flex:1}.alert-row.danger{border-left:4px solid #b42318}.alert-row.warn{border-left:4px solid #b54708}.alert-row.info{border-left:4px solid #175cd3}.alert-go,.alert-student{min-width:70px!important}@media(max-width:600px){.alert-row{align-items:flex-start;flex-wrap:wrap}.alert-row>span:nth-child(2){min-width:calc(100% - 40px)}.alert-go,.alert-student{width:100%}}


/* V36 — acceso y sesión */
.loginbox{color:#17191c}.loginbox h1,.loginbox h2{color:#17191c}.loginbox label{color:#30343a}.loginbox input{background:#fff;color:#17191c}@media(max-width:640px){.loginbox{width:100%}}


/* V37 — Bizum y pago en efectivo */
.bizum-card .bizum-destination{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:14px 16px;margin:10px 0 16px;border:1px solid #dfe3e8;border-radius:12px;background:#f7f8fa}.bizum-destination strong{font-size:23px;letter-spacing:.04em}.bizum-destination small{width:100%;color:#68707a}.cash-option{display:flex;flex-direction:column;gap:4px;padding:13px 15px;margin-top:14px;border:1px solid #e2e6ea;border-radius:12px;background:#fff}.cash-option span{color:#68707a;font-size:13px;line-height:1.45}.bizum-help{display:block;margin-top:10px;line-height:1.5}@media(max-width:640px){.bizum-card #bizumDone{width:100%}.bizum-destination{flex-direction:column;align-items:flex-start}}


/* V38 — confirmación visible de pagos */
.payment-confirmed-box{display:flex;flex-direction:column;gap:4px;margin-top:12px;padding:15px 16px;border-radius:12px;background:#ecfdf3;border:1px solid #86efac;color:#166534}.payment-confirmed-box b{font-size:15px}.payment-confirmed-box span{font-weight:600}.payment-confirmed-box small{color:#4b7a5b}


/* V39 — ficha y listado profesional */
.professional-student{display:flex;justify-content:space-between;align-items:center;gap:18px;padding:16px 18px!important;border:1px solid #e1e5ea;border-radius:15px!important;background:#fff;margin-bottom:10px;box-shadow:0 4px 16px rgba(16,24,40,.05)}.student-main{display:flex;align-items:flex-start;gap:12px;min-width:0}.student-avatar{width:42px;height:42px;display:grid;place-items:center;background:#f0f2f5;border-radius:12px;font-size:21px;flex:0 0 auto}.student-name{font-size:17px;font-weight:800;margin-bottom:5px}.student-chips{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:5px}.student-chips span{font-size:12px;padding:4px 8px;border-radius:999px;background:#f1f3f5;color:#4b525a}.ficha-section{border:1px solid #e4e7eb!important;border-radius:14px!important;background:#fff;padding:16px!important}.ficha-sections{gap:12px!important}@media(max-width:760px){.professional-student{align-items:stretch;flex-direction:column}.student-actions{display:grid;grid-template-columns:1fr 1fr;width:100%}.student-actions button{width:100%}}


/* V40 — estadísticas y ocupación */
.stats-panel{margin-bottom:18px;padding:18px;border:1px solid #e1e5ea;border-radius:16px;background:#fff;box-shadow:0 4px 16px rgba(16,24,40,.05)}.stats-heading{display:flex;justify-content:space-between;align-items:end;margin-bottom:14px}.stats-heading h2{margin:3px 0 0}.stat-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.stat-card{padding:14px;border:1px solid #e5e7eb;border-radius:12px;background:#f8f9fa}.stat-card small{display:block;color:#69717a;margin-bottom:5px}.stat-card strong{font-size:25px}.group-stats{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px}.group-stat{padding:15px;border:1px solid #e5e7eb;border-radius:12px}.group-stat-top{display:flex;justify-content:space-between;gap:10px;margin-bottom:10px}.capacity-bar{height:9px;border-radius:999px;background:#e9ecef;overflow:hidden}.capacity-bar i{display:block;height:100%;background:currentColor;border-radius:999px}.group-stat small{display:block;margin-top:8px;color:#69717a}.stats-foot{display:flex;justify-content:space-between;gap:10px;margin-top:12px;padding-top:12px;border-top:1px solid #e5e7eb;color:#5f6872;font-size:13px}@media(max-width:800px){.stat-cards{grid-template-columns:1fr 1fr}.group-stats{grid-template-columns:1fr}}@media(max-width:520px){.stats-heading{align-items:flex-start;flex-direction:column;gap:5px}.stat-cards{grid-template-columns:1fr}.stats-foot{flex-direction:column}}


/* V41 — resultado QR y control de aforo */
.access-result{min-height:180px}.access-result b{font-size:26px;display:inline-block;margin-bottom:8px}.access-result strong{font-size:22px}.access-result small{font-size:14px;line-height:1.5}.qr-result{padding:20px;border-radius:16px;text-align:center}.qr-result.allowed{border:2px solid #16a34a;background:#f0fdf4}.qr-result.denied{border:2px solid #dc2626;background:#fef2f2}@media(max-width:600px){.access-result b{font-size:22px}.access-result strong{font-size:19px}}


/* V42 — asistencia y calendario */
.attendance-tools{margin-bottom:14px}.attendance-filters{display:grid;grid-template-columns:180px 220px 1fr;gap:12px}.attendance-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px}.attendance-summary>div{padding:14px;border:1px solid #e5e7eb;border-radius:12px;background:#f8f9fa}.attendance-summary b,.attendance-summary span{display:block}.attendance-summary b{font-size:25px}.attendance-summary span{color:#69717a;font-size:13px}.attendance-row{display:flex;align-items:center;gap:12px;padding:12px;border:1px solid #e5e7eb;border-radius:12px;margin-bottom:8px}.att-avatar{width:38px;height:38px;display:grid;place-items:center;border-radius:10px;background:#f1f3f5}.att-info{flex:1;min-width:0}.att-info strong,.att-info span{display:block}.att-info span{color:#69717a;font-size:13px;margin-top:3px}.manual-attendance{margin-top:14px}.manual-form{display:flex;gap:10px}.manual-form select{flex:1}@media(max-width:700px){.attendance-filters{grid-template-columns:1fr}.attendance-summary{grid-template-columns:1fr 1fr 1fr}.attendance-row{align-items:flex-start;flex-wrap:wrap}.attendance-row .danger{width:100%}.manual-form{flex-direction:column}.manual-form button{width:100%}}@media(max-width:450px){.attendance-summary{grid-template-columns:1fr}}


/* V43 — pagos */
.payment-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:14px}.payment-kpis>div{padding:15px;border:1px solid #e5e7eb;border-radius:12px;background:#fff}.payment-kpis small,.payment-kpis b{display:block}.payment-kpis small{color:#69717a}.payment-kpis b{font-size:22px;margin-top:5px}.payment-columns{display:grid;grid-template-columns:1.4fr 1fr;gap:14px}.section-title{display:flex;justify-content:space-between;align-items:center;gap:10px}.payment-request{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:13px 0;border-bottom:1px solid #e5e7eb}.payment-request:last-child{border-bottom:0}.payment-request strong,.payment-request span{display:block}.payment-request span{font-size:13px;color:#69717a;margin-top:3px}.payment-request button{margin-left:5px}.payment-alert{padding:13px;border-radius:10px;margin-top:8px}.payment-alert.warn{background:#fff7ed}.payment-alert.bad{background:#fef2f2}.payment-alert.ok{background:#f0fdf4}.payment-line{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid #e5e7eb}.payment-line:last-child{border-bottom:0}.payment-line strong,.payment-line span{display:block}.payment-line span{font-size:13px;color:#69717a;margin-top:3px}.payment-right{text-align:right}.payment-right b{display:block;margin-bottom:5px}.payment-right .badge{font-size:11px}.badge.warn{background:#fff7ed;color:#9a3412}.badge.bad{background:#fef2f2;color:#b91c1c}@media(max-width:800px){.payment-kpis{grid-template-columns:1fr 1fr}.payment-columns{grid-template-columns:1fr}.payment-request,.payment-line{align-items:flex-start;flex-direction:column}.payment-request button{margin:7px 5px 0 0}.payment-right{text-align:left}}
@media(max-width:480px){.payment-kpis{grid-template-columns:1fr}}


/* V44 — área alumno + cambios de grupo */
.group-change-card{border:1px solid #e1e5ea}.group-request{display:flex;justify-content:space-between;align-items:center;gap:15px;padding:14px 0;border-bottom:1px solid #e5e7eb}.group-request:last-child{border-bottom:0}.group-request strong,.group-request span,.group-request small{display:block}.group-request span{margin-top:4px}.group-request small{margin-top:5px;color:#69717a}.group-request button{margin-left:5px}@media(max-width:650px){.group-request{align-items:flex-start;flex-direction:column}.group-request button{margin:8px 5px 0 0;width:100%}}


/* V45 — tiempo real */
.realtime-toast{position:fixed;right:18px;bottom:18px;z-index:9999;background:#111827;color:#fff;padding:11px 15px;border-radius:12px;box-shadow:0 8px 28px rgba(0,0,0,.18);font-size:13px;opacity:0;transform:translateY(10px);pointer-events:none;transition:opacity .18s ease,transform .18s ease}.realtime-toast.show{opacity:1;transform:translateY(0)}@media(max-width:600px){.realtime-toast{left:14px;right:14px;bottom:14px;text-align:center}}


/* V46 — centro de notificaciones */
#realtimeNotificationBell{position:fixed;top:16px;right:78px;z-index:10000}.notification-wrap{position:relative}.notification-bell{position:relative;width:44px;height:44px;border:1px solid #e1e5ea;border-radius:12px;background:#fff;box-shadow:0 4px 16px rgba(0,0,0,.10);font-size:20px;cursor:pointer}.notification-count{position:absolute;right:-5px;top:-5px;min-width:19px;height:19px;padding:0 5px;border-radius:10px;background:#dc2626;color:#fff;font-size:11px;font-weight:700;display:grid;place-items:center}.notification-panel{position:absolute;right:0;top:52px;width:min(390px,calc(100vw - 28px));background:#fff;border:1px solid #e1e5ea;border-radius:14px;box-shadow:0 16px 45px rgba(0,0,0,.18);overflow:hidden}.notification-head{padding:12px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #e5e7eb}.notification-head .secondary{font-size:11px;padding:6px 8px}.notification-item{width:100%;display:flex;gap:10px;text-align:left;padding:12px;border:0;border-bottom:1px solid #f0f1f2;background:#fff;cursor:pointer}.notification-item.read{opacity:.55}.notification-icon{font-size:20px}.notification-item b,.notification-item small{display:block}.notification-item small{margin-top:4px;color:#69717a;font-size:11px}@media(max-width:600px){#realtimeNotificationBell{top:10px;right:62px}.notification-panel{right:-10px}}


/* V47 — notificaciones persistentes */
.portal-notifications{margin-bottom:16px}.student-notification{display:flex;gap:10px;align-items:flex-start;padding:10px 0;border-bottom:1px solid #eef0f2}.student-notification:last-child{border-bottom:0}.student-notification span{font-size:20px}.student-notification b,.student-notification small{display:block}.student-notification small{margin-top:3px;color:#69717a;font-size:11px}


/* V48 — notificaciones por tipo de usuario */
.portal-notification-wrap{position:relative;display:inline-flex}.portal-bell{position:relative}.portal-bell .notification-count{right:-3px;top:-5px}.notification-item{transition:background .15s ease}.notification-item:hover{background:#f6f7f9}


/* V49 — avisos del club */
.announcement-admin{margin-bottom:18px}.announcement-admin .form-grid{display:grid;grid-template-columns:2fr 1fr;gap:12px}.announcement-admin .form-grid .full{grid-column:1/-1}.announcement-admin textarea{width:100%;resize:vertical}.announcement-list{margin-top:16px;display:grid;gap:8px}.announcement-row{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;padding:12px;border:1px solid #e5e7eb;border-radius:12px;border-left:4px solid #9ca3af}.announcement-row.important,.student-announcement.important{border-left:4px solid #d97706}.announcement-row.urgent,.student-announcement.urgent{border-left:4px solid #dc2626}.announcement-row p,.student-announcement p{margin:5px 0}.announcement-row small,.student-announcement small{color:#69717a;font-size:11px}.portal-announcements{margin-bottom:16px}.student-announcement{padding:11px 0;border-bottom:1px solid #eef0f2}.student-announcement:last-child{border-bottom:0}@media(max-width:650px){.announcement-admin .form-grid{grid-template-columns:1fr}.announcement-admin .form-grid .full{grid-column:auto}.announcement-row{flex-direction:column}}

/* V50 */
.announcement-admin{margin-bottom:18px}.announcement-admin .form-grid{display:grid;grid-template-columns:2fr 1fr;gap:12px}.announcement-admin .form-grid .full{grid-column:1/-1}.announcement-list{display:grid;gap:8px;margin-top:16px}.announcement-row{display:flex;justify-content:space-between;gap:12px;padding:12px;border:1px solid #e5e7eb;border-radius:12px}.announcement-row.important,.student-announcement.important{border-left:4px solid #d97706}.announcement-row.urgent,.student-announcement.urgent{border-left:4px solid #dc2626}.student-announcement{padding:10px 0;border-bottom:1px solid #eef0f2}.portal-announcements{margin-bottom:16px}@media(max-width:650px){.announcement-admin .form-grid{grid-template-columns:1fr}.announcement-admin .form-grid .full{grid-column:auto}.announcement-row{flex-direction:column}}

/* V51 — dashboard operativo */
.operational-panel{margin-bottom:18px}.operational-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:14px 0}.op-box{display:flex;align-items:center;gap:10px;padding:13px;border:1px solid #e5e7eb;border-radius:12px;background:#fff}.op-box>span{font-size:22px}.op-box b,.op-box small{display:block}.op-box b{font-size:22px}.op-box small{color:#69717a;margin-top:2px}.today-groups{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.today-group{display:flex;justify-content:space-between;align-items:center;padding:12px;border:1px solid #e5e7eb;border-radius:12px}.today-group span{display:block;color:#69717a;font-size:12px;margin-top:3px}.today-group strong{font-size:20px}.dashboard-quick{margin-top:14px}@media(max-width:850px){.operational-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:560px){.operational-grid,.today-groups{grid-template-columns:1fr}.dashboard-quick{display:grid;grid-template-columns:1fr 1fr}.dashboard-quick button{width:100%}}


/* V52 — control de cuotas */
.quota-admin{margin-bottom:18px}.quota-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:14px 0}.quota-cards>div{padding:13px;border:1px solid #e5e7eb;border-radius:12px}.quota-cards b,.quota-cards span{display:block}.quota-cards b{font-size:22px}.quota-cards span{font-size:12px;color:#69717a}.quota-list{display:grid;gap:7px}.quota-row{display:flex;justify-content:space-between;align-items:center;padding:10px 12px;border:1px solid #e5e7eb;border-left:4px solid #9ca3af;border-radius:10px}.quota-row small{display:block;color:#69717a;margin-top:3px}.quota-row.soon{border-left-color:#d97706}.quota-row.critical{border-left-color:#dc2626}.quota-row.expired{border-left-color:#7f1d1d}.student-quota{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.student-quota h3{margin:0 0 5px}.student-quota small{display:block;color:#69717a;margin-top:4px}.student-quota span{font-size:24px}.student-quota.soon{border-left:4px solid #d97706}.student-quota.critical{border-left:4px solid #dc2626}.student-quota.expired{border-left:4px solid #7f1d1d}@media(max-width:700px){.quota-cards{grid-template-columns:repeat(2,1fr)}.quota-row{align-items:flex-start;gap:10px}}


/* V53 — grupos y lista de espera */
.groups-admin{margin-bottom:18px}.group-capacities{display:grid;grid-template-columns:1fr 1fr;gap:12px}.group-capacity{display:flex;justify-content:space-between;align-items:center;padding:15px;border:1px solid #e5e7eb;border-radius:13px;border-left:4px solid #16a34a}.group-capacity.full{border-left-color:#dc2626}.group-capacity h3{margin:0 0 5px;font-size:14px}.group-capacity strong{font-size:26px}.group-capacity small{display:block;color:#69717a;margin-top:2px}.group-capacity span{font-size:24px}.waitlist-box{margin-top:16px}.waitlist-box h3{margin-bottom:9px}.wait-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 12px;border:1px solid #e5e7eb;border-radius:10px;margin-bottom:7px}.wait-row small{display:block;color:#69717a;margin-top:3px}@media(max-width:650px){.group-capacities{grid-template-columns:1fr}.wait-row{align-items:flex-start;flex-direction:column}}


/* V54 — estadísticas de asistencia */
.attendance-dashboard{margin-bottom:18px}.attendance-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:14px 0}.attendance-metrics>div{padding:13px;border:1px solid #e5e7eb;border-radius:12px}.attendance-metrics b,.attendance-metrics span{display:block}.attendance-metrics b{font-size:22px}.attendance-metrics span{font-size:12px;color:#69717a}.attendance-columns{display:grid;grid-template-columns:1fr 1fr;gap:18px}.attendance-columns h3{font-size:14px}.attendance-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:9px 11px;border:1px solid #e5e7eb;border-radius:10px;margin-bottom:7px}.attendance-row small{display:block;color:#69717a;margin-top:2px}.attendance-row.warning{border-left:4px solid #d97706}.student-attendance{margin-bottom:16px}.student-attendance-main{display:flex;align-items:baseline;gap:10px}.student-attendance-main strong{font-size:30px}.student-attendance-main span{color:#69717a}.attendance-bar{height:8px;background:#e5e7eb;border-radius:8px;overflow:hidden;margin-top:10px}.attendance-bar i{display:block;height:100%;background:currentColor;border-radius:8px}@media(max-width:700px){.attendance-metrics{grid-template-columns:repeat(2,1fr)}.attendance-columns{grid-template-columns:1fr}}


/* V55 — ficha profesional del alumno */
.student-profile-modal{position:fixed;inset:0;background:rgba(0,0,0,.48);z-index:9999;display:flex;align-items:center;justify-content:center;padding:18px}.student-profile-card{position:relative;width:min(760px,100%);max-height:92vh;overflow:auto;background:#fff;border-radius:18px;padding:22px;box-shadow:0 18px 55px rgba(0,0,0,.2)}.profile-close{position:absolute;right:14px;top:10px;border:0;background:transparent;font-size:30px;cursor:pointer}.profile-head{display:flex;align-items:center;gap:14px;padding-right:35px}.profile-avatar{width:58px;height:58px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:#eef0f2;font-size:25px;font-weight:700}.profile-head h2{margin:0}.profile-head p{margin:4px 0;color:#69717a}.profile-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:20px 0}.profile-grid>div{padding:12px;border:1px solid #e7e9ec;border-radius:12px}.profile-grid span{display:block;font-size:11px;color:#69717a;margin-bottom:4px}.profile-grid b{font-size:13px}.profile-section{margin-top:18px}.profile-section h3{font-size:14px}.profile-line{display:flex;justify-content:space-between;gap:10px;padding:9px 11px;border:1px solid #e7e9ec;border-radius:9px;margin-bottom:6px}.profile-line small{display:block;color:#69717a;margin-top:2px}.profile-btn{margin-left:auto}@media(max-width:700px){.student-profile-modal{padding:8px}.student-profile-card{padding:17px}.profile-grid{grid-template-columns:repeat(2,1fr)}}


/* V56 — control de acceso */
.qr-scanner-card{margin-bottom:18px}.qr-search input{width:100%;margin-bottom:9px}.qr-student-row{width:100%;display:flex;justify-content:space-between;align-items:center;text-align:left;background:#fff;border:1px solid #e5e7eb;border-radius:11px;padding:11px 13px;margin-bottom:6px;cursor:pointer;font:inherit}.qr-student-row:hover{background:#f7f8fa}.qr-student-row small{display:block;color:#69717a;margin-top:3px}.qr-access-result{text-align:center;padding:18px;border-radius:14px;border:2px solid #e5e7eb}.qr-access-result.allowed{border-color:#16a34a}.qr-access-result.denied{border-color:#dc2626}.qr-access-icon{font-size:44px}.qr-access-result h2{margin:5px 0 7px}.qr-access-result p{color:#69717a}.qr-access-details{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:14px 0}.qr-access-details span,.qr-access-details b{padding:9px;border:1px solid #e5e7eb;border-radius:9px}.qr-access-details span{color:#69717a;font-size:12px}.qr-modal{max-width:520px}@media(max-width:600px){.qr-access-details{grid-template-columns:1fr}}

/* V56.7 — notification bell */
.notification-count{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;border-radius:9px;font-size:10px;font-weight:800;margin-left:3px;vertical-align:top}

.student-qr-content{display:flex;gap:24px;align-items:center;justify-content:center;flex-wrap:wrap}
.student-qr-content #studentQr{background:#fff;padding:14px;border-radius:14px;min-width:238px;min-height:238px;display:flex;align-items:center;justify-content:center}
.student-qr-info{max-width:360px}
.student-qr-info p{margin:.35rem 0}
.student-qr-card:fullscreen{padding:30px;display:flex;flex-direction:column;justify-content:center;align-items:center;background:#fff}

.student-greeting{margin-bottom:16px;text-align:left}
.student-greeting-title{font-size:1.45rem;font-weight:800;line-height:1.2}
.student-greeting-subtitle{margin-top:4px;opacity:.75}

.access-log-panel{overflow:hidden}
.access-log-row{align-items:center}
.access-log-row>div{display:flex;flex-direction:column;gap:3px}
.badge.bad{background:#fee2e2;color:#991b1b;border-color:#fecaca}

.notification-center-box{max-width:680px}
.notification-center-list{display:flex;flex-direction:column;gap:8px;max-height:55vh;overflow:auto}
.student-notification.unread{border-left:4px solid currentColor}
.student-notification.read{opacity:.72}
.notification-center-icon{font-size:1.35rem;min-width:32px}
.notification-center-list .student-notification{display:flex;align-items:center;gap:12px;padding:12px;border-radius:12px;background:rgba(0,0,0,.035)}
.notification-center-list .student-notification>div{flex:1;display:flex;flex-direction:column;gap:3px}

.payments-admin-panel{overflow:hidden}
.payment-admin-row{align-items:center}
.payment-admin-row>div:first-child{display:flex;flex-direction:column;gap:3px}
.payment-admin-right{display:flex;align-items:center;gap:12px}

.payment-admin-right{flex-wrap:wrap;justify-content:flex-end}
.payment-admin-right .actions{display:flex;gap:5px}
button.small{padding:5px 9px;font-size:.85rem}
button.danger{border:1px solid #fecaca;background:#fee2e2;color:#991b1b}

.bonus-overlap-warning{margin:10px 0;padding:12px;border-radius:10px}
.active-bonus-box,.single-class-box{display:flex;gap:18px;align-items:center;justify-content:space-between;flex-wrap:wrap;padding:14px;border-radius:12px;background:rgba(0,0,0,.035);margin:10px 0}
.active-bonus-box>div,.single-class-box>div:first-child{display:flex;flex-direction:column;gap:3px}
.single-class-history{display:flex;flex-direction:column;gap:4px;font-size:.9rem}
