:root{--crimson: #960000;--crimson-dark: #7a0000;--gold: #BF9237;--lime: #88C808;--lime-dark: #72a806;--blue: #4A6488;--rose: #D0ACAC;--dark: #1A0505;--cream: #FDFAF8;--light: #F7F0EE;--border: #E8DADA;--muted: #6a5050;--white: #ffffff;--r-sm: 2px;--r-md: 6px;--r-lg: 10px;--shadow-sm: 0 1px 2px rgba(26, 5, 5, .04);--shadow-md: 0 4px 12px rgba(26, 5, 5, .06);--shadow-lg: 0 12px 28px rgba(26, 5, 5, .08)}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;min-height:100%}html{scroll-behavior:smooth}body{background:var(--cream);color:var(--dark);font-family:Raleway,PingFang SC,Microsoft YaHei,Hiragino Sans GB,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-weight:400;font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}.shell{min-height:100vh;display:flex;flex-direction:column}.topbar{background:var(--white);border-bottom:1px solid var(--border);padding:14px 20px;padding-top:max(14px,env(safe-area-inset-top))}.topbar-inner{max-width:560px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:12px}.topbar img.logo{height:32px;width:auto;display:block}.topbar .who{font-size:12px;color:var(--muted);text-align:right;line-height:1.3}.topbar .who strong{color:var(--dark);display:block;font-weight:700}.app{flex:1;max-width:560px;width:100%;margin:0 auto;padding:24px 20px 40px;padding-bottom:max(40px,env(safe-area-inset-bottom))}.app.app-admin{max-width:920px}.sec-label{font-size:11px;font-weight:700;letter-spacing:.22em;text-transform:uppercase;color:var(--crimson);margin:0 0 10px}h1{font-size:clamp(24px,5vw,32px);font-weight:900;line-height:1.15;letter-spacing:-.01em;color:var(--dark);margin:0 0 8px}h2{font-size:18px;font-weight:800;line-height:1.25;color:var(--dark);margin:0 0 14px}p{margin:0 0 14px}p.muted{color:var(--muted);font-size:14px}.divider{width:48px;height:3px;background:var(--gold);margin:12px 0 20px;border:0}.card{background:var(--white);border:1px solid var(--border);border-radius:var(--r-lg);padding:24px;box-shadow:var(--shadow-sm);margin-bottom:16px}.card-tight{padding:18px}.field{margin-bottom:14px}label{display:block;font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-bottom:8px}input[type=email],input[type=text],input[type=tel]{width:100%;padding:14px;font-family:inherit;font-size:16px;font-weight:500;color:var(--dark);background:var(--white);border:1.5px solid var(--border);border-radius:var(--r-md);transition:border-color .15s ease,box-shadow .15s ease}input::placeholder{color:var(--muted);opacity:.6}input:focus{outline:none;border-color:var(--crimson);box-shadow:0 0 0 3px #9600001f}input.code{letter-spacing:.5em;font-size:28px;font-weight:700;text-align:center;font-variant-numeric:tabular-nums;padding:18px 12px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:14px 24px;font-family:inherit;font-size:12px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;cursor:pointer;border:none;border-radius:var(--r-sm);transition:transform .15s ease,background .15s ease,color .15s ease,box-shadow .15s ease;text-decoration:none}.btn:disabled{opacity:.5;cursor:not-allowed}.btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:var(--shadow-md)}.btn-crimson{background:var(--crimson);color:var(--white)}.btn-crimson:hover:not(:disabled){background:var(--crimson-dark)}.btn-outline{background:transparent;color:var(--crimson);border:2px solid var(--crimson);padding:12px 22px}.btn-outline:hover:not(:disabled){background:var(--crimson);color:var(--white)}.btn-ghost{background:transparent;color:var(--muted);padding:10px 14px;letter-spacing:.08em}.btn-ghost:hover:not(:disabled){color:var(--crimson);transform:none;box-shadow:none}.btn-block{width:100%}.tabs{display:flex;background:var(--light);border:1px solid var(--border);border-radius:var(--r-md);padding:4px;margin-bottom:20px}.tabs button{flex:1;padding:10px 8px;border:0;background:transparent;font-family:inherit;font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);border-radius:var(--r-sm);cursor:pointer;transition:background .15s ease,color .15s ease}.tabs button.on{background:var(--white);color:var(--crimson);box-shadow:var(--shadow-sm)}.alert{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:var(--r-md);font-size:14px;line-height:1.4;margin-bottom:14px}.alert-error{background:#fdecec;color:var(--crimson-dark);border:1px solid #f5c6c6}.alert-info{background:var(--light);color:var(--dark);border:1px solid var(--border)}.alert-ok{background:#effbe4;color:#4f7a04;border:1px solid #d3edab}.course-list{display:flex;flex-direction:column;gap:12px}.course{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:16px 18px;background:var(--white);border:1px solid var(--border);border-radius:var(--r-lg);cursor:pointer;transition:border-color .15s ease,transform .15s ease,box-shadow .15s ease;text-align:left;width:100%}.course:hover{border-color:var(--crimson);transform:translateY(-1px);box-shadow:var(--shadow-md)}.course .name{font-weight:700;font-size:15px;color:var(--dark)}.course .meta{margin-top:4px;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600}.grade-pill{display:inline-flex;align-items:center;justify-content:center;min-width:64px;padding:8px 12px;font-weight:800;font-size:16px;font-variant-numeric:tabular-nums;border-radius:var(--r-sm)}.grade-pill.good{background:#effbe4;color:var(--lime-dark)}.grade-pill.ok{background:#fff4d6;color:var(--gold)}.grade-pill.bad{background:#fdecec;color:var(--crimson)}.grade-pill.none{background:var(--light);color:var(--muted);font-size:12px;letter-spacing:.1em;text-transform:uppercase}.chip{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:999px;font-size:10px;font-weight:700;letter-spacing:.12em;text-transform:uppercase}.chip-done{background:#effbe4;color:var(--lime-dark)}.chip-prog{background:#e9eff7;color:var(--blue)}.chip-new{background:var(--light);color:var(--muted)}.items{display:flex;flex-direction:column}.item{padding:16px 0;border-bottom:1px solid var(--border)}.item:last-child{border-bottom:0}.item-row{display:flex;justify-content:space-between;align-items:flex-start;gap:14px}.item .title{font-weight:700;color:var(--dark);font-size:15px}.item .sub{margin-top:4px;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600}.item .comment{margin-top:8px;font-size:14px;color:var(--muted);font-style:italic;line-height:1.5}.item .score-num{font-weight:800;font-size:18px;font-variant-numeric:tabular-nums;color:var(--dark);white-space:nowrap}.item .score-num small{font-weight:600;color:var(--muted);font-size:13px}.item .score-num.bad{color:var(--crimson)}.item .pending{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-weight:700}.course-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:18px}.course-head .info h1{font-size:22px;margin-bottom:4px}.course-head .info .code{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);font-weight:700}.back{background:none;border:0;font-family:inherit;font-size:11px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);padding:0 0 16px;margin:0;cursor:pointer;display:inline-flex;align-items:center;gap:6px}.back:hover{color:var(--crimson)}.loading{padding:28px 0;text-align:center;color:var(--muted);font-size:13px;letter-spacing:.12em;text-transform:uppercase;font-weight:700}.footnote{font-size:12px;color:var(--muted);text-align:center;margin-top:24px;line-height:1.6}.lang-switch{display:inline-flex;gap:1px;background:var(--light);border:1px solid var(--border);padding:2px;border-radius:6px}.lang-switch button{font-family:inherit;font-size:11px;font-weight:700;letter-spacing:.06em;padding:4px 8px;border:0;background:transparent;color:var(--muted);cursor:pointer;border-radius:4px;line-height:1.2}.lang-switch button.on{background:var(--white);color:var(--crimson);box-shadow:0 1px 2px #0000000d}.lang-switch button:not(.on):hover{color:var(--dark)}.install-card{position:relative;display:flex;gap:12px;background:var(--light);border:1px solid var(--border);border-left:4px solid var(--crimson);border-radius:var(--r-md);padding:14px 36px 16px 14px;margin-bottom:16px;align-items:flex-start}.install-title{font-weight:800;color:var(--dark);font-size:14px;margin-bottom:4px}.install-sub{font-size:13px;color:var(--muted);line-height:1.55}.install-close{position:absolute;top:6px;right:6px;background:none;border:0;color:var(--muted);cursor:pointer;padding:6px;border-radius:4px;display:inline-flex;align-items:center;justify-content:center}.install-close:hover{color:var(--dark);background:#0000000d}.admin-tabs{display:flex;gap:4px;margin-bottom:16px;border-bottom:1px solid var(--border);overflow-x:auto}.tabs-tab{padding:10px 14px;font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);text-decoration:none;border-bottom:2px solid transparent;white-space:nowrap}.tabs-tab:hover{color:var(--crimson)}.tabs-tab.on{color:var(--crimson);border-bottom-color:var(--crimson)}.tabs-tab.tabs-exit{margin-left:auto}.admin-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}.admin-table{width:100%;min-width:600px;border-collapse:collapse;font-size:13px}.admin-table thead th{text-align:left;font-size:10px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);padding:12px 14px;border-bottom:1px solid var(--border);background:var(--light)}.admin-table tbody td{padding:12px 14px;border-bottom:1px solid var(--border);vertical-align:middle;overflow-wrap:anywhere;word-break:break-word}.admin-table tbody tr:last-child td{border-bottom:0}.admin-table tbody tr:hover{background:var(--light)}
