:root{--color-primary: #4a90a4;--color-primary-hover: #3d7a8c;--color-secondary: #a8d5ba;--color-secondary-hover: #8fc4a3;--color-surface: #ffffff;--color-surface-alt: #f8faf9;--color-text: #2d3748;--color-mute: #718096;--color-success: #38a169;--color-error: #e53e3e;--color-warning: #d69e2e;--color-border: #e2e8f0;--color-border-light: #edf2f7;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .06);--shadow-md: 0 2px 8px rgba(0, 0, 0, .08);--shadow-lg: 0 4px 16px rgba(0, 0, 0, .1);--touch-min: 44px}.ds-btn{display:inline-flex;align-items:center;justify-content:center;min-height:var(--touch-min);padding:0 20px;font-size:16px;font-weight:500;border-radius:var(--radius-md);border:1px solid transparent;cursor:pointer;transition:background .15s,border-color .15s}.ds-btn:disabled{opacity:.7;cursor:not-allowed}.ds-btn:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.ds-btn-primary{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.ds-btn-primary:hover:not(:disabled){background:var(--color-primary-hover);border-color:var(--color-primary-hover)}.ds-btn-secondary{background:var(--color-surface);color:var(--color-text);border-color:var(--color-border)}.ds-btn-secondary:hover:not(:disabled){background:var(--color-surface-alt);border-color:#cbd5e0}.ds-btn-ghost{background:transparent;color:var(--color-primary);border-color:transparent}.ds-btn-ghost:hover:not(:disabled){background:#4a90a414}.ds-input{width:100%;min-height:var(--touch-min);padding:0 14px;font-size:16px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface)}.ds-input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px #4a90a433}.ds-input:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.ds-select{min-width:120px;cursor:pointer}.ds-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}.ds-badge{display:inline-flex;align-items:center;padding:4px 10px;font-size:13px;font-weight:500;border-radius:var(--radius-sm)}.ds-badge-primary{background:#4a90a426;color:var(--color-primary)}.ds-badge-success{background:#38a16926;color:var(--color-success)}.ds-badge-error{background:#e53e3e1f;color:var(--color-error)}.ds-badge-warning{background:#d69e2e26;color:var(--color-warning)}.ds-badge-mute{background:var(--color-surface-alt);color:var(--color-mute)}.ds-alert{padding:12px 16px;border-radius:var(--radius-md);font-size:14px}.ds-alert-error{background:#e53e3e1a;color:var(--color-error);border:1px solid rgba(229,62,62,.3)}.ds-alert-success{background:#38a1691a;color:var(--color-success);border:1px solid rgba(56,161,105,.3)}.ds-alert-warning{background:#d69e2e1a;color:#b7791f;border:1px solid rgba(214,158,46,.3)}.ds-empty{text-align:center;padding:32px 16px;color:var(--color-mute)}.ds-empty img{max-width:160px;margin-bottom:12px;opacity:.85}.ds-empty p{font-size:15px;margin:0}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;line-height:1.6;color:#333;background-color:#f5f5f5}#root{min-height:100vh}a{color:inherit;text-decoration:none}button{cursor:pointer}@keyframes spin{to{transform:rotate(360deg)}}.app-layout{min-height:100vh;display:flex;flex-direction:column}.app-bar{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:#fff;border-bottom:1px solid #e0e0e0;flex-shrink:0}.app-bar-brand{font-weight:700;font-size:1.25rem;color:#1976d2;cursor:pointer}.app-bar-right{display:flex;align-items:center;gap:12px}.app-bar-role{font-size:.875rem;color:#666}.role-layout{display:flex;flex:1;min-height:0}.nav-side{width:200px;flex-shrink:0;background:#fff;border-right:1px solid #e0e0e0;padding:12px 0}.nav-list{list-style:none}.nav-list li{margin:0}.nav-link{display:block;padding:10px 16px;color:#444;font-size:.9375rem;border-radius:0 6px 6px 0;margin:0 8px}.nav-link:hover{background:#f0f0f0;color:#1976d2}.nav-link.active{background:#e3f2fd;color:#1976d2;font-weight:500}.nav-list-inline{display:flex;flex-wrap:wrap;justify-content:center;gap:4px}.main-content{flex:1;padding:16px;overflow:auto;max-width:900px;margin:0 auto;width:100%}.main-content-inner h1{margin-bottom:8px;font-size:1.5rem}.nav-bottom{display:none;position:fixed;bottom:0;left:0;right:0;background:#fff;border-top:1px solid #e0e0e0;padding:8px;z-index:100}.nav-bottom .nav-list-inline{justify-content:space-around}.nav-bottom .nav-link{padding:8px 12px;font-size:.8125rem;margin:0}@media(max-width:1023px)and (min-width:769px){.nav-side{position:fixed;left:0;top:0;bottom:0;z-index:200;transform:translate(-100%);transition:transform .2s ease;box-shadow:2px 0 8px #0000001a}.nav-side.is-open{transform:translate(0)}.role-layout{position:relative}.nav-hamburger{position:absolute;left:8px;top:8px;z-index:201;display:flex;align-items:center;justify-content:center;width:44px;height:44px;padding:0;border:none;background:var(--color-surface, #fff);cursor:pointer;color:#444;border-radius:var(--radius-md, 8px);box-shadow:var(--shadow-sm, 0 1px 2px rgba(0,0,0,.06))}.nav-hamburger:focus{outline:none}.nav-hamburger svg{width:24px;height:24px}.nav-overlay{display:none;position:fixed;inset:0;background:#0000004d;z-index:199}.nav-overlay.is-visible{display:block}}@media(min-width:1024px){.nav-hamburger,.nav-overlay{display:none!important}}@media(max-width:768px){.nav-side{display:none}.nav-hamburger,.nav-overlay{display:none!important}.nav-bottom{display:block}.main-content{padding-bottom:72px}}.btn{padding:10px 16px;font-size:.9375rem;border-radius:6px;border:1px solid transparent;font-weight:500;transition:background .15s,border-color .15s}.btn-primary{background:#1976d2;color:#fff;border-color:#1976d2}.btn-primary:hover:not(:disabled){background:#1565c0;border-color:#1565c0}.btn-secondary{background:#fff;color:#444;border-color:#ccc}.btn-secondary:hover:not(:disabled){background:#f5f5f5;border-color:#999}.btn:disabled{opacity:.7;cursor:not-allowed}.section-card{background:#fff;border:1px solid #e0e0e0;border-radius:8px;padding:16px;margin-bottom:20px}.section-card-title{font-size:1.125rem;font-weight:600;margin-bottom:8px;color:#333}.section-card-desc{font-size:.875rem;color:#666;margin-bottom:12px}.section-card-body{margin-top:8px}.form-label{display:block;font-size:.875rem;margin-bottom:6px;color:#555}.form-input{width:100%;padding:10px 12px;font-size:.9375rem;border:1px solid #ccc;border-radius:6px;background:#fff}.form-input:focus{outline:none;border-color:#1976d2;box-shadow:0 0 0 2px #1976d233}.form-input-select{min-width:140px;width:auto;cursor:pointer}.ym-picker{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:16px}.ym-picker .form-label{margin-bottom:0;margin-right:4px}.modal-overlay{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000;padding:16px;overflow-y:auto}.modal-overlay .modal{background:#fff;border-radius:8px;padding:16px;max-width:min(90vw,800px);box-shadow:0 4px 20px #00000026}.ds-page{display:flex;flex-direction:column;gap:16px}.ds-page-header{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:12px}.ds-page-title{font-size:1.5rem;font-weight:700;color:var(--color-text, #2d3748);margin:0 0 4px}.ds-page-subtitle{font-size:14px;color:var(--color-mute, #718096);margin:0}.ds-page-action{flex-shrink:0}.ds-page-content{flex:1}.ds-section{margin-bottom:20px}.ds-section-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px;margin-bottom:8px}.ds-section-title{font-size:1.125rem;font-weight:600;color:var(--color-text, #2d3748);margin:0}.ds-section-action{flex-shrink:0}.ds-section-content{margin-top:4px}.activity-card-grid{display:grid;grid-template-columns:1fr;gap:16px}@media(min-width:400px){.activity-card-grid{grid-template-columns:repeat(2,1fr)}}@media(min-width:768px){.activity-card-grid{grid-template-columns:repeat(3,1fr)}}@media(min-width:1024px){.activity-card-grid{grid-template-columns:repeat(3,1fr);gap:20px}}.activity-card{display:flex;flex-direction:column;border:1px solid var(--color-border, #e2e8f0);border-radius:var(--radius-lg, 12px);overflow:hidden;background:var(--color-surface, #fff);box-shadow:var(--shadow-sm, 0 1px 2px rgba(0,0,0,.06));min-height:140px;transition:box-shadow .15s,border-color .15s}.activity-card:hover{box-shadow:var(--shadow-md, 0 2px 8px rgba(0,0,0,.08));border-color:#cbd5e0}.activity-card.selected{border-color:var(--color-primary, #4a90a4);box-shadow:0 0 0 2px #4a90a440}.activity-card-thumb{width:100%;aspect-ratio:16/10;object-fit:cover;background:var(--color-surface-alt, #f8faf9)}.activity-card-placeholder{width:100%;aspect-ratio:16/10;background:var(--color-surface-alt, #f8faf9);display:flex;align-items:center;justify-content:center;color:var(--color-mute, #718096);font-size:13px}.activity-card-body{padding:12px;flex:1;display:flex;flex-direction:column;gap:8px}.activity-card-title{font-size:15px;font-weight:600;color:var(--color-text, #2d3748);line-height:1.3}.activity-card-meta{font-size:13px;color:var(--color-mute, #718096)}.activity-card-actions{display:flex;gap:8px;margin-top:auto;flex-wrap:wrap}.workbook-pager{display:flex;align-items:center;justify-content:center;gap:12px;margin:12px 0}.workbook-pager-btn{min-width:44px;min-height:44px;padding:0 12px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);cursor:pointer;font-size:14px;font-weight:500}.workbook-pager-btn:hover:not(:disabled){background:var(--color-surface-alt);border-color:var(--color-primary)}.workbook-pager-btn:disabled{opacity:.5;cursor:not-allowed}.workbook-pager-info{font-size:14px;color:var(--color-mute)}.template-view-toggle{display:flex;gap:4px;margin-bottom:16px}.template-view-toggle button{min-height:36px;padding:0 12px;border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);cursor:pointer;font-size:14px}.template-view-toggle button.active{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}.template-view-toggle button:hover:not(.active){background:var(--color-surface-alt)}.template-card-grid{display:grid;grid-template-columns:1fr;gap:16px}@media(min-width:600px){.template-card-grid{grid-template-columns:repeat(2,1fr)}}@media(min-width:900px){.template-card-grid{grid-template-columns:repeat(3,1fr)}}.template-card{border:1px solid var(--color-border);border-radius:var(--radius-lg);overflow:hidden;background:var(--color-surface);box-shadow:var(--shadow-sm)}.template-card-body{padding:16px}.template-card-title{font-size:15px;font-weight:600;margin-bottom:4px;color:var(--color-text)}.template-card-meta{font-size:13px;color:var(--color-mute);margin-bottom:12px}.template-card-actions{display:flex;flex-wrap:wrap;gap:8px}.badge-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(80px,1fr));gap:12px}@media(max-width:375px){.badge-grid{grid-template-columns:repeat(4,1fr);gap:8px}}.template-list-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px;padding:12px 16px;border-bottom:1px solid var(--color-border-light)}.template-list-row:last-child{border-bottom:none}.image-manage-section{margin-top:16px;padding:16px;background:var(--color-surface-alt);border-radius:var(--radius-md);border:1px solid var(--color-border-light)}.image-manage-thumb{margin-bottom:16px}.image-manage-thumb h4,.image-manage-workbook h4{font-size:14px;font-weight:600;margin:0 0 8px;color:var(--color-text)}.image-manage-thumb-area{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.image-manage-thumb-preview{width:80px;height:80px;object-fit:cover;border-radius:var(--radius-sm);border:1px solid var(--color-border)}.image-manage-workbook-grid{display:flex;flex-wrap:wrap;gap:8px}.image-manage-workbook-item{border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:4px;background:var(--color-surface)}.image-manage-workbook-item img{width:60px;height:60px;object-fit:cover;display:block}.image-manage-status{padding:8px 12px;border-radius:var(--radius-sm);font-size:13px;margin-top:8px}.image-manage-status.uploading{background:#4a90a41a;color:var(--color-primary)}.image-manage-status.success{background:#38a1691a;color:var(--color-success)}.image-manage-status.error{background:#e53e3e1a;color:var(--color-error)}@media(min-width:768px){.student-home-cards{grid-template-columns:repeat(3,1fr)!important}}.badge-grid{display:grid;gap:12px;grid-template-columns:repeat(2,1fr)}@media(min-width:768px){.badge-grid{grid-template-columns:repeat(5,1fr)}}
