:root{--color-primary: #6C5CE7;--color-primary-light: #A29BFE;--color-primary-dark: #5A4BD1;--color-primary-bg: #F0EDFF;--color-primary-bg-hover: #E8E3FF;--color-bg: #FFFFFF;--color-bg-secondary: #FAFAFA;--color-bg-tertiary: #F5F5F5;--color-text: #1A1A2E;--color-text-secondary: #6B7280;--color-text-tertiary: #9CA3AF;--color-border: #E5E7EB;--color-border-light: #F3F4F6;--color-success: #10B981;--color-warning: #F59E0B;--color-error: #EF4444;--color-urgent: #DC2626;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .04);--shadow-md: 0 4px 12px rgba(0, 0, 0, .08);--shadow-lg: 0 8px 24px rgba(0, 0, 0, .12);--shadow-xl: 0 12px 40px rgba(0, 0, 0, .16);--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-full: 9999px;--font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-size-xs: 11px;--font-size-sm: 13px;--font-size-md: 14px;--font-size-lg: 16px;--font-size-xl: 18px;--toolbar-height: 56px;--sidebar-width: 340px;--transition-fast: .15s ease;--transition-normal: .25s ease;--transition-slow: .35s ease}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html,body{height:100%;overflow:hidden}body{font-family:var(--font-family);font-size:var(--font-size-md);color:var(--color-text);background:var(--color-bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#app{height:100vh;display:flex;flex-direction:column}.toolbar{height:var(--toolbar-height);display:flex;align-items:center;padding:0 var(--space-4);background:var(--color-bg);border-bottom:1px solid var(--color-border);gap:var(--space-4);z-index:100;flex-shrink:0}.toolbar__left{display:flex;align-items:center;flex-shrink:0}.toolbar__logo{display:flex;align-items:center;gap:var(--space-2)}.toolbar__title{font-weight:700;font-size:var(--font-size-xl);color:var(--color-text);letter-spacing:-.3px}.toolbar__center{flex:1;display:flex;justify-content:center;min-width:0}.toolbar__url-bar{display:flex;align-items:center;background:var(--color-bg-tertiary);border:1px solid var(--color-border);border-radius:var(--radius-full);padding:0 var(--space-3);width:100%;max-width:600px;height:36px;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.toolbar__url-bar:focus-within{border-color:var(--color-primary);box-shadow:0 0 0 3px #6c5ce71f;background:var(--color-bg)}.toolbar__url-icon{color:var(--color-text-tertiary);flex-shrink:0;margin-right:var(--space-2)}.toolbar__url-input{flex:1;border:none;background:none;font-family:var(--font-family);font-size:var(--font-size-sm);color:var(--color-text);outline:none;min-width:0}.toolbar__url-input::placeholder{color:var(--color-text-tertiary)}.toolbar__load-btn{display:flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-3);margin-left:var(--space-2);margin-right:-var(--space-2);background:var(--color-primary);color:#fff;border:none;border-radius:var(--radius-full);font-family:var(--font-family);font-size:var(--font-size-xs);font-weight:600;cursor:pointer;height:28px;white-space:nowrap;transition:background var(--transition-fast),transform var(--transition-fast)}.toolbar__load-btn:hover{background:var(--color-primary-dark);transform:scale(1.02)}.toolbar__load-btn:active{transform:scale(.98)}.toolbar__right{display:flex;align-items:center;gap:var(--space-2);flex-shrink:0}.toolbar__mode-toggle{display:flex;background:var(--color-bg-tertiary);border-radius:var(--radius-full);padding:3px;border:1px solid var(--color-border)}.mode-btn{display:flex;align-items:center;gap:var(--space-1);padding:var(--space-1) var(--space-3);border:none;background:none;font-family:var(--font-family);font-size:var(--font-size-xs);font-weight:500;color:var(--color-text-secondary);cursor:pointer;border-radius:var(--radius-full);transition:all var(--transition-fast);white-space:nowrap;height:28px}.mode-btn:hover{color:var(--color-text)}.mode-btn.active{background:var(--color-bg);color:var(--color-primary);box-shadow:var(--shadow-sm)}.toolbar__icon-btn{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border:1px solid var(--color-border);background:var(--color-bg);border-radius:var(--radius-md);color:var(--color-text-secondary);cursor:pointer;transition:all var(--transition-fast)}.toolbar__icon-btn:hover{background:var(--color-bg-tertiary);color:var(--color-text);border-color:var(--color-text-tertiary)}.main-layout{flex:1;display:flex;overflow:hidden}.sidebar{width:var(--sidebar-width);background:var(--color-bg);border-right:1px solid var(--color-border);display:flex;flex-direction:column;flex-shrink:0;overflow:hidden}.sidebar__tabs{display:flex;padding:var(--space-3);gap:var(--space-1);border-bottom:1px solid var(--color-border-light)}.sidebar__tab{flex:1;display:flex;align-items:center;justify-content:center;gap:var(--space-1);padding:var(--space-2) var(--space-3);border:none;background:none;font-family:var(--font-family);font-size:var(--font-size-sm);font-weight:500;color:var(--color-text-secondary);cursor:pointer;border-radius:var(--radius-md);transition:all var(--transition-fast)}.sidebar__tab:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.sidebar__tab.active{background:var(--color-primary-bg);color:var(--color-primary)}.sidebar__tab-count{font-size:var(--font-size-xs);font-weight:600;background:var(--color-bg-tertiary);color:var(--color-text-tertiary);padding:0 6px;border-radius:var(--radius-full);min-width:20px;text-align:center;line-height:18px}.sidebar__tab.active .sidebar__tab-count{background:var(--color-primary);color:#fff}.sidebar__panel{flex:1;overflow-y:auto;display:none}.sidebar__panel.active{display:flex;flex-direction:column}.sidebar__empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-8);text-align:center;flex:1}.sidebar__empty p{font-weight:600;color:var(--color-text);margin-top:var(--space-4);font-size:var(--font-size-md)}.sidebar__empty span{color:var(--color-text-tertiary);font-size:var(--font-size-sm);margin-top:var(--space-2);line-height:1.5}.sidebar__list{padding:var(--space-2)}.comment-item{display:flex;gap:var(--space-3);padding:var(--space-3);border-radius:var(--radius-md);cursor:pointer;transition:background var(--transition-fast);border:1px solid transparent}.comment-item:hover{background:var(--color-bg-secondary);border-color:var(--color-border-light)}.comment-item.active{background:var(--color-primary-bg);border-color:var(--color-primary-light)}.comment-item__pin{width:28px;height:28px;background:var(--color-primary);color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:var(--font-size-xs);font-weight:700;flex-shrink:0}.comment-item__content{flex:1;min-width:0}.comment-item__text{font-size:var(--font-size-sm);color:var(--color-text);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.comment-item__meta{display:flex;align-items:center;gap:var(--space-2);margin-top:var(--space-1);font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.comment-item__assignee{display:flex;align-items:center;gap:4px;color:var(--color-primary);font-weight:500}.comment-item__priority{display:inline-flex;align-items:center;padding:1px 6px;border-radius:var(--radius-full);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.3px}.comment-item__priority--low{background:#f0fdf4;color:#16a34a}.comment-item__priority--medium{background:#fef3c7;color:#d97706}.comment-item__priority--high{background:#fef2f2;color:#dc2626}.comment-item__priority--urgent{background:#dc2626;color:#fff}.comment-item__webhook{display:flex;align-items:center;gap:3px;color:var(--color-success)}.comment-item__url-row{margin-top:4px;margin-bottom:2px}.comment-item__url{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--color-primary);text-decoration:none;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;transition:color var(--transition-fast)}.comment-item__url:hover{color:var(--color-primary-dark, #5a4bd1);text-decoration:underline}.comment-item__tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}.comment-item__tag{display:inline-block;font-size:10px;font-weight:600;padding:2px 8px;border-radius:20px;background:var(--color-primary-bg, #F0EDFF);color:var(--color-primary);cursor:pointer;transition:all var(--transition-fast);-webkit-user-select:none;user-select:none}.comment-item__tag:hover{background:var(--color-primary);color:#fff}.comment-dialog__input{width:100%;padding:8px 10px;border:1px solid var(--color-border-light);border-radius:var(--radius-sm);font-size:var(--font-size-sm);font-family:inherit;background:var(--color-bg-primary);color:var(--color-text-primary);outline:none;transition:border-color var(--transition-fast)}.comment-dialog__input:focus{border-color:var(--color-primary)}.sidebar__filter{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--color-primary-bg, #F0EDFF);border-bottom:1px solid var(--color-border-light)}.sidebar__filter-tags{display:flex;gap:4px;flex:1}.sidebar__filter-tag{display:inline-block;font-size:11px;font-weight:600;padding:2px 10px;border-radius:20px;background:var(--color-primary);color:#fff}.sidebar__filter-clear{width:20px;height:20px;display:flex;align-items:center;justify-content:center;border:none;background:none;color:var(--color-text-tertiary);cursor:pointer;border-radius:50%;transition:all var(--transition-fast)}.sidebar__filter-clear:hover{background:#0000001a;color:var(--color-text-primary)}.comment-item__actions{display:flex;align-items:flex-start;gap:var(--space-1);opacity:0;transition:opacity var(--transition-fast)}.comment-item:hover .comment-item__actions{opacity:1}.comment-item__action-btn{width:24px;height:24px;display:flex;align-items:center;justify-content:center;border:none;background:none;color:var(--color-text-tertiary);cursor:pointer;border-radius:var(--radius-sm);transition:all var(--transition-fast)}.comment-item__action-btn:hover{background:var(--color-bg-tertiary);color:var(--color-error)}.task-item{display:flex;align-items:flex-start;gap:var(--space-3);padding:var(--space-3);border-radius:var(--radius-md);border:1px solid var(--color-border-light);margin-bottom:var(--space-2);transition:all var(--transition-fast)}.task-item:hover{border-color:var(--color-border);box-shadow:var(--shadow-sm)}.task-item__checkbox{width:20px;height:20px;border:2px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:2px;transition:all var(--transition-fast)}.task-item__checkbox:hover{border-color:var(--color-primary)}.task-item__checkbox.checked{background:var(--color-primary);border-color:var(--color-primary)}.task-item__checkbox.checked svg{display:block}.task-item__checkbox svg{display:none}.task-item.completed .task-item__text{text-decoration:line-through;color:var(--color-text-tertiary)}.task-item__content{flex:1;min-width:0}.task-item__text{font-size:var(--font-size-sm);color:var(--color-text);line-height:1.4}.task-item__meta{display:flex;align-items:center;gap:var(--space-2);margin-top:var(--space-1);flex-wrap:wrap}.task-item__assignee-select{font-family:var(--font-family);font-size:var(--font-size-xs);color:var(--color-primary);border:1px solid var(--color-primary-bg);background:var(--color-primary-bg);border-radius:var(--radius-sm);padding:2px 6px;cursor:pointer;outline:none;transition:border-color var(--transition-fast)}.task-item__assignee-select:hover{border-color:var(--color-primary-light)}.viewport{flex:1;position:relative;background:var(--color-bg-secondary);overflow:hidden}.viewport__empty{display:flex;align-items:center;justify-content:center;height:100%}.viewport__empty-content{text-align:center;max-width:400px}.viewport__empty-content h2{font-size:var(--font-size-xl);font-weight:700;color:var(--color-text);margin-top:var(--space-6)}.viewport__empty-content p{font-size:var(--font-size-md);color:var(--color-text-tertiary);margin-top:var(--space-2);line-height:1.6}.viewport__frame-wrapper{position:relative;width:100%;height:100%}.viewport__frame{width:100%;height:100%;border:none;background:#fff}.viewport__overlay{position:absolute;top:0;left:0;right:0;bottom:0;cursor:crosshair;z-index:10}.viewport__pins{position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none;z-index:11}.pin{position:absolute;pointer-events:all;transform:translate(-50%,-100%);cursor:pointer;z-index:12;transition:transform var(--transition-fast)}.pin:hover{transform:translate(-50%,-100%) scale(1.15);z-index:13}.pin__marker{width:32px;height:40px;position:relative}.pin__circle{width:32px;height:32px;background:var(--color-primary);border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:var(--font-size-xs);font-weight:700;box-shadow:0 2px 8px #6c5ce766;border:2px solid white}.pin__tail{width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:8px solid var(--color-primary);margin:-2px auto 0}.pin__tooltip{position:absolute;bottom:100%;left:50%;transform:translate(-50%);background:var(--color-text);color:#fff;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);font-size:var(--font-size-xs);white-space:nowrap;max-width:200px;overflow:hidden;text-overflow:ellipsis;opacity:0;pointer-events:none;transition:opacity var(--transition-fast);margin-bottom:var(--space-2)}.pin:hover .pin__tooltip{opacity:1}.comment-dialog{position:absolute;z-index:1000;background:var(--color-bg);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);width:320px;border:1px solid var(--color-border);animation:dialog-appear .2s ease}@keyframes dialog-appear{0%{opacity:0;transform:scale(.95) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}.comment-dialog__header{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--color-border-light)}.comment-dialog__pin-number{width:24px;height:24px;background:var(--color-primary);color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:var(--font-size-xs);font-weight:700}.comment-dialog__title{font-size:var(--font-size-sm);font-weight:600;color:var(--color-text);flex:1}.comment-dialog__close{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border:none;background:none;color:var(--color-text-tertiary);cursor:pointer;border-radius:var(--radius-sm);transition:all var(--transition-fast)}.comment-dialog__close:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.comment-dialog__body{padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-3)}.comment-dialog__textarea{width:100%;border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-3);font-family:var(--font-family);font-size:var(--font-size-sm);color:var(--color-text);resize:vertical;min-height:72px;outline:none;transition:border-color var(--transition-fast);line-height:1.5}.comment-dialog__textarea:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px #6c5ce714}.comment-dialog__textarea::placeholder{color:var(--color-text-tertiary)}.comment-dialog__field{display:flex;flex-direction:column;gap:var(--space-1)}.comment-dialog__field label{font-size:var(--font-size-xs);font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.5px}.comment-dialog__select,.comment-dialog__input{width:100%;border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-2) var(--space-3);font-family:var(--font-family);font-size:var(--font-size-sm);color:var(--color-text);background:var(--color-bg);outline:none;transition:border-color var(--transition-fast)}.comment-dialog__select:focus,.comment-dialog__input:focus{border-color:var(--color-primary)}.comment-dialog__webhook-info{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);background:#f0fdf4;border-radius:var(--radius-md);font-size:var(--font-size-xs);font-weight:500;color:var(--color-success);border:1px solid #BBF7D0}.toggle{position:relative;display:inline-block;width:36px;height:20px}.toggle input{opacity:0;width:0;height:0}.toggle__slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background:var(--color-border);border-radius:var(--radius-full);transition:background var(--transition-fast)}.toggle__slider:before{content:"";position:absolute;height:16px;width:16px;left:2px;bottom:2px;background:#fff;border-radius:50%;transition:transform var(--transition-fast);box-shadow:var(--shadow-sm)}.toggle input:checked+.toggle__slider{background:var(--color-primary)}.toggle input:checked+.toggle__slider:before{transform:translate(16px)}.comment-dialog__footer{display:flex;justify-content:flex-end;gap:var(--space-2);padding:var(--space-3) var(--space-4);border-top:1px solid var(--color-border-light)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-1);padding:var(--space-2) var(--space-4);border:none;border-radius:var(--radius-md);font-family:var(--font-family);font-size:var(--font-size-sm);font-weight:600;cursor:pointer;transition:all var(--transition-fast);white-space:nowrap}.btn--primary{background:var(--color-primary);color:#fff}.btn--primary:hover{background:var(--color-primary-dark);transform:translateY(-1px);box-shadow:0 4px 12px #6c5ce74d}.btn--primary:active{transform:translateY(0)}.btn--ghost{background:none;color:var(--color-text-secondary)}.btn--ghost:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.btn--sm{padding:var(--space-1) var(--space-3);font-size:var(--font-size-xs)}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#0006;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:2000;animation:overlay-appear .2s ease}@keyframes overlay-appear{0%{opacity:0}to{opacity:1}}.modal{background:var(--color-bg);border-radius:var(--radius-xl);box-shadow:var(--shadow-xl);width:420px;max-height:80vh;display:flex;flex-direction:column;animation:modal-appear .25s ease}.modal--team{width:500px}.modal--edit-member{width:440px}@keyframes modal-appear{0%{opacity:0;transform:scale(.95) translateY(12px)}to{opacity:1;transform:scale(1) translateY(0)}}.modal__header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-5) var(--space-6);border-bottom:1px solid var(--color-border-light)}.modal__header h3{font-size:var(--font-size-lg);font-weight:700;color:var(--color-text)}.modal__close{width:32px;height:32px;display:flex;align-items:center;justify-content:center;border:none;background:none;color:var(--color-text-tertiary);cursor:pointer;border-radius:var(--radius-md);transition:all var(--transition-fast)}.modal__close:hover{background:var(--color-bg-tertiary);color:var(--color-text)}.modal__body{padding:var(--space-5) var(--space-6);overflow-y:auto}.modal__footer{display:flex;justify-content:flex-end;gap:var(--space-2);padding:var(--space-4) var(--space-6);border-top:1px solid var(--color-border-light)}.modal__section{margin-bottom:0}.modal__section-header{display:flex;align-items:center;gap:var(--space-2);font-size:var(--font-size-sm);font-weight:600;color:var(--color-text);margin-bottom:var(--space-3)}.modal__section-header svg{color:var(--color-primary)}.modal__section-desc{font-size:var(--font-size-xs);color:var(--color-text-tertiary);margin-bottom:var(--space-3);line-height:1.5;margin-top:-4px}.modal__divider{height:1px;background:var(--color-border-light);margin:var(--space-4) 0}.modal__webhook-field{display:flex;gap:var(--space-2);align-items:center}.modal__input{flex:1;border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-2) var(--space-3);font-family:var(--font-family);font-size:var(--font-size-sm);color:var(--color-text);outline:none;transition:border-color var(--transition-fast)}.modal__input--full{width:100%}.modal__input:focus{border-color:var(--color-primary)}.modal__input::placeholder{color:var(--color-text-tertiary)}.modal__field-hint{font-size:11px;color:var(--color-text-tertiary);margin-top:var(--space-1);line-height:1.4}.modal__add-member-form{display:flex;gap:var(--space-4);align-items:flex-start}.modal__add-fields{flex:1;display:flex;flex-direction:column;gap:var(--space-2)}.modal__avatar-upload{display:flex;flex-direction:column;align-items:center;gap:var(--space-1);cursor:pointer;flex-shrink:0}.modal__avatar-preview{width:56px;height:56px;border-radius:50%;background:var(--color-bg-tertiary);border:2px dashed var(--color-border);display:flex;align-items:center;justify-content:center;color:var(--color-text-tertiary);transition:all var(--transition-fast);overflow:hidden}.modal__avatar-preview:hover{border-color:var(--color-primary);color:var(--color-primary);background:var(--color-primary-bg)}.modal__avatar-preview.has-image{border-style:solid;border-color:var(--color-primary-light)}.modal__avatar-preview img{width:100%;height:100%;object-fit:cover;border-radius:50%}.modal__avatar-preview--lg{width:80px;height:80px}.modal__avatar-label{font-size:11px;color:var(--color-text-tertiary);font-weight:500}.modal__edit-avatar-section{display:flex;justify-content:center;margin-bottom:var(--space-4)}.modal__edit-fields{display:flex;flex-direction:column;gap:var(--space-3)}.modal__list{display:flex;flex-direction:column;gap:var(--space-2)}.modal__empty{text-align:center;padding:var(--space-6)}.modal__empty p{font-weight:600;color:var(--color-text);font-size:var(--font-size-md)}.modal__empty span{color:var(--color-text-tertiary);font-size:var(--font-size-sm);display:block;margin-top:var(--space-1)}.team-member{display:flex;align-items:center;padding:var(--space-3);border:1px solid var(--color-border-light);border-radius:var(--radius-md);gap:var(--space-3);transition:border-color var(--transition-fast)}.team-member:hover{border-color:var(--color-border)}.team-member__avatar{width:36px;height:36px;background:var(--color-primary-bg);color:var(--color-primary);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:var(--font-size-xs);font-weight:700;flex-shrink:0;overflow:hidden}.team-member__avatar.has-image{background:transparent}.team-member__avatar img{width:100%;height:100%;object-fit:cover;border-radius:50%}.team-member__info{flex:1;min-width:0}.team-member__name{font-size:var(--font-size-sm);font-weight:600;color:var(--color-text)}.team-member__email{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.team-member__webhook-badge{display:inline-flex;align-items:center;gap:3px;font-size:10px;color:var(--color-success);font-weight:600;margin-top:2px}.team-member__actions{display:flex;gap:var(--space-1);opacity:0;transition:opacity var(--transition-fast)}.team-member:hover .team-member__actions{opacity:1}.team-member__edit,.team-member__remove{width:28px;height:28px;display:flex;align-items:center;justify-content:center;border:none;background:none;color:var(--color-text-tertiary);cursor:pointer;border-radius:var(--radius-sm);transition:all var(--transition-fast)}.team-member__edit:hover{background:var(--color-primary-bg);color:var(--color-primary)}.team-member__remove:hover{background:#fef2f2;color:var(--color-error)}.comment-item__avatar-img{width:14px;height:14px;border-radius:50%;object-fit:cover;vertical-align:middle;margin-right:2px}.toast-container{position:fixed;bottom:var(--space-6);right:var(--space-6);z-index:3000;display:flex;flex-direction:column;gap:var(--space-2)}.toast{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-4);background:var(--color-text);color:#fff;border-radius:var(--radius-md);font-size:var(--font-size-sm);box-shadow:var(--shadow-lg);animation:toast-in .3s ease;max-width:360px}.toast--success{background:var(--color-success)}.toast--error{background:var(--color-error)}.toast--warning{background:var(--color-warning);color:var(--color-text)}@keyframes toast-in{0%{opacity:0;transform:translateY(12px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.toast-exit{animation:toast-out .2s ease forwards}@keyframes toast-out{to{opacity:0;transform:translateY(-8px) scale(.95)}}.loading-spinner{width:24px;height:24px;border:3px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.viewport__loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;gap:var(--space-3);z-index:5}.viewport__loading span{font-size:var(--font-size-sm);color:var(--color-text-tertiary)}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--color-text-tertiary)}
