:root{--ink:#143b28;--orange:#d62831;--forest:#08763a;--paper:#f8faf7;--white:#fff;--blue:#e2f1e8;--peach:#fdebe7;--lime:#d7eb83;--text:#263a2e;--muted:#68736c;--border:#dce5dc}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;font-family:'DM Sans',Arial,sans-serif;color:var(--ink);background:var(--paper)}button,input,textarea,select{font:inherit}button{cursor:pointer}a{color:inherit;text-decoration:none}h1,h2,h3,p{margin-top:0}h1,h2,h3{letter-spacing:-.045em}p{color:var(--muted);line-height:1.55}:focus-visible{outline:3px solid var(--orange);outline-offset:3px}.portal-shell{min-height:100dvh;display:grid;grid-template-columns:240px minmax(0,1fr)}.portal-sidebar{background:var(--ink);color:#fff;padding:25px 17px;display:flex;flex-direction:column;min-height:100dvh;position:sticky;top:0;height:100dvh}.portal-logo{background:#fff;display:flex;align-items:center;justify-content:center;padding:8px;border-radius:5px;height:65px}.portal-logo img{max-width:155px;max-height:54px}.portal-role-label{font-size:.72rem;text-transform:uppercase;letter-spacing:.13em;color:#d9bfc8;margin:35px 12px 14px}.portal-sidebar nav{display:flex;flex-direction:column;gap:4px}.portal-nav-item{width:100%;border:0;background:transparent;color:#eadce0;display:flex;align-items:center;justify-content:space-between;text-align:left;padding:13px 14px;border-radius:9px;font-weight:600;font-size:.88rem}.portal-nav-item:hover{background:#69364a}.portal-nav-item[aria-current=page]{background:var(--lime);color:var(--ink)}.portal-nav-item span{font-weight:400}.portal-sidebar-bottom{margin-top:auto;border-top:1px solid #734355;padding:20px 12px 0;display:flex;flex-direction:column;gap:15px}.portal-sidebar-bottom a{font-size:.79rem;color:#e8d6dc}.portal-sidebar-bottom a:hover{text-decoration:underline}.portal-main{min-width:0}.portal-preview-bar{background:var(--lime);color:var(--ink);padding:9px 33px;display:flex;gap:14px;align-items:center;font-size:.72rem}.portal-preview-bar strong{text-transform:uppercase;letter-spacing:.06em}.portal-header{height:80px;border-bottom:1px solid var(--border);background:#fff;display:flex;align-items:center;justify-content:space-between;padding:0 34px;gap:20px}.portal-header>div:first-child{display:flex;flex-direction:column;gap:2px}.portal-header>div:first-child span{color:#8d6e78;font-size:.75rem}.portal-header>div:first-child strong{font-size:1.05rem}.portal-header-actions{display:flex;align-items:center;gap:10px}.portal-header-actions a{border:1px solid #ded8da;border-radius:100px;padding:10px 16px;font-size:.77rem;font-weight:700}.portal-header-actions a:first-child{background:var(--orange);border-color:var(--orange);color:var(--ink)}.portal-header-actions a:hover{box-shadow:0 5px 15px rgba(72,20,39,.1)}#portal-content{padding:42px 34px 90px;max-width:1260px;margin:0 auto}.portal-page-heading{display:flex;justify-content:space-between;align-items:end;gap:22px;margin-bottom:28px}.portal-kicker{text-transform:uppercase;color:#a65d4f;letter-spacing:.11em;font-size:.73rem;font-weight:700}.portal-page-heading h1{font-size:clamp(2.3rem,4vw,4.4rem);line-height:1.04;margin:8px 0 9px}.portal-page-heading p{font-size:.92rem;margin:0;max-width:560px}.portal-select-label{display:flex;flex-direction:column;gap:7px;font-size:.75rem;font-weight:700;color:#775866;min-width:195px}.portal-select-label select{border:1px solid #dfd8da;background:#fff;border-radius:7px;padding:11px 14px;color:var(--ink);font-weight:700}.portal-stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:17px}.portal-stat{background:#fff;border:1px solid var(--border);padding:23px;display:flex;flex-direction:column;min-height:150px}.portal-stat:nth-child(2){background:var(--blue)}.portal-stat:nth-child(3){background:var(--peach)}.portal-stat>span{text-transform:uppercase;letter-spacing:.09em;font-size:.68rem;color:#775866;font-weight:700}.portal-stat strong{font-size:clamp(1.5rem,2.2vw,2.45rem);letter-spacing:-.05em;margin:auto 0 4px}.portal-stat small{color:#6b7071;font-size:.72rem}.portal-columns{display:grid;grid-template-columns:1.25fr .75fr;gap:17px}.portal-panel{background:#fff;border:1px solid var(--border);padding:25px;margin-bottom:17px}.portal-panel-head{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--border);padding-bottom:16px;margin-bottom:9px}.portal-panel h2{font-size:1.27rem;margin:0}.portal-list>div{display:flex;flex-direction:column;gap:4px;padding:17px 0;border-bottom:1px solid var(--border)}.portal-list>div:last-child{border:0}.portal-list b{font-size:.91rem}.portal-list span{color:var(--muted);font-size:.8rem}.portal-actions{display:flex;flex-direction:column}.portal-actions button{border:0;border-bottom:1px solid var(--border);background:#fff;text-align:left;padding:16px 0;display:flex;justify-content:space-between;font-weight:700;color:var(--ink);font-size:.84rem}.portal-actions button:last-child{border:0}.portal-actions button:hover{color:#b64b31}.portal-empty{padding:30px;background:#e8eddf;margin-top:17px}.portal-empty strong{font-size:1.1rem}.portal-empty p{margin:8px 0 0;font-size:.85rem;max-width:540px}.portal-table>div{display:grid;grid-template-columns:1fr 1fr 1.4fr;gap:15px;border-bottom:1px solid var(--border);padding:15px 0;font-size:.83rem}.portal-table>div:first-child{color:#795963;font-size:.74rem}.status-good{color:#2b6d36;font-weight:700}.status-muted{color:#8b7e83}.fee-placeholder{padding:25px 0}.fee-placeholder span{display:block;color:#7f616b;font-size:.77rem;text-transform:uppercase;letter-spacing:.08em}.fee-placeholder strong{display:block;font-size:clamp(2.2rem,4vw,3.7rem);margin:12px 0}.fee-placeholder p{max-width:500px}.fee-placeholder a{font-weight:700;font-size:.83rem;border-bottom:1px solid var(--ink);padding-bottom:4px}.portal-form{display:flex;flex-direction:column;gap:18px;padding-top:13px}.portal-form label{display:flex;flex-direction:column;gap:7px;font-size:.8rem;font-weight:700}.portal-form input,.portal-form textarea,.portal-form select{border:1px solid #ddd8d8;background:#fff;border-radius:5px;padding:12px 13px;color:var(--ink)}.portal-form textarea{resize:vertical}.portal-form button,.portal-inline-button{align-self:start;border:0;border-radius:100px;background:var(--orange);color:var(--ink);padding:12px 18px;font-weight:700;font-size:.82rem}.portal-form button:hover,.portal-inline-button:hover{background:#e2502c}.portal-form-status{font-size:.77rem;margin:0;color:#775866}.attendance-row{display:grid;grid-template-columns:1fr 130px 100px;gap:15px;align-items:center;padding:16px 0;border-bottom:1px solid var(--border);font-size:.86rem}.attendance-row label{display:flex;gap:7px;align-items:center}.attendance-row input{accent-color:var(--forest,#2b6d36);width:17px;height:17px}.attendance-summary{display:flex;justify-content:space-between;gap:20px;padding:22px 0}.attendance-summary span{font-size:.77rem;color:#826a72}.portal-inline-button{margin-bottom:14px}
@media(max-width:900px){.portal-shell{grid-template-columns:190px minmax(0,1fr)}.portal-sidebar{padding-inline:10px}.portal-preview-bar{padding-inline:22px}.portal-header{padding-inline:22px}#portal-content{padding:32px 22px 70px}.portal-columns{grid-template-columns:1fr}.portal-header-actions a{padding:9px 11px}}
@media(max-width:700px){.portal-shell{display:block}.portal-sidebar{position:static;height:auto;min-height:0;padding:14px}.portal-logo{width:155px;height:55px}.portal-role-label,.portal-sidebar-bottom{display:none}.portal-sidebar nav{display:flex;flex-direction:row;overflow-x:auto;padding-top:13px}.portal-nav-item{width:auto;min-width:max-content;padding:10px 13px}.portal-nav-item span{display:none}.portal-preview-bar{display:block;font-size:.68rem}.portal-preview-bar strong{display:block;margin-bottom:3px}.portal-header{height:auto;min-height:70px;padding:13px 17px}.portal-header-actions a:last-child{display:none}#portal-content{padding:29px 17px 70px}.portal-page-heading{display:block}.portal-select-label{max-width:260px;margin-top:20px}.portal-stat-grid{grid-template-columns:1fr 1fr}.portal-stat:last-child{grid-column:1/-1}.portal-stat{min-height:125px}.attendance-row{grid-template-columns:1fr 90px 65px;gap:5px}.attendance-summary{flex-direction:column;gap:5px}}
@media(max-width:430px){.portal-header-actions a{font-size:.7rem}.portal-stat-grid{grid-template-columns:1fr}.portal-stat:last-child{grid-column:auto}.portal-page-heading h1{font-size:2.3rem}.portal-panel{padding:17px}.portal-table>div{grid-template-columns:.8fr 1.1fr 1.3fr;font-size:.73rem}.attendance-row{font-size:.75rem}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

/* Server-rendered PHP portal: all motion and interaction states use CSS. */
body{font-family:system-ui,'Segoe UI',Arial,sans-serif}.portal-sidebar{background:linear-gradient(160deg,#075d30,var(--ink) 72%)}.portal-preview-bar{background:var(--lime)}.portal-header-actions a:first-child{background:#fff;border-color:var(--border);color:var(--ink)}.portal-header-actions a:hover{border-color:var(--forest);color:var(--forest)}.portal-nav-item{transition:background .2s,color .2s,transform .2s}.portal-nav-item:hover{background:#158347;color:#fff;transform:translateX(3px)}.portal-nav-item[aria-current=page]:hover{background:var(--lime);color:var(--ink)}.portal-sidebar-bottom button{border:0;background:none;padding:0;color:#e8f5e9;text-align:left;font-size:.79rem}.portal-sidebar-bottom button:hover,.portal-sidebar-bottom a:hover{text-decoration:underline;color:#fff}.portal-stat,.portal-panel,.portal-record{animation:portal-enter .45s both}.portal-stat:nth-child(2){animation-delay:.06s}.portal-stat:nth-child(3){animation-delay:.12s}.portal-panel{animation-delay:.12s}.portal-panel:hover,.portal-stat:hover{box-shadow:0 12px 30px rgba(13,69,37,.08);border-color:#bdd5c3}.portal-panel,.portal-stat{transition:box-shadow .25s,border-color .25s,transform .25s}.portal-stat:hover{transform:translateY(-3px)}.portal-alert{background:var(--lime);color:var(--ink);border-left:4px solid var(--forest);padding:14px 18px;margin-bottom:22px;font-weight:650}.portal-empty-note{background:#eef5eb;padding:20px;margin:0;color:#476550}.portal-record{padding:19px 0;border-bottom:1px solid var(--border)}.portal-record:last-child{border-bottom:0}.portal-record span{font-size:.73rem;color:var(--forest);font-weight:700}.portal-record h3{font-size:1.16rem;margin:7px 0 0}.portal-record p{margin:9px 0 0;white-space:normal;font-size:.88rem}.portal-help-text{font-size:.82rem;color:#617069}.portal-table small{display:block;color:#67766c;font-size:.72rem;margin-top:3px}.portal-table>div{grid-template-columns:1fr 1fr}.portal-fee-table>div{grid-template-columns:1.5fr 1fr .65fr}.status-present{color:#08763a}.status-late{color:#aa6d00}.status-absent{color:#b52a32}.portal-form label{display:block}.portal-form input,.portal-form textarea,.portal-form select{width:100%}.portal-form button,.portal-inline-button,.portal-login-form button{background:var(--orange);color:#fff;transition:background .2s,transform .2s,box-shadow .2s}.portal-form button:hover,.portal-inline-button:hover,.portal-login-form button:hover{background:#a51e28;transform:translateY(-2px);box-shadow:0 8px 19px rgba(166,30,40,.2)}.portal-select-label{min-width:220px}.portal-select-submit{border:1px solid var(--forest);background:#fff;color:var(--forest);border-radius:6px;padding:8px 12px;font-size:.76rem;font-weight:700}.portal-select-submit:hover{background:var(--forest);color:#fff}.portal-register .attendance-row{grid-template-columns:1fr 75px 160px}.attendance-row select{border:1px solid var(--border);border-radius:5px;background:#fff;padding:9px;color:var(--ink)}.portal-register .portal-inline-button{margin-top:12px}.portal-entry{min-height:100vh;background:linear-gradient(135deg,#f7faf6 0%,#f7faf6 54%,#e2f1e8 100%)}.portal-entry-wrap,.portal-login-wrap{max-width:960px;margin:0 auto;padding:45px 26px 100px}.portal-entry-logo{display:inline-block;margin-bottom:80px;background:#fff;padding:12px;border-radius:6px}.portal-entry-logo img{width:170px}.portal-entry h1{font-size:clamp(2.8rem,6vw,5.5rem);max-width:700px;margin:16px 0}.portal-entry-wrap>p{max-width:580px}.portal-entry-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin:45px 0 30px}.portal-entry-grid a{background:#fff;border:1px solid var(--border);padding:34px;min-height:300px;display:flex;flex-direction:column;transition:transform .25s,box-shadow .25s,border-color .25s;animation:portal-enter .55s both}.portal-entry-grid a:nth-child(2){background:var(--blue);animation-delay:.1s}.portal-entry-grid a:hover{transform:translateY(-5px);border-color:var(--forest);box-shadow:0 18px 35px rgba(13,69,37,.13)}.portal-entry-grid span{color:var(--forest);font-weight:700;font-size:.75rem;text-transform:uppercase;letter-spacing:.08em}.portal-entry-grid h2{font-size:clamp(2rem,3.5vw,3rem);margin:35px 0 12px}.portal-entry-grid p{font-size:.9rem}.portal-entry-grid strong{margin-top:auto;color:var(--orange);font-size:.85rem}.portal-entry-help{font-size:.85rem}.portal-entry-help a{color:var(--forest);text-decoration:underline}.portal-login-wrap{max-width:580px}.portal-login-wrap .portal-entry-logo{margin-bottom:42px}.portal-back{display:block;margin-bottom:48px;color:var(--forest);font-size:.85rem;font-weight:700}.portal-login-form{display:grid;gap:17px;background:#fff;border:1px solid var(--border);padding:32px;margin:30px 0}.portal-login-form label{display:grid;gap:7px;font-size:.83rem;font-weight:700}.portal-login-form input{padding:13px;border:1px solid #cfd9cf;border-radius:5px}.portal-login-form button{border:0;border-radius:100px;padding:13px 20px;font-weight:700;margin-top:8px}.portal-kicker{color:var(--forest)}@keyframes portal-enter{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:700px){.portal-entry-grid{grid-template-columns:1fr}.portal-entry-grid a{min-height:250px}.portal-entry-logo{margin-bottom:45px}.portal-page-heading{display:block}.portal-select-label{margin-top:20px}.portal-register .attendance-row{grid-template-columns:1fr 60px 130px}.portal-sidebar nav{scrollbar-width:thin}.portal-sidebar-bottom{display:flex;flex-direction:row;gap:14px;flex-wrap:wrap;border:0;padding:12px 0 0;margin:0}.portal-sidebar-bottom a,.portal-sidebar-bottom button{font-size:.73rem}.portal-preview-bar{padding:8px 17px}.portal-login-form{padding:24px}}
@media(max-width:430px){.portal-register .attendance-row{grid-template-columns:1fr 55px 112px;font-size:.75rem}.portal-register .attendance-row select{padding:6px}.portal-fee-table>div{grid-template-columns:1.2fr .8fr .6fr;font-size:.72rem}.portal-entry-wrap,.portal-login-wrap{padding-inline:18px}}
@media(prefers-reduced-motion:reduce){.portal-stat,.portal-panel,.portal-record,.portal-entry-grid a{animation:none}.portal-stat,.portal-panel,.portal-nav-item,.portal-entry-grid a,.portal-form button,.portal-inline-button,.portal-login-form button{transition:none}}
html{scrollbar-color:#19854a #e9f2ea;scrollbar-width:thin}::-webkit-scrollbar{width:10px;height:8px}::-webkit-scrollbar-track{background:#e9f2ea}::-webkit-scrollbar-thumb{background:#19854a;border:2px solid #e9f2ea;border-radius:100px}::-webkit-scrollbar-thumb:hover{background:#d62831}.portal-sidebar nav{scrollbar-width:thin;scrollbar-color:var(--lime) transparent}.portal-sidebar nav::-webkit-scrollbar{height:5px}.portal-sidebar nav::-webkit-scrollbar-track{background:transparent}.portal-sidebar nav::-webkit-scrollbar-thumb{background:var(--lime);border:0;border-radius:100px}.portal-entry-logo{display:block;width:max-content}.portal-shortcuts{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:4px}.portal-shortcuts a{background:var(--ink);color:#fff;min-height:124px;padding:20px;display:flex;flex-direction:column;justify-content:space-between;transition:background .22s,transform .22s,box-shadow .22s}.portal-shortcuts a:nth-child(2){background:var(--forest)}.portal-shortcuts a:nth-child(3){background:var(--orange)}.portal-shortcuts a:hover{transform:translateY(-4px);box-shadow:0 12px 25px rgba(20,59,40,.16)}.portal-shortcuts a:focus-visible{outline-color:var(--orange)}.portal-shortcuts span{font-size:.7rem;text-transform:uppercase;letter-spacing:.07em;opacity:.8}.portal-shortcuts strong{font-size:1rem}@media(max-width:700px){.portal-shortcuts{grid-template-columns:1fr;gap:8px}.portal-shortcuts a{min-height:95px}.portal-sidebar nav{padding-bottom:7px}}

@media(max-width:700px){
  .portal-sidebar nav{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px;overflow:visible;padding:14px 0 6px}
  .portal-nav-item{width:100%;min-width:0;justify-content:center;text-align:center}
  .portal-nav-item:hover{transform:none}
}
@media(prefers-reduced-motion:reduce){.portal-shortcuts a{transition:none}}

.portal-mobile-menu{display:none}
@media(max-width:700px){
  .portal-sidebar{display:flex;flex-direction:row;align-items:center;justify-content:space-between;position:relative;z-index:40}
  .portal-sidebar>.portal-desktop-nav,.portal-sidebar>.portal-sidebar-bottom{display:none}
  .portal-mobile-menu{display:block;margin-left:auto}
  .portal-mobile-menu summary{display:flex;align-items:center;justify-content:center;gap:9px;min-width:88px;min-height:46px;padding:0 12px;border:1px solid rgba(255,255,255,.35);border-radius:7px;color:#fff;cursor:pointer;list-style:none;font-size:.78rem;font-weight:700}
  .portal-mobile-menu summary::-webkit-details-marker{display:none}
  .portal-mobile-menu summary:hover,.portal-mobile-menu[open] summary{background:#18894a;border-color:#cfe78f}
  .portal-hamburger{display:flex;flex-direction:column;gap:4px}
  .portal-hamburger i{display:block;width:18px;height:2px;background:currentColor;border-radius:2px;transition:transform .2s,opacity .2s}
  .portal-mobile-menu[open] .portal-hamburger i:first-child{transform:translateY(6px) rotate(45deg)}
  .portal-mobile-menu[open] .portal-hamburger i:nth-child(2){opacity:0}
  .portal-mobile-menu[open] .portal-hamburger i:last-child{transform:translateY(-6px) rotate(-45deg)}
  .portal-mobile-panel{position:absolute;top:100%;left:0;right:0;background:linear-gradient(160deg,#075d30,var(--ink));padding:17px 14px 23px;box-shadow:0 18px 28px rgba(7,48,25,.24);animation:portal-enter .2s both}
  .portal-mobile-caption{display:block;padding:0 5px;color:#d7eb83;text-transform:uppercase;letter-spacing:.1em;font-size:.7rem;font-weight:700}
  .portal-mobile-panel nav{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;padding:12px 0 18px}
  .portal-mobile-panel .portal-nav-item{min-height:44px}
  .portal-mobile-actions{display:flex;flex-wrap:wrap;gap:16px;border-top:1px solid rgba(255,255,255,.25);padding:17px 5px 0}
  .portal-mobile-actions a,.portal-mobile-actions button{border:0;background:transparent;padding:0;color:#e8f5e9;font-size:.77rem;text-align:left}
  .portal-mobile-actions a:hover,.portal-mobile-actions button:hover{text-decoration:underline;color:#fff}
}
@media(prefers-reduced-motion:reduce){.portal-mobile-panel{animation:none}.portal-hamburger i{transition:none}}

.portal-select-label select{border:1px solid #bdd4c1;border-radius:10px;box-shadow:0 2px 7px rgba(11,73,39,.05);transition:border-color .2s,box-shadow .2s}
.portal-select-label select:hover{border-color:var(--forest)}
.portal-select-label select:focus-visible{outline:3px solid #d7eb83;outline-offset:2px;border-color:var(--forest)}
.portal-select-submit{border-radius:8px;min-height:40px;transition:background .2s,color .2s,transform .2s}
.portal-select-submit:hover{transform:translateY(-2px)}
@media(max-width:700px){
  .portal-mobile-menu summary{background:#fff;color:var(--ink);border-color:#fff;box-shadow:0 4px 12px rgba(2,35,18,.12)}
  .portal-mobile-menu summary:hover,.portal-mobile-menu[open] summary{background:var(--lime);border-color:var(--lime);color:var(--ink)}
  .portal-mobile-panel{top:calc(100% + 9px);left:14px;right:14px;background:#fff;color:var(--ink);border:1px solid #c8dfcb;border-top:5px solid var(--orange);border-radius:12px;padding:22px;box-shadow:0 24px 48px rgba(8,61,35,.24)}
  .portal-mobile-caption{color:var(--forest);padding:0 2px}
  .portal-mobile-panel nav{gap:8px;padding:15px 0 20px}
  .portal-mobile-panel .portal-nav-item{justify-content:space-between;text-align:left;background:#edf5ed;color:var(--ink);border:1px solid transparent;border-radius:8px;padding:13px 12px;font-size:.86rem;transition:background .2s,color .2s,transform .2s}
  .portal-mobile-panel .portal-nav-item::after{content:'↗';font-size:.9rem;color:var(--forest)}
  .portal-mobile-panel .portal-nav-item:hover{background:var(--forest);color:#fff;transform:translateY(-2px)}
  .portal-mobile-panel .portal-nav-item:hover::after{color:#fff}
  .portal-mobile-panel .portal-nav-item[aria-current=page]{background:var(--lime);border-color:#bad968;color:var(--ink)}
  .portal-mobile-panel .portal-nav-item[aria-current=page]::after{color:var(--ink)}
  .portal-mobile-actions{border-color:#dbe8dd;gap:10px 18px;padding:17px 2px 0;align-items:center}
  .portal-mobile-actions a,.portal-mobile-actions button{color:var(--forest);font-weight:700}
  .portal-mobile-actions a:hover,.portal-mobile-actions button:hover{color:var(--orange)}
  .portal-mobile-actions form{margin-left:auto}
  .portal-mobile-actions button{color:var(--orange)}
}
@media(max-width:390px){.portal-mobile-panel{padding:18px}.portal-mobile-actions form{margin-left:0}}
@media(prefers-reduced-motion:reduce){.portal-mobile-panel .portal-nav-item,.portal-select-label select,.portal-select-submit{transition:none}}

/* The PHP dashboard menu fills the viewport on small screens. */
@media(max-width:700px){
  body:has(.portal-mobile-menu[open]){overflow:hidden}
  .portal-sidebar:has(.portal-mobile-menu[open]){z-index:100}
  .portal-sidebar:has(.portal-mobile-menu[open])>.portal-logo,.portal-mobile-menu[open] summary{position:relative;z-index:3}

  .portal-mobile-menu[open] .portal-mobile-panel{position:fixed;inset:0;width:100vw;height:100dvh;min-height:100dvh;overflow-y:auto;overscroll-behavior:contain;display:flex;flex-direction:column;left:0;right:0;top:0;border:0;border-radius:0;box-shadow:none;background:var(--paper);padding:105px clamp(18px,6vw,60px) 25px;z-index:2}
  .portal-mobile-caption{width:100%;max-width:700px;margin:0 auto;padding:0;color:var(--forest);font-size:.78rem}
  .portal-mobile-panel nav{width:100%;max-width:700px;margin:0 auto;grid-template-columns:1fr;gap:9px;padding:22px 0 36px}
  .portal-mobile-panel .portal-nav-item{min-height:58px;padding:15px 18px;font-size:clamp(1.05rem,3vw,1.4rem)}
  .portal-mobile-actions{width:100%;max-width:700px;margin:auto auto 0;padding:23px 0 0;gap:18px 26px}
  .portal-mobile-actions a,.portal-mobile-actions button{font-size:.86rem}
  .portal-mobile-menu[open] .portal-mobile-panel{animation:none}
  .portal-mobile-menu[open] .portal-mobile-panel nav{animation:portal-enter .25s both}
}
@media(prefers-reduced-motion:reduce){.portal-mobile-menu[open] .portal-mobile-panel nav{animation:none}}

/* Let the transparent Citacad mark sit directly on the portal entry surface. */
.portal-entry-logo{background:transparent;padding:0;border-radius:0}

/* Administrative workspace */
.admin-shell .portal-sidebar{background:linear-gradient(165deg,#075d30,#123b28 72%)}
.admin-shell .portal-logo{background:transparent;padding:0;justify-content:flex-start}
.admin-shell .portal-logo img{max-width:168px;max-height:64px}
.admin-shell .portal-sidebar .portal-nav-item{font-size:.81rem;padding:11px 12px}
.admin-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:18px}
.admin-stats .portal-stat{min-height:145px;color:var(--ink);border-top:4px solid var(--forest)}
.admin-stats .portal-stat:nth-child(2){border-top-color:var(--orange)}
.admin-stats .portal-stat:nth-child(3){border-top-color:#a1be4f}
.admin-stats .portal-stat:nth-child(4){border-top-color:#143b28}
.admin-stats .portal-stat:hover{transform:translateY(-4px)}
.admin-action-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding-top:18px}
.admin-action-grid a{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:78px;background:#eaf5ea;border:1px solid #cbe1cf;padding:17px;font-weight:750;font-size:.86rem;border-radius:10px;transition:background .2s,transform .2s}
.admin-action-grid a:hover{background:var(--lime);transform:translateY(-2px)}
.admin-action-grid span{color:var(--orange)}
.admin-layout{display:grid;grid-template-columns:minmax(280px,.78fr) minmax(0,1.22fr);gap:18px;align-items:start}
.admin-layout>.portal-panel{min-width:0}
.admin-layout>.portal-panel>p{font-size:.85rem;margin:10px 0 20px}
.admin-layout .portal-form{gap:14px}
.admin-layout .portal-form label,.admin-inline-form label{font-size:.77rem;font-weight:700;display:grid;gap:7px}
.admin-layout .portal-form input,.admin-layout .portal-form select,.admin-layout .portal-form textarea,.admin-inline-form input,.admin-inline-form select{border:1px solid #bfd4c3;border-radius:8px;padding:11px 12px;background:#fff;min-width:0;width:100%;color:var(--ink)}
.admin-layout .portal-form button,.admin-row-body button,.admin-review-actions button{border:0;border-radius:100px;background:var(--orange);color:#fff;min-height:42px;padding:10px 17px;font-weight:800;font-size:.8rem;cursor:pointer;transition:background .2s,transform .2s}
.admin-layout .portal-form button:hover,.admin-row-body button:hover,.admin-review-actions button:hover{background:#a51e28;transform:translateY(-2px)}
.admin-subheading{border-top:1px solid var(--border);padding-top:25px;margin-top:30px!important}
.admin-list{margin-top:16px}
.admin-row{border-bottom:1px solid var(--border)}
.admin-row summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:15px;padding:15px 2px}
.admin-row summary::-webkit-details-marker{display:none}
.admin-row summary span{display:grid;gap:4px;min-width:0}
.admin-row summary strong{font-size:.9rem}
.admin-row summary small{font-size:.73rem;color:var(--muted);overflow-wrap:anywhere}
.admin-row summary em{font-size:.69rem;font-style:normal;color:var(--forest);background:#e8f3e8;border-radius:100px;padding:7px 11px;white-space:nowrap}
.admin-row[open] summary{color:var(--forest)}
.admin-row-body{padding:3px 2px 18px;display:grid;gap:14px}
.admin-inline-form{display:grid;grid-template-columns:1fr 145px auto auto;gap:9px;align-items:end}
.admin-inline-form .admin-check{display:flex;align-items:center;gap:6px;white-space:nowrap;padding-bottom:12px}
.admin-inline-form .admin-check input{width:auto}
.admin-row-body .admin-button-secondary,.admin-review-actions .admin-button-secondary{background:#e7f3e8;color:var(--forest);border:1px solid #a6cbb0}
.admin-row-body .admin-button-secondary:hover,.admin-review-actions .admin-button-secondary:hover{background:#cfe7d1;color:var(--forest)}
.admin-credential{display:grid;gap:9px;max-width:700px}
.admin-credential code{font-size:1rem;overflow-wrap:anywhere;background:#fff;padding:11px 15px;width:max-content;max-width:100%;border:1px solid #a9c3ad}
.admin-credential small{font-size:.76rem}
.admin-template{display:inline-flex;border:1px solid var(--forest);border-radius:100px;padding:10px 16px;color:var(--forest);font-size:.8rem;font-weight:800;margin-bottom:17px}
.admin-template:hover{background:var(--forest);color:#fff}
.admin-import-preview{max-height:400px;overflow:auto;border-block:1px solid var(--border);margin:16px 0}
.admin-import-preview div{display:flex;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid var(--border);font-size:.79rem}
.admin-import-preview span{color:var(--muted)}
.admin-review{padding:23px 0;border-bottom:1px solid var(--border)}
.admin-review h3{margin:8px 0 10px}
.admin-review p{max-width:770px;white-space:pre-wrap}
.admin-review small{color:var(--muted)}
.admin-review-actions{display:flex;gap:9px;margin-top:18px;flex-wrap:wrap}
.admin-audit-list>div{display:grid;grid-template-columns:150px 1fr 180px;gap:15px;padding:14px 0;border-bottom:1px solid var(--border);font-size:.79rem;align-items:center}
.admin-audit-list span,.admin-audit-list small{color:var(--muted)}
@media(max-width:1100px){.admin-stats{grid-template-columns:repeat(2,1fr)}.admin-layout{grid-template-columns:1fr}.admin-inline-form{grid-template-columns:1fr 1fr auto}}
@media(max-width:700px){.admin-stats{grid-template-columns:1fr 1fr}.admin-shell .portal-logo img{max-width:155px}.admin-action-grid{grid-template-columns:1fr 1fr}.admin-audit-list>div{grid-template-columns:1fr;gap:5px}.admin-inline-form{grid-template-columns:1fr 1fr}.admin-inline-form button{grid-column:1/-1}}
@media(max-width:480px){.admin-stats,.admin-action-grid{grid-template-columns:1fr}.admin-row summary{align-items:flex-start;flex-direction:column;gap:7px}.admin-inline-form{grid-template-columns:1fr}.admin-inline-form button{grid-column:auto}.admin-import-preview div{display:grid;gap:3px}}
@media(prefers-reduced-motion:reduce){.admin-action-grid a,.admin-layout .portal-form button,.admin-row-body button,.admin-review-actions button{transition:none}}

.portal-entry-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
@media(max-width:700px){.portal-entry-grid{grid-template-columns:1fr}}

/* Consistent feedback for portal actions without shifting the layout. */
.portal-header-actions a,.portal-form button,.portal-inline-button,.portal-login-form button,.admin-row-body button,.admin-review-actions button,.admin-status-form button,.portal-select-submit,.admin-template,.portal-entry-grid a,.admin-action-grid a{transition:transform .28s cubic-bezier(.22,1,.36,1),box-shadow .28s cubic-bezier(.22,1,.36,1),background-color .23s,border-color .23s,color .23s}
.admin-status-form button{border:1px solid #b9d6c0;border-radius:100px;background:#e9f5ec;color:var(--forest);padding:8px 13px;font-size:.76rem;font-weight:800}
.admin-status-form button:focus-visible{outline:3px solid var(--orange);outline-offset:3px}
:is(.portal-header-actions a,.portal-form button,.portal-inline-button,.portal-login-form button,.admin-row-body button,.admin-review-actions button,.admin-status-form button,.portal-select-submit,.admin-template,.portal-entry-grid a,.admin-action-grid a):active{transform:translateY(1px) scale(.98);box-shadow:0 2px 8px rgba(12,69,35,.1)}
@media(hover:hover){
  :is(.portal-header-actions a,.portal-form button,.portal-inline-button,.portal-login-form button,.admin-row-body button,.admin-review-actions button,.admin-status-form button,.portal-select-submit,.admin-template):hover{transform:translateY(-2px);box-shadow:0 8px 18px rgba(12,69,35,.15)}
  .admin-status-form button:hover{background:var(--forest);border-color:var(--forest);color:#fff}
}
@media(prefers-reduced-motion:reduce){
  .portal-header-actions a,.portal-form button,.portal-inline-button,.portal-login-form button,.admin-row-body button,.admin-review-actions button,.admin-status-form button,.portal-select-submit,.admin-template,.portal-entry-grid a,.admin-action-grid a{transition:none!important;animation:none!important}
  :is(.portal-header-actions a,.portal-form button,.portal-inline-button,.portal-login-form button,.admin-row-body button,.admin-review-actions button,.admin-status-form button,.portal-select-submit,.admin-template,.portal-entry-grid a,.admin-action-grid a):is(:hover,:active){transform:none!important}
}

/* The transparent school mark belongs on a single calm sidebar surface. */
.portal-sidebar,.admin-shell .portal-sidebar{background:#edf5ed;color:var(--ink);border-right:1px solid #c7ddcc}
.portal-logo,.admin-shell .portal-logo{background:transparent;padding:0;justify-content:flex-start;border-radius:0;height:72px}
.portal-logo img,.admin-shell .portal-logo img{width:178px;max-width:100%;max-height:72px;height:auto;object-fit:contain;object-position:left center}
.portal-role-label{color:var(--forest);font-weight:800;font-size:.68rem;letter-spacing:.08em;white-space:nowrap;margin:31px 10px 13px}
.portal-nav-item,.admin-shell .portal-sidebar .portal-nav-item{color:var(--ink);gap:12px;justify-content:flex-start;min-height:44px}
.portal-nav-item:hover,.admin-shell .portal-sidebar .portal-nav-item:hover{background:#dbeedc;color:var(--forest)}
.portal-nav-item[aria-current=page],.portal-nav-item[aria-current=page]:hover{background:var(--lime);color:var(--ink)}
.portal-sidebar-bottom{border-color:#c6dccb}
.portal-sidebar-bottom a,.portal-sidebar-bottom button{color:var(--ink)}
.portal-sidebar-bottom a:hover,.portal-sidebar-bottom button:hover{color:var(--forest)}

/* Keep directional arrows on actions; destinations use small semantic icons. */
:root{--portal-arrow:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5 19 19 5M8 5h11v11' fill='none' stroke='%23143b28' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}
.portal-desktop-nav{min-height:0;overflow-y:auto;padding-right:3px}
.portal-nav-item{--nav-icon:url('assets/portal-icons/squares-four.svg')}
.portal-nav-item::before{content:'';display:block;width:18px;height:18px;flex:none;background:currentColor;-webkit-mask:var(--nav-icon) center/contain no-repeat;mask:var(--nav-icon) center/contain no-repeat;opacity:.86}
.portal-nav-item[aria-current=page]::before{opacity:1}
.portal-nav-item[data-icon="overview"]{--nav-icon:url('assets/portal-icons/squares-four.svg')}
.portal-nav-item[data-icon="learning"]{--nav-icon:url('assets/portal-icons/book-open.svg')}
.portal-nav-item[data-icon="attendance"]{--nav-icon:url('assets/portal-icons/calendar-check.svg')}
.portal-nav-item[data-icon="fees"]{--nav-icon:url('assets/portal-icons/receipt.svg')}
.portal-nav-item[data-icon="notices"]{--nav-icon:url('assets/portal-icons/megaphone.svg')}
.portal-nav-item[data-icon="messages"]{--nav-icon:url('assets/portal-icons/chat-circle-text.svg')}
.portal-nav-item[data-icon="assignments"]{--nav-icon:url('assets/portal-icons/clipboard-text.svg')}
.portal-nav-item[data-icon="users"]{--nav-icon:url('assets/portal-icons/users-three.svg')}
.portal-nav-item[data-icon="pupils"]{--nav-icon:url('assets/portal-icons/student.svg')}
.portal-nav-item[data-icon="classes"]{--nav-icon:url('assets/portal-icons/chalkboard-teacher.svg')}
.portal-nav-item[data-icon="import"]{--nav-icon:url('assets/portal-icons/upload-simple.svg')}
.portal-nav-item[data-icon="content"]{--nav-icon:url('assets/portal-icons/article.svg')}
.portal-nav-item[data-icon="gallery"]{--nav-icon:url('assets/portal-icons/squares-four.svg')}
.portal-nav-item[data-icon="events"]{--nav-icon:url('assets/portal-icons/calendar-check.svg')}
.portal-nav-item[data-icon="calendar"]{--nav-icon:url('assets/portal-icons/calendar-blank.svg')}
.portal-nav-item[data-icon="resources"]{--nav-icon:url('assets/portal-icons/folder-open.svg')}
.portal-nav-item[data-icon="settings"]{--nav-icon:url('assets/portal-icons/sliders.svg')}
.portal-nav-item[data-icon="enquiries"]{--nav-icon:url('assets/portal-icons/envelope.svg')}
.portal-nav-item[data-icon="approvals"]{--nav-icon:url('assets/portal-icons/seal-check.svg')}
.portal-nav-item[data-icon="audit"]{--nav-icon:url('assets/portal-icons/clock-counter-clockwise.svg')}
.portal-login-form button{display:flex;align-items:center;justify-content:space-between;gap:18px;text-align:left;padding:9px 10px 9px 21px;min-height:54px}
.portal-login-form button::after{content:'';width:35px;height:35px;flex:none;border-radius:50%;background:#fff var(--portal-arrow) center/19px no-repeat;transition:transform .22s}
.portal-login-form button:hover::after{transform:translate(2px,-2px)}
.portal-form button,.portal-inline-button{display:inline-flex;align-items:center;justify-content:space-between;gap:13px;min-height:46px;padding:7px 8px 7px 17px;text-align:left}
.portal-form button::after,.portal-inline-button::after{content:'';display:block;width:30px;height:30px;flex:none;border-radius:50%;background:#fff var(--portal-arrow) center/17px no-repeat;transition:transform .22s}
.portal-form button:hover::after,.portal-inline-button:hover::after{transform:translate(2px,-2px)}
.portal-shortcuts strong{display:flex;align-items:center;justify-content:space-between;gap:10px}
.portal-shortcuts strong::after{content:'';display:block;width:30px;height:30px;flex:none;border-radius:50%;background:#fff var(--portal-arrow) center/17px no-repeat;transition:transform .22s}
.portal-shortcuts a:hover strong::after{transform:translate(2px,-2px)}

@media(max-width:700px){
  .portal-sidebar,.admin-shell .portal-sidebar{background:#edf5ed;border-right:0;border-bottom:1px solid #c7ddcc}
  .portal-logo,.admin-shell .portal-logo{width:165px;height:58px}
  .portal-logo img,.admin-shell .portal-logo img{width:160px;max-height:56px}
  .portal-mobile-menu summary{background:#fff;color:var(--ink);border-color:#c7ddcc}
  .portal-mobile-panel .portal-nav-item{justify-content:flex-start;gap:14px}
  .portal-mobile-panel .portal-nav-item::before{width:20px;height:20px}
  .portal-mobile-panel .portal-nav-item::after{content:none;display:none}
  .portal-mobile-menu[open] .portal-mobile-panel{top:86px;height:calc(100dvh - 86px);min-height:0;padding-top:19px}
  .portal-sidebar:has(.portal-mobile-menu[open])::before{content:'';position:fixed;inset:0 0 auto;height:86px;background:var(--paper);border-bottom:1px solid #dce9df;z-index:3}
  .portal-sidebar:has(.portal-mobile-menu[open])>.portal-logo,.portal-mobile-menu[open] summary{z-index:4}
}
@media(prefers-reduced-motion:reduce){.portal-login-form button::after,.portal-form button::after,.portal-inline-button::after,.portal-shortcuts strong::after{transition:none}}
.admin-settings-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px;margin-top:24px}
.admin-setting-form{background:#f4f8f2;border:1px solid var(--border);border-radius:12px;padding:18px}
.admin-setting-form button{margin-top:10px}
@media(max-width:760px){.admin-settings-grid{grid-template-columns:1fr}}
