:root{--bg-base: #fafafa;--grid-color: rgba(0, 0, 0, .035);--border-subtle: #eaeaea;--border-focus: #111;--surface: rgba(255, 255, 255, .92);--surface-hover: #fff;--shadow-sm: 0 2px 8px rgba(0, 0, 0, .035);--shadow-md: 0 10px 28px rgba(0, 0, 0, .075);--shadow-lg: 0 18px 46px rgba(0, 0, 0, .12);--motion-fast: .16s cubic-bezier(.2, 0, 0, 1);--motion-base: .24s cubic-bezier(.2, 0, 0, 1);--text-main: #111;--text-secondary: #666;--text-tertiary: #888;--accent-blue: #0070f3;--accent-green: #00a35a;--accent-red: #e5484d;--accent-orange: #b45309;--grid-size: 64px}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:var(--bg-base);color:var(--text-main);font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;line-height:1.5;-webkit-font-smoothing:antialiased}::selection{background:#0070f329}button,input,select,textarea{font:inherit}button{cursor:pointer;touch-action:manipulation}a{color:inherit;text-underline-offset:3px}:focus-visible{outline:3px solid rgba(0,112,243,.28);outline-offset:2px}.grid-bg{position:fixed;inset:0;z-index:-1;pointer-events:none;background-image:linear-gradient(to right,var(--grid-color) 1px,transparent 1px),linear-gradient(to bottom,var(--grid-color) 1px,transparent 1px);background-size:var(--grid-size) var(--grid-size);background-position:center top}.topbar{position:sticky;top:0;z-index:10;border-bottom:1px solid var(--border-subtle);background:#fafafadb;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);box-shadow:0 1px #ffffffb3}.topbar-inner{max-width:1200px;height:56px;margin:0 auto;padding:0 32px;display:flex;align-items:center;justify-content:space-between}.logo-button,.nav-item,.link-button{border:0;background:transparent;color:var(--text-main)}.logo-button{display:inline-flex;align-items:center;gap:8px;font-weight:700;transition:transform var(--motion-fast),color var(--motion-fast)}.logo-button:hover{transform:translateY(-1px)}.user-chip{display:inline-flex;align-items:center;gap:10px;color:var(--text-secondary);font-size:13px}.user-chip span:first-child{color:var(--text-main);font-weight:600}.user-chip button{width:30px;height:30px;display:inline-grid;place-items:center;border:1px solid var(--border-subtle);border-radius:6px;background:#fff;transition:transform var(--motion-fast),border-color var(--motion-fast),box-shadow var(--motion-fast)}.user-chip button:hover{border-color:#c8c8c8;box-shadow:var(--shadow-sm);transform:translateY(-1px)}.app-layout{max-width:1200px;margin:48px auto;padding:0 32px;display:grid;grid-template-columns:180px minmax(0,1fr);gap:48px}.side-nav{position:sticky;top:104px;align-self:start;display:flex;flex-direction:column}.nav-item{min-height:44px;padding:12px 16px;display:inline-flex;align-items:center;gap:12px;border-left:2px solid var(--border-subtle);color:var(--text-secondary);text-align:left;position:relative;transition:color var(--motion-fast),background var(--motion-fast),border-color var(--motion-fast),transform var(--motion-fast)}.nav-item:hover,.nav-item.active{color:var(--text-main);border-left-color:var(--border-focus);background:linear-gradient(90deg,rgba(0,0,0,.03),transparent)}.nav-item.active{font-weight:700}.nav-item:hover{transform:translate(3px)}.content{min-width:0;animation:page-enter var(--motion-base) both}.page-header,.detail-header{margin-bottom:40px;display:flex;justify-content:space-between;gap:24px;align-items:flex-start}.page-header h1,.detail-header h1{margin:0;font-size:32px;line-height:1.16;font-weight:750}.detail-header h1{max-width:720px;font-size:40px}.page-header p,.detail-header p{margin:8px 0 0;color:var(--text-secondary)}.back-link{margin:0 0 14px;padding:0;border:0;background:transparent;color:var(--text-secondary);transition:color var(--motion-fast),transform var(--motion-fast)}.back-link:hover{color:var(--text-main);transform:translate(-2px)}.btn{min-height:36px;padding:0 16px;display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid #dedede;border-radius:6px;background:linear-gradient(#fff,#fbfbfb);color:var(--text-main);font-size:13px;font-weight:650;box-shadow:0 1px #00000005;transition:transform var(--motion-fast),border-color var(--motion-fast),background var(--motion-fast),box-shadow var(--motion-fast),color var(--motion-fast)}.btn:hover{border-color:#c8c8c8;background:#fff;box-shadow:var(--shadow-sm);transform:translateY(-1px)}.btn:active{transform:translateY(0) scale(.985);box-shadow:none}.btn.primary{border-color:#111;background:linear-gradient(#181818,#0f0f0f);color:#fff}.btn.primary:hover{border-color:#222;background:linear-gradient(#2a2a2a,#171717);box-shadow:0 10px 20px #00000029}.btn.danger{border-color:#f4c7c7;color:#9f1d24;background:#fff7f7}.btn.danger:hover{border-color:#eca5a5;background:#fff1f1;box-shadow:0 8px 18px #b4232a14}.btn.warning{border-color:#f9c67a;color:#92400e;background:#fffbeb}.btn.warning:hover{border-color:#f5b942;background:#fef3c7;box-shadow:0 8px 18px #b4781e1a}.btn.success{border-color:#86efac;color:#166534;background:#f0fdf4}.btn.success:hover{border-color:#4ade80;background:#dcfce7;box-shadow:0 8px 18px #1665341a}.archive-entry-btn{font-weight:700;letter-spacing:.01em}.archive-page-summary{margin:-8px 0 28px;padding:16px 20px;display:flex;align-items:center;gap:16px;flex-wrap:wrap;border:1px solid var(--border-subtle);border-radius:8px;background:var(--surface);box-shadow:var(--shadow-sm)}.archive-page-summary strong{font-size:16px;flex:1 1 200px}.archive-page-summary .meta{display:flex;gap:16px;flex-wrap:wrap;color:var(--text-secondary);font-size:13px}.archive-page-summary .meta span{display:flex;align-items:center;gap:4px}.archive-action-bar{position:sticky;bottom:0;z-index:10;margin:32px -2px -2px;padding:14px 20px;display:flex;align-items:center;justify-content:space-between;gap:12px;border-top:1px solid var(--border-subtle);border-radius:0 0 8px 8px;background:#fffffff5;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:0 -4px 16px #0000000f}.archive-action-bar .left-tip{display:flex;align-items:center;gap:8px;color:var(--text-tertiary);font-size:12px}.draft-saved-tip{display:inline-flex;align-items:center;gap:5px;color:#166534;font-size:12px;font-weight:600;animation:fade-in .3s ease both}.archive-readonly-notice{padding:16px 20px;border-radius:8px;border:1px solid var(--border-subtle);background:#f9fafb;color:var(--text-secondary);font-size:14px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:10px}.archive-readonly-notice strong{font-size:16px;color:var(--text-main)}@keyframes fade-in{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:translateY(0)}}.btn.small{min-height:30px;padding:0 12px;font-size:12px}.btn:disabled{cursor:not-allowed;opacity:.55;box-shadow:none;transform:none}.action-row,.inline-form,.filter-bar,.quick-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.stat-grid{margin-bottom:48px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}.stat-card,.action-card,.form-card,.table-card,.info-strip,.project-summary,.login-panel,.center-panel,.dict-card{background:var(--surface);border:1px solid var(--border-subtle);border-radius:8px;box-shadow:var(--shadow-sm);transition:border-color var(--motion-base),box-shadow var(--motion-base),transform var(--motion-base),background var(--motion-base)}.stat-card{padding:24px;position:relative;overflow:hidden}.stat-button{width:100%;border-color:var(--border-subtle);text-align:left;cursor:pointer}.stat-card:after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(120deg,rgba(0,112,243,.055),transparent 45%);opacity:0;transition:opacity var(--motion-base)}.stat-card:hover:after{opacity:1}.stat-card:hover,.stat-button:focus-visible,.table-card:hover,.form-card:hover,.project-summary:hover,.dict-card:hover{border-color:#dedede;box-shadow:var(--shadow-md)}.stat-button:hover{transform:translateY(-2px)}.stat-button:active{transform:translateY(0) scale(.99)}.stat-card span,.action-card small,td small{display:block;color:var(--text-secondary);font-size:12px}.stat-card strong{margin-top:8px;display:block;font-size:28px;line-height:1.1;font-variant-numeric:tabular-nums}.quick-actions{margin-bottom:48px}.action-card{flex:1 1 220px;min-height:92px;padding:20px;text-align:left;display:grid;grid-template-columns:42px 1fr;grid-template-rows:auto auto;column-gap:16px;row-gap:4px;border-color:#e6e6e6}.action-card span{grid-row:1 / 3;width:40px;height:40px;display:grid;place-items:center;border-radius:8px;background:#f5f5f5;transition:background var(--motion-base),transform var(--motion-base)}.action-card:hover{border-color:var(--border-focus);background:var(--surface-hover);box-shadow:var(--shadow-md);transform:translateY(-3px)}.action-card:hover span{background:#f0f7ff;transform:scale(1.04)}.action-card:active{transform:translateY(-1px) scale(.99)}.section-title{margin:34px 0 16px;display:flex;justify-content:space-between;align-items:center}.section-title h2{margin:0;font-size:18px}.link-button{color:var(--text-secondary);font-size:13px;transition:color var(--motion-fast)}.link-button:hover{color:var(--text-main)}.table-card{overflow:hidden;background:#fff}.table-card input[type=checkbox]{width:16px;min-height:16px;padding:0}table{width:100%;border-collapse:separate;border-spacing:0}th{padding:14px 20px;text-align:left;color:var(--text-tertiary);font-size:12px;font-weight:700;letter-spacing:.02em;background:#fafafa;border-bottom:1px solid var(--border-subtle)}td{padding:18px 20px;border-bottom:1px solid var(--border-subtle);vertical-align:middle;font-size:14px}tr:last-child td{border-bottom:0}tr:hover td{background:#f9fbff}.clickable-row{cursor:pointer}.clickable-row:focus-visible td{background:#eef6ff}td strong{display:block;font-weight:700}.right{text-align:right}.table-actions{display:inline-flex;justify-content:flex-end;gap:12px;flex-wrap:wrap}.badge{display:inline-flex;align-items:center;width:fit-content;min-height:24px;padding:2px 10px;border-radius:999px;font-size:12px;font-weight:700;transition:transform var(--motion-fast),filter var(--motion-fast)}.badge:hover{transform:translateY(-1px);filter:saturate(1.08)}.badge.neutral{background:#f4f4f5;color:#52525b}.badge.warning{background:#fff7ed;color:var(--accent-orange)}.badge.danger{background:#fef2f2;color:#b4232a}.badge.success{background:#ecfdf5;color:#067647}.badge.blue{background:#eef6ff;color:var(--accent-blue)}.tab-group{padding:4px;display:flex;gap:4px;border-radius:8px;background:#eee}.tab-group button{min-height:32px;padding:0 14px;border:0;border-radius:6px;background:transparent;color:var(--text-secondary);font-size:13px;font-weight:650;transition:background var(--motion-fast),color var(--motion-fast),box-shadow var(--motion-fast),transform var(--motion-fast)}.tab-group button.active{background:#fff;color:var(--text-main);box-shadow:0 1px 2px #0000000d;transform:translateY(-1px)}.search-box{min-width:260px;height:40px;padding:0 12px;display:flex;align-items:center;gap:8px;border:1px solid var(--border-subtle);border-radius:8px;background:#fff;color:var(--text-tertiary);transition:border-color var(--motion-fast),box-shadow var(--motion-fast),background var(--motion-fast)}.search-box:focus-within{border-color:var(--border-focus);box-shadow:0 0 0 4px #0070f314;background:#fff}.search-box input,.inline-form input,.inline-form select,.compact-row input,.compact-row select{min-width:0;border:0;outline:none;background:transparent}.form-card{padding:28px;display:grid;gap:20px}.field-title{display:inline-flex;align-items:center;gap:8px}.field-title b{padding:2px 6px;border-radius:999px;background:#f5f5f5;color:var(--text-tertiary);font-size:11px;font-weight:750}.field-hint{color:var(--text-tertiary);font-weight:500;line-height:1.45}.wheel-card{padding:16px;display:grid;gap:14px;border:1px solid var(--border-subtle);border-radius:8px;background:linear-gradient(#fff,#fcfcfc)}.wheel-picker{display:grid;grid-template-columns:1.3fr 1fr 1fr;gap:12px}.wheel-column{min-width:0;display:grid;gap:8px}.wheel-column strong{color:var(--text-secondary);font-size:12px}.calendar-input{min-height:46px;padding:0 14px;border:1px solid var(--border-subtle);border-radius:8px;background:#fff;color:var(--text-primary);font-size:15px;font-weight:650}.wheel-scroll{height:144px;padding:48px 6px;overflow-y:auto;scroll-snap-type:y mandatory;border:1px solid var(--border-subtle);border-radius:14px;background:linear-gradient(#fff,#fff0),linear-gradient(#fff0,#fff),linear-gradient(90deg,transparent,rgba(0,0,0,.035),transparent);background-position:top,bottom,center;background-repeat:no-repeat;background-size:100% 42px,100% 42px,100% 38px}.wheel-scroll button{width:100%;min-height:36px;border:0;border-radius:10px;background:transparent;color:var(--text-tertiary);font-size:15px;font-weight:650;scroll-snap-align:center;transition:background var(--motion-fast),color var(--motion-fast),transform var(--motion-fast)}.wheel-scroll button.active{background:#111;color:#fff;transform:scale(1.02)}.time-picker-trigger{width:100%;min-height:46px;padding:0 14px;display:flex;align-items:center;justify-content:space-between;gap:8px;border:1px solid var(--border-subtle);border-radius:8px;background:#fff;color:var(--text-main);font-size:15px;font-weight:650;cursor:pointer;transition:border-color var(--motion-fast),box-shadow var(--motion-fast),background var(--motion-fast)}.time-picker-trigger:hover{border-color:var(--border-focus);background:var(--surface-hover)}.time-picker-trigger.active,.time-picker-trigger:focus-visible{border-color:var(--border-focus);box-shadow:0 0 0 4px #11111114}.time-picker-trigger svg{flex-shrink:0;color:var(--text-tertiary);transition:color var(--motion-fast)}.time-picker-trigger:hover svg{color:var(--text-main)}.time-display{font-variant-numeric:tabular-nums;font-size:17px;letter-spacing:.03em}.time-picker-popup{position:absolute;top:calc(100% + 8px);left:0;z-index:120;width:240px;border:1px solid var(--border-subtle);border-radius:14px;background:#fff;box-shadow:0 8px 32px #00000021,0 2px 8px #0000000f;overflow:hidden;animation:popup-enter .15s cubic-bezier(.34,1.4,.64,1) both}@keyframes popup-enter{0%{opacity:0;transform:translateY(-6px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}.time-picker-header{padding:14px 16px 10px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--border-subtle);background:#fafafa}.time-picker-header span{color:var(--text-secondary);font-size:12px;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.time-picker-preview{font-size:22px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:.05em;color:var(--text-main)}.time-picker-body{display:flex;align-items:center;gap:0;padding:12px 8px}.time-picker-sep{flex-shrink:0;width:20px;text-align:center;font-size:20px;font-weight:700;color:var(--text-tertiary);padding-top:24px}.time-picker-col{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}.time-picker-col-label{text-align:center;color:var(--text-tertiary);font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.time-picker-scroll{height:176px;overflow-y:auto;display:flex;flex-direction:column;gap:2px;padding:4px;scroll-snap-type:y mandatory;scrollbar-width:none}.time-picker-scroll::-webkit-scrollbar{display:none}.time-picker-cell{width:100%;min-height:36px;border:0;border-radius:8px;background:transparent;color:var(--text-secondary);font-size:16px;font-weight:650;font-variant-numeric:tabular-nums;cursor:pointer;scroll-snap-align:start;transition:background var(--motion-fast),color var(--motion-fast),transform var(--motion-fast);flex-shrink:0}.time-picker-cell:hover{background:#f4f4f5;color:var(--text-main);transform:scale(1.04)}.time-picker-cell.active{background:linear-gradient(#181818,#0f0f0f);color:#fff;font-weight:750;transform:scale(1.04);box-shadow:0 2px 8px #0000002e}.time-picker-footer{padding:10px 12px 12px;border-top:1px solid var(--border-subtle);background:#fafafa;display:flex;justify-content:flex-end}.form,.form.compact{display:grid;gap:14px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.form-grid.two{align-items:end}label{display:grid;gap:7px;color:var(--text-secondary);font-size:13px;font-weight:650}input,select,textarea{width:100%;min-height:40px;padding:8px 11px;border:1px solid var(--border-subtle);border-radius:6px;background:#fff;color:var(--text-main);outline:none;transition:border-color var(--motion-fast),box-shadow var(--motion-fast),background var(--motion-fast)}textarea{resize:vertical}input:focus,select:focus,textarea:focus{border-color:var(--border-focus);box-shadow:0 0 0 4px #0070f314}.compact-row{margin-bottom:24px;grid-template-columns:repeat(auto-fit,minmax(150px,1fr)) auto;align-items:center}.user-toolbar{margin-bottom:18px;display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap}.user-toolbar .search-box{flex:1 1 320px}.check{display:inline-flex;align-items:center;gap:8px;white-space:nowrap}.check input{width:16px;min-height:16px}.cell-stack{display:grid;gap:8px}.row-actions{display:inline-flex;justify-content:flex-end;gap:8px;flex-wrap:wrap}.editing-row{background:#fbfbfb}.editing-row td{vertical-align:top}.user-modal{width:min(720px,100%)}.modal-form{margin-top:18px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.modal-form .check,.modal-form .action-row{grid-column:1 / -1}.detail-grid{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:64px}.detail-grid.single{grid-template-columns:minmax(0,1fr)}.project-summary{margin:-16px 0 44px;padding:22px 24px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:20px 28px}.section-block{margin-bottom:48px;animation:section-enter var(--motion-base) both}.section-label{margin-bottom:16px;display:inline-flex;align-items:center;gap:8px;color:var(--text-tertiary);font-size:12px;font-weight:800;letter-spacing:.04em}.content-text{max-width:760px;color:var(--text-secondary);font-size:16px}.lecture-list,.timeline,.file-list{margin-top:20px;display:grid;gap:10px}.lecture-list div,.timeline div{padding:14px 16px;border:1px solid var(--border-subtle);border-radius:8px;background:#fff;transition:transform var(--motion-fast),border-color var(--motion-fast),box-shadow var(--motion-fast)}.lecture-list div:hover,.timeline div:hover{border-color:#ddd;box-shadow:var(--shadow-sm);transform:translateY(-1px)}.lecture-list span,.timeline span{display:block;color:var(--text-secondary);font-size:13px}.info-strip{position:sticky;top:104px;align-self:start;padding:28px;display:grid;gap:22px}.info-item{display:grid;gap:4px}.info-item label{color:var(--text-tertiary);font-size:12px}.info-item strong{font-size:15px}.inline-form{margin-bottom:18px}.inline-form input,.inline-form select{width:auto;min-width:190px;border:1px solid var(--border-subtle)}.compact-number{display:grid;gap:5px}.compact-number span{color:var(--text-tertiary);font-size:12px;font-weight:700}.inline-form .compact-number input{min-width:120px}.sign-card{display:grid;grid-template-columns:180px minmax(0,1fr);gap:24px;align-items:start}.qr-block{display:grid;gap:10px}.qr-block .btn{width:156px}.sign-time-form{padding:16px;border:1px solid var(--border-subtle);border-radius:8px;background:#fff}.sign-time-form.readonly-block{background:#fcfcfc}.sign-time-form.readonly-block input{color:var(--text-tertiary);background:#f7f7f7;cursor:not-allowed}.readonly-field{color:var(--text-tertiary)}.readonly-field input[disabled],.readonly-field input[readOnly]{color:var(--text-tertiary);background:#f7f7f7}.qr-poster{width:156px;height:156px;padding:12px;display:grid;place-items:center;border:1px solid var(--border-subtle);border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #ffffffb3,var(--shadow-sm);transition:transform var(--motion-base),box-shadow var(--motion-base)}.qr-poster:hover{transform:scale(1.015);box-shadow:var(--shadow-md)}.qr-poster img{width:132px;height:132px;image-rendering:pixelated}.alert{padding:12px 14px;border-radius:6px;font-size:13px}.alert.danger{background:#fff5f5;color:#b4232a;border:1px solid #ffd6d8}.alert.info{background:#f7fbff;color:#17406f;border:1px solid #d8e8fb}.file-list a,.file-list button,.file-list span{color:var(--text-secondary);font-size:13px}.inline-files{margin-top:0}.inline-files strong{display:block}.archive-grid{display:grid;gap:12px;margin-bottom:18px}.archive-row{padding:14px;display:grid;grid-template-columns:1fr minmax(240px,340px);gap:14px;align-items:center;border:1px solid var(--border-subtle);border-radius:8px;background:#fff;transition:transform var(--motion-fast),border-color var(--motion-fast),box-shadow var(--motion-fast),background var(--motion-fast)}.archive-row:hover{border-color:#d8d8d8;background:#fff;box-shadow:var(--shadow-sm);transform:translateY(-1px)}.archive-row div{display:grid;gap:3px}.archive-row span{width:fit-content;padding:2px 8px;border-radius:999px;background:#f5f5f5;color:var(--text-secondary);font-size:12px}.archive-row a,.archive-row .link-button{color:var(--accent-blue);font-size:12px}.archive-file{width:fit-content;padding:0;display:inline-flex;align-items:center;gap:8px;background:transparent}.archive-file button:not(.link-button){padding:1px 6px;border:1px solid #ffd6d8;border-radius:999px;background:#fff8f8;color:#b4232a;font-size:12px;transition:transform var(--motion-fast),background var(--motion-fast)}.archive-file button:not(.link-button):hover{background:#ffecec;transform:translateY(-1px)}.file-picker{gap:6px}.file-picker input[type=file]{padding:10px;border:1px solid var(--border-subtle);border-radius:6px;background:#fff}.file-picker span{width:fit-content;padding:0;border-radius:0;background:transparent;color:var(--text-tertiary);font-size:12px;font-weight:600}.archive-download{margin-bottom:14px}.people-panel{display:grid;gap:10px}.people-toolbar{padding:10px 12px;display:flex;align-items:center;gap:12px;flex-wrap:wrap;border:1px solid var(--border-subtle);border-radius:8px;background:#fff;color:var(--text-secondary);font-size:13px;box-shadow:var(--shadow-sm)}.people-toolbar label{width:auto;display:inline-flex;align-items:center;gap:8px}.people-toolbar select{width:86px;min-height:32px;padding:4px 8px}.pager{margin-left:auto;display:inline-flex;align-items:center;gap:8px}.compact-table th,.compact-table td{padding:10px 16px}.people-table table{min-width:0}.people-table input[type=checkbox]{width:18px;min-height:18px}.empty{min-height:120px;padding:28px;display:grid;place-items:center;gap:12px;border:1px dashed #d8d8d8;border-radius:8px;color:var(--text-secondary);background:#fff9;text-align:center;animation:fade-in var(--motion-base) both}.spinner{width:22px;height:22px;border:2px solid #ddd;border-top-color:#111;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@keyframes page-enter{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes section-enter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.login-screen{min-height:100vh;display:grid;place-items:center;padding:32px}.login-panel{width:min(520px,100%);padding:36px;animation:panel-pop .32s cubic-bezier(.2,0,0,1) both}.brand-mark{display:inline-flex;align-items:center;gap:8px;font-size:14px;font-weight:800}.login-panel h1{margin:24px 0 10px;font-size:34px;line-height:1.14}.login-panel p{margin:0 0 26px;color:var(--text-secondary)}.center-panel{max-width:520px;margin:48px auto;padding:42px;display:grid;justify-items:center;gap:16px;text-align:center;animation:panel-pop .32s cubic-bezier(.2,0,0,1) both}.signin-panel{gap:12px}.signin-panel h1{margin:0;font-size:28px;line-height:1.22}.signin-subtitle{margin:-2px 0 0;color:var(--text-secondary);font-size:14px}.signin-detail{width:100%;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;text-align:left}.signin-panel .info-item{gap:2px}.signin-panel .info-item strong{font-size:14px}.signin-submit{width:100%;min-height:54px;font-size:17px;font-weight:750}@keyframes panel-pop{0%{opacity:0;transform:translateY(14px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}.dict-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.dict-card{padding:20px}.dict-card h3{margin:0 0 14px}.dict-card span{margin:0 8px 8px 0;padding:5px 9px;display:inline-flex;gap:8px;align-items:center;border-radius:999px;background:#f5f5f5;color:var(--text-secondary);font-size:13px}.dict-card button{border:0;background:transparent;color:var(--text-tertiary);transition:color var(--motion-fast),transform var(--motion-fast)}.dict-card button:hover{color:#b4232a;transform:scale(1.08)}.toast{position:fixed;top:50%;left:50%;z-index:9999;min-width:420px;max-width:min(560px,calc(100vw - 48px));padding:22px 26px 22px 20px;display:grid;grid-template-columns:14px 1fr;gap:18px;align-items:center;border:1px solid #d6d6d6;border-radius:12px;background:#fffffffa;color:#111;font-size:17px;font-weight:750;letter-spacing:0;pointer-events:none;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);box-shadow:0 26px 60px #0003,0 0 0 1px #ffffffc2 inset;transform:translate(-50%,-50%);transform-origin:center;animation:toast-in .28s cubic-bezier(.2,0,0,1) both,toast-out .26s cubic-bezier(.4,0,1,1) 3.9s both}.toast span{width:14px;height:56px;border-radius:999px;background:var(--accent-blue)}.toast strong{display:block;font-size:19px;line-height:1.45}.toast.success{border-color:#bfe0cc;background:#fbfffd;color:#064e3b}.toast.success span{background:#0f9f6e}.toast.error{border-color:#ebbbbe;background:snow;color:#9f1d24}.toast.error span{background:#d64550}.toast.info{border-color:#c3d8f4;background:#fbfdff;color:#17406f}.toast.info span{background:var(--accent-blue)}.confirm-backdrop{position:fixed;inset:0;z-index:9998;padding:24px;display:grid;place-items:center;background:#1111113d;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);animation:fade-in .16s ease-out both}.confirm-panel{width:min(420px,100%);padding:22px;border:1px solid var(--border-subtle);border-radius:10px;background:#fffffff5;box-shadow:var(--shadow-lg);animation:panel-pop .22s cubic-bezier(.2,0,0,1) both}.confirm-panel.user-modal{width:min(720px,100%)}.confirm-panel h2{margin:0;font-size:20px;line-height:1.25}.confirm-panel p{margin:10px 0 20px;color:var(--text-secondary);font-size:14px}.confirm-panel .action-row{justify-content:flex-end}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,calc(-50% + 18px)) scale(.96)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}@keyframes toast-out{0%{opacity:1;transform:translate(-50%,-50%) scale(1)}to{opacity:0;transform:translate(-50%,calc(-50% + 8px)) scale(.96)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@media(max-width:920px){.topbar-inner{height:52px;padding:0 16px}.app-layout{margin:18px auto 28px;padding:0 16px;grid-template-columns:1fr;gap:18px}.side-nav{position:sticky;top:52px;z-index:8;margin:0 -16px;padding:6px 16px;display:flex;flex-direction:row;align-items:center;gap:8px;overflow-x:auto;overflow-y:hidden;background:#fafafae6;border-bottom:1px solid var(--border-subtle);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);scrollbar-width:none;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch}.side-nav::-webkit-scrollbar{display:none}.nav-item{min-height:36px;flex:0 0 auto;padding:8px 12px;border-left:0;border-bottom:0;border-radius:999px;background:#ffffffb8;border:1px solid transparent;font-size:13px;white-space:nowrap}.nav-item:hover,.nav-item.active{border-color:#ddd;background:#fff;transform:none;box-shadow:var(--shadow-sm)}.content{animation-duration:.18s}.page-header,.detail-header{margin-bottom:22px;display:grid;gap:14px}.page-header h1,.detail-header h1{font-size:28px}.detail-header h1{max-width:none}.page-header p,.detail-header p{margin-top:6px;font-size:14px}.action-row,.inline-form,.filter-bar,.quick-actions{gap:8px}.btn{min-height:42px;padding:0 14px;font-size:14px}.btn.small{min-height:36px;padding:0 12px;font-size:13px}.stat-grid{margin-bottom:24px;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.stat-card{padding:14px}.stat-card strong{font-size:24px}.quick-actions{margin-bottom:28px}.action-card{min-height:76px;padding:14px;grid-template-columns:34px 1fr;column-gap:12px}.action-card span{width:34px;height:34px}.detail-grid,.form-grid,.dict-grid,.wheel-picker,.modal-form,.compact-row{grid-template-columns:1fr}.user-toolbar{align-items:stretch}.user-toolbar .search-box,.user-toolbar .row-actions{width:100%}.user-toolbar .row-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.wheel-scroll{height:116px;padding:40px 6px}.wheel-scroll button{min-height:34px}.project-summary{margin:-4px 0 28px;padding:16px;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 16px}.section-block{margin-bottom:30px}.section-label{margin-bottom:10px}.content-text{max-width:none;font-size:15px}.signin-panel{margin:20px auto;padding:22px 18px 26px;gap:10px}.signin-panel h1{font-size:22px}.signin-subtitle{font-size:13px}.signin-detail{grid-template-columns:1fr;gap:8px}.signin-panel .info-item{padding:10px 12px;border:1px solid var(--border-subtle);border-radius:8px;background:#fcfcfc}.signin-panel .info-item label{font-size:11px}.signin-panel .info-item strong{font-size:13px;line-height:1.35}.signin-panel .content-text{font-size:14px;line-height:1.5}.signin-submit{min-height:58px;font-size:18px;border-radius:12px}.form-card{padding:18px;gap:16px}input,select,textarea{min-height:44px;font-size:16px}.inline-form input,.inline-form select{width:100%;min-width:0}.inline-form .btn{flex:1 1 150px}.info-strip{position:static}.sign-card{grid-template-columns:1fr;gap:14px}.qr-block{grid-template-columns:136px minmax(0,1fr);align-items:start}.qr-poster{width:136px;height:136px;padding:10px}.qr-poster img{width:116px;height:116px}.sign-card .form.compact{gap:10px}.sign-card .btn{width:100%}.archive-row{grid-template-columns:1fr;gap:10px;padding:12px}.archive-row input[type=file]{padding:8px}.archive-row .btn,.archive-download{width:100%}.people-toolbar{gap:8px}.people-toolbar .btn{min-height:38px}.people-toolbar label{flex:0 0 auto}.pager{width:100%;margin-left:0;justify-content:space-between}.table-card{margin:0 -2px;overflow-x:auto;-webkit-overflow-scrolling:touch}table{min-width:680px}th{padding:10px 14px}td{padding:12px 14px}.toast{inset:50% auto auto 50%;min-width:0;max-width:none;width:min(420px,calc(100vw - 24px));padding:16px 18px 16px 14px;border-radius:10px;gap:14px;font-size:15px}.toast span{width:12px;height:38px}.toast strong{font-size:16px}.confirm-backdrop{padding:16px;align-items:end}.confirm-panel{width:100%;padding:18px}.confirm-panel .action-row{display:grid;grid-template-columns:1fr 1fr}.confirm-panel .btn{width:100%}}@media(max-width:640px){.topbar-inner{padding:0 12px}.logo-button{max-width:58vw;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.user-chip{gap:6px}.user-chip span:nth-child(2){display:none}.app-layout{margin-top:12px;padding:0 12px}.side-nav{margin:0 -12px;padding:6px 12px}.nav-item{min-height:34px;padding:7px 10px;gap:8px}.page-header h1,.detail-header h1{font-size:25px}.detail-header .action-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch}.detail-header .action-row .badge{min-height:42px;justify-content:center}.detail-header .action-row .btn{width:100%}.back-link{min-height:34px;width:fit-content}.stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.stat-card{min-height:78px;padding:12px 10px}.stat-card span{font-size:11px}.stat-card strong{font-size:22px}.quick-actions{display:grid;grid-template-columns:1fr}.action-card{flex:none;min-height:72px}.section-title{margin:24px 0 12px}.section-title h2{font-size:17px}.project-summary{padding:14px;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.info-item{gap:2px}.info-item strong{font-size:14px;word-break:break-word}.lecture-list,.timeline,.file-list{margin-top:12px}.lecture-list div,.timeline div{padding:12px}.inline-form{display:grid;grid-template-columns:1fr}.inline-form .btn{width:100%}.tab-group{width:100%;overflow-x:auto;scrollbar-width:none}.tab-group::-webkit-scrollbar{display:none}.tab-group button{flex:0 0 auto;min-height:38px;padding:0 12px}.search-box{width:100%;min-width:0}.filter-bar{display:grid;grid-template-columns:1fr}.people-toolbar{display:grid;grid-template-columns:auto 1fr;align-items:center}.people-toolbar label{justify-content:end}.pager{grid-column:1 / -1}.people-table table{min-width:520px}.compact-table th,.compact-table td{padding:9px 12px}.archive-file{max-width:100%}.archive-file a{min-width:0;overflow-wrap:anywhere}.empty{min-height:96px;padding:20px 14px}}@media(max-width:420px){.stat-grid{grid-template-columns:1fr}.stat-card{min-height:auto}}
