@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Noto+Sans+TC:wght@400;500;600;700&display=swap");*{box-sizing:border-box;margin:0;padding:0}:root{--brand:#dc2626;--brand-strong:#991b1b;--brand-soft:#fee2e2;--brand-pale:#fef2f2;--bg:#fafaf9;--surface:#fff;--surface-2:#f5f5f4;--border:#e7e5e4;--border-soft:#f5f5f4;--text:#1c1917;--text-soft:#44403c;--muted:#78716c;--accent:var(--brand);--accent-strong:var(--brand-strong);--danger:#dc2626;--success:#059669;--success-soft:#d1fae5;--warning:#d97706;--warning-soft:#fed7aa;--info:#2563eb;--info-soft:#dbeafe;--shadow-xs:0 1px 2px rgba(28,25,23,.04);--shadow-sm:0 1px 3px rgba(28,25,23,.06),0 1px 2px rgba(28,25,23,.04);--shadow-md:0 4px 12px rgba(28,25,23,.08);--shadow-lg:0 10px 24px rgba(28,25,23,.1);--radius-sm:6px;--radius:8px;--radius-lg:12px;--radius-xl:16px;--header-h:60px;--sidebar-w:240px;color-scheme:light}:root[data-theme=dark]{--bg:#0c0a09;--surface:#1c1917;--surface-2:#292524;--border:#44403c;--border-soft:#292524;--text:#f5f5f4;--text-soft:#d6d3d1;--muted:#a8a29e;--brand-soft:rgba(220,38,38,.15);--brand-pale:rgba(220,38,38,.08);--success-soft:rgba(5,150,105,.18);--warning-soft:rgba(217,119,6,.18);--info-soft:rgba(37,99,235,.18);--shadow-xs:0 1px 2px rgba(0,0,0,.2);--shadow-sm:0 1px 3px rgba(0,0,0,.3),0 1px 2px rgba(0,0,0,.2);--shadow-md:0 4px 12px rgba(0,0,0,.4);--shadow-lg:0 10px 24px rgba(0,0,0,.5);color-scheme:dark}body,html{font-family:Inter,Noto Sans TC,-apple-system,PingFang TC,system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-size:15px;min-height:100vh}a{color:var(--brand);text-decoration:none;transition:color .15s}a:hover{color:var(--brand-strong)}h1,h2,h3,h4,h5,h6{color:var(--text);font-weight:600;line-height:1.3}h1{font-size:1.6rem}h2{font-size:1.2rem;margin-bottom:12px}h3{font-size:1.05rem}p{color:var(--text-soft)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:5px}::-webkit-scrollbar-thumb:hover{background:var(--muted)}main.center{max-width:880px;margin:0 auto;padding:64px 24px}.brand-mark{display:inline-flex;align-items:center;gap:10px;text-decoration:none;color:inherit}.brand-mark img,.brand-mark svg{width:36px;height:36px;flex-shrink:0}.brand-mark .brand-text{display:flex;flex-direction:column;line-height:1.1}.brand-mark .brand-name{font-size:1.15rem;font-weight:700;color:var(--brand);letter-spacing:.02em}.brand-mark .brand-sub{font-size:.72rem;color:var(--muted);letter-spacing:.04em}.public-header{display:flex;justify-content:space-between;align-items:center;padding:14px 32px;background:var(--surface);border-bottom:1px solid var(--border);position:-webkit-sticky;position:sticky;top:0;z-index:50;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.public-header nav{display:flex;gap:20px;align-items:center}.public-header nav a{color:var(--text-soft);font-weight:500;font-size:.92rem}.public-header nav a:hover{color:var(--brand)}.public-main{max-width:1100px;margin:0 auto;padding:36px 32px}.public-footer{padding:28px 32px;text-align:center;border-top:1px solid var(--border);margin-top:60px;font-size:.85rem;color:var(--muted);background:var(--surface)}.hero{background:linear-gradient(135deg,var(--brand-pale) 0,var(--surface) 60%);padding:48px 32px;border-radius:var(--radius-xl);margin-bottom:32px;border:1px solid var(--border)}.hero h1{font-size:2.2rem;margin-bottom:8px;color:var(--text)}.hero h1 .accent{color:var(--brand)}.hero .lead{color:var(--text-soft);font-size:1.05rem;margin-bottom:16px;max-width:640px}.filter-chips{display:flex;gap:8px;margin:24px 0 8px;flex-wrap:wrap;align-items:center}.filter-chips .label{color:var(--muted);font-size:.85rem;margin-right:8px}.filter-chips a{padding:6px 14px;border-radius:999px;background:var(--surface);border:1px solid var(--border);color:var(--text-soft);font-size:.85rem;transition:all .15s}.filter-chips a:hover{border-color:var(--brand);color:var(--brand)}.filter-chips a.active{background:var(--brand);color:#fff;border-color:var(--brand);font-weight:600}.course-section h2{font-size:1.15rem;color:var(--brand);margin:32px 0 12px;border-left:3px solid var(--brand);padding-left:10px}.course-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));grid-gap:16px;gap:16px}.course-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px;transition:all .15s;text-decoration:none;color:var(--text);display:block;box-shadow:var(--shadow-xs)}.course-card:hover{border-color:var(--brand);box-shadow:var(--shadow-md);transform:translateY(-2px)}.course-card h3{font-size:1.05rem;margin-bottom:8px;color:var(--text)}.course-card .meta{font-size:.82rem;color:var(--muted);margin-bottom:14px}.course-card .next{font-size:.82rem;color:var(--brand);font-weight:500}.session-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:18px;margin-bottom:12px;box-shadow:var(--shadow-xs)}.shell{display:flex;min-height:100vh;background:var(--bg)}.sidebar{width:var(--sidebar-w);background:var(--surface);border-right:1px solid var(--border);padding:20px 16px;display:flex;flex-direction:column;flex-shrink:0;position:-webkit-sticky;position:sticky;top:0;height:100vh;overflow-y:auto}.sidebar .brand{font-size:1.3rem;font-weight:700;color:var(--brand);letter-spacing:.02em}.sidebar .tagline{font-size:.78rem;color:var(--muted);margin-bottom:24px}.sidebar nav{display:flex;flex-direction:column;gap:2px}.sidebar nav a{padding:9px 12px;border-radius:var(--radius);color:var(--text-soft);font-size:.92rem;font-weight:500;transition:all .12s;position:relative}.sidebar nav a:hover{background:var(--brand-pale);color:var(--brand)}.sidebar nav a.active{background:var(--brand);color:#fff;font-weight:600}.content{flex:1 1;padding:24px 32px;min-width:0}.topbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;gap:12px}.topbar .user{font-size:.88rem;color:var(--text-soft)}.card{border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px;margin-bottom:16px;box-shadow:var(--shadow-xs)}.btn,.card{background:var(--surface)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 16px;color:var(--text);border:1px solid var(--border);border-radius:var(--radius);font-size:.92rem;font-weight:500;cursor:pointer;text-decoration:none;transition:all .12s;font-family:inherit}.btn:hover{border-color:var(--brand);color:var(--brand);background:var(--brand-pale)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--brand);color:#fff;border-color:var(--brand)}.btn-primary:hover{background:var(--brand-strong);border-color:var(--brand-strong);color:#fff}.btn-sm{padding:5px 11px;font-size:.85rem}.btn-lg{padding:12px 22px;font-size:1rem}.btn-ghost{background:transparent;border-color:transparent}.btn-ghost:hover{background:var(--surface-2);color:var(--text)}label{display:block;font-size:.85rem;color:var(--text-soft);margin-bottom:4px;font-weight:500}.input,input[type=date],input[type=email],input[type=number],input[type=password],input[type=tel],input[type=text],input[type=time],select,textarea{width:100%;padding:9px 12px;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);font-size:.95rem;font-family:inherit;margin-bottom:14px;transition:border-color .12s,box-shadow .12s}.input:focus,input:focus,select:focus,textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}.input::placeholder,input::placeholder,textarea::placeholder{color:var(--muted);opacity:.7}textarea{min-height:120px;resize:vertical}.row{display:flex;gap:12px;flex-wrap:wrap}.row>*{flex:1 1;min-width:200px}.table{width:100%;border-collapse:collapse;font-size:.92rem}.table td,.table th{padding:12px 10px;text-align:left;border-bottom:1px solid var(--border-soft)}.table th{font-weight:600;color:var(--text-soft);background:var(--surface-2);font-size:.82rem;text-transform:uppercase;letter-spacing:.04em}.table tbody tr:hover{background:var(--brand-pale)}.badge{display:inline-block;padding:3px 9px;border-radius:999px;font-size:.75rem;font-weight:500;background:var(--surface-2);color:var(--text-soft);border:1px solid var(--border)}.badge.pending{background:var(--warning-soft);color:var(--warning);border-color:transparent}.badge.completed,.badge.paid{background:var(--success-soft);color:var(--success);border-color:transparent}.badge.cancelled{background:var(--brand-soft);color:var(--brand);border-color:transparent}.badge.waitlist{background:var(--info-soft);color:var(--info);border-color:transparent}.msg-error{background:var(--brand-soft);color:var(--brand-strong);border-left:3px solid var(--brand)}.msg-error,.msg-ok{padding:10px 14px;border-radius:var(--radius);margin:8px 0;font-size:.9rem}.msg-ok{background:var(--success-soft);color:var(--success);border-left:3px solid var(--success)}.msg-warn{background:var(--warning-soft);color:var(--warning);padding:10px 14px;border-radius:var(--radius);margin:8px 0;font-size:.9rem;border-left:3px solid var(--warning)}.muted{color:var(--muted)}.text-brand{color:var(--brand)}.text-success{color:var(--success)}.text-warning{color:var(--warning)}.text-danger{color:var(--danger)}.theme-toggle{width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;color:var(--text-soft);transition:all .15s}.theme-toggle:hover{border-color:var(--brand);color:var(--brand)}.passport-cover{background:linear-gradient(135deg,var(--brand) 0,var(--brand-strong) 100%);color:#fff;padding:36px 32px;border-radius:var(--radius-xl);margin-bottom:24px;position:relative;overflow:hidden;box-shadow:var(--shadow-lg)}.passport-cover:before{right:-40px;top:-40px;width:200px;height:200px;background:hsla(0,0%,100%,.08)}.passport-cover:after,.passport-cover:before{content:"";position:absolute;border-radius:50%}.passport-cover:after{right:20px;bottom:-60px;width:140px;height:140px;background:hsla(0,0%,100%,.05)}.passport-cover h1,.passport-cover p{color:#fff;position:relative;z-index:1}.passport-cover .seal{position:absolute;right:24px;top:24px;width:56px;height:56px;z-index:2;background:#fff;border-radius:50%;padding:6px;box-sizing:border-box;box-shadow:0 2px 8px rgba(0,0,0,.15)}.cert-badge{background:var(--surface);border:3px double var(--brand);border-radius:var(--radius-lg);padding:24px;position:relative;text-align:center}.cert-badge .cert-mark{width:60px;height:60px;margin:0 auto 12px}.cert-badge .cert-serial{font-family:Inter,monospace;font-size:.78rem;color:var(--muted);letter-spacing:.1em}@media (max-width:768px){.shell{flex-direction:column}.sidebar{width:100%;height:auto;position:relative;border-right:none;border-bottom:1px solid var(--border)}.sidebar nav{flex-direction:row;overflow-x:auto;gap:4px}.sidebar nav a{white-space:nowrap}.content{padding:16px}.public-header,.public-main{padding-left:16px;padding-right:16px}.hero{padding:32px 20px}.row>*{min-width:100%}}