@import "https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700;1,9..40,400&display=swap";:root{--bg-app:#f6f7f9;--bg-sidebar:#eef0f3;--bg-elevated:#fff;--text-primary:#1a1d21;--text-secondary:#5c6570;--border-subtle:#e2e5ea;--accent:#1f6b5c;--accent-hover:#185649;--accent-soft:#e6f2ef;--accent-contrast:#fff;--danger:#b42318;--danger-soft:#fef3f2;--radius-sm:6px;--radius-md:10px;--font-sans:"DM Sans", "PingFang SC", "Microsoft YaHei", sans-serif;--shadow-soft:0 1px 2px #0000000a, 0 4px 12px #0000000a;--sidebar-w:240px;--topbar-h:56px}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:var(--font-sans);color:var(--text-primary);background:var(--bg-app);-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit}button{cursor:pointer}a{color:inherit}.app{height:100%;display:flex;overflow:hidden}.sidebar{width:var(--sidebar-w);background:var(--bg-sidebar);border-right:1px solid var(--border-subtle);flex-direction:column;flex-shrink:0;transition:width .22s;display:flex;overflow:hidden}.sidebar.collapsed{width:64px}.sidebar-brand{letter-spacing:-.02em;align-items:center;gap:10px;padding:12px 14px 8px;font-weight:700;display:flex}.sidebar-brand .mark{background:var(--accent);width:28px;height:28px;color:var(--accent-contrast);border-radius:8px;flex-shrink:0;place-items:center;font-size:13px;display:grid}.sidebar-brand .name{white-space:nowrap;overflow:hidden}.sidebar.collapsed .name,.sidebar.collapsed .section-label,.sidebar.collapsed .nav-label,.sidebar.collapsed .board-actions{display:none}.sidebar-nav{flex:1;padding:4px 8px 8px;overflow-y:auto}.section-label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.06em;padding:6px 8px 2px;font-size:11px;font-weight:600}.nav-item{width:100%;color:var(--text-primary);text-align:left;border-radius:var(--radius-sm);background:0 0;border:none;align-items:center;gap:6px;padding:3px 8px;font-size:13px;line-height:1.35;transition:background .15s;display:flex;position:relative}.nav-item:hover{background:#0000000a}.nav-item.active{background:var(--accent-soft);color:var(--accent);font-weight:600}.nav-item .nav-label{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.board-row:hover .board-actions{opacity:1}.board-row{cursor:grab}.board-row.dragging{opacity:.45}.board-row.drag-over{outline:2px solid var(--accent);outline-offset:-2px;border-radius:var(--radius-sm)}.board-row .drag-handle{letter-spacing:-2px;width:14px;color:var(--text-secondary);opacity:.55;cursor:grab;-webkit-user-select:none;user-select:none;flex-shrink:0;font-size:10px}.board-row:active{cursor:grabbing}.board-actions{opacity:0;gap:2px;transition:opacity .15s;display:flex}.icon-btn{color:var(--text-secondary);background:0 0;border:none;border-radius:4px;place-items:center;width:24px;height:24px;padding:0;display:grid}.icon-btn:hover{color:var(--text-primary);background:#0000000f}.icon-btn.danger:hover{background:var(--danger-soft);color:var(--danger)}.sidebar-footer{border-top:1px solid var(--border-subtle);padding:10px}.main{background:radial-gradient(1200px 400px at 10% -10%, #1f6b5c0f, transparent 60%), var(--bg-app);flex-direction:column;flex:1;min-width:0;display:flex}.topbar{height:var(--topbar-h);border-bottom:1px solid var(--border-subtle);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:30;background:#f6f7f9d9;flex-shrink:0;align-items:center;gap:12px;padding:0 20px;display:flex;position:relative}.topbar h1{letter-spacing:-.02em;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;margin:0;font-size:18px;font-weight:650;overflow:hidden}.topbar-actions{align-items:center;gap:8px;display:flex}.bulk-bar{border-bottom:1px solid var(--border-subtle);background:var(--accent-soft);color:var(--accent);flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding:8px 20px;font-size:13px;font-weight:600;display:flex}.bulk-bar-actions{flex-wrap:wrap;gap:8px;display:flex}.btn{border:1px solid var(--border-subtle);background:var(--bg-elevated);color:var(--text-primary);border-radius:var(--radius-sm);padding:7px 12px;font-weight:500;transition:background .15s,border-color .15s}.btn:hover{background:#f0f2f5}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-contrast)}.btn-primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.btn.danger-btn,.danger-btn{color:var(--danger);background:var(--danger-soft);border-color:#b4231859}.btn.danger-btn:hover:not(:disabled){background:#fde8e6}.btn-ghost{background:0 0}.content{flex:1;padding:20px;overflow:auto}.card-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px;display:grid}.bookmark-card{background:var(--bg-elevated);border:1px solid var(--border-subtle);border-radius:var(--radius-md);height:100%;box-shadow:var(--shadow-soft);flex-direction:column;transition:transform .18s,box-shadow .18s,border-color .18s;display:flex;position:relative;overflow:hidden}.bookmark-card.selectable{cursor:pointer}.bookmark-card.selected{border-color:var(--accent);box-shadow:0 0 0 2px #1f6b5c2e}.card-check{z-index:2;width:22px;height:22px;box-shadow:var(--shadow-soft);background:#fffffff0;border-radius:5px;place-items:center;display:grid;position:absolute;top:8px;left:8px}.card-check input{cursor:pointer;margin:0}.bookmark-card:hover{border-color:#1f6b5c38;transform:translateY(-2px);box-shadow:0 6px 18px #00000014}.card-thumb{cursor:pointer;background:linear-gradient(145deg,#e8eeeb 0%,#d2ddd8 48%,#b8c5c0 100%);flex-shrink:0;height:48px;position:relative;overflow:hidden}.card-thumb .placeholder-text{color:#00000047;letter-spacing:.06em;text-transform:uppercase;place-items:center;font-size:11px;font-weight:600;display:grid;position:absolute;inset:0}.card-thumb img.shot{object-fit:cover;width:100%;height:100%;display:block}.card-hover-actions{opacity:0;gap:4px;transition:opacity .15s;display:flex;position:absolute;top:6px;right:6px}.bookmark-card:hover .card-hover-actions{opacity:1}.card-hover-actions .icon-btn{width:26px;height:26px;box-shadow:var(--shadow-soft);background:#fffffff0;border-radius:6px}.card-body{flex-direction:column;flex:1;min-height:0;padding:12px 14px 0;display:flex}.card-title{-webkit-line-clamp:2;-webkit-box-orient:vertical;min-height:2.8em;margin:0 0 6px;font-size:14px;font-weight:600;line-height:1.4;display:-webkit-box;overflow:hidden}.card-title a{text-decoration:none}.card-title a:hover{color:var(--accent)}.card-desc{color:var(--text-secondary);-webkit-line-clamp:3;-webkit-box-orient:vertical;flex:1;min-height:3.1em;margin:0;font-size:12.5px;line-height:1.55;display:-webkit-box;overflow:hidden}.card-url{color:var(--text-secondary);border-top:1px solid var(--border-subtle);align-items:center;gap:6px;margin-top:auto;padding:9px 0;font-size:12px;text-decoration:none;transition:color .15s,background .15s;display:flex}.card-url:hover{color:var(--accent)}.card-url img{border-radius:3px;flex-shrink:0;width:14px;height:14px}.card-url .card-url-text{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.card-url .card-url-icon{opacity:0;flex-shrink:0;transition:opacity .15s}.card-url:hover .card-url-icon{opacity:1}.empty{text-align:center;max-width:420px;color:var(--text-secondary);margin:12vh auto 0}.empty h2{color:var(--text-primary);margin:0 0 8px;font-size:20px}.empty p{margin:0 0 20px;line-height:1.5}.empty-actions{flex-wrap:wrap;justify-content:center;gap:10px;display:flex}.skeleton-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px;display:grid}.skeleton-card{border-radius:var(--radius-md);background:linear-gradient(90deg,#e8eaee 25%,#f2f3f5 50%,#e8eaee 75%) 0 0/200% 100%;height:180px;animation:1.2s infinite shimmer}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.toast{color:#fff;z-index:100;box-shadow:var(--shadow-soft);background:#1a1d21;border-radius:999px;padding:10px 16px;font-size:13px;animation:.2s fadeUp;position:fixed;bottom:24px;left:50%;transform:translate(-50%)}@keyframes fadeUp{0%{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%)}}.drawer-backdrop{z-index:40;background:#00000047;animation:.18s fadeIn;position:fixed;inset:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.drawer{background:var(--bg-elevated);z-index:50;flex-direction:column;width:min(420px,100%);height:100%;animation:.22s slideIn;display:flex;position:fixed;top:0;right:0;box-shadow:-8px 0 32px #0000001a}@keyframes slideIn{0%{opacity:.6;transform:translate(16px)}to{opacity:1;transform:translate(0)}}.drawer-header{border-bottom:1px solid var(--border-subtle);justify-content:space-between;align-items:center;padding:14px 16px;display:flex}.drawer-preview{color:#00000059;letter-spacing:.04em;text-transform:uppercase;background:linear-gradient(145deg,#dfe6e3 0%,#c5d0cc 45%,#aeb8b4 100%);place-items:center;height:200px;font-size:12px;font-weight:600;display:grid}.drawer-body{flex:1;padding:16px;overflow:auto}.drawer-body h2{letter-spacing:-.02em;margin:0 0 8px;font-size:20px}.meta-row{color:var(--text-secondary);word-break:break-all;gap:8px;margin-bottom:16px;font-size:13px;display:flex}.drawer-actions{flex-wrap:wrap;gap:8px;display:flex}.modal-backdrop{z-index:60;background:#00000052;place-items:center;padding:16px;animation:.18s fadeIn;display:grid;position:fixed;inset:0}.modal{background:var(--bg-elevated);border-radius:12px;flex-direction:column;width:min(480px,100%);max-height:min(86vh,720px);display:flex;overflow:hidden;box-shadow:0 16px 48px #00000029}.modal header{border-bottom:1px solid var(--border-subtle);flex-shrink:0;justify-content:space-between;align-items:center;padding:14px 16px;display:flex}.modal header h3{margin:0;font-size:16px}.modal .form,.modal .modal-body{flex-direction:column;flex:1;gap:12px;min-height:0;padding:16px;display:flex;overflow-y:auto}.field label{color:var(--text-secondary);margin-bottom:6px;font-size:12px;font-weight:600;display:block}.field input,.field select,.field textarea{border:1px solid var(--border-subtle);border-radius:var(--radius-sm);background:#fff;width:100%;padding:9px 10px}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--accent);outline:2px solid #1f6b5c40}.modal-footer{border-top:1px solid var(--border-subtle);background:var(--bg-elevated);flex-shrink:0;justify-content:flex-end;gap:8px;padding:12px 16px;display:flex}.error-text{color:var(--danger);margin:0;font-size:13px}.modal-lg{width:min(560px,100%)}.import-hint{color:var(--text-secondary);margin:0;font-size:13px;line-height:1.5}.dropzone{border:1.5px dashed var(--border-subtle);border-radius:var(--radius-md);background:var(--bg-app);flex-shrink:0;min-height:88px;transition:border-color .15s,background .15s;position:relative}.dropzone.dragover,.dropzone:hover{border-color:var(--accent);background:var(--accent-soft)}.dropzone.has-file{border-style:solid;border-color:#1f6b5c59}.dropzone input{opacity:0;cursor:pointer;position:absolute;inset:0}.dropzone label{text-align:center;min-height:88px;color:var(--text-secondary);pointer-events:none;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:14px;font-size:13px;display:flex}.dropzone label strong{color:var(--text-primary);font-size:14px}.detect-badge{border-radius:var(--radius-sm);align-items:center;width:fit-content;padding:6px 10px;font-size:12px;font-weight:600;display:inline-flex}.detect-badge.ok{background:var(--accent-soft);color:var(--accent)}.detect-badge.bad{background:var(--danger-soft);color:var(--danger)}.detect-hints{color:var(--text-secondary);margin:0;padding-left:18px;font-size:12px;line-height:1.55}.board-count-list{flex-wrap:wrap;gap:6px;margin-top:10px;display:flex}.chip{background:var(--bg-elevated);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);align-items:center;gap:6px;padding:4px 8px;font-size:12px;display:inline-flex}.chip em{color:var(--accent);font-style:normal;font-weight:700}.sample-list{border:1px solid var(--border-subtle);border-radius:var(--radius-sm);flex-shrink:1;min-height:0;max-height:160px;font-size:12px;overflow:hidden auto}.sample-title{z-index:1;background:var(--bg-app);color:var(--text-secondary);padding:8px 10px;font-weight:600;position:sticky;top:0}.sample-row{border-top:1px solid var(--border-subtle);grid-template-columns:100px 1fr;gap:8px;padding:7px 10px;display:grid}.sample-board{color:var(--accent);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.sample-title-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.sample-desc{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;grid-column:2;font-size:12px;overflow:hidden}.check-row{color:var(--text-primary);cursor:pointer;align-items:center;gap:8px;font-size:13px;display:flex}.menu{position:relative}.menu-panel{background:var(--bg-elevated);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);box-shadow:var(--shadow-soft);z-index:20;min-width:160px;position:absolute;top:calc(100% + 6px);right:0;overflow:hidden}.menu-panel button{text-align:left;background:0 0;border:none;width:100%;padding:9px 12px;display:block}.menu-panel button:hover{background:var(--bg-app)}.menu-panel button.danger{color:var(--danger)}.menu-panel button.danger:hover{background:var(--danger-soft)}.nav-emoji{text-align:center;flex-shrink:0;width:18px}.emoji-presets{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.emoji-presets button{border:1px solid var(--border-subtle);background:var(--bg-elevated);border-radius:var(--radius-sm);place-items:center;width:34px;height:34px;padding:0;font-size:17px;transition:border-color .15s,background .15s;display:grid}.emoji-presets button:hover{border-color:var(--accent);background:var(--accent-soft)}@media (width<=960px){.sidebar{z-index:30;height:100%;position:absolute}.sidebar.collapsed{border:none;width:0}.card-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr))}}.login-gate{background:radial-gradient(ellipse 80% 60% at 20% 10%, #1f6b5c1a, transparent 55%), radial-gradient(ellipse 70% 50% at 90% 90%, #5c657014, transparent 50%), var(--bg-app);place-items:center;min-height:100%;padding:24px;display:grid}.login-card{background:var(--bg-elevated);border:1px solid var(--border-subtle);width:min(380px,100%);box-shadow:var(--shadow-soft);border-radius:14px;flex-direction:column;gap:12px;padding:28px 24px 24px;display:flex}.login-brand{letter-spacing:.08em;text-transform:uppercase;color:var(--accent);margin:0;font-size:12px;font-weight:700}.login-card h1{letter-spacing:-.02em;margin:0;font-size:22px;font-weight:650}.login-sub{color:var(--text-secondary);margin:0 0 4px;font-size:13px;line-height:1.5}.login-card .btn-primary{width:100%;margin-top:4px}
