.portal{color:#17244b;background:#f4f5f9;min-height:100vh;font-family:DM Sans,Arial,sans-serif;font-size:16px}.portal *{box-sizing:border-box}.portal-header{background:#fffdf8;border-bottom:1px solid #dddfe7;justify-content:space-between;align-items:center;gap:20px;padding:24px 5vw;display:flex}.portal-brand{align-items:center;gap:12px;font-family:Playfair Display,Georgia,serif;font-size:26px;font-weight:600;display:flex}.portal-brand img{object-fit:contain;flex:none;width:52px;height:52px;display:block}.portal-brand small,.portal-user small{color:#5d657a;margin-top:4px;font-family:DM Sans,Arial,sans-serif;font-size:13px;font-weight:400;display:block}.portal-user{align-items:center;gap:24px;display:flex}.portal h1{letter-spacing:-.03em;margin:0 0 12px;font-family:Playfair Display,Georgia,serif;font-size:clamp(30px,4vw,48px);line-height:1.15}.portal h2{letter-spacing:-.02em;margin:0 0 18px;font-family:Playfair Display,Georgia,serif;font-size:28px;line-height:1.2}.portal h3{margin:0 0 6px;font-size:18px}.portal p{line-height:1.6}.portal button{cursor:pointer;font:inherit;color:#17244b;background:#fff;border:1px solid #b8becd;border-radius:6px;padding:10px 16px;font-size:14px;font-weight:600}.portal button:disabled{opacity:.55;cursor:wait}.portal .primary{color:#fff;background:#17244b;border-color:#17244b}.portal .quiet{background:0 0}:is(.portal a:focus-visible,.portal button:focus-visible,.portal input:focus-visible,.portal textarea:focus-visible,.portal select:focus-visible){outline-offset:3px;outline:3px solid #d98a23}.portal label{flex-direction:column;gap:8px;margin-bottom:18px;font-size:14px;font-weight:600;display:flex}.portal input:not([type=checkbox]),.portal select,.portal textarea{color:#17244b;width:100%;min-height:44px;font:inherit;background:#fff;border:1px solid #b8becd;border-radius:5px;padding:10px 12px;font-size:16px}.portal input[type=checkbox]{accent-color:#17244b;width:20px;height:20px}.portal textarea{resize:vertical;min-height:110px}.portal form{margin-top:20px}.portal-kicker{text-transform:uppercase;letter-spacing:.12em;color:#a85613;margin:0 0 10px;font-size:12px;font-weight:700}.portal .portal-check{flex-direction:row;align-items:flex-start;gap:10px;font-weight:400;line-height:1.5}.portal .portal-check input{flex:0 0 20px;margin:2px 0 0}.login-layout{grid-template-columns:1fr 440px;align-items:center;gap:9%;max-width:1160px;margin:70px auto;padding:0 28px;display:grid}.login-intro h1{font-size:clamp(38px,5vw,65px)}.login-intro>p:not(.portal-kicker){color:#566077;max-width:420px;font-size:18px}.login-intro a{margin-top:28px;text-decoration:underline;display:inline-block}.login-card{background:#fff;border:1px solid #dddfe7;border-top:4px solid #edb849;border-radius:10px;padding:34px;box-shadow:0 16px 50px #17244b0b}.login-card a{overflow-wrap:anywhere;font-size:14px;text-decoration:underline}.login-card .primary{width:100%}.role-picker{background:#f1f2f6;border-radius:6px;grid-template-columns:1fr 1fr;gap:6px;padding:5px;display:grid}.role-picker button{background:0 0;border:0}.role-picker .selected{color:#fff;background:#17244b}.portal-muted{color:#626b7d;font-size:14px}.portal-workspace{max-width:1320px;margin:0 auto;padding:40px 28px 70px}.portal-heading{justify-content:space-between;align-items:center;gap:20px;display:flex}.zone-label{text-align:right;color:#626b7d;font-size:14px}.portal-tabs{flex-wrap:wrap;gap:8px;margin:20px 0 28px;display:flex}.portal-tabs button{background:0 0;border-color:#0000}.portal-tabs .selected{color:#fff;background:#17244b}.portal-stats{grid-template-columns:repeat(3,1fr);gap:18px;margin-bottom:24px;display:grid}.portal-stats>div{background:#fff;border:1px solid #dddfe7;border-radius:8px;padding:22px}.portal-stats strong{margin-bottom:8px;font-size:28px;display:block}.portal-stats span{color:#626b7d;font-size:14px}.portal-panel{background:#fff;border:1px solid #dddfe7;border-radius:8px;margin-bottom:24px;padding:26px}.portal-filters{border-bottom:1px solid #e5e6ec;align-items:end;gap:20px;padding-bottom:20px;display:flex}.portal-filters label{flex:1;margin:0}.portal-filters button{margin-bottom:2px}.lesson{border-bottom:1px solid #e5e6ec;align-items:center;gap:30px;padding:25px 0;display:flex}.lesson:last-child{border:0}.lesson-date{min-width:215px}.lesson-date strong,.lesson-date span{display:block}.lesson-date span{margin-top:8px;font-size:14px}.lesson-detail{flex:1}.lesson p{color:#626b7d;margin:0;font-size:14px}.lesson .moved-label{color:#985015;margin-top:5px}.portal-empty{text-align:center;color:#626b7d;padding:40px 20px}.portal-error{color:#8f2520;background:#fff0ef;border:1px solid #e9bab5;border-radius:6px;margin-bottom:20px;padding:14px}.portal-notice{color:#285a38;background:#eaf4ed;border:1px solid #bfd6c7;border-radius:6px;margin-bottom:20px;padding:14px}.panel-heading{justify-content:space-between;align-items:center;gap:20px;display:flex}.panel-heading p{margin:0}.form-grid{grid-template-columns:1fr 1fr;gap:0 24px;display:grid}.form-grid .wide{grid-column:1/-1}.form-actions,.row-actions{gap:10px;display:flex}.edit-panel{background:#fffaf0;border:1px solid #d8c598;border-radius:8px;margin:24px 0;padding:24px}.record-row{border-bottom:1px solid #e5e6ec;align-items:center;gap:18px;padding:24px 0;display:flex}.record-row>div:first-of-type{flex:1;min-width:0}.record-row p{color:#626b7d;overflow-wrap:anywhere;margin:2px 0;font-size:14px}.record-row h3{overflow-wrap:anywhere}.faculty-photo{object-fit:cover;border-radius:8px;width:64px;height:64px}.batch-timetable{border-top:1px solid #e5e6ec;padding:20px 0}.batch-timetable>div{justify-content:space-between;align-items:center;gap:20px;margin-top:12px;display:flex}.password-panel{max-width:560px;margin:20px auto}.account-grid{grid-template-columns:1fr 1fr;gap:24px;display:grid}.portal-loading{text-align:center;padding:70px}.portal-footer{text-align:center;color:#fff;background:#17244b;padding:22px;font-size:13px;display:block}.portal .day-time-field{border:1px solid #d8c598;border-radius:7px;min-width:0;margin:0 0 18px;padding:16px}.portal .day-time-field legend{padding:0 6px;font-size:14px;font-weight:600}.portal .day-time-field p{color:#626b7d;margin:0 0 12px;font-size:13px}.day-time-rows{gap:8px;display:grid}.day-time-row{border-top:1px solid #e5e6ec;grid-template-columns:minmax(95px,.7fr) 1fr 1fr;align-items:end;gap:14px;padding:8px 0;display:grid}.portal .day-time-row label{margin:0}.portal .day-time-row .day-time-select{flex-direction:row;align-items:center;gap:9px;min-height:44px}.class-view-controls{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px;margin:18px 0;display:flex}.class-view-options{flex-wrap:wrap;gap:7px;display:flex}.portal .class-view-options button{padding:9px 13px}.portal .class-view-options .selected{color:#fff;background:#17244b;border-color:#17244b}.class-calendar{grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;display:grid}.calendar-day{background:#fafbfe;border:1px solid #dde1e9;border-radius:7px;min-width:0;min-height:150px;padding:10px}.portal .calendar-day h3{margin:0 0 10px;font-size:14px}.calendar-event{overflow-wrap:anywhere;background:#fff;border-left:3px solid #c58b34;border-radius:4px;flex-direction:column;gap:4px;margin:0 0 8px;padding:9px;display:flex;box-shadow:0 1px 4px #17244b12}.calendar-event strong,.calendar-event span{font-size:13px;line-height:1.35}.calendar-event small,.calendar-empty{color:#626b7d;font-size:12px;line-height:1.4}.portal .calendar-event button{align-self:start;margin-top:4px;padding:5px 8px;font-size:12px}.portal .batch-select{min-width:210px;margin:0}.portal .danger{color:#8f2520;border-color:#c7837d}.portal .danger:hover{background:#fff0ef}.portal .fee-month-select{min-width:180px;margin:0}.fee-summary{align-items:baseline;gap:14px;padding:16px 0;display:flex}.fee-summary strong,.fee-personal strong{font-size:28px}.fee-summary span,.fee-personal p{color:#626b7d;font-size:14px}.fee-projections{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;display:grid}.fee-projection{background:#fafbfe;border:1px solid #dde1e9;border-radius:7px;flex-direction:column;gap:7px;padding:18px;display:flex}.fee-projection h3{margin:0}.fee-projection p{color:#626b7d;margin:0;font-size:14px}.fee-projection strong{font-size:22px}.fee-projection span{color:#626b7d;font-size:13px}.fee-personal{flex-wrap:wrap;align-items:center;gap:12px;display:flex}.fee-personal p{flex-basis:100%;margin:0}.fee-due,.fee-cleared{border-radius:5px;padding:6px 10px;font-size:14px;font-weight:600}.fee-due{color:#815016;background:#fff1d6}.fee-cleared{color:#285a38;background:#eaf4ed}.fee-students{border-top:1px solid #e5e6ec}.portal .fee-student-row{border-bottom:1px solid #e5e6ec;grid-template-columns:minmax(160px,1.3fr) minmax(130px,.8fr) minmax(120px,.7fr) auto;align-items:end;gap:16px;margin:0;padding:16px 0;display:grid}.fee-student-row>div{align-self:center}.fee-student-row small{color:#626b7d;margin-top:4px;display:block}.portal .fee-student-row label{margin:0}.portal .fee-student-row button{min-height:44px}@media (max-width:1050px){.class-calendar{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (max-width:760px){.portal-header{flex-wrap:wrap;padding:20px}.portal-brand{font-size:23px}.portal-workspace{padding:28px 16px}.login-layout{grid-template-columns:1fr;gap:32px;margin:35px auto;padding:0 16px}.login-intro h1{font-size:38px}.login-intro a{margin-top:4px}.login-card{padding:24px}.portal-stats{grid-template-columns:1fr;gap:10px}.portal-stats>div{align-items:center;gap:20px;padding:18px;display:flex}.portal-stats strong{margin:0}.portal-heading{align-items:start}.portal-panel{padding:18px}.portal-filters,.lesson,.panel-heading,.record-row,.batch-timetable>div{flex-direction:column;align-items:stretch;gap:16px}.portal-filters label{width:100%}.form-grid,.account-grid{grid-template-columns:1fr}.portal-tabs{gap:3px}.portal-tabs button{padding:9px 11px}.zone-label{overflow-wrap:anywhere;font-size:12px}.lesson-date{min-width:0}.edit-panel{padding:18px}.day-time-row{grid-template-columns:1fr 1fr;gap:8px}.day-time-select{grid-column:1/-1}}@media (max-width:540px){.class-calendar{grid-template-columns:repeat(2,minmax(0,1fr))}.calendar-day{min-height:128px}.portal .batch-select{width:100%}}@media (max-width:760px){.portal .fee-month-select{width:100%}.portal .fee-student-row{grid-template-columns:1fr 1fr;gap:12px}.fee-student-row>div,.portal .fee-student-row button{grid-column:1/-1}}
