.ui-button{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:8px 18px;border:1px solid transparent;border-radius:var(--radius-sm);font-size:14px;font-weight:600;line-height:1.6;transition:background var(--duration-fast),border-color var(--duration-fast),transform var(--duration-fast),box-shadow var(--duration-fast);cursor:pointer}.ui-primary{background:var(--primary);color:#fff;box-shadow:var(--shadow-purple-soft)}.ui-primary:hover{background:var(--primary-hover);box-shadow:var(--shadow-purple-medium);transform:translateY(-1px)}.ui-secondary{background:var(--surface);color:var(--text-primary);border-color:var(--border-strong)}.ui-ghost{background:transparent;color:var(--text-secondary)}.ui-ghost:hover,.ui-secondary:hover{background:var(--surface-hover)}.ui-danger{background:var(--surface);color:var(--danger);border-color:var(--danger)}.ui-button:disabled{opacity:.5;cursor:not-allowed}.ui-spinner{height:16px;width:16px;border:2px solid;border-inline-end-color:transparent;border-radius:50%;animation:spin .8s linear infinite}.ui-pageHeader{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;margin-block-end:28px}.ui-pageHeader :is(h1,h2){font-size:clamp(22px,2.5vw,30px);font-weight:700;letter-spacing:-.5px}.ui-pageHeader p{color:var(--text-secondary);font-size:14px;margin-block-start:6px;max-width:65ch}.ui-empty{display:grid;min-height:220px;justify-items:center;align-content:center;text-align:center;padding:36px 20px;gap:10px}.ui-empty img{height:132px;-o-object-fit:contain;object-fit:contain;filter:drop-shadow(0 12px 18px rgb(0 0 0/.16))}.ui-empty h2,.ui-error h2{font-size:18px;font-weight:600}.ui-empty p,.ui-error p{color:var(--text-secondary);font-size:14px;line-height:1.9;max-width:50ch}.ui-error{border:1px solid var(--border);border-inline-start:3px solid var(--danger);border-radius:var(--radius-md);padding:24px;display:grid;gap:12px;justify-items:start;background:var(--surface)}.ui-skeleton{display:grid;gap:14px;padding:20px 0}.ui-skeleton div{height:64px;background:var(--surface-subtle);border-radius:var(--radius-sm);animation:pulse 1.6s ease-in-out infinite}.ui-skeleton div:last-child{width:75%}.ui-field{display:grid;gap:8px;min-width:0;font-size:14px}.ui-field>span{font-weight:600;color:var(--text-primary)}.ui-field input,.ui-field select,.ui-field textarea{width:100%;min-width:0;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--input-background);color:var(--text-primary);padding:10px 12px}.ui-field textarea{min-height:130px;resize:vertical}.ui-field small{color:var(--text-muted);font-size:12px}.ui-field .ui-fieldError{color:var(--danger)}.ui-badge{display:inline-flex;padding:3px 9px;border-radius:var(--radius-xs);font-size:12px;color:var(--text-secondary);background:var(--surface-subtle);white-space:nowrap}.ui-badge[data-tone=success]{color:var(--success)}.ui-badge[data-tone=warning]{color:var(--warning)}.ui-badge[data-tone=danger]{color:var(--danger)}.ui-overlay{position:fixed;inset:0;z-index:var(--z-modal);background:var(--overlay);backdrop-filter:blur(5px);display:grid;place-items:center;padding:24px;overscroll-behavior:contain;transition:opacity .34s ease,backdrop-filter .34s ease}.ui-dialog{background:var(--surface-elevated);border:1px solid var(--border-strong);border-radius:var(--radius-lg);padding:24px;width:min(620px,100%);max-height:calc(100dvh - 48px);overflow:auto;box-shadow:var(--shadow-lg);animation:enter .2s ease-out}.ui-overlay-closing{opacity:0;backdrop-filter:blur(0);pointer-events:none;transition:opacity .32s ease,backdrop-filter .32s ease}.ui-dialog-closing{animation:dialog-fall .5s ease-in-out forwards}.ui-dialog>header{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-block-end:20px}.ui-dialog h2{font-size:20px;font-weight:700}.ui-dialog-headerActions{display:flex;align-items:center;gap:8px}.ui-surface{position:relative;isolation:isolate;overflow:hidden;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-card);transition:transform .22s,border-color .22s,box-shadow .22s}.ui-surface:after,.ui-surface:before{content:"";position:absolute;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .22s}.ui-surface:before{inset:0;z-index:-1;background:radial-gradient(420px circle at var(--pointer-x,50%) var(--pointer-y,50%),rgb(var(--color-purple)/.16),transparent 66%)}.ui-surface:after{inset:0;z-index:2;padding:1px;background:radial-gradient(220px circle at var(--pointer-x,50%) var(--pointer-y,50%),rgb(var(--color-purple-glow)/.78),transparent 72%);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude}.ui-pagination{display:flex;justify-content:center;align-items:center;gap:16px;margin-block-start:24px;font-size:13px}@media(hover:hover) and (pointer:fine) and (prefers-reduced-motion:no-preference){.ui-surface:hover:after,.ui-surface:hover:before{opacity:1}.ui-surface:hover{border-color:var(--border-hover);box-shadow:var(--shadow-card-hover)}.ui-surface[data-outer-glow=true]:hover{box-shadow:var(--shadow-card-hover),var(--shadow-purple-medium)}.ui-surface[data-lift=true]:hover{transform:translateY(-3px)}.ui-surface.course-explorer-surface:hover{border-color:var(--border);box-shadow:var(--shadow-card)}.ui-surface.course-explorer-surface:hover:after,.ui-surface.course-explorer-surface:hover:before{opacity:0}}@media(max-width:639px){.ui-overlay{align-items:end;padding:8px}.ui-dialog{padding:17px 14px;max-height:calc(100dvh - 16px)}.ui-button{min-height:40px;padding:7px 15px}.ui-pagination{gap:8px}}@media(prefers-reduced-motion:reduce){.ui-dialog,.ui-skeleton div,.ui-spinner{animation:none}}@keyframes spin{to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.45}}@keyframes enter{0%{opacity:0;transform:translateY(6px) scale(.985)}}@keyframes dialog-fall{0%{opacity:1;transform:translateY(0) rotate(0)}to{opacity:0;transform:translateY(72vh) rotate(-20deg) scale(.95)}}