:root{--surface-100: #f1f3fa;--surface-200: #f1f4fa;--surface-300: #f8f3ea;--surface-400: #e4e5ec;--surface-500: #f0e4d1;--surface-600: #c7cad5;--surface-700: #aaa294;--surface-800: #969ab9;--surface-900: #656058;--text-100:#b5b7bc;--text-200:#92959c;--text-300:#60646e;--text-400:#414652;--text:#111827;--panel:#f7f9ff;--muted:#6b7280;--primaryA:#a78bfa;--primaryB:#c56e6e;--primaryC:#ec4899;--radius-lg:16px;--radius-xl:24px;--shadow-sm:0 1px 2px rgba(0,0,0,.06);--shadow-md:0 8px 20px rgba(0,0,0,.08);--shadow-lg:0 18px 40px rgba(0,0,0,.12)}*{box-sizing:border-box}html,body,#root{height:100%}html,body{margin:0;padding:0;background:var(--surface-100);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,San Francisco,SF Pro Text,SF Pro Display,Segoe UI,Roboto,Helvetica,Arial,sans-serif}a{color:inherit;text-decoration:none}button,input{font:inherit;transition-duration:.15s}button:hover{background:var(--surface-100);transition-duration:.15s;transform:scale(1.05);box-shadow:var(--shadow-md)}.app-shell{display:grid;grid-template-columns:260px 1fr;grid-template-rows:72px 1fr;grid-template-areas:"topbar topbar" "sidebar content";height:100%}.sidebar{grid-area:sidebar;background:linear-gradient(135deg,var(--surface-100),var(--surface-100) 50%,var(--surface-100));border:1px solid var(--surface-400);padding:20px 14px;overflow:auto;margin:.5rem;border-radius:15px;box-shadow:3px 5px 5px #0000000f}.topbar{grid-area:topbar;position:sticky;top:0;z-index:10;background:var(--panel);border-bottom:1px solid #e5e7eb;display:flex;justify-content:center;align-items:center;height:72px;padding:0 20px;box-shadow:0 2px 10px #0000000a}.content{grid-area:content;overflow:auto;padding:24px}.btn{display:inline-flex;align-items:center;gap:10px;background:#111827;color:#fff;border:none;border-radius:12px;padding:10px 14px;cursor:pointer;box-shadow:var(--shadow-sm)}.btn.ghost{background:#f3f4f6;color:#111827}.btn.flat{background:#fff;border:1px solid #e5e7eb;color:#111827}.btn.primary{background:linear-gradient(135deg,var(--primaryA),var(--primaryC))}.btn:focus-visible{outline:3px solid rgba(167,139,250,.5)}.search{display:flex;align-items:center;gap:10px;background:#f3f4f6;border:1px solid #e5e7eb;border-radius:16px;margin:2rem;padding:10px 14px;width:100%}.search input{flex:1;border:none;background:transparent;outline:none}.logo{display:flex;align-items:center;gap:10px;font-weight:800}.logo-badge{width:36px;height:36px;border-radius:12px;background:linear-gradient(135deg,var(--primaryA),var(--primaryC));box-shadow:var(--shadow-md)}.nav-btn{transition-duration:.15s;width:100%;display:flex;align-items:center;gap:12px;padding:12px 14px;border:none;background:transparent;color:var(--text-400);border-radius:12px;cursor:pointer}.btn.resource{transform:scale(1)}.btn.resources:hover{transform:scale(1.005);background:var(--surface-400)}.nav-btn:hover{transform:scale(1.03);background:var(--surface-400);box-shadow:var(--shadow-md)}.nav-btn.active{background:var(--surface-600);box-shadow:var(--shadow-sm);transform:scale(1.03)}.nav-label{font-weight:600}.header{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin:4px 0 18px}.header h1{margin:0;font-size:32px;font-weight:800}.header .sub{color:var(--muted)}.panel{background:var(--panel);border-radius:var(--radius-xl);box-shadow:var(--shadow-md)}.grid{display:grid;gap:16px}.grid.files{grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}.card{background:var(--panel);border-radius:var(--radius-lg);padding:16px;box-shadow:var(--shadow-sm);transition:transform .15s,box-shadow .15s,background .15s}.card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}.badge{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:999px;font-size:12px;font-weight:700}.badge.good{background:#e8fff3;color:#0f766e}.badge.warn{background:#fff7e6;color:#a16207}.badge.bad{background:#ffecec;color:#b91c1c}.icon-24{width:24px;height:24px;display:inline-block}.unit-btn{display:flex;align-items:center;gap:10px;justify-content:flex-start;width:100%;padding:10px 12px;border-radius:12px;border:1px solid #e5e7eb;background:#f9fafb;color:var(--text);cursor:pointer}.unit-btn:hover{background:#fff;transition-duration:.25s;transform:scale(1.01);transform:translateY(-2px);box-shadow:var(--shadow-md)}.unit-btn.active{background:#eef2ff;border-color:#c7d2fe}.unit-dot{width:8px;height:8px;border-radius:999px;background:#6366f1}.curric-btn{margin:1rem}.curpanel{min-height:80vh}.logo-img{width:36px;height:36px;object-fit:cover;box-shadow:var(--shadow-md)}:root[data-theme=dark]{--surface-100:#0b0f14;--surface-200:#0f141b;--surface-300:#121923;--surface-400:#17202c;--surface-500:#1d2735;--surface-600:#273246;--surface-700:#3b465a;--surface-800:#505d76;--surface-900:#6b7792;--text-100:#8d98aa;--text-200:#a6b0bf;--text-300:#c1c8d4;--text-400:#d6dce6;--text:#e9edf4;--panel:#111723;--muted:#9aa3b2;--primaryA:#a78bfa;--primaryB:#c56e6e;--primaryC:#ec4899;--shadow-sm:0 1px 2px rgba(0,0,0,.5);--shadow-md:0 8px 20px rgba(0,0,0,.35);--shadow-lg:0 18px 40px rgba(0,0,0,.4)}:root[data-theme=dark] body{background:var(--surface-100);color:var(--text)}:root[data-theme=dark] .sidebar{background:linear-gradient(135deg,var(--surface-100),var(--surface-100) 50%,var(--surface-100));border-color:var(--surface-400);box-shadow:3px 5px 5px #0006}:root[data-theme=dark] .topbar{background:var(--panel);border-bottom:1px solid var(--surface-400);box-shadow:0 2px 10px #00000080}:root[data-theme=dark] .btn{background:#e5e7eb;color:#111827}:root[data-theme=dark] .btn.ghost{background:var(--surface-300);color:var(--text)}:root[data-theme=dark] .btn.flat{background:var(--panel);border:1px solid var(--surface-400);color:var(--text-400)}:root[data-theme=dark] .search{background:var(--surface-300);border:1px solid var(--surface-400)}:root[data-theme=dark] .nav-btn:hover{background:var(--surface-400)}:root[data-theme=dark] .unit-btn{background:var(--surface-300);border-color:var(--surface-400);color:var(--text)}:root[data-theme=dark] .unit-btn.active{background:#1b2240;border-color:#334155}:root[data-theme=dark] .badge.good{background:#0a2a22;color:#49d2b8}:root[data-theme=dark] .badge.warn{background:#2a220a;color:#facc15}:root[data-theme=dark] .badge.bad{background:#2b0e0e;color:#fb7185}
