:root{color-scheme:light;--portal-bg: #eef2f8;--portal-bg-elevated: rgba(255, 255, 255, .72);--portal-text: #0f172a;--portal-text-soft: #334155;--portal-muted: #64748b;--portal-accent: #0d9488;--portal-accent-2: #6366f1;--portal-accent-hover: #0f766e;--portal-accent-soft: rgba(13, 148, 136, .12);--portal-accent-ring: rgba(13, 148, 136, .45);--portal-card: rgba(255, 255, 255, .88);--portal-card-border: rgba(15, 23, 42, .07);--portal-shadow: 0 4px 24px rgba(15, 23, 42, .06);--portal-shadow-hover: 0 12px 40px rgba(13, 148, 136, .18);--portal-radius: 1.25rem;--portal-radius-lg: 1.5rem;--portal-max: 80rem;--portal-tile-min: 17.5rem;--portal-mesh-1: rgba(13, 148, 136, .18);--portal-mesh-2: rgba(99, 102, 241, .14);--portal-mesh-3: rgba(251, 191, 36, .08);--portal-mesh-base-a: #f8fafc;--portal-mesh-base-b: #e8eef7;--portal-grid-line: rgba(15, 23, 42, .035);--portal-card-cta-fg: #ffffff;--portal-warn: #b45309;--portal-login-btn-bg: rgba(255, 255, 255, .75);--portal-login-btn-bg-hover: #ffffff;--portal-auth-panel-bg: rgba(255, 255, 255, .55);--portal-table-head: rgba(15, 23, 42, .045);--portal-theme-segment: rgba(255, 255, 255, .55);--portal-theme-segment-active: rgba(13, 148, 136, .2);--portal-app-card-hover-border: rgba(13, 148, 136, .35)}*,*:before,*:after{box-sizing:border-box}body{margin:0;min-height:100vh;font-family:Noto Sans KR,Plus Jakarta Sans,system-ui,-apple-system,sans-serif;background:var(--portal-bg);color:var(--portal-text);-webkit-font-smoothing:antialiased}a{color:inherit}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.portal{position:relative;min-height:100vh;min-height:100dvh;padding-top:max(env(safe-area-inset-top,0px),clamp(.85rem,2.5vw,1.35rem));padding-right:max(env(safe-area-inset-right,0px),clamp(1rem,3vw,2rem));padding-bottom:max(env(safe-area-inset-bottom,0px),clamp(2rem,5vw,3.5rem));padding-left:max(env(safe-area-inset-left,0px),clamp(1rem,3vw,2rem));overflow-x:hidden}.portal__bg{position:fixed;top:0;right:0;bottom:0;left:0;z-index:0;background:radial-gradient(ellipse 80% 50% at 20% -10%,var(--portal-mesh-1),transparent 55%),radial-gradient(ellipse 70% 45% at 85% 10%,var(--portal-mesh-2),transparent 50%),radial-gradient(ellipse 60% 40% at 50% 100%,var(--portal-mesh-3),transparent 45%),linear-gradient(165deg,var(--portal-mesh-base-a) 0%,var(--portal-bg) 45%,var(--portal-mesh-base-b) 100%);animation:portalBgDrift 22s ease-in-out infinite alternate}@keyframes portalBgDrift{0%{filter:hue-rotate(0deg) saturate(1)}to{filter:hue-rotate(12deg) saturate(1.05)}}.portal__grid{position:fixed;top:0;right:0;bottom:0;left:0;z-index:0;background-image:linear-gradient(var(--portal-grid-line) 1px,transparent 1px),linear-gradient(90deg,var(--portal-grid-line) 1px,transparent 1px);background-size:56px 56px;-webkit-mask-image:radial-gradient(ellipse 100% 80% at 50% 0%,black 0%,transparent 75%);mask-image:radial-gradient(ellipse 100% 80% at 50% 0%,black 0%,transparent 75%);opacity:.45;pointer-events:none}.portal__dock{position:relative;z-index:2;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem 1rem;max-width:var(--portal-max);margin:0 auto 1.25rem;padding:.55rem 1rem;border-radius:999px;background:var(--portal-bg-elevated);border:1px solid var(--portal-card-border);box-shadow:var(--portal-shadow);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.portal__brand{display:inline-flex;align-items:center;gap:.55rem;min-width:0}.portal__brand-title{margin:0;font-weight:800;font-size:1.05rem;letter-spacing:-.04em;color:var(--portal-text)}.portal__school-icon{display:inline-flex;align-items:center;justify-content:center;width:2.35rem;height:2.35rem;flex-shrink:0;border-radius:.6rem;color:var(--portal-card-cta-fg);background:linear-gradient(135deg,var(--portal-accent),#2dd4bf);box-shadow:0 4px 14px #0d948859}.portal__school-icon-svg{width:1.35rem;height:1.35rem;display:block}.portal__dock-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.5rem .65rem}.portal__auth-slot{display:flex;flex-direction:column;align-items:flex-end;gap:.25rem;min-width:0}.portal__login-btn{margin:0;padding:.55rem 1rem;min-height:2.75rem;font-size:.8rem;font-weight:600;color:var(--portal-text-soft);background:var(--portal-login-btn-bg);border:1px solid var(--portal-card-border);border-radius:var(--portal-radius);cursor:pointer;touch-action:manipulation;transition:background .15s ease,border-color .15s ease,color .15s ease}.portal__login-btn:hover{background:var(--portal-login-btn-bg-hover);border-color:#0d948873;color:var(--portal-accent)}.portal__login-btn:focus-visible{outline:2px solid var(--portal-accent);outline-offset:2px}.portal__auth-signed{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.35rem .65rem;max-width:100%}.portal__logout-btn{margin:0;padding:.35rem .25rem;min-height:2.25rem;font-size:.75rem;font-weight:600;color:var(--portal-muted);text-decoration:underline;text-underline-offset:.12em;background:none;border:none;cursor:pointer;touch-action:manipulation}.portal__logout-btn:hover{color:var(--portal-accent)}.portal__logout-btn:focus-visible{outline:2px solid var(--portal-accent);outline-offset:2px;border-radius:2px}.portal__auth-panel{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:.4rem .55rem;padding:.35rem .65rem;border-radius:999px;background:var(--portal-auth-panel-bg);border:1px solid var(--portal-card-border);transition:transform .2s ease,box-shadow .2s ease}.portal__auth-panel:hover{transform:translateY(-1px);box-shadow:0 6px 20px #0f172a0f}.portal__auth-panel--signed{align-items:center}.portal__auth-panel--notice{border-radius:var(--portal-radius);text-align:left;align-items:flex-start;justify-content:flex-start}.portal__auth-label{margin:0;font-size:.65rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--portal-muted)}.portal__auth-email{font-size:.78rem;font-weight:600;color:var(--portal-text-soft);max-width:min(100%,14rem);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.portal__auth-btn{padding:.35rem .75rem;font-size:.78rem}.portal__auth-hint{margin:0;font-size:.72rem;line-height:1.45;color:var(--portal-muted)}.portal__auth-hint code{font-size:.68rem}.portal__auth-err{margin:.25rem 0 0;font-size:.72rem;color:var(--portal-warn)}.portal__admin-link{font-size:.8rem;font-weight:700;color:var(--portal-card-cta-fg);text-decoration:none;padding:.55rem 1rem;min-height:2.75rem;display:inline-flex;align-items:center;justify-content:center;border-radius:999px;background:linear-gradient(135deg,var(--portal-accent),#0f766e);border:none;box-shadow:0 4px 16px #0d948859;touch-action:manipulation;transition:transform .2s ease,box-shadow .2s ease}.portal__admin-link:hover{transform:translateY(-2px) scale(1.02);box-shadow:0 8px 24px #0d948866}.portal__admin-link:active{transform:translateY(0) scale(.98)}.portal__admin-link[hidden]{display:none!important}.portal__main{position:relative;z-index:1;max-width:var(--portal-max);margin:0 auto}.portal__cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--portal-tile-min),1fr));gap:clamp(1rem,2.5vw,1.35rem);perspective:1200px}.app-card{--tilt-x: 0deg;--tilt-y: 0deg;position:relative;border-radius:var(--portal-radius-lg);background:var(--portal-card);border:1px solid var(--portal-card-border);box-shadow:var(--portal-shadow);transform-style:preserve-3d;transform:translateY(12px) rotateX(var(--tilt-x)) rotateY(var(--tilt-y)) scale(.98);opacity:0;transition:transform .45s cubic-bezier(.22,1,.36,1),opacity .45s ease,box-shadow .35s ease,border-color .25s ease;transition-delay:calc(var(--stagger, 0) * 55ms)}.app-card--visible{opacity:1;transform:translateY(0) rotateX(var(--tilt-x)) rotateY(var(--tilt-y)) scale(1)}.app-card:hover{border-color:var(--portal-app-card-hover-border);box-shadow:var(--portal-shadow-hover)}.app-card:focus-within{outline:none;box-shadow:var(--portal-shadow-hover),0 0 0 3px var(--portal-accent-ring)}.app-card__link{position:relative;display:flex;flex-direction:column;justify-content:space-between;min-height:8.5rem;padding:1.35rem 1.4rem 1.2rem;text-decoration:none;border-radius:inherit;overflow:hidden;touch-action:manipulation}.app-card__link:focus{outline:none}.app-card__shine{position:absolute;top:-40%;right:-40%;bottom:-40%;left:-40%;background:conic-gradient(from 180deg at 50% 50%,transparent 0deg,rgba(13,148,136,.08) 120deg,rgba(99,102,241,.1) 240deg,transparent 360deg);opacity:0;transform:rotate(0);transition:opacity .35s ease;pointer-events:none}.app-card:hover .app-card__shine{opacity:1;animation:portalShineSpin 6s linear infinite}@keyframes portalShineSpin{to{transform:rotate(360deg)}}.app-card__body{position:relative;z-index:1;display:flex;flex-direction:column;gap:.35rem;flex:1;min-width:0;padding-right:4.15rem}.app-card__kicker{font-size:.68rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--portal-muted)}.app-card__title{margin:0;font-size:clamp(1.15rem,2.4vw,1.45rem);font-weight:800;letter-spacing:-.03em;line-height:1.25;color:var(--portal-text);transition:color .2s ease}.app-card:hover .app-card__title{color:var(--portal-accent-hover)}.app-card__sub{margin:auto 0 0;padding-top:.65rem;font-size:.8rem;line-height:1.45;color:var(--portal-muted);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.app-card__sub:empty{display:none}.app-card__go{position:absolute;right:1.1rem;bottom:1rem;z-index:1;display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;border-radius:50%;font-size:1.15rem;font-weight:700;color:var(--portal-card-cta-fg);background:linear-gradient(135deg,var(--portal-accent),var(--portal-accent-2));box-shadow:0 6px 20px #0d948859;transform:translate(0);transition:transform .35s cubic-bezier(.22,1,.36,1),box-shadow .25s ease}.app-card:hover .app-card__go{transform:translate(4px) scale(1.06);box-shadow:0 10px 28px #6366f159}.portal__status{margin-top:1.5rem;text-align:center;font-size:.85rem;color:var(--portal-muted)}@media (max-width: 36rem){.portal__dock{border-radius:var(--portal-radius)}.portal__auth-slot{align-items:stretch;width:100%}.portal__login-btn{width:100%;text-align:center}.portal__auth-signed{justify-content:space-between;width:100%}.portal__auth-panel{justify-content:flex-start;width:100%}.portal__dock-actions{width:100%;flex-direction:column;align-items:stretch}.portal__theme-slot{width:100%;order:-1}.portal__theme{width:100%;justify-content:stretch}.portal__theme-label{flex:1;text-align:center}.portal__theme-text{width:100%;min-height:2.75rem}}@media (max-width: 30rem){.portal__cards{grid-template-columns:1fr}.app-card__link{min-height:7.75rem;padding:1.15rem 1.2rem 1rem}.portal__brand-title{font-size:1rem}}.portal__theme-slot{flex-shrink:0}.portal__theme{display:inline-flex;flex-wrap:wrap;border-radius:999px;padding:.22rem;gap:.12rem;background:var(--portal-theme-segment);border:1px solid var(--portal-card-border)}.portal__theme-label{position:relative;margin:0;cursor:pointer;border-radius:999px}.portal__theme-input{position:absolute;top:0;right:0;bottom:0;left:0;opacity:.001;width:100%;height:100%;margin:0;cursor:pointer}.portal__theme-label:focus-within .portal__theme-text{outline:2px solid var(--portal-accent-ring);outline-offset:2px}.portal__theme-text{position:relative;z-index:0;display:flex;align-items:center;justify-content:center;min-height:2.6rem;padding:.45rem .55rem;font-size:.72rem;font-weight:700;color:var(--portal-muted);border-radius:999px;transition:background .15s ease,color .15s ease;-webkit-user-select:none;user-select:none;pointer-events:none}.portal__theme-input:checked+.portal__theme-text{background:var(--portal-theme-segment-active);color:var(--portal-text-soft)}html[data-portal-theme=dark]{color-scheme:dark;--portal-bg: #0c1016;--portal-bg-elevated: rgba(30, 41, 59, .82);--portal-text: #f1f5f9;--portal-text-soft: #cbd5e1;--portal-muted: #94a3b8;--portal-accent: #2dd4bf;--portal-accent-2: #a5b4fc;--portal-accent-hover: #5eead4;--portal-accent-soft: rgba(45, 212, 191, .14);--portal-accent-ring: rgba(45, 212, 191, .5);--portal-card: rgba(30, 41, 59, .94);--portal-card-border: rgba(241, 245, 249, .1);--portal-shadow: 0 4px 28px rgba(0, 0, 0, .45);--portal-shadow-hover: 0 14px 44px rgba(45, 212, 191, .22);--portal-mesh-1: rgba(45, 212, 191, .12);--portal-mesh-2: rgba(165, 180, 252, .1);--portal-mesh-3: rgba(251, 191, 36, .05);--portal-mesh-base-a: #121a22;--portal-mesh-base-b: #0a0e14;--portal-grid-line: rgba(241, 245, 249, .06);--portal-card-cta-fg: #ffffff;--portal-warn: #fbbf24;--portal-login-btn-bg: rgba(30, 41, 59, .65);--portal-login-btn-bg-hover: rgba(51, 65, 85, .92);--portal-auth-panel-bg: rgba(30, 41, 59, .55);--portal-table-head: rgba(255, 255, 255, .06);--portal-theme-segment: rgba(15, 23, 42, .55);--portal-theme-segment-active: rgba(45, 212, 191, .22);--portal-app-card-hover-border: rgba(45, 212, 191, .42)}@media (prefers-color-scheme: dark){html[data-portal-theme=system]{color-scheme:dark;--portal-bg: #0c1016;--portal-bg-elevated: rgba(30, 41, 59, .82);--portal-text: #f1f5f9;--portal-text-soft: #cbd5e1;--portal-muted: #94a3b8;--portal-accent: #2dd4bf;--portal-accent-2: #a5b4fc;--portal-accent-hover: #5eead4;--portal-accent-soft: rgba(45, 212, 191, .14);--portal-accent-ring: rgba(45, 212, 191, .5);--portal-card: rgba(30, 41, 59, .94);--portal-card-border: rgba(241, 245, 249, .1);--portal-shadow: 0 4px 28px rgba(0, 0, 0, .45);--portal-shadow-hover: 0 14px 44px rgba(45, 212, 191, .22);--portal-mesh-1: rgba(45, 212, 191, .12);--portal-mesh-2: rgba(165, 180, 252, .1);--portal-mesh-3: rgba(251, 191, 36, .05);--portal-mesh-base-a: #121a22;--portal-mesh-base-b: #0a0e14;--portal-grid-line: rgba(241, 245, 249, .06);--portal-card-cta-fg: #ffffff;--portal-warn: #fbbf24;--portal-login-btn-bg: rgba(30, 41, 59, .65);--portal-login-btn-bg-hover: rgba(51, 65, 85, .92);--portal-auth-panel-bg: rgba(30, 41, 59, .55);--portal-table-head: rgba(255, 255, 255, .06);--portal-theme-segment: rgba(15, 23, 42, .55);--portal-theme-segment-active: rgba(45, 212, 191, .22);--portal-app-card-hover-border: rgba(45, 212, 191, .42)}}.admin__inner{position:relative;z-index:1;max-width:var(--portal-max);margin:0 auto;padding:0 max(env(safe-area-inset-right,0px),0px) 2rem max(env(safe-area-inset-left,0px),0px)}.admin__header-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.65rem 1rem;margin-bottom:.75rem}.admin__header{margin-bottom:1.5rem}.admin__back{display:inline-block;margin-bottom:.75rem;font-size:.875rem;font-weight:600;color:var(--portal-accent);text-decoration:none}.admin__back:hover{text-decoration:underline}.admin__title{margin:0 0 .5rem;font-size:clamp(1.35rem,3vw,1.75rem);font-weight:800;letter-spacing:-.03em;color:var(--portal-text)}.admin__lead{margin:0;max-width:40rem;font-size:.9rem;line-height:1.6;color:var(--portal-muted)}.admin__panel{min-height:12rem}.admin__card{padding:1.5rem;border-radius:var(--portal-radius);background:var(--portal-card);border:1px solid var(--portal-card-border);box-shadow:var(--portal-shadow)}.admin__msg{margin:0 0 1rem;font-size:.9rem;line-height:1.55;color:var(--portal-text-soft)}.admin__msg--warn{color:var(--portal-warn)}.admin__toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem;margin-bottom:1rem}.admin__user{font-size:.875rem;font-weight:600;color:var(--portal-muted)}.admin__table-wrap{overflow-x:auto;margin-bottom:1rem;border-radius:var(--portal-radius);border:1px solid var(--portal-card-border);background:var(--portal-card);box-shadow:var(--portal-shadow)}.admin__table{width:100%;border-collapse:collapse;font-size:.8125rem}.admin__table th,.admin__table td{padding:.5rem .65rem;text-align:left;border-bottom:1px solid var(--portal-card-border);vertical-align:middle}.admin__table th{font-weight:700;color:var(--portal-muted);background:var(--portal-table-head);white-space:nowrap}.admin__table tr:last-child td{border-bottom:none}.admin-input{width:100%;min-width:5rem;padding:.4rem .5rem;font:inherit;font-size:.8125rem;border:1px solid var(--portal-card-border);border-radius:.375rem;background:var(--portal-bg-elevated);color:var(--portal-text)}.admin-input:focus{outline:2px solid var(--portal-accent-ring);outline-offset:0;border-color:var(--portal-accent)}.admin-input--wide{min-width:12rem}.admin-input--num{max-width:5rem}.admin-td-center{text-align:center}.admin-td-actions{white-space:nowrap}.admin__actions{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center}.admin-btn{display:inline-flex;align-items:center;justify-content:center;padding:.5rem 1rem;min-height:2.75rem;font:inherit;font-size:.875rem;font-weight:600;border-radius:.5rem;border:1px solid transparent;cursor:pointer;touch-action:manipulation;transition:background .15s ease,border-color .15s ease,color .15s ease}.admin-btn--primary{background:var(--portal-accent);color:#fff;border-color:var(--portal-accent)}.admin-btn--primary:hover{background:var(--portal-accent-hover);border-color:var(--portal-accent-hover)}.admin-btn--ghost{background:var(--portal-bg-elevated);color:var(--portal-text-soft);border-color:var(--portal-card-border)}.admin-btn--ghost:hover{border-color:var(--portal-accent);color:var(--portal-accent)}@media (max-width: 40rem){.admin__toolbar{flex-direction:column;align-items:stretch}.admin__user{word-break:break-all}.admin-input{font-size:1rem}}
