:root{--bg: #000;--bg-secondary: #0a0a0a;--bg-hover: #111;--border: #222;--border-hover: #333;--text: #e8e8e8;--text-secondary: #666;--text-muted: #444;--accent: #e8e8e8;--font-sans: "Geist", -apple-system, BlinkMacSystemFont, sans-serif;--font-mono: "Geist Mono", "SF Mono", Consolas, monospace;--font-pixel: "Geist Pixel", monospace}*{box-sizing:border-box}html{touch-action:pan-x pan-y}body{background:var(--bg);color:var(--text);min-height:100vh;font-family:var(--font-sans);font-size:13px;line-height:1.5;-webkit-font-smoothing:antialiased}.app{display:flex;min-height:100vh}.sidebar{width:220px;background:var(--bg);border-right:1px solid var(--border);padding:20px 16px;display:flex;flex-direction:column;gap:32px;position:fixed;height:100vh;overflow-y:auto;z-index:10}.sidebar-header{display:flex;align-items:center;justify-content:space-between}.logo{display:flex;align-items:center;gap:8px}.logo-icon{height:24px;width:auto;image-rendering:pixelated}.logo-text{font-family:var(--font-pixel);font-size:16px;font-weight:400;color:var(--text);letter-spacing:.02em}.logout-button{background:transparent;border:none;color:var(--text-secondary);cursor:pointer;padding:4px;display:flex;align-items:center;justify-content:center;opacity:.5;transition:opacity .15s}.logout-button:hover{opacity:1}.search-wrapper{position:relative}.search-icon{position:absolute;left:0;top:50%;transform:translateY(-50%);color:var(--text-muted)}.search-input{width:100%;padding:8px 0 8px 24px;background:transparent;border:none;border-bottom:1px solid var(--border);color:var(--text);font-size:13px;outline:none;transition:border-color .15s}.search-input:focus{border-color:var(--text-secondary)}.search-input::placeholder{color:var(--text-muted)}.search-spinner{animation:spin 1s linear infinite}@keyframes spin{0%{transform:translateY(-50%) rotate(0)}to{transform:translateY(-50%) rotate(360deg)}}.search-clear{position:absolute;right:0;top:50%;transform:translateY(-50%);color:var(--text-muted);cursor:pointer;padding:4px;font-size:16px}.search-clear:hover{color:var(--text)}.filter-section{display:flex;flex-direction:column;gap:4px}.filter-title{font-family:var(--font-mono);font-size:10px;text-transform:uppercase;color:var(--text-muted);font-weight:500;letter-spacing:.05em;margin-bottom:8px}.filter-list{display:flex;flex-direction:column;gap:1px}.filter-item{display:flex;align-items:center;gap:8px;padding:6px 8px;margin:0 -8px;cursor:pointer;transition:background .1s;font-size:13px;color:var(--text-secondary)}.filter-item:hover{background:var(--bg-hover);color:var(--text)}.filter-item.active{color:var(--text)}.filter-item.active:before{content:"";position:absolute;left:0;width:2px;height:20px;background:var(--text)}.filter-count{margin-left:auto;font-family:var(--font-mono);font-size:10px;color:var(--text-muted)}.filter-item.active .filter-count{color:var(--text-secondary)}.tag-expand{font-size:8px;color:var(--text-muted);width:12px;cursor:pointer}.tag-children{margin-left:20px}.filter-item-child{font-size:12px;padding-left:12px}.user-info{margin-top:auto;padding-top:16px;border-top:1px solid var(--border);display:flex;align-items:center;gap:8px}.user-avatar{width:24px;height:24px;border-radius:50%;opacity:.8}.user-email{font-size:11px;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main{flex:1;margin-left:220px;padding:20px;min-height:100vh;position:relative}.drop-zone-overlay{position:fixed;top:0;left:220px;right:0;bottom:0;background:#000000b3;border:2px dashed var(--border-hover);display:flex;align-items:center;justify-content:center;z-index:100;pointer-events:none}.drop-zone-content{display:flex;flex-direction:column;align-items:center;gap:12px;color:var(--text-secondary);font-size:16px}.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:2px;touch-action:pan-y;transition:grid-template-columns .15s ease-out}.card{background:var(--bg-secondary);overflow:hidden;cursor:pointer;transition:opacity .15s,transform .15s ease-out;position:relative}.card:hover{opacity:.85}.card-thumbnail-wrapper{position:relative;width:100%;aspect-ratio:1}.card-thumbnail-wrapper .card-thumbnail{aspect-ratio:auto;height:100%}.video-play-icon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:40px;height:40px;background:#0009;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px;color:#fff;pointer-events:none}.card-thumbnail{width:100%;aspect-ratio:1;object-fit:cover;background:var(--bg-secondary);display:block}.card-thumbnail.loading{image-rendering:pixelated;filter:contrast(1.1)}.card-thumbnail.loaded{image-rendering:auto;animation:pixelReveal .4s ease-out}@keyframes pixelReveal{0%{image-rendering:pixelated;filter:contrast(1.1)}50%{image-rendering:pixelated;filter:contrast(1.05)}to{image-rendering:auto;filter:none}}.card-placeholder{display:flex;align-items:center;justify-content:center;color:var(--text-muted)}.card-tweet{display:flex;flex-direction:column;padding:12px;gap:6px;background:var(--bg-secondary)}.tweet-header-small{display:flex;align-items:center;gap:6px}.tweet-avatar-small{width:20px;height:20px;border-radius:50%;flex-shrink:0}.tweet-name-small{font-size:11px;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tweet-username-small{font-size:10px;color:var(--text-muted)}.tweet-text-small{font-size:10px;color:var(--text-secondary);line-height:1.3;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical;overflow:hidden}.card-text-preview{display:flex;flex-direction:column;padding:16px;gap:8px;background:var(--bg-secondary)}.text-preview-title{font-size:12px;font-weight:500;color:var(--text);line-height:1.4;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.text-preview-desc{font-size:11px;color:var(--text-secondary);line-height:1.4;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}.text-preview-source{font-size:10px;color:var(--text-muted);margin-top:auto}.card-info{position:absolute;bottom:0;left:0;right:0;padding:12px;background:linear-gradient(transparent,#000c);opacity:0;transition:opacity .15s}.card:hover .card-info{opacity:1}.card-title{font-size:11px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text)}.card-meta{font-size:10px;color:var(--text-secondary);display:flex;align-items:center;gap:6px;margin-top:4px}.card-type{font-family:var(--font-mono);text-transform:uppercase;font-size:9px;letter-spacing:.03em;opacity:.7}.card-tags{display:none}.loading,.empty{display:flex;align-items:center;justify-content:center;height:50vh;color:var(--text-muted);font-size:12px}.loading-more{text-align:center;padding:40px;color:var(--text-muted);font-size:11px}.auth-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100vh;gap:12px;color:var(--text-muted);font-size:12px}.login-page{display:flex;align-items:center;justify-content:center;height:100vh;background:var(--bg)}.login-card{text-align:center;max-width:280px}.login-logo{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:16px}.login-logo-icon{height:48px}.login-logo .logo-text{font-family:var(--font-pixel);font-size:28px;font-weight:400;letter-spacing:.02em}.login-text{color:var(--text-muted);margin-bottom:32px;font-size:13px}.login-button{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:12px 20px;background:var(--text);color:var(--bg);border:none;font-family:var(--font-mono);font-size:12px;font-weight:500;cursor:pointer;transition:opacity .15s}.login-button:hover{opacity:.9}.lightbox-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000f2;z-index:1000;display:flex;align-items:center;justify-content:center;cursor:zoom-out;animation:fadeIn .2s ease-out}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.lightbox{position:relative;max-width:95vw;max-height:95vh;display:flex;flex-direction:column;cursor:default}.lightbox-media-container{flex:1;display:flex;align-items:center;justify-content:center;min-height:0;overflow:visible;touch-action:none;-webkit-user-select:none;user-select:none}.lightbox-media{max-width:90vw;max-height:85vh;object-fit:contain;animation:lightboxFadeIn .3s cubic-bezier(.2,0,.2,1);transform-origin:center center;will-change:transform}@keyframes lightboxFadeIn{0%{opacity:0}to{opacity:1}}@keyframes zoomIn{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}.lightbox-video{max-width:90vw;max-height:85vh;background:#000;animation:zoomIn .3s cubic-bezier(.2,0,.2,1)}.lightbox-pdf{width:90vw;height:85vh;border:none;background:#fff;animation:zoomIn .3s cubic-bezier(.2,0,.2,1)}.lightbox-close{position:fixed;top:20px;right:20px;background:transparent;border:none;color:var(--text-secondary);cursor:pointer;padding:8px;z-index:1001;transition:color .15s}.lightbox-close:hover{color:var(--text)}.lightbox-nav{position:fixed;top:50%;transform:translateY(-50%);background:transparent;border:none;color:var(--text-secondary);cursor:pointer;padding:20px;z-index:1001;transition:color .15s}.lightbox-nav:hover{color:var(--text)}.lightbox-nav.prev{left:10px}.lightbox-nav.next{right:10px}.lightbox-info{position:fixed;bottom:0;left:0;right:0;padding:20px 40px;background:linear-gradient(transparent,#000c);animation:slideUp .3s cubic-bezier(.2,0,.2,1) .1s both}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.lightbox-title{font-size:14px;font-weight:500;margin-bottom:8px;color:var(--text)}.lightbox-meta{display:flex;gap:20px;font-size:12px;color:var(--text-secondary)}.lightbox-meta a{color:var(--text-secondary);text-decoration:none;transition:color .15s}.lightbox-meta a:hover{color:var(--text)}.lightbox-tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.lightbox-tag{font-family:var(--font-mono);font-size:10px;color:var(--text-muted);padding:4px 8px;background:var(--bg-secondary);border:1px solid var(--border);cursor:default}.lightbox-tag-editable{cursor:pointer;transition:border-color .15s,color .15s}.lightbox-tag-editable:hover{border-color:#f44;color:#f44}.lightbox-tag-editable .tag-remove{margin-left:4px;opacity:0;transition:opacity .15s}.lightbox-tag-editable:hover .tag-remove{opacity:1}.lightbox-tag-add{cursor:pointer;border-style:dashed;transition:border-color .15s,color .15s}.lightbox-tag-add:hover{border-color:var(--text-secondary);color:var(--text-secondary)}.tag-autocomplete-wrapper{position:relative}.tag-input{font-family:var(--font-mono);font-size:10px;padding:4px 8px;background:var(--bg-secondary);border:1px solid var(--text-secondary);color:var(--text);outline:none;min-width:120px}.tag-suggestions{position:absolute;top:100%;left:0;right:0;min-width:180px;max-height:200px;overflow-y:auto;background:var(--bg-secondary);border:1px solid var(--border);z-index:1000}.tag-suggestion{display:flex;justify-content:space-between;align-items:center;padding:4px 8px;font-family:var(--font-mono);font-size:10px;color:var(--text-secondary);cursor:pointer}.tag-suggestion:hover,.tag-suggestion.selected{background:var(--bg-hover);color:var(--text)}.tag-suggestion-count{color:var(--text-muted);font-size:9px;margin-left:8px}.lightbox-document{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:40px;color:var(--text-secondary)}.lightbox-document a{color:var(--text);text-decoration:none;font-family:var(--font-mono);font-size:12px;padding:12px 24px;border:1px solid var(--border);transition:border-color .15s}.lightbox-document a:hover{border-color:var(--text-secondary)}.lightbox-tweet{display:flex;flex-direction:column;gap:20px;max-width:600px;padding:32px;background:var(--bg-secondary);border:1px solid var(--border);animation:zoomIn .3s cubic-bezier(.2,0,.2,1)}.tweet-header{display:flex;align-items:center;gap:12px}.tweet-avatar-large{width:48px;height:48px;border-radius:50%;flex-shrink:0}.tweet-author-info{display:flex;flex-direction:column;gap:2px}.tweet-name-large{font-size:16px;font-weight:600;color:var(--text)}.tweet-username-large{font-size:14px;color:var(--text-secondary)}.tweet-text-large{font-size:18px;line-height:1.5;color:var(--text);white-space:pre-wrap}.tweet-media{width:100%;max-height:400px;object-fit:contain;border-radius:8px}.tweet-stats{display:flex;gap:24px;font-size:13px;color:var(--text-secondary);padding-top:16px;border-top:1px solid var(--border)}.tweet-links{display:flex;flex-direction:column;gap:8px;padding-top:16px;border-top:1px solid var(--border)}.tweet-links-title{font-size:12px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.tweet-link{font-size:14px;color:var(--text-secondary);text-decoration:none;padding:8px 12px;background:var(--bg-hover);border:1px solid var(--border);transition:border-color .15s,color .15s;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tweet-link:hover{border-color:var(--text-secondary);color:var(--text)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000f2;display:flex;align-items:center;justify-content:center;z-index:100}.modal{background:var(--bg);max-width:90vw;max-height:90vh;overflow:hidden;display:flex;flex-direction:column}.modal-content{max-height:80vh;overflow:auto}.modal-media{max-width:100%;max-height:75vh;object-fit:contain}.modal-info{padding:20px;border-top:1px solid var(--border)}.modal-title{font-size:14px;font-weight:500;margin-bottom:12px}.modal-meta{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--text-secondary)}.modal-meta a{color:var(--text-secondary);text-decoration:none}.modal-meta a:hover{color:var(--text)}.modal-close{position:absolute;top:20px;right:20px;background:transparent;border:none;color:var(--text-secondary);cursor:pointer;padding:8px}.modal-close:hover{color:var(--text)}@media (max-width: 768px){.sidebar{display:none}.main{margin-left:0}.gallery{grid-template-columns:repeat(2,1fr)}}@media (max-width: 480px){.gallery{grid-template-columns:1fr}}.card-thumbnail,.lightbox-media{contain:paint}.storage-stats{display:flex;align-items:center;gap:10px;padding:12px 16px;margin:12px;background:var(--bg-secondary);border:1px solid var(--border);color:var(--text-muted);font-size:11px}.storage-info{display:flex;flex-direction:column;gap:2px}.storage-used{color:var(--text);font-weight:500;font-size:12px}.storage-items{color:var(--text-muted)}.lightbox-actions{margin-top:16px;padding-top:12px;border-top:1px solid rgba(255,255,255,.1)}.delete-button{display:flex;align-items:center;gap:6px;background:transparent;border:1px solid rgba(255,100,100,.3);color:#ff6464cc;padding:6px 12px;font-family:var(--font-mono);font-size:11px;cursor:pointer;transition:all .15s}.delete-button:hover{background:#ff64641a;border-color:#ff646480}.delete-confirm{display:flex;align-items:center;gap:12px;font-size:12px}.delete-confirm span{color:#ff6464cc}.delete-confirm-yes{background:#ff3c3ccc;border:none;color:#fff;padding:6px 12px;font-family:var(--font-mono);font-size:11px;cursor:pointer}.delete-confirm-yes:hover{background:#ff3c3c}.delete-confirm-no{background:transparent;border:1px solid rgba(255,255,255,.2);color:#ffffffb3;padding:6px 12px;font-family:var(--font-mono);font-size:11px;cursor:pointer}.delete-confirm-no:hover{border-color:#fff6}.card-github{display:flex;flex-direction:column;gap:8px;padding:12px;background:linear-gradient(135deg,#0d1117,#161b22);height:100%;box-sizing:border-box}.github-header-small{display:flex;align-items:flex-start;gap:6px;color:#58a6ff;font-size:11px;font-weight:500}.github-repo-small{line-height:1.3;word-break:break-word}.github-desc-small{color:#8b949e;font-size:10px;line-height:1.4;flex:1;overflow:hidden;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical}.github-stats-small{display:flex;gap:10px;color:#8b949e;font-size:10px;margin-top:auto}.github-stats-small span{display:flex;align-items:center;gap:3px}.github-lang{color:#c9d1d9}.github-stats-hover{display:flex;gap:10px;font-size:11px}.github-stats-hover span{display:flex;align-items:center;gap:3px}.github-stats-hover .github-lang{color:var(--text)}.github-stats-hover .state-open,.github-stats-hover .state-closed,.github-stats-hover .state-merged{font-size:11px}.github-issue-title-small{display:flex;align-items:flex-start;gap:4px;color:#c9d1d9;font-size:11px;line-height:1.4;flex:1;overflow:hidden;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical}.github-issue-state{margin-top:auto}.state-open{color:#3fb950;font-size:10px;display:flex;align-items:center;gap:4px}.state-closed{color:#f85149;font-size:10px;display:flex;align-items:center;gap:4px}.state-merged{color:#a371f7;font-size:10px;display:flex;align-items:center;gap:4px}.lightbox-github{background:#0d1117;border:1px solid #30363d;padding:32px;max-width:600px;width:90vw}.github-header{display:flex;align-items:center;gap:16px;margin-bottom:24px}.github-avatar-large{width:64px;height:64px;border-radius:50%}.github-header-info{flex:1}.github-repo-large{color:#58a6ff;font-size:20px;font-weight:600}.github-author{color:#8b949e;font-size:14px;margin-top:4px}.github-desc-large{color:#c9d1d9;font-size:16px;line-height:1.5;margin-bottom:20px}.github-stats-large{display:flex;gap:24px;color:#8b949e;font-size:14px;margin-bottom:16px}.github-stats-large span{display:flex;align-items:center;gap:6px}.github-language{display:flex;align-items:center;gap:8px;color:#c9d1d9;font-size:14px;margin-bottom:16px}.lang-dot{width:12px;height:12px;border-radius:50%}.github-topics{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}.github-topic{background:#388bfd26;color:#58a6ff;padding:4px 10px;border-radius:16px;font-size:12px}.github-license{color:#8b949e;font-size:13px}.github-issue-content{padding-top:8px}.github-issue-header{display:flex;align-items:center;gap:12px;margin-bottom:16px}.github-issue-number{color:#8b949e;font-size:18px}.github-state{padding:4px 12px;border-radius:16px;font-size:12px;font-weight:500}.github-state-open{background:#3fb95033;color:#3fb950}.github-state-closed{background:#f8514933;color:#f85149}.github-issue-title-large{color:#c9d1d9;font-size:20px;font-weight:600;margin-bottom:16px;line-height:1.3}.github-issue-body{color:#8b949e;font-size:14px;line-height:1.6;margin-bottom:20px;max-height:200px;overflow:auto}.github-labels{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}.github-label{padding:4px 10px;border-radius:16px;font-size:11px;font-weight:500;color:#fff}.github-pr-stats{display:flex;gap:16px;color:#8b949e;font-size:14px;margin-bottom:16px}.github-pr-stats .additions{color:#3fb950}.github-pr-stats .deletions{color:#f85149}.github-link{display:inline-flex;align-items:center;gap:6px;color:#58a6ff;font-size:14px;text-decoration:none;margin-top:16px}.github-link:hover{text-decoration:underline}.card-npm{display:flex;flex-direction:column;gap:8px;padding:12px;background:linear-gradient(135deg,#1a0a0a,#2d1515);height:100%;box-sizing:border-box}.npm-header-small{display:flex;align-items:flex-start;gap:6px;color:#cb3837;font-size:11px;font-weight:500}.npm-name-small{line-height:1.3;word-break:break-word}.npm-desc-small{color:#a0a0a0;font-size:10px;line-height:1.4;flex:1;overflow:hidden;display:-webkit-box;-webkit-line-clamp:5;-webkit-box-orient:vertical}.npm-stats-hover{display:flex;gap:10px}.lightbox-npm{background:#1a0a0a;border:1px solid #3d1a1a;padding:32px;max-width:600px;width:90vw;display:flex;flex-direction:column;gap:16px}.npm-header-large{display:flex;align-items:center;gap:16px;color:#cb3837}.npm-header-info{flex:1}.npm-name-large{color:#cb3837;font-size:20px;font-weight:600}.npm-version{color:#a0a0a0;font-size:14px;margin-top:2px;font-family:var(--font-mono)}.npm-desc-large{color:#d0d0d0;font-size:16px;line-height:1.5}.npm-stats-large{display:flex;gap:24px;color:#a0a0a0;font-size:14px}.npm-stats-large span{display:flex;align-items:center;gap:6px}.npm-keywords{display:flex;flex-wrap:wrap;gap:8px}.npm-keyword{background:#cb383726;color:#cb3837;padding:4px 10px;border-radius:16px;font-size:12px}.npm-link{display:inline-flex;align-items:center;gap:6px;color:#cb3837;font-size:14px;text-decoration:none}.npm-link:hover{text-decoration:underline}.context-menu{position:fixed;background:var(--bg-secondary);border:1px solid var(--border);min-width:160px;z-index:2000;box-shadow:0 8px 32px #00000080;animation:contextMenuIn .1s ease-out}@keyframes contextMenuIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.context-menu-item{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;font-size:12px;color:var(--text-secondary);transition:background .1s,color .1s}.context-menu-item:hover{background:var(--bg-hover);color:var(--text)}.context-menu-item.danger{color:#ff6464cc}.context-menu-item.danger:hover{background:#ff3c3c26;color:#ff6464}.context-menu-separator{height:1px;background:var(--border);margin:4px 0}.card.selectable{cursor:pointer}.card-select-checkbox{position:absolute;top:6px;left:6px;width:14px;height:14px;background:#00000080;border:none;border-radius:1px;z-index:10;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s,background .15s,transform .15s;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.card:hover .card-select-checkbox,.selection-mode .card-select-checkbox{opacity:1}.card-select-checkbox:hover{background:#000000b3;transform:scale(1.1)}.card.selected .card-select-checkbox{background:var(--text);opacity:1}.card.selected .card-select-checkbox:after{content:"✓";color:var(--bg);font-size:9px;font-weight:600}.card.selected{opacity:.9}.card.selected:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border:2px solid var(--text);pointer-events:none}.selection-toolbar{position:fixed;bottom:24px;left:50%;transform:translate(-50%);background:var(--bg-secondary);border:1px solid var(--border);padding:12px 20px;display:flex;align-items:center;gap:16px;z-index:1000;box-shadow:0 8px 32px #00000080;animation:slideUpToolbar .2s ease-out}@keyframes slideUpToolbar{0%{opacity:0;transform:translate(-50%) translateY(20px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.selection-count{font-size:13px;color:var(--text);font-weight:500}.selection-toolbar-btn{display:flex;align-items:center;gap:6px;background:transparent;border:1px solid var(--border);color:var(--text-secondary);padding:8px 14px;font-family:var(--font-mono);font-size:11px;cursor:pointer;transition:all .15s}.selection-toolbar-btn:hover{background:var(--bg-hover);border-color:var(--text-secondary);color:var(--text)}.selection-toolbar-btn.danger{border-color:#ff64644d;color:#ff6464cc}.selection-toolbar-btn.danger:hover{background:#ff3c3c26;border-color:#ff646480;color:#ff6464}.selection-toolbar-btn.cancel{border:none;color:var(--text-muted)}.selection-toolbar-btn.cancel:hover{color:var(--text);background:transparent}.bulk-tag-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:10000}.bulk-tag-popup{background:var(--bg-secondary);border:1px solid var(--border);padding:12px;min-width:240px}.bulk-tag-popup .tag-input{width:100%}.bulk-tag-popup .tag-suggestions{position:relative;top:0}.canvas-container{position:fixed;top:0;right:0;bottom:0;left:220px;z-index:5;display:flex;flex-direction:column;background:var(--bg)}.canvas-toolbar{display:flex;align-items:center;gap:12px;padding:10px 16px;border-bottom:1px solid var(--border);background:var(--bg);z-index:10}.canvas-toolbar-btn{display:flex;align-items:center;gap:6px;background:transparent;border:1px solid var(--border);color:var(--text-secondary);padding:6px 10px;font-family:var(--font-mono);font-size:11px;cursor:pointer;transition:all .15s}.canvas-toolbar-btn:hover,.canvas-toolbar-btn.accent{border-color:var(--text-secondary);color:var(--text)}.canvas-toolbar-btn.accent:hover{background:var(--bg-hover)}.canvas-toolbar-name{font-size:14px;font-weight:500;color:var(--text)}.canvas-toolbar-spacer{flex:1}.canvas-toolbar-zoom{font-family:var(--font-mono);font-size:11px;color:var(--text-secondary);cursor:pointer;padding:4px 8px;min-width:50px;text-align:center}.canvas-toolbar-zoom:hover{color:var(--text)}.canvas-viewport{flex:1;overflow:hidden;position:relative;cursor:default}.canvas-viewport.cursor-grab{cursor:grab}.canvas-viewport.cursor-grabbing{cursor:grabbing}.canvas-world{position:absolute;top:0;left:0;width:0;height:0}.canvas-item{position:absolute;background:var(--bg-secondary);border:1px solid var(--border);overflow:hidden;cursor:move;transition:box-shadow .15s;-webkit-user-select:none;user-select:none}.canvas-item:hover{border-color:var(--border-hover);box-shadow:0 4px 20px #0006}.canvas-item.dragging{cursor:grabbing;box-shadow:0 8px 40px #0009;border-color:var(--text-secondary)}.canvas-item.resizing{border-color:var(--text-secondary)}.canvas-item.selected{border-color:#4a9eff;box-shadow:0 0 0 1px #4a9eff}.canvas-item-img{width:100%;height:100%;object-fit:cover;display:block;pointer-events:none}.canvas-item-placeholder{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--text-muted);font-size:11px;padding:8px;text-align:center}.canvas-item-remove{position:absolute;top:4px;right:4px;background:#0009;border:none;color:var(--text-secondary);width:20px;height:20px;display:flex;align-items:center;justify-content:center;cursor:pointer;opacity:0;transition:opacity .15s,color .15s;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.canvas-item:hover .canvas-item-remove{opacity:1}.canvas-item-remove:hover{color:#ff6464e6}.canvas-item-resize{position:absolute;bottom:0;right:0;width:16px;height:16px;cursor:nwse-resize;opacity:0;transition:opacity .15s}.canvas-item:hover .canvas-item-resize{opacity:1}.canvas-item-resize:after{content:"";position:absolute;bottom:3px;right:3px;width:8px;height:8px;border-right:2px solid var(--text-secondary);border-bottom:2px solid var(--text-secondary)}.canvas-context-menu{position:fixed;background:var(--bg-secondary);border:1px solid var(--border);border-radius:6px;padding:4px;min-width:180px;box-shadow:0 8px 30px #00000080;z-index:10000}.canvas-context-menu-item{display:flex;align-items:center;gap:8px;width:100%;padding:6px 10px;background:none;border:none;color:var(--text-primary);font-size:13px;cursor:pointer;border-radius:4px}.canvas-context-menu-item:hover{background:var(--bg-hover);color:#ff6464e6}.canvas-rename-input{background:transparent;border:none;border-bottom:1px solid var(--text-secondary);color:var(--text);font-size:13px;font-family:var(--font-sans);outline:none;padding:0;width:100%;min-width:0}.canvas-delete-btn{margin-left:auto;font-size:14px;color:var(--text-muted);cursor:pointer;opacity:0;transition:opacity .15s,color .15s;padding:0 2px}.filter-item:hover .canvas-delete-btn{opacity:1}.canvas-delete-btn:hover{color:#ff6464cc}.canvas-new-btn{color:var(--text-muted);font-style:italic}.canvas-new-btn:hover{color:var(--text-secondary)}.canvas-picker-title{font-family:var(--font-mono);font-size:10px;text-transform:uppercase;color:var(--text-muted);letter-spacing:.05em;padding:8px 14px 4px}.context-menu-submenu{position:relative}.context-menu-submenu>.context-menu-item:after{content:"▶";font-size:8px;margin-left:auto;color:var(--text-muted)}.context-menu-submenu-items{display:none;position:absolute;left:100%;top:0;background:var(--bg-secondary);border:1px solid var(--border);min-width:140px;box-shadow:0 8px 32px #00000080}.context-menu-submenu:hover>.context-menu-submenu-items{display:block}.all-artefacts-btn{display:flex;align-items:center;gap:8px;padding:8px;margin:0 -8px;cursor:pointer;font-size:13px;color:var(--text-secondary);transition:background .1s,color .1s}.all-artefacts-btn:hover{background:var(--bg-hover);color:var(--text)}.all-artefacts-btn.active{color:var(--text);font-weight:500}.all-artefacts-btn .filter-count{margin-left:auto}.filter-item.drag-over{background:var(--bg-hover);outline:1px dashed var(--border-hover);outline-offset:-1px}.folder-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.delete-folder-dialog{background:var(--bg-secondary);border:1px solid var(--border);padding:20px;min-width:300px;max-width:400px}.delete-folder-title{font-size:14px;font-weight:500;color:var(--text);margin-bottom:8px}.delete-folder-text{font-size:12px;color:var(--text-secondary);margin-bottom:16px}.delete-folder-actions{display:flex;flex-direction:column;gap:8px}.delete-folder-btn{display:flex;align-items:center;justify-content:center;padding:8px 16px;font-family:var(--font-mono);font-size:11px;cursor:pointer;transition:all .15s;border:1px solid var(--border);background:transparent;color:var(--text-secondary)}.delete-folder-btn:hover{background:var(--bg-hover);border-color:var(--text-secondary);color:var(--text)}.delete-folder-btn.keep{border-color:var(--text-secondary);color:var(--text)}.delete-folder-btn.delete{border-color:#ff64644d;color:#ff6464cc}.delete-folder-btn.delete:hover{background:#ff3c3c26;border-color:#ff646480;color:#ff6464}.delete-folder-btn.cancel{border:none;color:var(--text-muted)}.delete-folder-btn.cancel:hover{color:var(--text);background:transparent}.edit-modal{background:var(--bg-secondary);border:1px solid var(--border);padding:20px;min-width:300px;max-width:400px}.edit-modal-title{font-size:14px;font-weight:500;color:var(--text);margin-bottom:16px}.edit-modal-field{margin-bottom:12px}.edit-modal-field label{display:block;font-family:var(--font-mono);font-size:10px;text-transform:uppercase;color:var(--text-muted);letter-spacing:.05em;margin-bottom:4px}.edit-modal-field input{width:100%;padding:6px 8px;background:var(--bg);border:1px solid var(--border);color:var(--text);font-size:13px;font-family:var(--font-sans);outline:none}.edit-modal-field input:focus{border-color:var(--text-secondary)}.color-picker-row{display:flex;gap:6px;margin-top:4px}.color-swatch{width:20px;height:20px;border-radius:50%;cursor:pointer;transition:transform .1s}.color-swatch:hover{transform:scale(1.2)}.color-swatch.active{outline:2px solid var(--text);outline-offset:2px}.edit-modal-actions{display:flex;gap:8px;margin-top:16px}.edit-modal-save{flex:1;padding:8px 16px;background:var(--text);color:var(--bg);border:none;font-family:var(--font-mono);font-size:11px;cursor:pointer;transition:opacity .15s}.edit-modal-save:hover{opacity:.9}.edit-modal-cancel{padding:8px 16px;background:transparent;border:1px solid var(--border);color:var(--text-secondary);font-family:var(--font-mono);font-size:11px;cursor:pointer}.edit-modal-cancel:hover{border-color:var(--text-secondary);color:var(--text)}.icon-picker-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:2px;margin-top:4px;max-height:160px;overflow-y:auto}.icon-picker-item{display:flex;align-items:center;justify-content:center;width:32px;height:32px;cursor:pointer;color:var(--text-secondary);transition:background .1s,color .1s}.icon-picker-item:hover{background:var(--bg-hover);color:var(--text)}.icon-picker-item.active{background:var(--bg-hover);outline:2px solid var(--text);outline-offset:-2px;color:var(--text)}.canvas-viewport.drop-active{outline:2px dashed var(--text-secondary);outline-offset:-4px}.canvas-drop-overlay{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:#0000004d;color:var(--text);font-size:14px;pointer-events:none;z-index:5}@media (max-width: 768px){.canvas-container{left:0}}.dup-alert-badge{display:flex;align-items:center;gap:8px;padding:8px 12px;background:#ffb4321a;border:1px solid rgba(255,180,50,.3);border-radius:6px;color:#ffb432;cursor:pointer;font-size:12px;transition:background .15s}.dup-alert-badge:hover{background:#ffb43233}.dup-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.dup-modal{background:var(--bg-secondary);border:1px solid var(--border);border-radius:12px;width:640px;max-width:95vw;max-height:90vh;overflow-y:auto}.dup-modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}.dup-modal-header h3{margin:0;font-size:14px;font-weight:500}.dup-modal-close{background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:4px;display:flex}.dup-modal-close:hover{color:var(--text)}.dup-modal-body{padding:20px}.dup-match-badge{display:inline-block;padding:4px 10px;border-radius:4px;font-size:11px;font-weight:500;margin-bottom:16px;background:#ffb43226;color:#ffb432}.dup-compare{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:20px}.dup-side{display:flex;flex-direction:column;gap:8px}.dup-side-label{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary)}.dup-thumb{aspect-ratio:1;border-radius:8px;overflow:hidden;background:var(--bg);border:1px solid var(--border)}.dup-thumb img{width:100%;height:100%;object-fit:cover}.dup-thumb-placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--text-muted);font-size:12px}.dup-meta{display:flex;flex-direction:column;gap:2px;font-size:12px;color:var(--text-secondary)}.dup-meta span:first-child{color:var(--text);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dup-actions{display:flex;gap:10px;justify-content:flex-end}.dup-btn{padding:8px 16px;border-radius:6px;font-size:13px;cursor:pointer;border:1px solid var(--border);transition:all .15s}.dup-btn.secondary{background:transparent;color:var(--text-secondary)}.dup-btn.secondary:hover{background:var(--bg-hover);color:var(--text)}.dup-btn.primary{background:var(--text);color:var(--bg);border-color:var(--text)}.dup-btn.primary:hover{opacity:.9}.plan-badge{display:flex;flex-direction:column;gap:2px;padding:8px 12px;border:1px solid var(--border);cursor:pointer;transition:border-color .15s;font-size:11px}.plan-badge:hover{border-color:var(--border-hover)}.plan-badge.warn{border-color:#ffb4324d}.plan-badge.warn .plan-usage{color:#ffb432}.plan-badge.pro{border-color:#64c8644d;cursor:default}.plan-usage{font-family:var(--font-mono);font-size:12px;color:var(--text);font-weight:500}.plan-label{color:var(--text-muted);font-size:10px;text-transform:uppercase;letter-spacing:.05em}.plan-badge.pro .plan-label{color:#64c864cc}.upgrade-price{font-size:32px;font-weight:600;color:var(--text);text-align:center;margin-bottom:16px}.upgrade-price span{font-size:14px;font-weight:400;color:var(--text-secondary)}.upgrade-list{list-style:none;padding:0;margin:0 0 16px;display:flex;flex-direction:column;gap:8px}.upgrade-list li{font-size:13px;color:var(--text-secondary);padding-left:20px;position:relative}.upgrade-list li:before{content:"✓";position:absolute;left:0;color:var(--text)}.upgrade-current{font-size:12px;color:var(--text-muted);text-align:center;margin:0}
