:root{--color-bg:#f8f7f3;--color-surface:#fff;--color-surface-soft:#f1f7f4;--color-surface-warm:#fff7f2;--color-ink:#252a31;--color-ink-muted:#667085;--color-border:#d9e2dc;--color-border-control:#8a9490;--color-border-strong:#5f6b66;--color-primary:#0f766e;--color-primary-strong:#0b5f59;--color-primary-soft:#dff5f1;--color-primary-hover:#0b5f59;--color-primary-active:#084c48;--color-line:#06c755;--color-line-hover:#05ad4b;--color-line-active:#04833a;--color-line-soft:#e4f9ec;--color-line-ink:#062014;--color-danger:#b42318;--color-danger-strong:#912018;--color-danger-soft:#fee4e2;--color-warning:#a15c07;--color-warning-soft:#fff3d6;--color-success:#067647;--color-success-soft:#dcfae6;--color-focus:#2563eb;--color-link:#005ea8;--color-link-visited:#6b3fa0;--color-disabled-bg:#e8ece9;--color-disabled-ink:#5f6b66;--radius-xs:4px;--radius-sm:6px;--radius-md:8px;--radius-lg:12px;--radius-xl:16px;--shadow-sm:0 1px 2px #18221f0f;--shadow-md:0 8px 24px #18221f14;--shadow-lg:0 18px 44px #18221f1a;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-8:32px;--font-body:16px;--font-support:14px;--font-label:16px;--container-admin:1180px;--container-auth:440px;--container-liff:560px;color:var(--color-ink);background:var(--color-bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;line-height:1.6}
*{box-sizing:border-box}html{scroll-behavior:smooth;font-size:100%}body{background:var(--color-bg);color:var(--color-ink);font-size:var(--font-body);margin:0;line-height:1.6}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit}button{color:inherit}input,select,textarea{border:1px solid var(--color-border-control);border-radius:var(--radius-md);width:100%;min-height:48px;color:var(--color-ink);background:#fff;outline:none;padding:11px 14px;font-size:16px;line-height:1.5}input:disabled,select:disabled,textarea:disabled{border-color:var(--color-border-control);background:var(--color-disabled-bg);color:var(--color-disabled-ink);cursor:not-allowed;opacity:1}input[aria-invalid=true],select[aria-invalid=true],textarea[aria-invalid=true]{border-color:var(--color-danger);box-shadow:0 0 0 1px var(--color-danger)}textarea{resize:vertical;min-height:132px}input:focus-visible,select:focus-visible,textarea:focus-visible,button:focus-visible,a:focus-visible{outline:3px solid var(--color-focus);outline-offset:3px;box-shadow:0 0 0 2px #fff}h1,h2,h3,p{margin:0}h1,h2,h3,p,li,strong,.button,.field-label,.notice,.brand-mark{line-break:strict;word-break:auto-phrase}h1,h2,h3{text-wrap:pretty}.button{text-wrap:balance}h1{max-width:760px;font-size:clamp(1.5rem,1.2rem + 1vw,2rem);line-height:1.35}h2{font-size:clamp(1.25rem,1.15rem + .35vw,1.5rem);line-height:1.4}h3{font-size:1.0625rem;line-height:1.5}p,li,dd,dt{overflow-wrap:anywhere}::selection{background:var(--color-primary-soft);color:var(--color-ink)}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}caption{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
.auth-layout{background:radial-gradient(circle at top left, #dff5f1bf, transparent 34rem), var(--color-bg);place-items:center;min-height:100dvh;padding:24px 16px;display:grid}.auth-card{width:min(var(--container-auth), 100%);border:1px solid var(--color-border);border-radius:var(--radius-xl);background:var(--color-surface);box-shadow:var(--shadow-lg);padding:32px}.auth-card .brand-mark{justify-content:center;margin-bottom:24px;padding:6px 0 4px;font-size:22px;line-height:1.35;display:flex}.auth-form{gap:20px;margin-top:0;display:grid}.auth-heading{text-align:center;justify-items:center;gap:8px;margin-bottom:24px;display:grid}.auth-heading p{color:var(--color-ink-muted);line-height:1.7}.auth-form .field-label{text-align:center;justify-content:center}.skip-link{z-index:100;border-radius:var(--radius-md);background:var(--color-ink);color:#fff;min-height:44px;padding:10px 14px;font-weight:800;position:fixed;top:8px;left:8px;transform:translateY(-160%)}.skip-link:focus{transform:translateY(0)}.local-test-heading{gap:8px;display:grid}.local-test-heading h1{font-size:28px}.local-test-heading p{color:var(--color-ink-muted);line-height:1.7}.dashboard-shell{grid-template-columns:260px minmax(0,1fr);min-height:100dvh;display:grid}.side-nav{border-right:1px solid var(--color-border);background:#fff;flex-direction:column;height:100dvh;padding:22px 16px;display:flex;position:sticky;top:0}.side-nav-header{justify-content:space-between;align-items:center;gap:12px;display:flex}.side-nav-close,.menu-backdrop{display:none}.side-nav nav{flex:1;align-content:start;gap:6px;margin-top:26px;display:grid}.side-nav-footer{border-top:1px solid var(--color-border);margin-top:auto;padding-top:14px}.nav-link{border-radius:var(--radius-md);min-height:48px;color:var(--color-ink-muted);align-items:center;gap:10px;padding:10px 12px;font-size:16px;font-weight:700;display:inline-flex}.nav-link.active,.nav-link:hover{background:var(--color-primary-soft);color:var(--color-primary-strong)}.nav-link.active{box-shadow:inset 4px 0 0 var(--color-primary)}.nav-logout-button{cursor:pointer;text-align:left;background:0 0;border:0;width:100%}.nav-logout-button:hover{background:var(--color-danger-soft);color:var(--color-danger)}.main-area{width:min(var(--container-admin), 100%);padding:28px}.main-area.wide{width:100%;max-width:none}.liff-layout{background:var(--color-surface-warm);min-height:100dvh;padding:20px 16px 104px}.liff-container{width:min(var(--container-liff), 100%);margin:0 auto}.liff-page-header{margin-bottom:22px}.liff-title-row{grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:12px;display:grid}.liff-title-row h1{text-wrap:balance;min-width:0}.liff-logout-button{white-space:nowrap}.liff-hero{align-content:center;gap:18px;min-height:calc(100dvh - 128px);display:grid}.liff-hero h1{font-size:32px}.mobile-app-header{display:none}.brand-mark{color:var(--color-primary-strong);align-items:center;gap:9px;font-weight:800;line-height:1.4;display:inline-flex}.brand-mark svg{color:var(--color-primary)}.page-header{justify-content:space-between;align-items:flex-start;gap:20px;margin-bottom:22px;display:flex}.page-actions,.button-row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.button-row.end{justify-content:flex-end}.eyebrow{color:var(--color-primary);margin-bottom:8px;font-size:14px;font-weight:800}.lead,.section-heading p,.menu-item p,.metric-card p,.person-copy p,.record-card p,.empty-state p,.liff-hero p{color:var(--color-ink-muted);margin-top:8px;font-size:16px;line-height:1.7}.subtle-link,.back-link{color:var(--color-ink-muted);align-items:center;gap:6px;min-height:44px;font-size:16px;font-weight:700;display:inline-flex}.table-link{min-height:44px;color:var(--color-primary);text-underline-offset:.2em;align-items:center;font-weight:700;text-decoration:underline;display:inline-flex}.back-link{margin-bottom:12px}.panel,.form-section,.side-panel,.table-panel,.hero-card,.empty-state{border:1px solid var(--color-border);border-radius:var(--radius-lg);background:var(--color-surface);box-shadow:var(--shadow-sm)}.panel,.side-panel,.empty-state{padding:24px}.panel+.panel,.panel+.notice,.panel+.form-section,.panel+.empty-state,.notice+.panel,.notice+.form-section,.notice+.two-column,.notice+.empty-state,.form-section+.panel,.form-section+.notice,.form-block+.notice,.form-grid+.notice,.instruction-list+.notice,.hero-card+.panel,.hero-card+.notice,.empty-state+.panel,.empty-state+.notice{margin-top:16px}.form-section{gap:18px;padding:24px;display:grid}.form-section+.form-section{margin-top:16px}.form-surface{min-width:0}.form-actions{flex-wrap:wrap;align-items:center;gap:10px;margin-top:24px;display:flex}.form-block{margin-top:18px}.panel-actions{flex-wrap:wrap;align-items:center;gap:10px;margin-top:18px;display:flex}.section-heading{margin-bottom:16px}.section-heading.compact{margin-bottom:12px}.form-grid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:14px;display:grid}.form-grid.one{grid-template-columns:1fr}.field{color:var(--color-ink);gap:8px;font-size:16px;font-style:normal;font-weight:700;display:grid}.field.full,.form-grid .notice{grid-column:1/-1}.field-label{justify-content:space-between;align-items:flex-start;gap:10px;display:flex}.field-label small{border-radius:999px;padding:2px 8px;font-size:14px;font-weight:700}.field-label small.optional{background:var(--color-surface-soft);color:var(--color-ink)}.field-label small.required{background:var(--color-danger-soft);color:var(--color-danger)}.field em{color:var(--color-ink-muted);font-size:14px;font-style:normal;font-weight:500;line-height:1.5}.field-error{color:var(--color-danger);font-size:14px;font-style:normal;font-weight:700;line-height:1.5}.input-wrap{display:block;position:relative}.input-wrap.with-button input{padding-right:48px}.input-wrap button{border-radius:var(--radius-sm);cursor:pointer;background:0 0;border:0;place-items:center;width:38px;min-height:0;display:grid;position:absolute;top:0;bottom:0;right:6px}.input-wrap button:hover{background:var(--color-surface-soft)}.input-wrap button svg{display:block}.button,.icon-button{border-radius:var(--radius-md);cursor:pointer;border:1px solid #0000;justify-content:center;align-items:center;gap:8px;font-weight:800;line-height:1.35;transition:border-color .14s,background .14s,box-shadow .14s;display:inline-flex}.button:hover,.icon-button:hover{box-shadow:var(--shadow-sm)}.button:disabled,.icon-button:disabled{cursor:not-allowed;opacity:1;box-shadow:none}.button.sm{min-height:44px;padding:9px 14px;font-size:14px}.button.md{min-height:48px;padding:11px 18px;font-size:16px}.button.lg{min-height:52px;padding:12px 18px}.button.wide{width:100%}.button.primary{background:var(--color-primary);color:#fff}.button.primary:hover{background:var(--color-primary-hover)}.button.primary:active{background:var(--color-primary-active)}.button.secondary{border-color:var(--color-border-control);color:var(--color-ink);background:#fff}.button.secondary:hover,.icon-button:hover{border-color:var(--color-border-strong);background:var(--color-surface-soft)}.button.secondary:active,.icon-button:active{background:var(--color-primary-soft)}.button.ghost{color:var(--color-primary-strong);background:0 0}.button.ghost:hover{background:var(--color-surface-soft)}.button.ghost:active{background:var(--color-primary-soft)}.button.danger{border-color:var(--color-danger);background:var(--color-danger-soft);color:var(--color-danger)}.button.danger:hover{background:var(--color-danger);color:#fff}.button.danger:active{background:var(--color-danger-strong);color:#fff}.button.line{background:var(--color-line);color:var(--color-line-ink)}.button.line:hover{background:var(--color-line-hover)}.button.line:active{background:var(--color-line-active);color:#fff}.button:disabled{border-color:var(--color-border);background:var(--color-disabled-bg);color:var(--color-disabled-ink)}.icon-button{border-color:var(--color-border-control);background:#fff;width:44px;height:44px}.notice{border-radius:var(--radius-md);color:var(--color-ink-muted);border:1px solid;border-left-width:4px;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;padding:14px 16px;display:grid}.notice>svg{display:block}.notice+.notice{margin-top:12px}.notice p{margin:0;line-height:1.55}.notice strong{line-height:1.45;display:block}.notice strong+p{margin-top:4px}.notice.info{background:var(--color-surface-soft);color:var(--color-primary-strong)}.notice.error{background:var(--color-danger-soft);color:var(--color-danger)}.notice.success{background:var(--color-success-soft);color:var(--color-success)}.notice.warning{background:var(--color-warning-soft);color:var(--color-warning)}.notice-action{align-self:center}.status-badge{min-height:30px;color:var(--color-ink-muted);white-space:nowrap;background:#eef0f2;border-radius:999px;justify-content:center;align-items:center;gap:5px;padding:4px 10px;font-size:14px;font-weight:800;display:inline-flex}.status-badge.success{background:var(--color-success-soft);color:var(--color-success)}.status-badge.primary{background:var(--color-primary-soft);color:var(--color-primary-strong)}.status-badge.warning{background:var(--color-warning-soft);color:var(--color-warning)}.status-badge.danger{background:var(--color-danger-soft);color:var(--color-danger)}.stats-grid{grid-template-columns:repeat(auto-fit,minmax(220px,270px));gap:14px;margin-bottom:18px;display:grid}.metric-card{border:1px solid var(--color-border);border-radius:var(--radius-lg);background:#fff;gap:8px;padding:18px;display:grid}.metric-card span{color:var(--color-ink-muted);font-size:14px;font-weight:800}.metric-card strong{font-size:32px;line-height:1}.metric-card.success strong{color:var(--color-success)}.metric-card.warning strong{color:var(--color-warning)}.metric-card.primary strong{color:var(--color-primary-strong)}.menu-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;display:grid}.menu-item{border:1px solid var(--color-border);border-radius:var(--radius-lg);background:#fff;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:14px;min-height:112px;padding:18px;display:grid}.menu-item:hover,.record-card:hover,.activity-card:hover,.person-card:hover{box-shadow:var(--shadow-md);border-color:#0f766e73}.dashboard-section{border:1px solid var(--color-border);border-radius:var(--radius-lg);background:#fff;gap:14px;padding:18px;display:grid}.section-heading{justify-content:space-between;align-items:center;gap:12px;display:flex}.section-heading h2{margin:2px 0 0;font-size:20px}.activity-list{gap:10px;display:grid}.activity-card{border:1px solid var(--color-border);border-radius:var(--radius-md);color:inherit;background:#fff;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:14px;padding:14px;text-decoration:none;display:grid}.activity-card.recent{background:var(--color-primary-soft);border-color:#0f766e61}.notification-card{grid-template-columns:minmax(0,1fr)}.notification-card:hover{border-color:var(--color-border);box-shadow:none}.notification-card.recent:hover{border-color:#0f766e61}.activity-entity-link{color:var(--color-primary-strong);text-underline-offset:.18em;text-decoration:underline}.activity-entity-link:hover{text-decoration-thickness:2px}.activity-card>div{min-width:0}.activity-card>svg{justify-self:end}.activity-title-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.activity-title-row h3{margin:0;font-size:17px}.activity-card p{color:var(--color-ink-muted);margin:5px 0 0;font-size:14px}button.activity-card{width:100%;font:inherit;text-align:left;cursor:pointer}.filter-bar{border:1px solid var(--color-border);border-radius:var(--radius-lg);background:#fff;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:14px;padding:16px;display:flex}.filter-bar select{width:auto;min-width:170px}.search-field{flex:280px;position:relative}.search-field svg{color:var(--color-ink-muted);position:absolute;top:50%;left:12px;transform:translateY(-50%)}.search-field input{padding-left:40px}.two-column{grid-template-columns:minmax(0,2fr) minmax(280px,1fr);align-items:start;gap:18px;display:grid}.stacked-column{gap:18px;min-width:0;display:grid}.assignment-actions .button{min-width:160px}.assignment-form{grid-column:1/-1}.side-panel{gap:16px;display:grid;position:sticky;top:20px}.profile-panel{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:18px;margin-bottom:18px;display:grid}.profile-copy{min-width:0}.profile-copy p{color:var(--color-ink-muted);margin-top:8px;line-height:1.7}.avatar{background:var(--color-primary-soft);color:var(--color-primary-strong);border-radius:50%;flex:none;place-items:center;font-weight:900;display:grid;overflow:hidden}.avatar.loading{background:linear-gradient(90deg,#eef0ed 0%,#f8faf8 45%,#eef0ed 90%) 0 0/220% 100%;animation:1.2s ease-in-out infinite shimmer}.avatar.sm{width:42px;height:42px}.avatar.md{width:58px;height:58px}.avatar.lg{width:76px;height:76px;font-size:24px}.avatar img{object-fit:cover;width:100%;height:100%}.photo-uploader{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);grid-template-columns:auto minmax(0,1fr);align-items:center;gap:14px;padding:14px;display:grid}.photo-uploader.full{grid-column:1/-1}.photo-uploader-copy{gap:9px;min-width:0;display:grid}.photo-uploader-copy em{color:var(--color-ink-muted);font-size:14px;font-style:normal}.photo-uploader-copy .success-text{color:var(--color-success)}.photo-uploader-copy .error-text{color:var(--color-danger)}.list{gap:12px;display:grid}.choice-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.choice-fieldset{border:0;min-width:0;margin:0;padding:0}.choice-card{border:1px solid var(--color-border-control);border-radius:var(--radius-md);min-height:56px;color:var(--color-ink);cursor:pointer;background:#fff;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;padding:12px;font-size:16px;font-weight:700;display:grid}.choice-card:hover{border-color:var(--color-primary)}.choice-card.selected{border:2px solid var(--color-primary);background:var(--color-primary-soft);color:var(--color-primary-strong)}.choice-card input{width:20px;min-height:20px;accent-color:var(--color-primary);margin:0;padding:0}
.matching-question{gap:20px;display:grid}.matching-heading{margin-bottom:0}.matching-heading>div{gap:4px;display:grid}.matching-heading p{color:var(--color-ink-muted);line-height:1.65}.matching-progress{color:var(--color-primary-strong);gap:8px;font-size:14px;font-weight:800;display:grid}.matching-progress>div{background:var(--color-primary-soft);border-radius:999px;height:7px;overflow:hidden}.matching-progress i{border-radius:inherit;background:var(--color-primary);height:100%;transition:width .18s;display:block}.recommendation-item{gap:8px;display:grid}.recommendation-more{border-top:1px solid var(--color-border);gap:10px;margin-top:20px;padding-top:20px;display:grid}.recommendation-more p{color:var(--color-ink-muted);font-size:var(--font-support)}.button.matching-back-button{margin-bottom:10px;padding-inline:0 8px}.recommendation-meta{justify-content:space-between;align-items:center;gap:10px;display:flex}.recommendation-meta strong{color:var(--color-primary-strong);font-size:14px}.reason-chips{flex-wrap:wrap;gap:6px;display:flex}.reason-chips span{background:var(--color-primary-soft);color:var(--color-primary-strong);border-radius:999px;padding:5px 9px;font-size:14px;font-weight:700}.person-card,.record-card,.hero-card{border:1px solid var(--color-border);border-radius:var(--radius-lg);background:#fff;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:16px;padding:16px;display:grid}.record-card{grid-template-columns:minmax(0,1fr) auto}.record-card.with-avatar,.record-card.local-test-student-card{grid-template-columns:auto minmax(0,1fr) auto}.record-card>svg:last-child{justify-self:end}button.record-card{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer}.person-card.selected{border:2px solid var(--color-primary);background:var(--color-primary-soft)}.person-card{grid-template-columns:minmax(0,1fr) auto;align-items:start;row-gap:12px}.person-card-heading{align-items:center;gap:16px;min-width:0;display:flex}.person-card>.person-copy{grid-column:1}.person-card>.person-copy p{margin-top:0}.person-card-bio{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.person-card-actions{flex-wrap:wrap;grid-area:1/2/span 2;justify-content:flex-end;align-self:center;gap:8px;display:inline-flex}.person-copy,.record-card div{min-width:0}.person-copy small,.record-card small,.user-cell small{color:var(--color-ink-muted);margin-top:5px;font-size:14px;display:block}.person-title-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.hero-card{background:#fff;margin-bottom:14px}button.assigned-concierge-card{width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer}.assigned-concierge-detail{min-height:44px;color:var(--color-primary-strong);white-space:nowrap;align-items:center;gap:4px;font-size:14px;font-weight:800;display:inline-flex}.copy-box{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface-soft);justify-content:space-between;align-items:center;gap:12px;padding:12px;display:flex}.copy-box strong{overflow-wrap:anywhere;font-size:20px}.line-contact-heading,.student-profile-heading{justify-content:stretch;align-items:start;gap:6px;display:grid}.line-contact-heading p,.student-profile-heading p{margin:0}.line-contact-instructions{border-top:1px solid var(--color-border);margin-top:20px;padding-top:20px}.line-contact-instructions h3{margin:0;font-size:18px}.instruction-list{gap:10px;margin:10px 0 0;padding-left:20px;display:grid}.mobile-action-bar{z-index:20;padding:12px 16px max(12px, env(safe-area-inset-bottom));border-top:1px solid var(--color-border);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#fffffff0;display:grid;position:fixed;bottom:0;left:0;right:0;box-shadow:0 -10px 28px #18221f14}.mobile-action-inner{width:min(var(--container-liff), 100%);gap:6px;margin:0 auto;display:grid}.mobile-action-hint{color:var(--color-ink);text-align:center;font-size:14px;font-weight:700;line-height:1.45}.mobile-action-bar .button{width:min(var(--container-liff), 100%);margin:0 auto}.info-row{border-top:1px solid #edf2ef;justify-content:space-between;align-items:flex-start;gap:16px;padding:12px 0;display:flex}.info-row span{color:var(--color-ink-muted);font-size:14px}.info-row strong{overflow-wrap:anywhere;text-align:right;min-width:0;max-width:68%;font-size:16px}.table-panel{overflow:hidden}.table-wrap{overflow-x:auto}.table-wrap:focus-visible{outline:3px solid var(--color-focus);outline-offset:-3px}table{border-collapse:collapse;width:100%;font-size:14px}th,td{border-bottom:1px solid var(--color-border);text-align:left;vertical-align:middle;padding:13px 12px}th{color:var(--color-ink-muted);background:var(--color-surface-soft);font-size:14px;font-weight:900}tr:last-child td{border-bottom:0}.numeric{text-align:right;display:block}.user-cell{align-items:center;gap:12px;min-width:210px;display:flex}.user-cell div{min-width:0}.user-cell strong{overflow-wrap:anywhere;display:block}.history-identity-cell{min-width:190px}.history-identity-cell strong,.history-identity-cell small{overflow-wrap:anywhere;display:block}.history-identity-cell small{color:var(--color-ink-muted);margin-top:4px;font-size:12px;line-height:1.5}.empty-state{color:var(--color-ink-muted);text-align:center;justify-items:center;gap:10px;display:grid}.empty-state h2{color:var(--color-ink)}.skeleton-stack{gap:10px;display:grid}.skeleton-line{background:linear-gradient(90deg,#eef0ed 0%,#f8faf8 45%,#eef0ed 90%) 0 0/220% 100%;border-radius:999px;height:18px;animation:1.2s ease-in-out infinite shimmer;display:block}.skeleton-line.inline{vertical-align:middle;max-width:100%;display:inline-block}.skeleton-line:nth-child(2){width:78%}.skeleton-line:nth-child(3){width:54%}.skeleton-row .skeleton-line{width:min(150px,100%)}.skeleton-row .skeleton-line.wide{width:min(220px,100%)}.skeleton-row .skeleton-line.short{width:min(92px,100%)}.dialog-backdrop{z-index:50;background:#252a316b;place-items:center;padding:18px;display:grid;position:fixed;inset:0}.profile-detail-backdrop{animation:.16s ease-out both backdrop-fade-in}.profile-detail-backdrop.closing{animation:.18s ease-in both backdrop-fade-out}.profile-detail-backdrop.closing .profile-detail-dialog{animation:.18s ease-in both dialog-fade-out}.dialog-panel{border:1px solid var(--color-border);border-radius:var(--radius-xl);width:min(420px,100%);box-shadow:var(--shadow-lg);background:#fff;padding:24px}.dialog-panel p{color:var(--color-ink-muted);margin:10px 0 20px;line-height:1.7}.profile-detail-dialog{gap:18px;width:min(640px,100%);max-height:calc(100dvh - 48px);padding-top:28px;animation:.16s ease-out both dialog-fade-in;display:grid;position:relative;overflow:auto}.profile-detail-header{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:14px;padding-right:44px;display:grid}.profile-detail-header h2{overflow-wrap:anywhere}.profile-detail-close{z-index:1;width:38px;height:38px;position:absolute;top:14px;right:14px}.sheet-handle{display:none}.profile-detail-lead{color:var(--color-ink);margin:0;font-size:16px;line-height:1.75}.profile-detail-grid{border-top:1px solid var(--color-border);grid-template-columns:minmax(0,1fr);display:grid}.card-registration-refresh-row{justify-items:end;gap:4px;padding-bottom:8px;display:grid}.card-registration-refresh-row .info-row{width:100%}@keyframes spin{to{transform:rotate(360deg)}}.profile-detail-sections{gap:12px;display:grid}.profile-detail-sections section{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface-soft);padding:14px}.profile-detail-sections h3{margin-bottom:8px}.profile-detail-sections p{color:var(--color-ink-muted);margin:0;line-height:1.75}.crop-dialog{justify-items:center;gap:16px;display:grid}.crop-dialog h2{justify-self:start}.crop-frame{background:var(--color-primary-soft);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;border-radius:50%;width:280px;height:280px;position:relative;overflow:hidden}.crop-frame:active{cursor:grabbing}.crop-frame img{object-fit:contain;pointer-events:none;max-width:none;position:absolute;top:50%;left:50%}.crop-mask{pointer-events:none;border:2px solid #fff;border-radius:50%;position:absolute;inset:0;box-shadow:inset 0 0 0 999px #252a3147}.crop-zoom{width:100%}.crop-zoom input[type=range]{min-height:32px;accent-color:var(--color-primary);padding:0}.dialog-icon{background:var(--color-warning-soft);width:42px;height:42px;color:var(--color-warning);border-radius:50%;place-items:center;margin-bottom:12px;display:grid}.spin{animation:.8s linear infinite spin}@keyframes shimmer{to{background-position:-220% 0}}@keyframes dialog-fade-in{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes sheet-slide-up{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes sheet-slide-down{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(100%)}}@keyframes dialog-fade-out{0%{opacity:1;transform:translateY(0)scale(1)}to{opacity:0;transform:translateY(8px)scale(.98)}}@keyframes backdrop-fade-in{0%{background:#252a3100}to{background:#252a316b}}@keyframes backdrop-fade-out{0%{background:#252a316b}to{background:#252a3100}}.overview-roster-filters{border:1px solid var(--color-border);border-radius:var(--radius-lg) var(--radius-lg) 0 0;background:var(--color-surface);box-shadow:var(--shadow-sm);border-bottom:0;grid-template-columns:minmax(420px,680px) minmax(300px,1fr) auto minmax(220px,auto);align-items:center;gap:14px;margin-bottom:0;padding:14px 16px;display:grid}.overview-roster-search{position:relative}.overview-roster-search svg{color:var(--color-ink-muted);pointer-events:none;position:absolute;top:50%;left:14px;transform:translateY(-50%)}.overview-roster-search input{min-height:44px;padding:9px 14px 9px 42px}.overview-roster-disconnected{border-radius:var(--radius-md);white-space:nowrap;cursor:pointer;align-items:center;gap:9px;min-height:44px;padding:8px 10px;font-size:14px;font-weight:700;display:inline-flex}.overview-roster-disconnected:hover{background:var(--color-surface-soft)}.overview-roster-disconnected input{width:18px;height:18px;min-height:18px;accent-color:var(--color-primary);margin:0}.overview-roster-result-count{color:var(--color-ink-muted);white-space:nowrap;font-size:14px;font-weight:700}.overview-roster-sort{white-space:nowrap;grid-template-columns:auto minmax(170px,1fr);align-items:center;gap:8px;font-size:14px;font-weight:700;display:grid}.overview-roster-sort select{min-height:44px;padding-top:8px;padding-bottom:8px}.overview-roster-table{border:1px solid var(--color-border);border-radius:0 0 var(--radius-lg) var(--radius-lg);background:var(--color-surface);box-shadow:var(--shadow-sm);overflow:hidden}.overview-roster-header,.overview-roster-row{grid-template-columns:minmax(260px,1.25fr) minmax(170px,.8fr) minmax(520px,3.7fr);display:grid}.overview-roster-header{z-index:2;border-bottom:1px solid var(--color-border);background:var(--color-surface-soft);color:var(--color-ink-muted);font-size:13px;font-weight:900;position:sticky;top:0}.overview-roster-header>div{border-right:1px solid var(--color-border);padding:13px 18px}.overview-roster-header>div:last-child{border-right:0}.overview-roster-row{border-bottom:1px solid var(--color-border);min-height:104px}.overview-roster-row:last-child{border-bottom:0}.overview-roster-row:nth-child(2n){background:#fcfdfc}.overview-roster-row>div{border-right:1px solid var(--color-border);min-width:0;padding:16px 18px}.overview-roster-row>div:last-child{border-right:0}.overview-roster-concierge{align-items:center;gap:14px;display:flex}.overview-roster-concierge-copy{justify-items:start;gap:5px;min-width:0;display:grid}.overview-roster-concierge a,.overview-roster-concierge strong{max-width:100%;color:var(--color-ink);text-overflow:ellipsis;white-space:nowrap;font-size:16px;font-weight:900;line-height:1.4;overflow:hidden}.overview-roster-concierge a:hover{color:var(--color-primary-strong);text-underline-offset:3px;text-decoration:underline}.overview-roster-concierge span.accepting,.overview-roster-concierge span.paused,.overview-roster-concierge span.unassigned-count{border-radius:var(--radius-sm);align-items:center;min-height:24px;padding:2px 8px;font-size:12px;font-weight:800;display:inline-flex}.overview-roster-concierge span.accepting{background:var(--color-primary-soft);color:var(--color-primary-strong)}.overview-roster-concierge span.paused{background:var(--color-disabled-bg);color:var(--color-ink-muted)}.overview-roster-count{align-items:center;display:flex}.overview-roster-capacity{gap:8px;width:min(100%,150px);display:grid}.overview-roster-capacity>span:first-child{color:var(--color-ink-muted);font-variant-numeric:tabular-nums;font-size:14px}.overview-roster-capacity strong{color:var(--color-ink);font-size:17px}.overview-roster-capacity-track{background:var(--color-disabled-bg);border-radius:999px;width:100%;height:5px;display:block;overflow:hidden}.overview-roster-capacity-track>span{border-radius:inherit;background:var(--color-primary);height:100%;display:block}.overview-roster-capacity-track>span.full{background:var(--color-warning)}.overview-roster-students{align-items:center;display:flex}.overview-roster-students ul{flex-wrap:wrap;align-items:center;gap:8px;margin:0;padding:0;list-style:none;display:flex}.overview-roster-students a{border:1px solid var(--color-border);border-radius:var(--radius-md);min-height:34px;color:var(--color-ink);background:#fff;align-items:center;padding:5px 11px;font-size:14px;font-weight:700;line-height:1.4;text-decoration:none;display:inline-flex}.overview-roster-students a:hover{border-color:var(--color-primary);background:var(--color-primary-soft);color:var(--color-primary-strong)}.overview-roster-students a:focus-visible,.overview-roster-concierge a:focus-visible,.overview-roster-disconnected input:focus-visible{outline:3px solid var(--color-focus);outline-offset:2px}.overview-roster-students p{color:var(--color-ink-muted);margin:0;font-size:14px}.overview-roster-row.unassigned{background:var(--color-primary-soft)}.overview-unassigned-icon{width:58px;height:58px;color:var(--color-primary-strong);background:#ffffffb3;border-radius:50%;flex:none;place-items:center;display:grid}.overview-roster-concierge span.unassigned-count{color:var(--color-primary-strong);background:#fff}.overview-unassigned-note{color:var(--color-primary-strong);font-size:13px;font-weight:700}@media (max-width:1280px){.overview-roster-filters{grid-template-columns:minmax(300px,1fr) auto auto}.overview-roster-sort{grid-column:1/-1;justify-self:end}.overview-roster-header,.overview-roster-row{grid-template-columns:minmax(240px,1.2fr) minmax(150px,.75fr) minmax(420px,3fr)}}@media (max-width:1023px){.dashboard-shell{display:block}.side-nav{z-index:30;width:min(280px,86vw);height:100dvh;box-shadow:var(--shadow-lg);transition:transform .16s;position:fixed;inset:0 auto 0 0;transform:translate(-105%)}.side-nav.open{transform:translate(0)}.side-nav-close{display:block}.menu-backdrop{z-index:29;cursor:pointer;background:#1118273d;border:0;padding:0;display:block;position:fixed;inset:0}.main-area{width:100%;padding:78px 18px 18px}.mobile-app-header{z-index:25;border-bottom:1px solid var(--color-border);padding:calc(10px + env(safe-area-inset-top)) 18px 10px;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#fffffff5;justify-content:space-between;align-items:center;gap:12px;transition:transform .18s;display:flex;position:fixed;top:0;left:0;right:0;transform:translateY(0)}.mobile-app-header.hidden{transform:translateY(-110%)}.mobile-app-header strong{color:var(--color-primary-strong);text-align:center;flex:1;font-size:16px;font-weight:900}.mobile-avatar-button{cursor:pointer;background:0 0;border:0;border-radius:50%;place-items:center;width:42px;height:42px;padding:0;display:grid}.stats-grid,.menu-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.two-column{grid-template-columns:1fr}.side-panel{position:static}.assignment-actions .button{width:100%}table,thead,tbody,th,td,tr{display:block}thead{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}tr{border-bottom:1px solid var(--color-border);padding:10px 0}tr:last-child{border-bottom:0}td{border-bottom:0;grid-template-columns:112px minmax(0,1fr);gap:12px;padding:8px 12px;display:grid}td:before{content:attr(data-label);color:var(--color-ink-muted);font-size:14px;font-weight:900}.user-cell,.history-identity-cell{min-width:0}}@media (max-width:720px){h1{font-size:24px}.auth-card{padding:22px}.page-header,.section-heading,.info-row,.copy-box,.filter-bar{display:grid}.section-heading{align-items:start}.section-heading>.button{justify-self:start}.notice{grid-template-columns:auto minmax(0,1fr);align-items:start}.notice-action{grid-column:1/-1;width:100%}.notice-action .button,.filter-bar select{width:100%}.form-grid,.choice-grid,.stats-grid,.menu-grid,.person-card,.record-card,.activity-card,.hero-card,.profile-panel{grid-template-columns:1fr}.person-card,.record-card,.activity-card,.hero-card{justify-items:start}.record-card{grid-template-columns:minmax(0,1fr) auto;justify-items:stretch}.record-card.with-avatar{grid-template-columns:auto minmax(0,1fr) auto}.record-card.local-test-student-card{grid-template-columns:1fr;justify-items:start}.activity-card{grid-template-columns:minmax(0,1fr) auto;justify-items:stretch}.assigned-concierge-detail{justify-self:end}.person-card-actions{grid-area:auto/1;justify-content:stretch;align-self:stretch;width:100%}.person-card-actions .button{flex:1}.profile-detail-backdrop{place-items:end stretch;padding:0}.profile-detail-dialog{border-radius:var(--radius-xl) var(--radius-xl) 0 0;width:100%;height:calc(100dvh - 48px);max-height:none;padding:24px 16px max(18px, env(safe-area-inset-bottom));align-content:start;animation:.26s cubic-bezier(.2,.8,.2,1) both sheet-slide-up}.profile-detail-backdrop.closing .profile-detail-dialog{animation:.22s cubic-bezier(.4,0,1,1) both sheet-slide-down}.sheet-handle{background:#c9d3ce;border:0;border-radius:999px;justify-self:center;width:44px;min-height:5px;padding:0;display:block}.profile-detail-header{grid-template-columns:auto minmax(0,1fr)}.profile-detail-grid{grid-template-columns:1fr}.card-registration-refresh-row{gap:8px;padding-bottom:8px;display:grid}.card-registration-refresh-row .button{width:100%}.info-row strong{text-align:left;max-width:none}}@media (max-width:420px){.auth-card .brand-mark{gap:7px;font-size:19px}.liff-layout{padding-inline:12px}.liff-title-row{gap:10px}.liff-logout-button.button.sm{padding-inline:12px}.avatar.lg{width:64px;height:64px;font-size:20px}.person-card-heading{gap:12px}.person-card-heading .avatar.lg{width:56px;height:56px}.record-card.with-avatar{gap:12px}.panel,.form-section,.side-panel,.empty-state,.person-card,.record-card,.hero-card{padding:16px}td{grid-template-columns:1fr}}

