.portal-body{background:#f4f1f6;font-size:15px}.portal-body button,.portal-body input,.portal-body select,.portal-body textarea{font:inherit}.portal-banner{padding:8px 22px;background:#fbedd1;color:#6c4b18;font-size:13px;text-align:center}.login-wrap{max-width:950px;margin:55px auto;padding:25px}.login-brand{justify-content:center;margin-bottom:30px}.login-card{background:white;padding:35px;border:1px solid #e0d6e5;border-radius:14px;box-shadow:0 20px 65px #3010400a}.login-card h1{font-size:32px;text-align:center}.login-card>p{text-align:center;color:var(--muted);margin:10px 0 25px}.role-picker{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:28px}.role-picker button{padding:22px 10px;border:1px solid var(--line);border-radius:9px;background:white;color:var(--purple)}.role-picker button[aria-pressed=true]{background:var(--purple);color:var(--cream);border-color:var(--purple)}.role-picker strong{display:block;font-size:20px}.role-picker small{display:block;margin-top:6px;font-size:13px}.login-card form{max-width:460px;margin:auto}.p-field{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}.p-field label{font-weight:500;font-size:14px}.p-field input,.p-field select,.p-field textarea,.toolbar input,.toolbar select{background:white;border:1px solid #cfc3d4;border-radius:5px;padding:10px 12px;min-height:45px;width:100%;color:var(--ink)}.p-field textarea{min-height:90px;resize:vertical}.p-field input:focus,.p-field select:focus,.p-field textarea:focus{outline:2px solid #956caa;outline-offset:2px}.p-button{border:0;background:var(--purple);color:white;border-radius:5px;padding:10px 18px;font-weight:500;cursor:pointer}.p-button:hover{background:#5e3571}.p-button.secondary{background:white;color:var(--purple);border:1px solid #cebed4}.p-button.danger{color:#9c2e39;background:#fff0f1}.login-card .p-button{width:100%}.login-foot{text-align:center;font-size:13px;color:var(--muted);margin-top:20px}.app-shell{display:grid;grid-template-columns:245px minmax(0,1fr);min-height:100vh}.sidebar{background:var(--deep);color:#e9deed;padding:25px 18px;position:sticky;top:0;height:100vh;overflow:auto}.sidebar .brand{gap:9px;margin-bottom:25px}.sidebar .brand img{width:40px;height:40px}.sidebar .brand>span{font-size:16px}.sidebar .brand small{font-size:10px;letter-spacing:1px}.sidebar .role-label{font-size:12px;color:var(--gold);letter-spacing:2px;margin:20px 12px 10px}.sidebar nav{display:flex;flex-direction:column;gap:4px}.sidebar nav button{border:0;background:none;text-align:left;color:#d6c6de;border-radius:6px;padding:11px 13px;font-size:14px}.sidebar nav button.active{background:#593868;color:#f5dba4}.sidebar nav button:hover{background:#43244f}.sidebar-bottom{margin-top:30px;border-top:1px solid #6a4b7540;padding:20px 10px;display:grid;gap:12px;font-size:13px}.workspace{min-width:0}.app-top{background:white;padding:18px 30px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:20px}.app-top h1{font-size:23px;font-weight:500}.identity{display:flex;align-items:center;gap:12px;font-size:14px}.avatar{width:42px;height:42px;border-radius:50%;background:#eee4f2;display:flex;align-items:center;justify-content:center;object-fit:cover;color:var(--purple)}.workspace main{padding:30px;max-width:1450px;margin:auto}.welcome{padding:25px 28px;background:linear-gradient(100deg,#341545,#684477);color:white;border-radius:10px;margin-bottom:25px}.welcome h2{font-size:26px}.welcome p{color:#dfcce9;margin-top:7px}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:25px}.stat,.panel{background:white;border:1px solid #e4dce7;border-radius:9px;padding:22px}.stat strong{display:block;font-size:29px;color:var(--purple);font-weight:600}.stat span{font-size:13px;color:var(--muted)}.panel{margin-bottom:20px}.panel h2{font-size:21px;margin-bottom:14px}.panel h3{font-size:18px}.grid-two{display:grid;grid-template-columns:1fr 1fr;gap:20px}.muted{color:var(--muted);font-size:14px}.toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:20px}.toolbar h2{font-size:24px;margin-right:auto}.toolbar input,.toolbar select{max-width:230px}.table-wrap{overflow:auto;border:1px solid #e4dce7;border-radius:8px;background:white}table{width:100%;border-collapse:collapse;text-align:left;font-size:14px}th{background:#f8f5fa;color:#70537e;font-weight:500;white-space:nowrap}th,td{padding:13px 17px;border-bottom:1px solid #eee7f0;vertical-align:top}td{min-width:100px}td .p-button{font-size:12px;padding:5px 10px;margin:2px;white-space:nowrap}tr:last-child td{border:0}.badge{display:inline-block;font-size:12px;border-radius:4px;padding:2px 8px;background:#efe5f5;color:#634773}.badge.green{background:#e7f3ec;color:#2a6744}.badge.amber{background:#fff0d9;color:#805a20}.empty{padding:35px;text-align:center;color:var(--muted);background:white;border:1px dashed #cdbbd6;border-radius:8px}.list-card{padding:18px 0;border-bottom:1px solid var(--line)}.list-card:first-child{padding-top:0}.list-card:last-child{border:0}.list-card p{white-space:pre-wrap;overflow-wrap:anywhere}.list-card .meta{font-size:12px;color:var(--muted);margin:6px 0}.list-card .p-button{margin-top:12px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 20px}.form-grid .full{grid-column:1/-1}#editor{width:min(700px,94vw);max-height:90vh;border:0;background:white;color:var(--ink);padding:28px;border-radius:10px}#editor::backdrop{background:#190b26b8}.dialog-head{display:flex;justify-content:space-between;gap:15px;align-items:center;margin-bottom:24px}.dialog-head h2{font-size:24px}.dialog-head button{background:none;border:0;font-size:27px;width:40px;height:40px}.dialog-actions{display:flex;gap:12px;margin-top:12px;justify-content:flex-end}.error{color:#9d2330;font-size:14px;min-height:24px}.student-info{display:flex;align-items:center;gap:10px}.student-info .avatar{flex-shrink:0}.attendance-row{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);padding:15px 0;gap:20px}.attendance-row select{padding:8px;border:1px solid #cdbbd6;border-radius:5px;font:inherit}.receipt{background:white;padding:30px}.receipt h2{font-size:24px}.receipt dl{display:grid;grid-template-columns:1fr 1fr;gap:15px}.receipt dt{color:var(--muted)}.receipt dd{margin:0}.notice-box{padding:12px 16px;background:#fff3dd;border-radius:5px;font-size:14px;margin-bottom:20px}.content-photo{width:100%;max-height:240px;object-fit:contain;background:#f3eef5}.inline-actions{display:flex;gap:10px;flex-wrap:wrap}.menu-btn{display:none}#toast{position:fixed;bottom:25px;right:25px;z-index:100;background:#312039;color:white;padding:14px 22px;border-radius:7px;box-shadow:0 8px 30px #0003;max-width:90vw;display:none}.mobile-title{display:none}.print-only{display:none}.quick-links{display:flex;flex-wrap:wrap;gap:10px}.check-line{display:flex;gap:9px;align-items:center}.check-line input{width:18px;height:18px}.progress{height:8px;border-radius:8px;background:#ece4f0;margin-top:14px;overflow:hidden}.progress>div{height:100%;background:#986caf}.portal-body a{text-decoration:underline;text-underline-offset:3px}.portal-body .brand{text-decoration:none}.portal-body .p-button{text-decoration:none}
@media(max-width:1000px){.stats{grid-template-columns:1fr 1fr}.grid-two{grid-template-columns:1fr}.app-shell{grid-template-columns:210px minmax(0,1fr)}.sidebar{padding:20px 10px}.workspace main{padding:22px}.app-top{padding:16px 22px}}
@media(max-width:700px){.app-shell{display:block}.sidebar{display:none;position:static;height:auto}.app-shell.menu-open .sidebar{display:block}.menu-btn{display:block;border:1px solid var(--line);background:white;color:var(--purple);padding:5px 12px;font-size:22px}.app-top{padding:14px;gap:10px}.app-top h1{font-size:19px}.identity>span{display:none}.workspace main{padding:18px 14px}.stats{gap:10px}.stat{padding:15px}.stat strong{font-size:25px}.welcome{padding:20px}.welcome h2{font-size:23px}.form-grid{grid-template-columns:1fr}.login-wrap{margin:15px auto;padding:16px}.login-card{padding:22px 16px}.login-card h1{font-size:26px}.role-picker{gap:7px}.role-picker button{padding:17px 5px}.role-picker strong{font-size:17px}.role-picker small{font-size:11px}.panel{padding:18px}.toolbar input,.toolbar select{max-width:100%}.attendance-row{align-items:start}.portal-banner{font-size:12px;padding:8px 12px}.receipt dl{grid-template-columns:1fr}.receipt dt{margin-bottom:-12px}}
@media print{body>*{display:none!important}body #editor:open{display:block!important;position:static;width:100%;max-height:none;padding:0;border:0;background:white;color:black}.dialog-head,.dialog-actions,.no-print{display:none!important}.receipt{padding:20px}.receipt dl{display:grid;grid-template-columns:1fr 1fr}.print-only{display:block}#editor::backdrop{background:white}}
html:has(.portal-body){scroll-behavior:auto}.portal-body input,.portal-body button,.portal-body select,.portal-body textarea{scroll-margin:100px 0}.portal-body .panel p{overflow-wrap:anywhere}.portal-body .form-grid input{min-width:0}.portal-body .p-field{min-width:0}
#api-status.login-loading{display:flex;justify-content:center;align-items:center;min-height:44px;margin:14px 0}.login-spinner{display:inline-block;width:30px;height:30px;border:3px solid #e5d9ec;border-top-color:var(--purple);border-radius:50%;animation:login-spin .75s linear infinite}.loading-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}@keyframes login-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.login-spinner{animation:none}.loading-label{position:static;width:auto;height:auto;margin:0 0 0 10px;overflow:visible;clip-path:none;white-space:normal}}
.dedicated-role-badge{background:#f8f2fb;border:1.5px solid #d8c4e2;padding:12px 18px;border-radius:10px;font-size:15px;font-weight:600;color:var(--purple);text-align:center;margin-bottom:24px;display:flex;align-items:center;justify-content:center;gap:10px;box-shadow:0 4px 15px rgba(54,22,71,0.06)}.security-denied-wrap{max-width:660px;margin:65px auto;padding:25px}.security-denied-card{background:white;border:2px solid #ea868f;border-radius:16px;padding:42px 32px;text-align:center;box-shadow:0 22px 65px rgba(157,35,48,0.14)}.security-shield-icon{font-size:52px;margin-bottom:12px;line-height:1}.security-badge{display:inline-block;background:#ffebee;color:#b01729;padding:5px 16px;border-radius:20px;font-size:12px;font-weight:700;letter-spacing:.6px;margin-bottom:16px;border:1px solid #f8c2c8}.security-denied-card h1{font-size:27px;color:#851421;margin-bottom:14px}.security-alert-text{color:#452851;font-size:15px;line-height:1.65;margin-bottom:24px}.security-info-box{background:#faf6fc;border:1px solid #e7dcee;border-radius:10px;padding:16px 20px;text-align:left;font-size:14px;margin-bottom:26px;display:flex;flex-direction:column;gap:8px}.security-info-box p{margin:0;color:var(--muted)}.security-info-box strong{color:var(--ink)}.security-btn-group{display:flex;justify-content:center;gap:14px;flex-wrap:wrap;margin-bottom:22px}.security-btn-group .p-button{padding:12px 24px;font-weight:600;text-decoration:none}.security-foot{font-size:12px;color:var(--muted);margin:0}
.meta-date{display:inline-flex;align-items:center;gap:4px;font-size:11.5px;color:#785d82;background:#f5edf8;padding:2px 7px;border-radius:4px;margin-left:6px;border:1px solid #e7d8ec;font-weight:500}
.meta-date::before{content:"🕒";font-size:10px}
.card-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.danger-box{background:#fff3f3;border:1px solid #f5c2c7;color:#842029;border-radius:8px;padding:14px 18px;margin-bottom:18px}
.danger-box p{margin:4px 0}
.p-button.green{background:#237844;color:#fff}
.p-button.green:hover{background:#1b6137}
.p-button.amber{background:#d48806;color:#fff}
.p-button.amber:hover{background:#b37202}
.sync-badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;padding:2px 8px;border-radius:12px;background:#e6f7ff;color:#0958d9;border:1px solid #91caff}
