@import "https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,600;9..144,700&family=Plus+Jakarta+Sans:wght@400;500;600;700&display=swap";:root{--bg:#dfe8e2;--surface:#eef3ef;--surface-strong:#f7faf7;--ink:#14241c;--muted:#4d6458;--line:#c5d4cb;--brand:#1a4d3e;--brand-mid:#246b56;--brand-soft:#d4e8df;--accent:#b8892c;--accent-soft:#f3e6c4;--ok:#1f7a4c;--warn:#a16207;--danger:#b42318;--present:#1f7a4c;--late:#a16207;--absent:#b42318;--shadow:0 12px 28px #14241c1a;--radius:16px;--board-dark:#1a4d3e;--board-light:#d8e6da;color:var(--ink);background:radial-gradient(ellipse 70% 50% at 8% 0%, #b8892c29, transparent 55%), radial-gradient(ellipse 55% 45% at 100% 10%, #1a4d3e24, transparent 50%), linear-gradient(165deg, #eaf1ec 0%, var(--bg) 45%, #d2ddd6 100%);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Plus Jakarta Sans,sans-serif;font-weight:500;line-height:1.5}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{min-width:320px}button,input,select{font:inherit}h1,h2,.brand-name,.stat-value,.login-hero-title{letter-spacing:-.02em;font-family:Fraunces,Georgia,serif;font-weight:700}h1{margin:0;font-size:clamp(1.75rem,2vw,2.2rem)}h2{margin:0 0 1rem;font-size:1.1rem}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.app-shell{grid-template-columns:260px 1fr;min-height:100vh;display:grid}.sidebar{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:linear-gradient(#f7faf7f7,#dfe8e2f0),repeating-linear-gradient(-45deg,#0000,#0000 10px,#1a4d3e05 10px 11px);border-right:1px solid #c5d4cbf2;flex-direction:column;gap:2rem;padding:1.5rem 1.15rem;display:flex}.brand{align-items:center;gap:.85rem;padding:.35rem .5rem;display:flex}.brand-mark{background:linear-gradient(135deg, var(--brand) 0%, var(--brand-mid) 55%, #0f3329 120%), repeating-conic-gradient(#1a4d3e 0% 25%, #c8dcc9 0% 50%) 50% / 12px 12px;background-blend-mode:soft-light, normal;border-radius:.75rem;flex-shrink:0;width:2.4rem;height:2.4rem;position:relative;overflow:hidden;box-shadow:inset 0 0 0 1px #ffffff2e}.brand-logo{object-fit:cover;border:1px solid var(--line);border-radius:.75rem;flex-shrink:0;width:2.4rem;height:2.4rem}.brand-mark:after{content:"♞";color:#f3e6c4;place-items:center;font-size:1.15rem;line-height:1;display:grid;position:absolute;inset:0}.brand-name{color:var(--ink);margin:0;font-size:1.05rem;line-height:1.25}.brand-tag,.sidebar-note,.muted,.stat-label,.stat-sub,.nav-hint{color:var(--muted);margin:0}.brand-tag,.nav-hint,.stat-label,.sidebar-note,.compact{font-size:.84rem}.nav{flex-direction:column;gap:.4rem;display:flex}.nav-item{width:100%;color:var(--ink);text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:14px;flex-direction:column;align-items:flex-start;gap:.15rem;padding:.85rem .95rem;transition:background .18s,border-color .18s,transform .18s,box-shadow .18s;display:flex}.nav-item:hover{background:#ffffffb3;border-color:#c5d4cbf2;transform:translate(3px)}.nav-item.is-active{background:var(--surface-strong);box-shadow:var(--shadow);border-color:#1a4d3e38;transform:translate(4px)}.nav-item.is-active .nav-label{color:var(--brand)}.nav-label{font-weight:700}.sidebar-foot{background:linear-gradient(135deg,#1a4d3e1a,#b8892c14);border:1px solid #1a4d3e1f;border-radius:16px;margin-top:auto;padding:1rem}.sidebar-stat{margin:0 0 .25rem;font-weight:700}.main{padding:1.5rem}.panel{animation:.36s cubic-bezier(.22,1,.36,1) rise}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.panel-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:1.25rem;display:flex}.stat-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:1rem;margin-bottom:1.25rem;display:grid}.stat-grid.parent-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.stat-card,.form-card,.table-wrap,.attendance-row{background:var(--surface-strong);border-radius:var(--radius);box-shadow:var(--shadow);border:1px solid #c5d4cbf2}.stat-card{padding:1.15rem 1.2rem;transition:transform .2s,box-shadow .2s,border-color .2s}.stat-card:hover{border-color:#1a4d3e47;transform:translateY(-3px);box-shadow:0 16px 32px #14241c1f}.stat-value{margin:.35rem 0 .7rem;font-size:2rem}.stat-value.accent{color:var(--accent)}.link-btn{color:var(--brand-mid);cursor:pointer;background:0 0;border:0;padding:0;font-weight:700}.link-btn:hover{color:var(--brand);text-decoration:underline}.table-wrap{overflow:auto}table{border-collapse:collapse;width:100%}th,td{text-align:left;border-bottom:1px solid var(--line);white-space:nowrap;padding:.95rem 1rem}th{letter-spacing:.04em;text-transform:uppercase;color:var(--muted);background:linear-gradient(#e8f0ea,#e2ebe4);font-size:.78rem}tbody tr:last-child td{border-bottom:0}tbody tr{transition:background .16s,transform .16s}tbody tr:hover{background:#d4e8df73}.name-cell{font-weight:700}.empty-cell{color:var(--muted);text-align:center;padding:2rem 1rem!important}.pill{background:var(--brand-soft);color:var(--brand);border-radius:8px;align-items:center;padding:.2rem .55rem;font-size:.85rem;font-weight:700;display:inline-flex}.pill.renewal-pending{color:#a16207;background:#b8892c2e}.checkbox-row{color:var(--ink);align-items:center;gap:.55rem;margin-bottom:.9rem;font-weight:600;flex-direction:row!important;display:flex!important}.checkbox-row input{width:auto;margin:0}.text-ok{color:var(--ok);font-weight:700}.text-warn{color:var(--warn);font-weight:700}.form-card{margin-bottom:1.25rem;padding:1.2rem;transition:border-color .18s,box-shadow .18s}.form-card:focus-within{border-color:#1a4d3e59;box-shadow:0 14px 30px #14241c1a}.form-row{grid-template-columns:repeat(3,minmax(0,1fr));gap:.9rem;display:grid}label{color:var(--muted);flex-direction:column;gap:.4rem;margin-bottom:.9rem;font-size:.9rem;font-weight:600;display:flex}input,select{border:1px solid var(--line);width:100%;color:var(--ink);background:#fafcfb;border-radius:12px;padding:.75rem .85rem;transition:border-color .16s,box-shadow .16s,background .16s}input:hover,select:hover{border-color:#1a4d3e59}input:focus,select:focus{border-color:var(--brand);background:#fff;outline:2px solid #1a4d3e33}.search{min-width:min(260px,100%);margin:0}.form-actions{flex-wrap:wrap;gap:.65rem;display:flex}.form-error{color:var(--danger);margin:0 0 .8rem;font-weight:600}.form-success{color:var(--ok);margin:0 0 .8rem;font-weight:600}.banner-error{border-radius:var(--radius);background:#fff5f5;border:1px solid #b4231840;flex-direction:column;align-items:flex-start;gap:.75rem;padding:1.25rem;display:flex}.banner-error p{margin:0}.add-student-form{max-width:640px}.form-row.two-col{grid-template-columns:repeat(2,minmax(0,1fr))}.btn{background:var(--brand-soft);color:var(--ink);cursor:pointer;border:1px solid #0000;border-radius:12px;justify-content:center;align-items:center;padding:.7rem 1rem;font-weight:700;transition:transform .16s,background .16s,border-color .16s,box-shadow .16s;display:inline-flex}.btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 8px 16px #14241c1f}.btn:active:not(:disabled){transform:translateY(0)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:linear-gradient(135deg, var(--brand-mid), var(--brand));color:#fff}.btn.primary:hover:not(:disabled){background:linear-gradient(135deg, #2a7a62, var(--brand-mid))}.btn.ghost{border-color:var(--line);background:0 0}.btn.small{padding:.4rem .7rem;font-size:.85rem}.btn.danger{color:var(--danger);background:#fdecec}.row-actions{justify-content:flex-end;gap:.4rem;display:flex}.header-controls{flex-wrap:wrap;align-items:end;gap:1rem;display:flex}.date-label{margin:0}.bulk-actions{flex-wrap:wrap;align-items:center;gap:.55rem;margin-bottom:1rem;display:flex}.attendance-list{flex-direction:column;gap:.75rem;display:flex}.attendance-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;padding:1rem 1.15rem;transition:transform .18s,border-color .18s;display:flex}.attendance-row:hover{border-color:#1a4d3e47;transform:translate(3px)}.status-group{flex-wrap:wrap;gap:.45rem;display:flex}.status-btn{border:1px solid var(--line);color:var(--muted);cursor:pointer;background:#fff;border-radius:10px;padding:.5rem .8rem;font-weight:700;transition:background .14s,color .14s,border-color .14s,transform .14s}.status-btn:hover{transform:translateY(-1px)}.status-btn.is-selected.status-present,.btn.status-present{color:var(--present);background:#1f7a4c1f;border-color:#1f7a4c59}.status-btn.is-selected.status-late,.btn.status-late{color:var(--late);background:#b453091f;border-color:#b4530959}.status-btn.is-selected.status-absent,.btn.status-absent{color:var(--absent);background:#b423181a;border-color:#b423184d}.fees-layout{grid-template-columns:minmax(280px,380px) 1fr;align-items:start;gap:1.25rem;display:grid}.fees-layout .form-card{margin-bottom:0}.fee-summary{background:linear-gradient(135deg,#e8f0ea,#eef3ef);border-radius:14px;grid-template-columns:repeat(3,1fr);gap:.75rem;margin-bottom:1rem;padding:.85rem;display:grid}.fee-summary span{margin-bottom:.2rem;font-size:.78rem;display:block}.fee-summary strong{font-size:1rem}@media (width<=1100px){.stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.fees-layout,.form-row{grid-template-columns:1fr}}@media (width<=860px){.app-shell{grid-template-columns:1fr}.sidebar{border-bottom:1px solid #c5d4cbf2;border-right:0;gap:1rem}.nav{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.sidebar-foot{display:none}.main{padding:1rem}}@media (width<=560px){.stat-grid,.nav{grid-template-columns:1fr}th,td{padding:.8rem .7rem}}.btn.icon-btn{width:2.1rem;height:2.1rem;padding:0}.modal-backdrop{z-index:40;background:#14241c7a;place-items:center;padding:1rem;animation:.18s rise;display:grid;position:fixed;inset:0}.modal-card{border-radius:var(--radius);border:1px solid var(--line);background:var(--surface-strong);width:min(480px,100%);max-height:min(80vh,640px);box-shadow:var(--shadow);padding:1.25rem;overflow:auto}.modal-header{justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:1rem;display:flex}.modal-header h2{margin:0}.modal-stats{background:linear-gradient(135deg,#e8f0ea,#eef3ef);border-radius:14px;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem;margin-bottom:1.1rem;padding:.85rem;display:grid}.modal-stats span{margin-bottom:.2rem;font-size:.78rem;display:block}.modal-stats strong{font-size:1.15rem}.modal-subtitle{margin:0 0 .65rem;font-family:Fraunces,Georgia,serif;font-size:.95rem}.class-date-list{flex-direction:column;gap:.45rem;margin:0;padding:0;list-style:none;display:flex}.class-date-list li{border:1px solid var(--line);background:#fafcfb;border-radius:12px;justify-content:space-between;align-items:center;gap:.75rem;padding:.7rem .85rem;display:flex}.status-chip{border-radius:8px;padding:.2rem .55rem;font-size:.8rem;font-weight:700}.status-chip.status-present{color:var(--present);background:#0f766e1f}.status-chip.status-late{color:var(--late);background:#a162071f}.status-chip.status-absent{color:var(--absent);background:#b423181a}.logout-btn{width:100%;margin-top:.65rem}.auth-actions{flex-wrap:wrap;gap:.45rem;margin-top:.65rem;display:flex}.sidebar-foot .auth-actions .btn{flex:1}.top-auth-bar{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#f7faf7d9;border:1px solid #c5d4cbf2;border-radius:14px;justify-content:space-between;align-items:center;gap:.75rem;margin-bottom:1rem;padding:.65rem .85rem;display:flex}.top-auth-bar .auth-actions{margin-top:0}.toast-stack{z-index:60;flex-direction:column;gap:.55rem;max-width:min(360px,100vw - 2rem);display:flex;position:fixed;bottom:1rem;right:1rem}.toast{border:1px solid var(--line);box-shadow:var(--shadow);background:#fff;border-radius:12px;padding:.85rem 1rem;font-weight:600;animation:.18s rise}.toast-success{color:var(--ok);background:#ecfdf5;border-color:#1f7a4c4d}.toast-error{color:var(--danger);background:#fff5f5;border-color:#b4231840}.toast-info{color:var(--brand);background:#e8f0ea;border-color:#1a4d3e40}.login-screen{grid-template-columns:1.15fr minmax(320px,440px);align-items:stretch;gap:0;min-height:100vh;padding:0;display:grid;overflow:hidden}.login-hero{color:#f3f7f4;background:radial-gradient(80% 60% at 30% 20%,#b8892c38,#0000 55%),linear-gradient(160deg,#0f3329 0%,#1a4d3e 42%,#14382e 100%);flex-direction:column;justify-content:flex-end;min-height:100vh;padding:clamp(1.5rem,4vw,3rem);display:flex;position:relative;overflow:hidden}.login-hero-copy{z-index:2;max-width:28rem;animation:.7s cubic-bezier(.22,1,.36,1) rise;position:relative}.login-kicker{letter-spacing:.08em;text-transform:uppercase;color:var(--accent-soft);margin:0 0 .5rem;font-size:.85rem;font-weight:700}.login-hero-title{color:#f7faf7;margin:0 0 .75rem;font-size:clamp(2.4rem,5vw,3.4rem);line-height:1.05}.login-hero-sub{color:#e8f0eae0;margin:0;font-size:1.05rem;line-height:1.55}.login-card{border-radius:var(--radius);background:var(--surface-strong);width:100%;box-shadow:var(--shadow);border:1px solid #c5d4cbf2;align-self:center;margin:1.5rem;padding:1.75rem 1.5rem;animation:.5s cubic-bezier(.22,1,.36,1) 80ms both rise}.login-brand{align-items:center;gap:.85rem;margin-bottom:1.25rem;display:flex}.login-brand h2{margin:0;font-size:1.35rem}.login-submit{width:100%;margin-top:.25rem}.login-hint{border-top:1px solid var(--line);margin-top:1rem;padding-top:.85rem}.chess-scene{z-index:1;pointer-events:none;position:absolute;inset:0}.chess-scene-glow{background:radial-gradient(circle,#b8892c47,#0000 68%);border-radius:50%;width:55%;height:55%;animation:6s ease-in-out infinite glow-pulse;position:absolute;top:8%;right:-8%}.chess-board-stage{aspect-ratio:1;filter:drop-shadow(0 24px 40px #00000059);width:min(380px,52vw);position:absolute;top:50%;right:clamp(4%,8vw,12%);transform:translateY(-58%)rotate(-6deg)}.chess-board-svg{border-radius:12px;width:100%;height:100%;overflow:visible}.piece-glyph{-webkit-user-select:none;user-select:none;font-size:28px}.piece-glyph.light{fill:#f7faf7}.piece-glyph.dark{fill:#0f1f18}.piece{transform-box:fill-box;transform-origin:50%}.piece-knight{animation:5.5s ease-in-out infinite knight-hop}.piece-pawn{animation:7s ease-in-out infinite pawn-march}.piece-queen{animation:8s ease-in-out infinite queen-slide}.piece-rook{animation:9s ease-in-out infinite rook-slide}.piece-bishop{animation:6.5s ease-in-out infinite bishop-slash}.piece-king{animation:4s ease-in-out infinite king-pulse}.move-trail{opacity:0;background:#b8892c59;border-radius:4px;width:10%;height:10%;position:absolute}.move-trail-a{animation:5.5s ease-in-out infinite trail-a;top:62.5%;left:12.5%}.move-trail-b{animation:7s ease-in-out infinite trail-b;top:37.5%;left:37.5%}.floating-pieces{position:absolute;inset:0}.float-piece{color:#f3e6c459;font-size:clamp(1.4rem,2.5vw,2rem);animation:10s ease-in-out infinite float-drift;position:absolute}.fp1{animation-delay:0s;top:18%;left:8%}.fp2{font-size:clamp(1.1rem,2vw,1.5rem);animation-delay:-2.5s;top:42%;left:22%}.fp3{animation-delay:-5s;top:62%;left:6%}.fp4{animation-delay:-7s;top:12%;left:28%}@keyframes glow-pulse{0%,to{opacity:.7;transform:scale(1)}50%{opacity:1;transform:scale(1.08)}}@keyframes knight-hop{0%,12%{transform:translate(0)}28%{transform:translate(-40px,-80px)}44%,58%{transform:translate(40px,-120px)}74%{transform:translateY(-40px)}88%,to{transform:translate(0)}}@keyframes pawn-march{0%,15%{transform:translate(0)}40%{transform:translateY(-80px)}65%{transform:translateY(-160px)}85%,to{transform:translate(0)}}@keyframes queen-slide{0%,20%{transform:translate(0)}45%{transform:translate(80px,80px)}70%{transform:translate(-40px,120px)}90%,to{transform:translate(0)}}@keyframes rook-slide{0%,25%{transform:translate(0)}50%{transform:translateY(-120px)}75%{transform:translate(80px,-120px)}to{transform:translate(0)}}@keyframes bishop-slash{0%,18%{transform:translate(0)}40%{transform:translate(80px,80px)}65%{transform:translate(160px)}85%,to{transform:translate(0)}}@keyframes king-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.92;transform:scale(1.08)}}@keyframes trail-a{0%,20%,to{opacity:0}28%,40%{opacity:.7}}@keyframes trail-b{0%,35%,to{opacity:0}45%,55%{opacity:.55}}@keyframes float-drift{0%,to{transform:translateY(0)rotate(-6deg)}50%{transform:translateY(-18px)rotate(8deg)}}@media (width<=900px){.login-screen{grid-template-columns:1fr;min-height:100vh}.login-hero{min-height:42vh;padding-bottom:2rem}.chess-board-stage{opacity:.85;width:min(240px,48vw);top:42%;right:4%}.login-card{z-index:3;margin:-1.5rem 1rem 1.5rem}.login-hero-title{font-size:clamp(1.9rem,7vw,2.4rem)}}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.cycle-progress{flex-direction:column;gap:.3rem;min-width:150px;margin-bottom:.9rem;display:flex}.cycle-progress.is-compact{min-width:120px;margin-bottom:0}.cycle-progress-label{justify-content:space-between;gap:.5rem;font-size:.82rem;display:flex}.cycle-progress-track{background:var(--brand-soft);border-radius:999px;height:8px;overflow:hidden}.cycle-progress-track span{border-radius:inherit;background:linear-gradient(90deg, var(--brand-mid), var(--brand));height:100%;transition:width .42s cubic-bezier(.22,1,.36,1);display:block}.cycle-progress.is-near .cycle-progress-track span{background:linear-gradient(90deg, #d4a73c, var(--accent))}.cycle-progress.is-complete .cycle-progress-track span{background:linear-gradient(90deg, #d0612f, var(--danger))}.avatar{background:linear-gradient(135deg, var(--brand-mid), var(--brand));color:#fff;border-radius:12px;flex:none;place-items:center;width:2.4rem;height:2.4rem;font-size:.85rem;font-weight:700;display:inline-grid}.avatar-lg{width:3rem;height:3rem;font-size:1rem}.date-nav{align-items:center;gap:.4rem;display:flex}.date-nav input{border:1px solid var(--line);background:#fff;border-radius:10px;padding:.45rem .6rem}.att-summary{grid-template-columns:repeat(4,minmax(0,1fr));gap:.75rem;margin-bottom:1rem;display:grid}.att-summary-item{border:1px solid var(--line);background:var(--surface-strong);border-radius:14px;padding:.8rem 1rem}.att-summary-item span{color:var(--muted);font-size:.8rem;display:block}.att-summary-item strong{font-family:Fraunces,Georgia,serif;font-size:1.6rem}.att-summary-item.status-present strong{color:var(--present)}.att-summary-item.status-late strong{color:var(--late)}.att-summary-item.status-absent strong{color:var(--absent)}.att-summary-bar{background:var(--brand-soft);border-radius:999px;grid-column:1/-1;gap:2px;height:10px;display:flex;overflow:hidden}.att-summary-bar .seg{transition:flex-grow .3s}.att-summary-bar .status-present{background:var(--present)}.att-summary-bar .status-late{background:var(--late)}.att-summary-bar .status-absent{background:var(--absent)}.att-summary-bar .seg-empty{background:0 0}.att-toolbar{flex-wrap:wrap;align-items:center;gap:.75rem;margin-bottom:.75rem;display:flex}.att-toolbar .search{flex:220px;margin:0}.att-toolbar select{border:1px solid var(--line);background:#fff;border-radius:10px;padding:.55rem .7rem}.att-toolbar .bulk-actions{margin:0}.chip-tabs{flex-wrap:wrap;gap:.4rem;margin-bottom:1rem;display:flex}.chip-tab{border:1px solid var(--line);color:var(--muted);cursor:pointer;background:#fff;border-radius:999px;align-items:center;gap:.4rem;padding:.38rem .75rem;font-size:.85rem;font-weight:600;transition:background .14s,color .14s,border-color .14s;display:inline-flex}.chip-tab:hover{border-color:var(--brand-mid);color:var(--brand)}.chip-tab.is-active{background:var(--brand);border-color:var(--brand);color:#fff}.chip-count{text-align:center;background:#14241c14;border-radius:999px;min-width:1.4rem;padding:0 .35rem;font-size:.75rem}.chip-tab.is-active .chip-count{background:#ffffff38}.att-card{flex-direction:column;align-items:stretch}.att-card.is-due{border-left:4px solid var(--accent)}.att-card.is-busy{opacity:.65}.att-main{grid-template-columns:minmax(200px,1.3fr) minmax(180px,1fr) auto;align-items:center;gap:1rem;display:grid}.att-identity{text-align:left;color:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:.75rem;padding:0;display:flex}.att-identity .name-cell{display:block}.att-identity:hover .name-cell{color:var(--brand-mid);text-decoration:underline}.att-meta{display:block}.att-progress{align-items:center;gap:.6rem;display:flex}.att-progress .cycle-progress{flex:1}.class-badge{background:var(--brand-soft);color:var(--brand);white-space:nowrap;border:1px solid #0000;border-radius:8px;flex:none;padding:.25rem .55rem;font-size:.78rem;font-weight:700}.class-badge.is-next{border-color:var(--line);color:var(--muted);background:0 0}.class-badge.is-due{background:var(--accent-soft);color:#7a5a14;cursor:pointer}.status-btn:disabled{cursor:wait}.att-history{border-top:1px dashed var(--line);margin-top:.85rem;padding-top:.75rem;animation:.2s rise}.history-chips{flex-wrap:wrap;gap:.4rem;margin:.4rem 0 0;padding:0;list-style:none;display:flex}.history-chips .status-chip button{color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;padding:0}.history-chips .status-chip.is-current{outline:2px solid}.renewal-layout{grid-template-columns:minmax(280px,360px) 1fr;align-items:start;gap:1.25rem;display:grid}.renewal-list-card .search{width:100%;margin-bottom:.75rem}.renewal-list{flex-direction:column;gap:.4rem;max-height:560px;margin:0;padding:0;list-style:none;display:flex;overflow:auto}.renewal-item{width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:12px;align-items:center;gap:.7rem;padding:.6rem .7rem;transition:background .14s,border-color .14s;display:flex}.renewal-item:hover{background:var(--surface)}.renewal-item.is-selected{background:var(--brand-soft);border-color:#1a4d3e4d}.renewal-item.is-due .avatar{background:linear-gradient(135deg, #d4a73c, var(--accent))}.renewal-item-body{flex-direction:column;flex:1;gap:.25rem;min-width:0;display:flex}.renewal-item-top{justify-content:space-between;gap:.5rem;display:flex}.renew-count{color:var(--muted);font-size:.8rem;font-weight:700}.renewal-detail{flex-direction:column;gap:1.25rem;display:flex}.renewal-detail .form-card{margin-bottom:0}.renewal-detail .fee-summary{grid-template-columns:repeat(4,1fr)}.renewal-head{align-items:center;gap:.85rem;margin-bottom:1rem;display:flex}.renewal-head h2{margin:0}.renewal-head .pill{margin-left:auto}.renewal-form{border-top:1px solid var(--line);flex-direction:column;gap:.6rem;padding-top:.75rem;display:flex}.renewal-form .link-btn{align-self:flex-start;font-size:.85rem}.timeline{margin:0;padding:0 0 0 1.2rem;list-style:none;position:relative}.timeline:before{content:"";background:var(--line);width:2px;position:absolute;top:.5rem;bottom:.5rem;left:.38rem}.timeline-item{justify-content:space-between;gap:1rem;padding:.55rem 0;display:flex;position:relative}.timeline-item p{margin:0}.timeline-dot{border:2px solid var(--brand-mid);background:var(--surface-strong);border-radius:50%;width:.8rem;height:.8rem;position:absolute;top:.85rem;left:-1.2rem}.timeline-item.is-current .timeline-dot{background:var(--accent);border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}.stat-btn{font:inherit;text-align:left;color:inherit;cursor:pointer}.stat-btn.is-active{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft), var(--shadow)}.cycle-block{margin-top:1rem}.cycle-block .modal-subtitle .muted{font-family:Plus Jakarta Sans,sans-serif;font-weight:500}.class-no{min-width:4.6rem;color:var(--brand);margin-right:.5rem;font-weight:700;display:inline-block}@media (width<=1100px){.renewal-layout,.att-main{grid-template-columns:1fr}.renewal-detail .fee-summary{grid-template-columns:repeat(2,1fr)}}@media (width<=560px){.att-summary{grid-template-columns:repeat(2,minmax(0,1fr))}.date-nav{flex-wrap:wrap}}.package-board{margin-top:.5rem}.package-board-hint{margin:0 0 .6rem}.package-columns{grid-auto-columns:minmax(220px,1fr);grid-auto-flow:column;gap:.75rem;padding-bottom:.25rem;display:grid;overflow-x:auto}.package-column{border:1px dashed var(--line);background:var(--surface);border-radius:14px;flex-direction:column;gap:.5rem;min-height:120px;padding:.7rem;transition:border-color .14s,background .14s,box-shadow .14s;display:flex}.package-column.is-current{border-style:solid;border-color:#1a4d3e4d}.package-column.is-drop-target{border:2px dashed var(--accent);background:var(--accent-soft);box-shadow:0 0 0 4px #b8892c26}.package-column-head{justify-content:space-between;align-items:baseline;gap:.5rem;display:flex}.package-empty{text-align:center;border-radius:10px;flex:1;place-items:center;margin:0;display:grid}.package-list{flex-direction:column;gap:.35rem;margin:0;padding:0;list-style:none;display:flex}.package-item{border:1px solid var(--line);border-left:3px solid var(--present);background:#fff;border-radius:10px;align-items:center;gap:.45rem;padding:.4rem .5rem;transition:transform .14s,box-shadow .14s,opacity .14s;display:flex}.package-item[draggable=true]{cursor:grab}.package-item[draggable=true]:hover{transform:translateY(-1px);box-shadow:0 6px 14px #14241c1a}.package-item.status-late{border-left-color:var(--late)}.package-item.status-absent{border-left-color:var(--absent)}.package-item.is-current{outline:2px solid var(--brand-mid);outline-offset:1px}.package-item.is-dragging{opacity:.4}.package-item.is-moving{opacity:.55;pointer-events:none}.drag-handle{color:var(--muted);letter-spacing:-2px;font-size:.8rem}.package-item-body{min-width:0;color:inherit;font:inherit;text-align:left;cursor:inherit;background:0 0;border:0;flex-direction:column;flex:1;padding:0;display:flex}.package-item-body:not(:disabled):hover .class-no{text-decoration:underline}.package-item .class-no{min-width:0;margin:0;font-size:.85rem}.package-item .status-chip{padding:.1rem .4rem}.move-arrows{opacity:0;gap:2px;transition:opacity .14s;display:flex}.package-item:hover .move-arrows,.package-item:focus-within .move-arrows{opacity:1}.move-arrows button{border:1px solid var(--line);background:var(--surface-strong);width:1.4rem;height:1.4rem;color:var(--brand);cursor:pointer;border-radius:6px;padding:0;font-weight:700}.move-arrows button:disabled{opacity:.3;cursor:default}.modal-card:has(.package-board){width:min(760px,100%);max-height:min(88vh,760px)}@media (hover:none){.move-arrows{opacity:1}}.package-column-head .package-delete{width:1.7rem;height:1.7rem;color:var(--muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;place-items:center;margin-left:auto;padding:0;transition:color .14s,background .14s,border-color .14s;display:grid}.package-column-head .package-delete:hover:not(:disabled){color:var(--danger);background:#b4231814;border-color:#b423184d}.package-column-head .package-delete svg{width:14px;height:14px}.package-column.is-deleting{opacity:.5;pointer-events:none}.timeline-actions{align-items:center;gap:.5rem;display:flex}.add-student-panel .panel-header{margin-bottom:.9rem}.add-student-grid{grid-template-columns:minmax(0,1fr) minmax(260px,320px);align-items:start;gap:1.1rem;display:grid}.add-student-grid .form-card{margin-bottom:0}.add-student-form{flex-direction:column;gap:.4rem;max-width:none;display:flex}.form-section{border:0;min-width:0;margin:0;padding:0}.form-section+.form-section{border-top:1px solid var(--line);padding-top:.9rem}.form-section legend{color:var(--ink);align-items:center;gap:.5rem;margin-bottom:.7rem;padding:0;font-family:Fraunces,Georgia,serif;font-size:1rem;font-weight:700;display:flex}.step-dot{background:var(--brand);color:#fff;border-radius:50%;place-items:center;width:1.4rem;height:1.4rem;font-family:Plus Jakarta Sans,sans-serif;font-size:.75rem;display:inline-grid}.add-student-form label,.add-student-form .field{margin-bottom:.7rem}.add-student-form input{padding:.6rem .75rem}.add-row-name{grid-template-columns:minmax(0,1fr) 110px}.add-row-package{grid-template-columns:repeat(3,minmax(0,1fr));align-items:start}.field{flex-direction:column;gap:.4rem;min-width:0;display:flex}.field-label{color:var(--muted);align-items:baseline;gap:.4rem;font-size:.9rem;font-weight:600;display:flex}.field-hint{color:var(--accent);font-size:.72rem;font-weight:600}.segmented{border:1px solid var(--line);background:#fafcfb;border-radius:12px;padding:3px;display:flex}.segmented button{color:var(--muted);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:9px;flex:1;padding:.5rem .4rem;font-size:.86rem;font-weight:600;transition:background .14s,color .14s,box-shadow .14s}.segmented button:hover:not(.is-active){color:var(--brand);background:var(--brand-soft)}.segmented button.is-active{background:var(--brand);color:#fff;box-shadow:0 4px 10px #1a4d3e40}.preset-chips{gap:.3rem;display:flex}.preset-chips button{border:1px solid var(--line);color:var(--muted);font:inherit;cursor:pointer;background:#fff;border-radius:8px;flex:1;padding:.2rem 0;font-size:.78rem;font-weight:700}.preset-chips button.is-active,.preset-chips button:hover{border-color:var(--brand-mid);color:var(--brand);background:var(--brand-soft)}.paid-field{max-width:420px}.input-with-action{gap:.5rem;display:flex}.input-with-action .btn{flex:none}.add-student-form input[aria-invalid=true]{border-color:var(--danger);outline-color:#b4231833}.add-summary{flex-direction:column;gap:.6rem;display:flex;position:sticky;top:1rem}.add-summary-head{border-bottom:1px solid var(--line);align-items:center;gap:.75rem;padding-bottom:.75rem;display:flex}.add-summary-head p{overflow-wrap:anywhere;margin:0}.add-summary-rows{flex-direction:column;gap:.35rem;margin:0;display:flex}.add-summary-rows div{justify-content:space-between;gap:1rem;font-size:.9rem;display:flex}.add-summary-rows dt{color:var(--muted)}.add-summary-rows dd{margin:0;font-weight:700}.add-summary-rows .is-balance{border-top:1px dashed var(--line);padding-top:.4rem;font-size:1rem}.paid-track span{background:linear-gradient(90deg, var(--ok), var(--brand-mid))}.add-summary .compact{margin:0}.add-submit{justify-content:center;width:100%}.text-danger{color:var(--danger)}.save-banner{color:var(--ok);background:#1f7a4c14;border:1px solid #1f7a4c4d;border-radius:12px;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:.9rem;padding:.6rem .9rem;animation:.2s rise;display:flex}.save-banner-actions{align-items:center;gap:.5rem;display:flex}@media (width<=1100px){.add-student-grid{grid-template-columns:1fr}.add-summary{position:static}.add-row-package{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=560px){.add-row-name,.add-row-package,.add-student-form .form-row.two-col{grid-template-columns:1fr}.paid-field{max-width:none}}
