:root{--ink:#172033;--muted:#667085;--line:#e5e7eb;--bg:#f7f8fc;--brand:#b83e79;--brand2:#d96098;--soft:#fff4f8;--ok:#16794f;--danger:#b42318;--warning:#9a6700;--blue:#175cd3}*{box-sizing:border-box}body{margin:0;font-family:Tahoma,"Noto Sans Thai",Arial,sans-serif;color:var(--ink);background:var(--bg)}a{color:inherit}.portal-login-page{min-height:100vh;background:linear-gradient(135deg,#fff 0,#fff5f9 48%,#f5f7fb 100%)}.portal-login-shell{max-width:1080px;margin:auto;min-height:100vh;padding:48px 28px;display:grid;grid-template-columns:1.1fr .9fr;gap:44px;align-items:center}.portal-login-brand{display:flex;gap:24px;align-items:flex-start}.portal-mark{width:86px;height:86px;border-radius:24px;background:var(--brand);color:#fff;font-weight:900;display:grid;place-items:center;font-size:22px;box-shadow:0 16px 35px rgba(184,62,121,.2)}.portal-login-brand h1{font-size:44px;margin:4px 0 10px}.portal-login-brand p{color:var(--muted);line-height:1.7;max-width:580px}.eyebrow{margin:0 0 8px!important;color:var(--brand)!important;font-weight:800;letter-spacing:.08em;font-size:12px}.portal-login-card,.portal-card{background:#fff;border:1px solid var(--line);border-radius:22px;box-shadow:0 12px 35px rgba(16,24,40,.06)}.portal-login-card{padding:32px}.login-card-head h2{margin:0;font-size:28px}.login-card-head p{color:var(--muted);margin:8px 0 24px}.portal-form{display:grid;gap:16px}.portal-form label{display:grid;gap:7px;font-weight:700;font-size:14px}.portal-form input{width:100%;border:1px solid #d0d5dd;border-radius:12px;padding:13px 14px;font-size:16px;background:#fff}.portal-form input:focus{outline:3px solid rgba(217,96,152,.13);border-color:var(--brand2)}.portal-primary{border:0;border-radius:12px;padding:13px 18px;background:var(--brand);color:white;font-weight:800;font-size:15px;cursor:pointer}.portal-primary:hover{background:#963162}.portal-primary:disabled{background:#cfd4dc;color:#fff;cursor:not-allowed}.staff-login-link{text-align:center;margin-top:20px;font-size:14px;color:var(--muted)}.portal-alert{padding:12px 14px;border-radius:12px;margin:0 0 18px}.portal-alert.danger{background:#fef3f2;color:var(--danger)}.portal-alert.warning{background:#fffaeb;color:var(--warning)}.portal-topbar{min-height:74px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 max(24px,calc((100vw - 1180px)/2));position:sticky;top:0;z-index:5}.portal-brand{display:flex;align-items:center;gap:10px;text-decoration:none}.portal-brand>span{display:grid;place-items:center;width:46px;height:46px;border-radius:14px;background:var(--brand);color:#fff;font-weight:900}.portal-brand div{display:grid}.portal-brand small{color:var(--muted)}.portal-topbar nav{display:flex;gap:5px;align-items:center}.portal-topbar nav a{text-decoration:none;padding:10px 11px;border-radius:10px;color:#475467;white-space:nowrap}.portal-topbar nav a.active,.portal-topbar nav a:hover{background:var(--soft);color:var(--brand);font-weight:700}.portal-container{max-width:1180px;margin:0 auto;padding:34px 24px 56px}.student-hero{display:flex;align-items:center;justify-content:space-between;gap:18px;margin:8px 0 26px}.student-hero h1,.page-heading h1{font-size:32px;margin:0 0 8px}.student-hero p,.page-heading p{color:var(--muted);margin:0}.year-chip{padding:10px 16px;background:var(--soft);border:1px solid #f4c8dc;color:var(--brand);border-radius:999px;font-weight:800}.portal-grid.two{display:grid;grid-template-columns:1.35fr .65fr;gap:20px}.portal-card{padding:24px}.card-title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}.card-title-row h2,.profile-card h2{margin:0 0 14px}.card-title-row>a{color:var(--brand);text-decoration:none;font-weight:700}.next-exam-date{display:flex;justify-content:space-between;gap:14px;align-items:center;padding:16px 0;border-top:1px solid var(--line);margin-top:6px}.next-exam-date>div{display:grid;gap:4px}.next-exam-date strong{font-size:21px}.next-exam-date span{color:var(--muted)}.next-exam-card h3{margin:4px 0 14px}.exam-detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:12px 0}.exam-detail-grid>div{background:#f9fafb;border:1px solid #eef0f3;border-radius:14px;padding:12px;display:grid;gap:4px}.exam-detail-grid small{color:var(--muted)}.launch-panel{margin-top:16px;padding:14px;border-radius:14px;background:#f9fafb;border:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:16px}.launch-panel>div{display:grid;gap:4px}.launch-panel small{color:var(--muted)}.launch-panel.ready{background:#ecfdf3;border-color:#abefc6}.launch-panel.scheduled{background:#fffaf0;border-color:#fde7b2}.launch-panel.ended{background:#f9fafb}.profile-card dl{margin:0}.profile-card dl>div{padding:12px 0;border-top:1px solid var(--line)}.profile-card dt{color:var(--muted);font-size:13px}.profile-card dd{margin:5px 0 0;font-weight:700}.section-heading{display:flex;justify-content:space-between;gap:24px;align-items:end;margin:30px 0 14px}.section-heading h2{margin:0}.section-heading>p{max-width:560px;color:var(--muted);font-size:13px;line-height:1.65;margin:0}.year-status-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.year-status-card{background:#fff;border:1px solid var(--line);border-radius:18px;padding:17px;display:flex;align-items:center;gap:12px;box-shadow:0 6px 18px rgba(16,24,40,.035)}.year-number{width:44px;height:44px;border-radius:13px;display:grid;place-items:center;background:#f2f4f7;font-weight:900}.year-status-card>div:nth-child(2){display:grid;gap:4px;flex:1}.year-status-card span,.year-status-card small{color:var(--muted);font-size:13px}.year-status-card.waiting .year-number{background:#fff4e5;color:#b54708}.year-status-card.done .year-number{background:#ecfdf3;color:var(--ok)}.year-status-card.absent .year-number{background:#fef3f2;color:var(--danger)}.portal-shortcuts{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-top:20px}.shortcut{min-height:105px;background:#fff;border:1px solid var(--line);border-radius:18px;padding:18px;display:flex;gap:13px;text-decoration:none;box-shadow:0 6px 20px rgba(16,24,40,.035)}.shortcut:hover{border-color:#f1b6d0;transform:translateY(-1px)}.shortcut>span{font-size:26px}.shortcut div{display:grid;align-content:center;gap:5px}.shortcut small{color:var(--muted);line-height:1.4}.page-heading{margin:8px 0 24px}.page-heading p{line-height:1.7;max-width:850px}.session-list{display:grid;gap:16px}.session-card{display:grid;grid-template-columns:190px 1fr;padding:0;overflow:hidden}.session-date{padding:24px;background:var(--soft);display:grid;align-content:center;gap:6px}.session-date strong{font-size:20px}.session-date span{color:var(--muted)}.session-main{display:flex;justify-content:space-between;gap:18px;padding:24px}.session-main h2{margin:10px 0 7px}.session-main p{margin:4px 0;color:var(--muted)}.session-copy{min-width:0}.booking-source{font-size:13px}.session-actions{min-width:190px;display:grid;align-content:center;gap:9px}.session-actions small{color:var(--muted);line-height:1.45}.launch-state{font-size:13px;font-weight:800}.launch-state.ready{color:var(--ok)}.launch-state.scheduled{color:var(--warning)}.launch-state.ended{color:var(--muted)}.empty-state{text-align:center;padding:42px 24px!important;color:var(--muted)}.empty-state strong{color:var(--ink);font-size:18px}.table-card{padding:0;overflow:hidden}.portal-table-wrap{overflow:auto}.portal-table{width:100%;border-collapse:collapse}.portal-table th,.portal-table td{text-align:left;padding:16px 18px;border-bottom:1px solid var(--line);vertical-align:top}.portal-table th{background:#f9fafb;color:#475467;font-size:13px}.portal-table small{color:var(--muted)}.status-pill{display:inline-flex;align-items:center;padding:6px 10px;border-radius:999px;font-size:13px;font-weight:800;background:#f2f4f7;color:#475467}.status-pill.registered{background:#ecfdf3;color:var(--ok)}.status-pill.completed,.status-pill.attended{background:#eff8ff;color:var(--blue)}.status-pill.absent{background:#fff4ed;color:#c4320a}.result-pending{color:var(--muted);font-size:13px}.feature-placeholder{display:grid;grid-template-columns:90px 1fr;gap:22px;align-items:start}.feature-icon{width:82px;height:82px;border-radius:22px;background:var(--soft);display:grid;place-items:center;font-size:38px}.feature-placeholder h2{margin:2px 0 10px}.feature-placeholder p{color:var(--muted);line-height:1.7}.info-note{margin-top:18px;border:1px solid var(--line);border-radius:14px;padding:13px 15px;background:#f9fafb;display:grid;gap:4px}.info-note span{color:var(--muted)}.learning-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}.learning-card{display:flex;gap:16px}.learning-card>span{font-size:32px}.learning-card h2{margin:0 0 7px;font-size:19px}.learning-card p{margin:0;color:var(--muted);line-height:1.65}
@media(max-width:1050px){.portal-topbar{position:static;align-items:flex-start;padding:14px 18px;gap:12px;flex-direction:column}.portal-topbar nav{width:100%;overflow:auto}.year-status-grid{grid-template-columns:1fr 1fr}.portal-shortcuts{grid-template-columns:1fr 1fr}}@media(max-width:900px){.portal-login-shell{grid-template-columns:1fr;gap:24px;padding-top:28px}.portal-login-brand h1{font-size:34px}.portal-grid.two{grid-template-columns:1fr}.session-card{grid-template-columns:1fr}.session-date{padding:16px 20px}.session-main{flex-direction:column}.session-actions{min-width:0}.section-heading{align-items:flex-start;flex-direction:column;gap:8px}}@media(max-width:600px){.portal-login-brand{display:block}.portal-mark{margin-bottom:18px}.portal-container{padding:24px 14px 40px}.student-hero{align-items:flex-start;flex-direction:column}.portal-shortcuts,.year-status-grid,.learning-grid,.exam-detail-grid{grid-template-columns:1fr}.session-main{padding:19px}.portal-topbar nav a{padding:8px 10px}.launch-panel{align-items:stretch;flex-direction:column}.feature-placeholder{grid-template-columns:1fr}}
.year-status-card.passed .year-number{background:#ecfdf3;color:var(--ok)}.year-status-card.passed{border-color:#abefc6}.year-status-card.failed .year-number{background:#fef3f2;color:var(--danger)}.year-status-card.failed{border-color:#fecdca}.history-section-title{padding:18px 20px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}.history-section-title h2{margin:0;font-size:19px}.history-section-title span{color:var(--muted);font-size:13px}.result-pill{display:inline-flex;padding:6px 10px;border-radius:999px;font-weight:800;font-size:13px}.result-pill.pass{background:#ecfdf3;color:var(--ok)}.result-pill.fail{background:#fef3f2;color:var(--danger)}.result-pill.pending{background:#f2f4f7;color:var(--muted)}.portal-link{color:var(--brand);font-weight:800;text-decoration:none}.certificate-grid{display:grid;gap:16px}.certificate-card{display:grid;grid-template-columns:76px 1fr auto;align-items:center;gap:18px}.certificate-card.revoked{opacity:.65}.certificate-year{width:70px;height:70px;border-radius:20px;background:var(--soft);color:var(--brand);display:grid;place-items:center;font-size:24px;font-weight:900}.certificate-card h2{margin:7px 0 5px}.certificate-card p{margin:0 0 6px;color:var(--muted)}.certificate-card small{color:var(--muted)}.certificate-open{text-decoration:none;white-space:nowrap}@media(max-width:700px){.certificate-card{grid-template-columns:60px 1fr}.certificate-year{width:56px;height:56px}.certificate-open{grid-column:1/-1;text-align:center}}
