:root,:root[data-theme=dark]{--bg-primary:#0a0a0a;--bg-secondary:#1a1a1a;--bg-tertiary:#2a2a2a;--primary-color:#06f;--primary-hover:#2680ff;--text-primary:#fff;--text-secondary:#b0b0b0;--success:#0c8;--warning:#fa0;--error:#f44;--border:#333;--shadow:#00000080}:root[data-theme=light]{--bg-primary:#f5f7fa;--bg-secondary:#fff;--bg-tertiary:#eef1f6;--primary-color:#06f;--primary-hover:#0052cc;--text-primary:#0a0a0a;--text-secondary:#5a5a5a;--success:#00a86b;--warning:#c80;--error:#d32f2f;--border:#d5dbe3;--shadow:#0000001f}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg-primary);color:var(--text-primary);-webkit-font-smoothing:antialiased;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}a{color:var(--primary-color);text-decoration:none}button{font:inherit;cursor:pointer;border:1px solid var(--border);background:var(--bg-tertiary);color:var(--text-primary);border-radius:8px;padding:8px 14px;transition:background .15s,border-color .15s,opacity .15s}button:hover:not(:disabled){border-color:var(--primary-color)}button:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--primary-color);border-color:var(--primary-color);color:#fff}.btn-primary:hover:not(:disabled){background:var(--primary-hover)}.btn-ghost{background:0 0}.btn-danger{color:var(--error);border-color:var(--error)}.btn-sm{border-radius:6px;padding:4px 10px;font-size:13px}input,select,textarea{font:inherit;background:var(--bg-primary);color:var(--text-primary);border:1px solid var(--border);border-radius:6px;padding:7px 9px}input:focus,select:focus,textarea:focus{border-color:var(--primary-color);outline:none}.navbar{background:var(--bg-secondary);border-bottom:1px solid var(--border);z-index:10;justify-content:space-between;align-items:center;height:58px;padding:0 20px;display:flex;position:sticky;top:0}.navbar .logo{letter-spacing:.2px;font-size:17px;font-weight:700}.navbar .logo .accent{color:var(--primary-color)}.navbar .nav-right{align-items:center;gap:10px;display:flex}.navbar .user-email{color:var(--text-secondary);font-size:13px}.tabs{background:var(--bg-secondary);border-bottom:1px solid var(--border);gap:4px;padding:0 16px;display:flex;overflow-x:auto}.tabs a{color:var(--text-secondary);white-space:nowrap;border-bottom:2px solid #0000;padding:12px 16px;font-size:14px;font-weight:500}.tabs a.active{color:var(--text-primary);border-bottom-color:var(--primary-color)}.tabs a:hover{color:var(--text-primary)}.page{max-width:1280px;margin:0 auto;padding:24px}.page-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:18px;display:flex}.page-header h1{margin:0;font-size:22px}.muted{color:var(--text-secondary)}.row-actions{align-items:center;gap:8px;display:flex}.card-grid{grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:14px;margin-bottom:24px;display:grid}.card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:12px;padding:18px}.card .label{color:var(--text-secondary);margin-bottom:6px;font-size:13px}.card .value{font-size:28px;font-weight:700}.card .sub{color:var(--text-secondary);margin-top:4px;font-size:12px}.table-wrap{background:var(--bg-secondary);border:1px solid var(--border);border-radius:12px;overflow:auto}table{border-collapse:collapse;width:100%;font-size:14px}th,td{text-align:left;border-bottom:1px solid var(--border);white-space:nowrap;padding:10px 14px}th{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;background:var(--bg-secondary);font-size:12px;font-weight:600;position:sticky;top:0}tbody tr:hover{background:var(--bg-tertiary)}.num{text-align:center;font-variant-numeric:tabular-nums}td.editable{text-align:center}td.editable input,td.editable select{text-align:center;width:90px}tr.dirty{background:#0066ff14}.badge{border:1px solid var(--border);border-radius:999px;padding:2px 9px;font-size:12px;font-weight:600;display:inline-block}.badge.ok,.badge.yes,.badge.uploaded{color:var(--success);border-color:var(--success)}.badge.failed,.badge.error{color:var(--error);border-color:var(--error)}.badge.processing{color:var(--warning);border-color:var(--warning)}.progress{background:var(--bg-tertiary);vertical-align:middle;border-radius:999px;width:110px;height:8px;display:inline-block;position:relative;overflow:hidden}.progress>span{background:var(--primary-color);height:100%;display:block}.login-wrap{place-items:center;min-height:100vh;padding:20px;display:grid}.login-card{background:var(--bg-secondary);border:1px solid var(--border);width:100%;max-width:380px;box-shadow:0 10px 40px var(--shadow);border-radius:16px;padding:32px}.login-card h1{margin:0 0 4px;font-size:22px}.login-card .sub{color:var(--text-secondary);margin-bottom:22px;font-size:14px}.field{flex-direction:column;gap:6px;margin-bottom:14px;display:flex}.field label{color:var(--text-secondary);font-size:13px}.field input{width:100%}.form-error{border:1px solid var(--error);color:var(--error);background:#ff44441f;border-radius:8px;margin-bottom:14px;padding:9px 12px;font-size:13px}.modal-overlay{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:50;background:#0000008c;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.modal{background:var(--bg-secondary);border:1px solid var(--border);width:100%;max-width:520px;max-height:88vh;box-shadow:0 20px 60px var(--shadow);border-radius:14px;padding:22px;overflow:auto}.modal h2{margin:0 0 16px;font-size:18px}.toast-stack{z-index:100;flex-direction:column;gap:10px;display:flex;position:fixed;bottom:20px;right:20px}.toast{background:var(--bg-tertiary);border:1px solid var(--border);min-width:220px;box-shadow:0 6px 20px var(--shadow);border-left-width:4px;border-radius:8px;padding:12px 16px;font-size:14px}.toast.success{border-left-color:var(--success)}.toast.error{border-left-color:var(--error)}.toast.info{border-left-color:var(--primary-color)}.center-screen{min-height:60vh;color:var(--text-secondary);place-items:center;display:grid}.spinner{border:3px solid var(--border);border-top-color:var(--primary-color);border-radius:50%;width:28px;height:28px;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.section-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin:30px 0 14px;display:flex}.section-head h2{margin:0;font-size:18px}.cell-clip{text-overflow:ellipsis;white-space:nowrap;max-width:360px;overflow:hidden}.toolbar{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:14px;display:flex}.pager{color:var(--text-secondary);justify-content:flex-end;align-items:center;gap:8px;margin-top:12px;font-size:13px;display:flex}.vault-page{max-width:1400px}.vault-layout{grid-template-columns:210px 1fr;align-items:stretch;gap:16px;display:grid}.vault-sidebar{background:var(--bg-secondary);border:1px solid var(--border);border-radius:12px;flex-direction:column;height:calc(100vh - 200px);min-height:380px;padding:10px;display:flex;position:sticky;top:74px}.sidebar-head{margin-bottom:8px}.tree-search{width:100%}.tree{flex:1;margin:4px 0 8px;overflow:auto}.tree-row{cursor:pointer;white-space:nowrap;border-radius:6px;align-items:center;gap:6px;padding:6px;font-size:13.5px;display:flex}.tree-row:hover{background:var(--bg-tertiary)}.tree-row.active{color:var(--text-primary);background:#0066ff26}.tree-caret{text-align:center;width:18px;color:var(--text-primary);-webkit-user-select:none;user-select:none;flex:none;font-size:15px;line-height:1;display:inline-block}.tree-name{text-overflow:ellipsis;overflow:hidden}.sidebar-actions{gap:6px;display:flex}.sidebar-actions button{flex:1;padding:6px 4px}.vault-main{flex-direction:column;min-width:0;display:flex}.vault-toolbar{background:var(--bg-secondary);border:1px solid var(--border);border-radius:10px;flex:none;padding:8px 12px}.vault-toolbar .spacer{flex:1}.path-crumb{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;max-width:50%;font-size:13px;overflow:hidden}.action-bar{border:1px solid var(--primary-color);background:#0066ff1a;border-radius:10px;align-items:center;gap:8px;margin-bottom:12px;padding:8px 12px;font-size:14px;display:flex}.dropzone{border-radius:12px;flex:auto;min-height:200px;position:relative;overflow:auto}.dropzone.over{outline:2px dashed var(--primary-color);outline-offset:-6px;background:#0066ff0d}.empty-folder{color:var(--text-secondary);text-align:center;padding:60px 20px}.file-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px;display:grid}.file-card{background:var(--bg-secondary);border:1px solid var(--border);text-align:center;border-radius:10px;padding:8px;position:relative}.file-card.selected{border-color:var(--primary-color);background:#0066ff14}.file-card .card-check{z-index:2;position:absolute;top:8px;left:8px}.file-card .badge{z-index:2;padding:1px 7px;font-size:10px;position:absolute;top:6px;right:6px}.file-card .dl{padding:2px 7px;position:absolute;bottom:8px;right:8px}.file-card.folder-card{cursor:pointer}.file-card.folder-card:hover{border-color:var(--primary-color)}.folder-thumb{font-size:56px}.folder-row{cursor:pointer}.folder-row:hover{background:var(--bg-tertiary)}.thumb-wrap{cursor:pointer;place-items:center;height:150px;margin-bottom:6px;display:grid}.thumb-img{object-fit:contain;border-radius:6px;max-width:100%}.thumb-icon{color:var(--text-secondary);place-items:center;display:grid}.file-card .file-name{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.file-card .file-meta{color:var(--text-secondary);font-size:11px}.badge.status-new{color:var(--primary-color);border-color:var(--primary-color)}.badge.status-ready{color:var(--success);border-color:var(--success)}.badge.status-scheduled{color:var(--warning);border-color:var(--warning)}.badge.status-organizing{color:var(--text-secondary)}.badge.status-bin{color:var(--error);border-color:var(--error)}.storage-bar{flex:none;align-items:center;gap:12px;margin-top:auto;padding-top:12px;font-size:13px;display:flex}.sidebar-storage{border-top:1px solid var(--border);flex-direction:column;align-items:stretch;gap:6px;margin-top:10px;padding-top:10px}.sidebar-storage .storage-track{width:100%;max-width:none}.sidebar-storage .muted{text-align:center;font-size:12px}.file-link{cursor:pointer}.file-link:hover{color:var(--primary-color);text-decoration:underline}.preview-box{background:var(--bg-secondary);border:1px solid var(--border);width:min(92vw,1000px);max-height:90vh;box-shadow:0 20px 60px var(--shadow);border-radius:14px;flex-direction:column;display:flex;overflow:hidden}.preview-head{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;font-weight:600;display:flex}.preview-head .cell-clip{max-width:60%}.preview-body{place-items:center;min-height:200px;padding:14px;display:grid;position:relative}.preview-stage{place-items:center;width:100%;max-height:78vh;display:grid}.preview-stage img{transform-origin:50%;border-radius:8px;max-width:100%;max-height:78vh;transition:transform .1s}.preview-nav{z-index:3;background:var(--bg-tertiary);border:1px solid var(--border);cursor:pointer;opacity:.85;border-radius:50%;place-items:center;width:42px;height:42px;font-size:26px;line-height:1;display:grid;position:absolute;top:50%;transform:translateY(-50%)}.preview-nav:hover{opacity:1;border-color:var(--primary-color)}.preview-nav.prev{left:10px}.preview-nav.next{right:10px}.storage-track{background:var(--bg-tertiary);border-radius:999px;flex:1;max-width:360px;height:10px;overflow:hidden}.storage-track>span{background:var(--primary-color);height:100%;display:block}.move-picker{border:1px solid var(--border);border-radius:8px;max-height:50vh;overflow:auto}.move-row{cursor:pointer;white-space:nowrap;padding:8px 10px;font-size:14px}.move-row:hover{background:var(--bg-tertiary)}.move-row.active{background:#0066ff26}.app-shell{min-height:100vh;display:flex}.sidebar{background:var(--bg-secondary);border-right:1px solid var(--border);flex-direction:column;flex:0 0 232px;width:232px;height:100vh;padding:10px 8px;transition:width .15s,flex-basis .15s;display:flex;position:sticky;top:0;overflow-y:auto}.app-shell.nav-collapsed .sidebar{flex:0 0 62px;width:62px}.app-main{flex:auto;min-width:0}.side-head{align-items:center;gap:8px;padding:2px 4px 10px;display:flex}.side-logo{white-space:nowrap;font-size:16px;font-weight:700}.side-logo .accent{color:var(--primary-color)}.icon-btn{color:var(--text-secondary);cursor:pointer;background:0 0;border:none;border-radius:8px;place-items:center;padding:7px;display:grid}.icon-btn:hover{background:var(--bg-tertiary);color:var(--text-primary);border-color:#0000}.side-nav{flex-direction:column;flex:auto;gap:2px;display:flex}.side-link{width:100%;color:var(--text-secondary);font:inherit;cursor:pointer;text-align:left;white-space:nowrap;background:0 0;border:none;border-radius:9px;align-items:center;gap:11px;padding:9px 11px;font-size:14px;font-weight:500;display:flex;overflow:hidden}.side-link:hover{background:var(--bg-tertiary);color:var(--text-primary);border-color:#0000}.side-link.active{color:var(--text-primary);background:#0066ff24}.side-link.active .ic{color:var(--primary-color)}.side-link .ic{flex:none}.side-link.search{margin-bottom:2px}.side-group{margin-top:8px}.side-group-head{cursor:pointer;width:100%;color:var(--text-secondary);font:inherit;text-transform:uppercase;letter-spacing:.5px;background:0 0;border:none;border-radius:9px;align-items:center;gap:11px;padding:9px 11px;font-size:12px;font-weight:700;display:flex}.side-group-head:hover{background:var(--bg-tertiary);color:var(--text-primary)}.side-group-head .grp-caret{margin-left:auto;font-size:11px;transition:transform .15s}.side-group-head .grp-caret:not(.open){transform:rotate(-90deg)}.side-link.sub{padding-left:30px;font-size:13.5px;font-weight:500}.side-link.sub .ic{width:15px;height:15px}.side-listrow{align-items:center;gap:6px;padding-left:14px;display:flex}.side-listrow input[type=checkbox]{cursor:pointer;flex:none}.side-link.listname{flex:1;padding-left:6px}.side-link.add{color:var(--primary-color)}.side-link.add .add-plus{text-align:center;width:15px;font-size:16px;line-height:1}.repeat-badge{opacity:.8;margin-left:6px;font-size:11px}.side-foot{border-top:1px solid var(--border);flex-direction:column;gap:2px;margin-top:8px;padding-top:8px;display:flex}.side-user{text-overflow:ellipsis;padding:2px 11px;font-size:11px;overflow:hidden}.sidebar.collapsed .side-label,.sidebar.collapsed .side-user,.sidebar.collapsed .side-logo{display:none}.sidebar.collapsed .side-link{justify-content:center;gap:0;padding:9px}.sidebar.collapsed .side-group .side-link{padding-left:9px}.ic-spin{animation:.8s linear infinite spin}.script-card{flex-direction:column;gap:10px;display:flex}.script-top{align-items:flex-start;gap:10px;display:flex}.script-name{font-weight:600}.status-dot{background:var(--text-secondary);border-radius:50%;flex:none;width:12px;height:12px;margin-top:3px}.status-dot.running{background:var(--success);box-shadow:0 0 0 3px #0c83}.status-dot.unknown{background:var(--warning)}.script-state{font-size:12px}.script-card button{margin-top:auto}.calendar-page{max-width:1280px}.cal-nav{gap:8px}.cal-month{margin:0 6px;font-size:16px;font-weight:700}.cal-nav .legend{color:var(--text-secondary);align-items:center;gap:6px;margin-left:10px;font-size:12px;display:flex}.cal-nav .legend .dot{border-radius:50%;width:9px;height:9px;margin-left:8px;display:inline-block}.dot.content{background:var(--primary-color)}.dot.task{background:var(--success)}.cal-grid{border:1px solid var(--border);background:var(--bg-secondary);border-radius:12px;grid-template-columns:repeat(7,1fr);display:grid;overflow:hidden}.cal-wday{text-align:center;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--border);padding:8px;font-size:12px;font-weight:600}.cal-cell{border-right:1px solid var(--border);border-bottom:1px solid var(--border);min-height:104px;padding:4px 5px}.cal-cell:nth-child(7n){border-right:none}.cal-cell.out{background:var(--bg-primary)}.cal-cell.out .cal-daynum{color:var(--text-secondary);opacity:.5}.cal-daynum{text-align:right;padding:2px 4px;font-size:12px}.cal-cell.today .cal-daynum{background:var(--primary-color);color:#fff;float:right;border-radius:999px;place-items:center;width:22px;height:22px;display:inline-grid}.cal-events{clear:both;flex-direction:column;gap:2px;margin-top:2px;display:flex}.cal-event{cursor:pointer;text-overflow:ellipsis;white-space:nowrap;border-left:3px solid var(--primary-color);background:#0066ff1f;border-radius:5px;padding:2px 6px;font-size:11px;overflow:hidden}.cal-event.task{border-left-color:var(--success);background:#00cc8824}.cal-event.done{opacity:.5;text-decoration:line-through}.cal-event b{font-weight:700}.cal-more{color:var(--text-secondary);padding:0 4px;font-size:10px}.tasks-board{align-items:flex-start;gap:16px;padding-bottom:8px;display:flex;overflow-x:auto}.tasks-board.single{justify-content:center;overflow-x:visible}.tasks-board.single .task-col{flex:auto;max-width:760px}.task-col{background:var(--bg-secondary);border:1px solid var(--border);border-radius:14px;flex-direction:column;flex:0 0 320px;max-width:320px;padding:12px;display:flex}.task-col-head{justify-content:space-between;align-items:center;margin-bottom:6px;display:flex}.task-col-name{font-size:16px;font-weight:700}.task-col-menu{position:relative}.task-menu{z-index:20;background:var(--bg-tertiary);border:1px solid var(--border);box-shadow:0 8px 24px var(--shadow);border-radius:8px;min-width:140px;position:absolute;top:30px;right:0;overflow:hidden}.task-menu div{cursor:pointer;padding:9px 12px;font-size:14px}.task-menu div:hover{background:var(--bg-secondary)}.task-add{border-bottom:1px solid var(--border);align-items:center;gap:8px;padding:6px 4px;display:flex}.task-add .add-plus{color:var(--primary-color);font-size:18px}.task-add input{background:0 0;border:none;flex:1;padding:6px 2px}.task-add input:focus{outline:none}.task-items{flex-direction:column;padding-top:4px;display:flex}.task-empty{padding:18px 6px;font-size:13px}.task-row{border-bottom:1px solid var(--border);cursor:pointer;border-radius:6px;align-items:flex-start;gap:10px;padding:9px 4px;display:flex}.task-row:hover{background:var(--bg-tertiary)}.task-row.sub{padding-left:30px}.task-check{border:2px solid var(--text-secondary);cursor:pointer;background:0 0;border-radius:50%;flex:none;width:18px;height:18px;margin-top:1px;padding:0;transition:border-color .12s;position:relative}.task-check:hover{border-color:var(--primary-color)}.task-check.on{border-color:var(--success);background:var(--success)}.task-check.on:after{content:"✓";color:#fff;place-items:center;font-size:11px;display:grid;position:absolute;inset:0}.task-main{flex:1;min-width:0}.task-title{word-break:break-word;font-size:14px}.task-row.done .task-title{color:var(--text-secondary);text-decoration:line-through}.task-sub{color:var(--text-secondary);flex-wrap:wrap;gap:6px;margin-top:3px;font-size:12px;display:flex}.task-notes{text-overflow:ellipsis;white-space:nowrap;max-width:200px;overflow:hidden}.due-chip{color:var(--text-secondary)}.due-chip.due-today{color:var(--primary-color)}.due-chip.due-past{color:var(--error)}.task-star{cursor:pointer;color:var(--text-secondary);background:0 0;border:none;padding:0 2px;font-size:16px}.task-star.on{color:var(--warning)}.task-star:hover{color:var(--warning);border-color:#0000}.task-done{margin-top:6px}.done-toggle{color:var(--text-secondary);cursor:pointer;text-align:left;background:0 0;border:none;width:100%;padding:6px 2px;font-size:13px}.done-toggle:hover{color:var(--text-primary);border-color:#0000}.task-detail-row{gap:12px;display:flex}.task-star-toggle{cursor:pointer;align-items:center;gap:8px;margin:4px 0 10px;font-size:14px;display:flex}.subtask-line{align-items:center;gap:10px;padding:5px 0;font-size:14px;display:flex}.subtask-line.done span{color:var(--text-secondary);text-decoration:line-through}.subtask-line .task-check{width:16px;height:16px}@media (width<=860px){.vault-layout{grid-template-columns:1fr}.vault-sidebar{max-height:280px;position:static}}@media (width<=680px){.page{padding:16px}.sidebar{flex-basis:56px;width:56px}.sidebar .side-label,.sidebar .side-user,.sidebar .side-logo,.sidebar .side-group-label span{display:none}.sidebar .side-link{justify-content:center;gap:0;padding:9px}.sidebar .side-group .side-link{padding-left:9px}}
