/* === Design Tokens === */ :root { /* Backgrounds */ --color-bg: #0f1117; --color-surface: #1a1d26; --color-surface-raised: #22262f; --color-hover: rgba(255, 255, 255, 0.05); --color-active: rgba(255, 255, 255, 0.08); /* Text */ --color-text: #e4e6eb; --color-text-secondary: #b0b3b8; --color-text-muted: #65676b; /* Borders */ --color-border: #303338; --color-border-light: #404249; /* Accent */ --color-accent: #00d4aa; --color-accent-hover: #00e8bb; --color-accent-alpha: rgba(0, 212, 170, 0.15); /* Semantic */ --color-success: #31a065; --color-success-bg: rgba(49, 160, 101, 0.15); --color-warning: #cf9d2c; --color-warning-bg: rgba(207, 157, 44, 0.15); --color-danger: #cf4a4a; --color-danger-hover: #e05555; --color-info: #4a90cf; --color-info-bg: rgba(74, 144, 207, 0.15); /* Type colors */ --color-requirement: #00d4aa; --color-note: #4a90cf; --color-spec: #9b59b6; --color-general: #65676b; /* Priority */ --color-priority-high: #cf4a4a; --color-priority-medium: #cf9d2c; --color-priority-low: #31a065; /* Shadows */ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3); --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.25); --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.3); /* Typography */ --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; --font-mono: 'JetBrains Mono', 'Fira Code', 'Monaco', 'Consolas', monospace; /* Spacing */ --space-1: 0.25rem; --space-2: 0.5rem; --space-3: 0.75rem; --space-4: 1rem; --space-5: 1.25rem; --space-6: 1.5rem; --space-8: 2rem; --space-10: 2.5rem; /* Border Radius */ --radius-sm: 4px; --radius-md: 6px; --radius-lg: 8px; --radius-xl: 12px; --radius-full: 9999px; /* Transitions */ --transition-fast: 0.1s ease; --transition-normal: 0.15s ease; /* Z-index */ --z-sidebar: 100; --z-modal: 500; --z-toast: 600; } /* === Light Theme === */ [data-theme="light"] { --color-bg: #f5f6f8; --color-surface: #ffffff; --color-surface-raised: #f0f1f3; --color-hover: rgba(0, 0, 0, 0.04); --color-active: rgba(0, 0, 0, 0.06); --color-text: #1a1d26; --color-text-secondary: #4a4f5c; --color-text-muted: #8b919d; --color-border: #e1e3e8; --color-border-light: #ebedf2; --color-accent: #00a884; --color-accent-hover: #00c49a; --color-accent-alpha: rgba(0, 168, 132, 0.12); --color-success: #22863a; --color-warning: #b08800; --color-danger: #cb2431; --color-info: #0366d6; } /* === Reset === */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { font-size: 16px; -webkit-font-smoothing: antialiased; } body { font-family: var(--font-sans); font-size: 1rem; line-height: 1.5; color: var(--color-text); background: var(--color-bg); min-height: 100vh; } a { color: var(--color-accent); text-decoration: none; } a:hover { text-decoration: underline; } button { font: inherit; cursor: pointer; border: none; background: none; } input, textarea, select { font: inherit; } ul, ol { list-style: none; } /* === Scrollbar === */ ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-track { background: var(--color-surface); } ::-webkit-scrollbar-thumb { background: var(--color-border); border-radius: var(--radius-full); } ::-webkit-scrollbar-thumb:hover { background: var(--color-text-muted); } /* === Layout === */ #app { display: flex; flex-direction: column; min-height: 100vh; } .app-layout { display: flex; flex: 1; overflow: hidden; } /* === Header === */ .app-header { display: flex; align-items: center; gap: var(--space-4); padding: var(--space-3) var(--space-4); background: var(--color-surface); border-bottom: 1px solid var(--color-border); height: 56px; } .app-header .logo { font-weight: 700; font-size: 1.125rem; color: var(--color-accent); display: flex; align-items: center; gap: var(--space-2); } .app-header .search-box { flex: 1; max-width: 400px; position: relative; } .app-header .search-box input { width: 100%; padding: var(--space-2) var(--space-4); padding-left: 36px; background: var(--color-bg); border: 1px solid var(--color-border); border-radius: var(--radius-lg); color: var(--color-text); } .app-header .search-box input:focus { outline: none; border-color: var(--color-accent); } .app-header .search-box .icon { position: absolute; left: 10px; top: 50%; transform: translateY(-50%); color: var(--color-text-muted); } .header-actions { display: flex; gap: var(--space-2); margin-left: auto; } /* === Sidebar === */ .sidebar { width: 260px; background: var(--color-surface); border-right: 1px solid var(--color-border); display: flex; flex-direction: column; overflow: hidden; flex-shrink: 0; } .sidebar-section { padding: var(--space-4); border-bottom: 1px solid var(--color-border); } .sidebar-section h3 { font-size: 0.75rem; font-weight: 600; color: var(--color-text-muted); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--space-3); } .sidebar-scroll { flex: 1; overflow-y: auto; padding: var(--space-4); } .library-tree { display: flex; flex-direction: column; gap: var(--space-1); } .tree-item { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-3); border-radius: var(--radius-md); cursor: pointer; color: var(--color-text-secondary); transition: var(--transition-fast); } .tree-item:hover { background: var(--color-hover); color: var(--color-text); } .tree-item.active { background: var(--color-accent-alpha); color: var(--color-accent); } .tree-item .icon { flex-shrink: 0; width: 16px; height: 16px; } .tree-item .label { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .tree-children { padding-left: var(--space-4); } .tree-toggle { width: 16px; height: 16px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; transition: transform var(--transition-fast); } .tree-toggle.expanded { transform: rotate(90deg); } .tag-list { display: flex; flex-direction: column; gap: var(--space-1); } .tag-item { display: flex; align-items: center; justify-content: space-between; padding: var(--space-2) var(--space-3); border-radius: var(--radius-md); cursor: pointer; color: var(--color-text-secondary); transition: var(--transition-fast); } .tag-item:hover { background: var(--color-hover); color: var(--color-text); } .tag-item.active { background: var(--color-accent-alpha); color: var(--color-accent); } .tag-count { font-size: 0.75rem; color: var(--color-text-muted); } /* === Main Content === */ .main-content { flex: 1; display: flex; flex-direction: column; overflow: hidden; } .content-header { display: flex; align-items: center; justify-content: space-between; padding: var(--space-4) var(--space-6); border-bottom: 1px solid var(--color-border); background: var(--color-surface); } .content-header h1 { font-size: 1.25rem; font-weight: 600; } .content-body { flex: 1; overflow-y: auto; padding: var(--space-6); } /* === Document Cards === */ .doc-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: var(--space-4); } .doc-card { background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-lg); padding: var(--space-4); cursor: pointer; transition: var(--transition-fast); } .doc-card:hover { border-color: var(--color-accent); box-shadow: var(--shadow-md); } .doc-card-header { display: flex; align-items: flex-start; gap: var(--space-3); margin-bottom: var(--space-3); } .doc-id { font-family: var(--font-mono); font-size: 0.75rem; color: var(--color-text-muted); background: var(--color-bg); padding: 2px 6px; border-radius: var(--radius-sm); } .doc-title { font-size: 1rem; font-weight: 600; color: var(--color-text); flex: 1; line-height: 1.4; } .doc-tags { display: flex; flex-wrap: wrap; gap: var(--space-2); margin-bottom: var(--space-3); } .tag-pill { font-size: 0.75rem; padding: 2px 8px; background: var(--color-accent-alpha); color: var(--color-accent); border-radius: var(--radius-full); } .doc-meta { display: flex; align-items: center; gap: var(--space-3); font-size: 0.75rem; color: var(--color-text-muted); } .doc-meta-item { display: flex; align-items: center; gap: var(--space-1); } .status-badge { padding: 2px 8px; border-radius: var(--radius-full); font-size: 0.75rem; font-weight: 500; } .status-badge.draft { background: var(--color-warning-bg); color: var(--color-warning); } .status-badge.approved { background: var(--color-info-bg); color: var(--color-info); } .status-badge.implemented { background: var(--color-success-bg); color: var(--color-success); } .priority-indicator { font-size: 0.875rem; } /* === Document Viewer === */ .doc-viewer { display: flex; gap: var(--space-6); max-width: 1200px; } .doc-content { flex: 1; min-width: 0; } .doc-sidebar { width: 280px; flex-shrink: 0; } .doc-viewer-header { display: flex; align-items: center; gap: var(--space-4); margin-bottom: var(--space-6); } .back-btn { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-3); border-radius: var(--radius-md); color: var(--color-text-secondary); transition: var(--transition-fast); } .back-btn:hover { background: var(--color-hover); color: var(--color-text); } .doc-actions { display: flex; gap: var(--space-2); margin-left: auto; } .doc-actions button { padding: var(--space-2) var(--space-3); border-radius: var(--radius-md); display: flex; align-items: center; gap: var(--space-2); color: var(--color-text-secondary); transition: var(--transition-fast); } .doc-actions button:hover { background: var(--color-hover); color: var(--color-text); } .doc-actions button.danger:hover { background: var(--color-danger-hover); color: white; } .prose { color: var(--color-text); line-height: 1.7; } .prose h1 { font-size: 2rem; font-weight: 700; margin: 1.5em 0 0.5em; } .prose h2 { font-size: 1.5rem; font-weight: 600; margin: 1.5em 0 0.5em; } .prose h3 { font-size: 1.25rem; font-weight: 600; margin: 1.25em 0 0.5em; } .prose h4 { font-size: 1rem; font-weight: 600; margin: 1em 0 0.5em; } .prose p { margin-bottom: 1em; } .prose ul, .prose ol { margin-bottom: 1em; padding-left: 1.5em; } .prose ul { list-style-type: disc; } .prose ol { list-style-type: decimal; } .prose li { margin-bottom: 0.25em; } .prose code { font-family: var(--font-mono); font-size: 0.875em; background: var(--color-surface); padding: 0.125em 0.375em; border-radius: var(--radius-sm); color: var(--color-accent); } .prose pre { background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-lg); padding: 1rem; overflow-x: auto; margin-bottom: 1em; } .prose pre code { background: transparent; padding: 0; color: var(--color-text); } .prose blockquote { border-left: 4px solid var(--color-accent); padding-left: 1rem; margin: 1em 0; color: var(--color-text-secondary); } .prose table { width: 100%; border-collapse: collapse; margin-bottom: 1em; } .prose th, .prose td { padding: 0.5rem 0.75rem; border: 1px solid var(--color-border); text-align: left; } .prose th { background: var(--color-surface); font-weight: 600; } .prose input[type="checkbox"] { margin-right: 0.5em; accent-color: var(--color-accent); } .prose hr { border: none; border-top: 1px solid var(--color-border); margin: 2em 0; } /* === Metadata Panel === */ .meta-section { background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-lg); margin-bottom: var(--space-4); } .meta-header { padding: var(--space-3) var(--space-4); border-bottom: 1px solid var(--color-border); font-size: 0.75rem; font-weight: 600; color: var(--color-text-muted); text-transform: uppercase; letter-spacing: 0.05em; } .meta-body { padding: var(--space-4); } .meta-row { display: flex; justify-content: space-between; margin-bottom: var(--space-3); } .meta-row:last-child { margin-bottom: 0; } .meta-label { font-size: 0.875rem; color: var(--color-text-muted); } .meta-value { font-size: 0.875rem; color: var(--color-text); } .doc-tags .tag-pill { cursor: pointer; } .doc-tags .tag-pill:hover { opacity: 0.8; } /* === Document Editor === */ .editor-container { max-width: 900px; margin: 0 auto; } .editor-header { display: flex; align-items: center; justify-content: space-between; padding: var(--space-4) var(--space-6); border-bottom: 1px solid var(--color-border); background: var(--color-surface); } .editor-header h2 { font-size: 1rem; font-weight: 600; } .editor-form { padding: var(--space-6); } .form-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--space-4); margin-bottom: var(--space-4); } .form-group { display: flex; flex-direction: column; gap: var(--space-2); } .form-group label { font-size: 0.875rem; font-weight: 500; color: var(--color-text-secondary); } .form-group input, .form-group select, .form-group textarea { padding: var(--space-3); background: var(--color-bg); border: 1px solid var(--color-border); border-radius: var(--radius-md); color: var(--color-text); } .form-group input:focus, .form-group select:focus, .form-group textarea:focus { outline: none; border-color: var(--color-accent); } .form-group textarea { min-height: 300px; resize: vertical; font-family: var(--font-mono); line-height: 1.6; } .form-group.full-width { grid-column: 1 / -1; } .editor-toolbar { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-3); background: var(--color-surface); border: 1px solid var(--color-border); border-bottom: none; border-radius: var(--radius-lg) var(--radius-lg) 0 0; } .toolbar-btn { width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; border-radius: var(--radius-sm); color: var(--color-text-secondary); transition: var(--transition-fast); } .toolbar-btn:hover { background: var(--color-hover); color: var(--color-text); } .toolbar-separator { width: 1px; height: 20px; background: var(--color-border); margin: 0 var(--space-2); } .toolbar-tabs { margin-left: auto; display: flex; gap: var(--space-1); } .tab-btn { padding: var(--space-2) var(--space-3); border-radius: var(--radius-sm); font-size: 0.875rem; color: var(--color-text-secondary); transition: var(--transition-fast); } .tab-btn:hover { background: var(--color-hover); } .tab-btn.active { background: var(--color-accent-alpha); color: var(--color-accent); } .editor-content { display: grid; grid-template-columns: 1fr 1fr; gap: 0; border: 1px solid var(--color-border); border-radius: 0 0 var(--radius-lg) var(--radius-lg); overflow: hidden; } .editor-content.full { grid-template-columns: 1fr; } .editor-pane { padding: var(--space-4); background: var(--color-bg); } .editor-pane:first-child { border-right: 1px solid var(--color-border); } .preview-pane { background: var(--color-surface); overflow-y: auto; } .preview-toggle { margin-left: auto; } /* === Buttons === */ .btn { display: inline-flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-4); border-radius: var(--radius-md); font-weight: 500; font-size: 0.875rem; transition: var(--transition-fast); } .btn-primary { background: var(--color-accent); color: #000; } .btn-primary:hover { background: var(--color-accent-hover); } .btn-ghost { background: transparent; color: var(--color-text-secondary); } .btn-ghost:hover { background: var(--color-hover); color: var(--color-text); } .btn-danger { background: var(--color-danger); color: white; } .btn-danger:hover { background: var(--color-danger-hover); } .btn-icon-only { width: 36px; height: 36px; padding: 0; display: flex; align-items: center; justify-content: center; } /* === Modal === */ .modal-backdrop { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.6); display: flex; align-items: center; justify-content: center; z-index: var(--z-modal); animation: fadeIn 0.15s ease; } .modal { background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-xl); box-shadow: var(--shadow-lg); min-width: 400px; max-width: 90vw; animation: scaleIn 0.15s ease; } .modal-header { display: flex; align-items: center; gap: var(--space-3); padding: var(--space-4); border-bottom: 1px solid var(--color-border); } .modal-header h3 { font-size: 1rem; font-weight: 600; flex: 1; } .modal-body { padding: var(--space-4); } .modal-footer { display: flex; justify-content: flex-end; gap: var(--space-3); padding: var(--space-4); border-top: 1px solid var(--color-border); } .modal-close { background: none; border: none; color: var(--color-text-muted); cursor: pointer; padding: var(--space-1); border-radius: var(--radius-sm); font-size: 1rem; } .modal-close:hover { background: var(--color-hover); color: var(--color-text); } .form-control { width: 100%; padding: var(--space-3); background: var(--color-bg); border: 1px solid var(--color-border); border-radius: var(--radius-md); color: var(--color-text); font-size: 0.875rem; } .form-control:focus { outline: none; border-color: var(--color-accent); } .form-control option { background: var(--color-surface); color: var(--color-text); } /* === Login Screen === */ .login-screen { min-height: 100vh; display: flex; align-items: center; justify-content: center; background: var(--color-bg); } .login-card { background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-xl); padding: var(--space-8); width: 100%; max-width: 400px; box-shadow: var(--shadow-lg); } .login-card h1 { font-size: 1.5rem; font-weight: 700; margin-bottom: var(--space-2); color: var(--color-accent); text-align: center; } .login-card p { color: var(--color-text-secondary); text-align: center; margin-bottom: var(--space-6); font-size: 0.875rem; } .login-form { display: flex; flex-direction: column; gap: var(--space-4); } .login-form .form-group { gap: var(--space-2); } .login-form input { padding: var(--space-3); background: var(--color-bg); border: 1px solid var(--color-border); border-radius: var(--radius-md); color: var(--color-text); font-family: var(--font-mono); font-size: 0.875rem; } .login-form input:focus { outline: none; border-color: var(--color-accent); } .login-error { color: var(--color-danger); font-size: 0.875rem; text-align: center; display: none; } .login-error.visible { display: block; } /* === Toast === */ #toast-container { position: fixed; bottom: var(--space-6); right: var(--space-6); z-index: var(--z-toast); display: flex; flex-direction: column; gap: var(--space-3); } .toast { display: flex; align-items: center; gap: var(--space-3); padding: var(--space-3) var(--space-4); background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-lg); box-shadow: var(--shadow-lg); animation: slideInRight 0.2s ease; min-width: 250px; } .toast.success { border-left: 4px solid var(--color-success); } .toast.error { border-left: 4px solid var(--color-danger); } .toast.info { border-left: 4px solid var(--color-info); } .toast-message { flex: 1; font-size: 0.875rem; } .toast-close { color: var(--color-text-muted); padding: var(--space-1); border-radius: var(--radius-sm); } .toast-close:hover { background: var(--color-hover); color: var(--color-text); } /* === Empty State === */ .empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: var(--space-16); text-align: center; color: var(--color-text-muted); } .empty-state .icon { font-size: 3rem; margin-bottom: var(--space-4); opacity: 0.5; } .empty-state h3 { font-size: 1.125rem; font-weight: 600; color: var(--color-text-secondary); margin-bottom: var(--space-2); } .empty-state p { margin-bottom: var(--space-6); } /* === Loading === */ .loading { display: flex; align-items: center; justify-content: center; padding: var(--space-16); color: var(--color-text-muted); } .loading::before { content: ''; width: 24px; height: 24px; border: 2px solid var(--color-border); border-top-color: var(--color-accent); border-radius: 50%; animation: spin 0.8s linear infinite; margin-right: var(--space-3); } /* === Breadcrumbs === */ .breadcrumbs { display: flex; align-items: center; gap: var(--space-2); font-size: 0.875rem; color: var(--color-text-secondary); margin-bottom: var(--space-4); } .breadcrumb-item { color: var(--color-text-secondary); cursor: pointer; transition: var(--transition-fast); } .breadcrumb-item:hover { color: var(--color-accent); } .breadcrumb-separator { color: var(--color-text-muted); } /* === Quick Links === */ .quick-links { display: flex; flex-direction: column; gap: var(--space-1); margin-top: var(--space-4); padding-top: var(--space-4); border-top: 1px solid var(--color-border); } .quick-link { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-3); border-radius: var(--radius-md); color: var(--color-text-secondary); font-size: 0.875rem; cursor: pointer; transition: var(--transition-fast); } .quick-link:hover { background: var(--color-hover); color: var(--color-text); } /* === Type Badges === */ .type-badge { display: inline-flex; align-items: center; padding: 2px 8px; border-radius: var(--radius-sm); font-size: 0.75rem; font-weight: 600; text-transform: uppercase; } .type-badge.requirement { background: var(--color-accent-alpha); color: var(--color-requirement); } .type-badge.note { background: var(--color-info-bg); color: var(--color-note); } .type-badge.spec { background: rgba(155, 89, 182, 0.15); color: var(--color-spec); } .type-badge.general { background: var(--color-hover); color: var(--color-text-muted); } /* === Animations === */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes scaleIn { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } @keyframes slideInRight { from { opacity: 0; transform: translateX(100%); } to { opacity: 1; transform: translateX(0); } } @keyframes spin { to { transform: rotate(360deg); } } /* === Mobile Navigation Drawer === */ .mobile-nav-btn { display: flex; margin-right: 8px; } .mobile-nav-btnOLD { display: none; width: 44px; height: 44px; align-items: center; justify-content: center; border-radius: var(--radius-md); color: var(--color-text-secondary); font-size: 1.25rem; transition: var(--transition-fast); flex-shrink: 0; } .mobile-nav-btn:hover { background: var(--color-hover); color: var(--color-text); } .sidebar-overlay { display: none; position: fixed; inset: 0; background: rgba(0, 0, 0, 0.5); z-index: calc(var(--z-sidebar) - 1); opacity: 0; transition: opacity 0.2s ease; } .sidebar-overlay.active { opacity: 1; } .sidebar-close-btn { display: none; position: absolute; top: var(--space-3); right: var(--space-3); width: 44px; height: 44px; align-items: center; justify-content: center; border-radius: var(--radius-md); color: var(--color-text-secondary); font-size: 1.25rem; z-index: 1; } .sidebar-close-btn:hover { background: var(--color-hover); color: var(--color-text); } /* === Responsive === */ @media (max-width: 1024px) { .sidebar { position: fixed; left: 0; top: 0; bottom: 0; z-index: var(--z-sidebar); transform: translateX(-100%); transition: transform 0.25s ease; box-shadow: var(--shadow-lg); } .sidebar.mobile-open { transform: translateX(0); } .sidebar-scroll { padding-top: 56px; } .sidebar-close-btn { display: flex; } .mobile-nav-btn { display: flex; margin-right: 8px; } .mobile-nav-btnOLD { display: flex; } .sidebar-overlay { display: block; } .doc-sidebar { display: none; } .editor-content { grid-template-columns: 1fr; } .editor-pane:first-child { border-right: none; } .preview-pane { display: none; } .editor-content.show-preview .editor-pane:first-child { display: none; } .editor-content.show-preview .preview-pane { display: block; } } @media (max-width: 768px) { .app-header .search-box { display: none; } .content-body { padding: var(--space-3); } .doc-grid { grid-template-columns: 1fr; gap: var(--space-3); } .doc-card { padding: var(--space-4); min-height: 44px; } .doc-card-actions { opacity: 1; position: static; margin-top: var(--space-2); display: flex; gap: var(--space-2); } .modal { min-width: auto; width: 100%; height: 100%; max-width: 100%; margin: 0; border-radius: 0; display: flex; flex-direction: column; } .modal-backdrop { padding: 0; align-items: stretch; } .modal-header { padding: var(--space-4); flex-shrink: 0; } .modal-body { flex: 1; overflow-y: auto; padding: var(--space-4); } .modal-footer { flex-shrink: 0; padding: var(--space-4); gap: var(--space-3); } .login-card { margin: var(--space-4); padding: var(--space-6); } /* === Projects Page Mobile === */ .projects-page { padding: var(--space-4); } .projects-header { margin-bottom: var(--space-6); } .projects-header h1 { font-size: 1.5rem; } .projects-grid { grid-template-columns: 1fr; gap: var(--space-3); } .project-card { padding: var(--space-4); } .project-card-header { flex-direction: column; gap: var(--space-3); } .project-icon { font-size: 1.5rem; } .project-name { font-size: 1rem; } /* === Header Mobile === */ .app-header { padding: var(--space-2) var(--space-3); gap: var(--space-2); } .app-header .logo { font-size: 1rem; flex: 1; min-width: 0; } .header-actions .btn { padding: var(--space-2) var(--space-3); font-size: 0.8125rem; } /* === Content Header Mobile === */ .content-header { padding: var(--space-3) var(--space-4); flex-wrap: wrap; gap: var(--space-3); } .content-header-left { flex-direction: column; gap: var(--space-1); align-items: flex-start; } .content-header-left h1 { font-size: 1.125rem; } .content-header-right { width: 100%; flex-wrap: wrap; } .search-box-inline { flex: 1; min-width: 0; } .search-box-inline input { width: 100%; } /* === Editor Mobile === */ .editor-container { max-width: 100%; } .editor-header { padding: var(--space-3) var(--space-4); } .editor-form { padding: var(--space-4); } .form-row { grid-template-columns: 1fr; gap: var(--space-3); } .editor-toolbar { overflow-x: auto; -webkit-overflow-scrolling: touch; gap: var(--space-1); padding: var(--space-2); flex-wrap: nowrap; justify-content: flex-start; } .toolbar-btn { width: 44px; height: 44px; flex-shrink: 0; } .toolbar-separator { flex-shrink: 0; } .toolbar-tabs { margin-left: auto; flex-shrink: 0; } .tab-btn { padding: var(--space-2) var(--space-3); min-height: 44px; display: flex; align-items: center; } .form-group textarea { min-height: 200px; font-size: 16px; /* Prevents zoom on iOS */ } .form-group input, .form-group select { min-height: 44px; font-size: 16px; /* Prevents zoom on iOS */ } /* === Doc Card Mobile === */ .doc-card-header { flex-wrap: wrap; } .doc-title { font-size: 0.9375rem; } .doc-tags { margin-top: var(--space-2); } .doc-meta { flex-wrap: wrap; gap: var(--space-2); } /* === Touch Targets === */ .btn { min-height: 44px; min-width: 44px; display: inline-flex; align-items: center; justify-content: center; } .btn-icon-only { width: 44px; height: 44px; } .tree-item { min-height: 44px; padding: var(--space-2) var(--space-3); } .tree-item .tree-action { width: 32px; height: 32px; opacity: 1; } .tag-item { min-height: 44px; padding: var(--space-2) var(--space-3); } .quick-link { min-height: 44px; padding: var(--space-2) var(--space-3); } .doc-card { cursor: pointer; } /* === Empty State Mobile === */ .empty-state { padding: var(--space-8); } /* === Breadcrumbs Mobile === */ .breadcrumb-nav { margin-left: 0; flex-wrap: wrap; font-size: 0.8125rem; } /* === Toast Mobile === */ #toast-container { bottom: var(--space-4); right: var(--space-4); left: var(--space-4); } .toast { min-width: auto; width: 100%; } } /* Ensure minimum touch target size */ @media (max-width: 768px) { a, button, [role="button"] { min-height: 44px; min-width: 44px; } input, select, textarea { font-size: 16px; /* Prevents iOS zoom */ } } /* === Projects Page === */ .projects-page { max-width: 1200px; margin: 0 auto; padding: var(--space-6); } .projects-header { margin-bottom: var(--space-8); } .projects-header h1 { font-size: 2rem; font-weight: 700; margin-bottom: var(--space-2); } .projects-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(350px, 1fr)); gap: var(--space-4); } .project-card { background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-lg); padding: var(--space-5); cursor: pointer; transition: var(--transition-fast); } .project-card:hover { border-color: var(--color-accent); box-shadow: var(--shadow-md); transform: translateY(-2px); } .project-card-header { display: flex; gap: var(--space-4); margin-bottom: var(--space-4); } .project-icon { font-size: 2rem; flex-shrink: 0; } .project-info { flex: 1; min-width: 0; } .project-name { font-size: 1.125rem; font-weight: 600; margin-bottom: var(--space-2); color: var(--color-text); } .project-description { font-size: 0.875rem; color: var(--color-text-secondary); margin: 0; line-height: 1.5; } .project-card-meta { display: flex; flex-wrap: wrap; gap: var(--space-4); font-size: 0.8125rem; color: var(--color-text-muted); } .project-card-meta .meta-item { display: flex; align-items: center; gap: var(--space-1); } /* === Breadcrumb Nav === */ .breadcrumb-nav { display: flex; align-items: center; gap: var(--space-2); font-size: 0.875rem; margin-left: var(--space-4); } .breadcrumb-link { color: var(--color-text-muted); cursor: pointer; transition: var(--transition-fast); } .breadcrumb-link:hover { color: var(--color-accent); } .breadcrumb-sep { color: var(--color-text-muted); } .breadcrumb-current { color: var(--color-text); font-weight: 500; } /* === Project Sidebar === */ .project-sidebar .sidebar-scroll { padding: var(--space-3); } .project-sidebar .sidebar-section { padding: var(--space-3); border-bottom: none; } .project-sidebar .section-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: var(--space-3); } .project-sidebar .section-header h3 { font-size: 0.75rem; font-weight: 600; color: var(--color-text-muted); text-transform: uppercase; letter-spacing: 0.05em; margin: 0; } .project-sidebar .btn-icon-only { width: 24px; height: 24px; font-size: 1rem; color: var(--color-text-muted); } .project-sidebar .btn-icon-only:hover { color: var(--color-accent); } /* === Folder Tree === */ .folder-tree { display: flex; flex-direction: column; gap: 2px; } .tree-node { display: flex; flex-direction: column; } .tree-item { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-2) var(--space-3); border-radius: var(--radius-md); cursor: pointer; color: var(--color-text-secondary); transition: var(--transition-fast); position: relative; } .tree-item:hover { background: var(--color-hover); color: var(--color-text); } .tree-item.active { background: var(--color-accent-alpha); color: var(--color-accent); } .tree-item .icon { flex-shrink: 0; font-size: 0.875rem; } .tree-item .label { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: 0.875rem; } .tree-item .count { font-size: 0.75rem; color: var(--color-text-muted); background: var(--color-bg); padding: 1px 6px; border-radius: var(--radius-full); } .tree-item .tree-action { opacity: 0; width: 20px; height: 20px; display: flex; align-items: center; justify-content: center; background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-sm); font-size: 0.875rem; color: var(--color-text-muted); cursor: pointer; transition: var(--transition-fast); } .tree-item:hover .tree-action { opacity: 1; } .tree-item .tree-action:hover { background: var(--color-accent); border-color: var(--color-accent); color: #000; } .tree-children { padding-left: var(--space-4); margin-left: var(--space-3); border-left: 1px solid var(--color-border); } /* === Content Header Extensions === */ .content-header-left { display: flex; align-items: baseline; gap: var(--space-3); } .content-header-left h1 { font-size: 1.25rem; font-weight: 600; } .doc-count { font-size: 0.875rem; color: var(--color-text-muted); } .content-header-right { display: flex; align-items: center; gap: var(--space-3); } .search-box-inline { position: relative; display: flex; align-items: center; } .search-box-inline input { padding: var(--space-2) var(--space-3); padding-left: 32px; background: var(--color-bg); border: 1px solid var(--color-border); border-radius: var(--radius-md); color: var(--color-text); font-size: 0.875rem; width: 200px; } .search-box-inline input:focus { outline: none; border-color: var(--color-accent); } .search-box-inline .icon { position: absolute; left: 10px; color: var(--color-text-muted); } /* === Doc Card Actions === */ .doc-card { position: relative; } .doc-card-actions { position: absolute; top: var(--space-3); right: var(--space-3); opacity: 0; transition: var(--transition-fast); } .doc-card:hover .doc-card-actions { opacity: 1; } .doc-card-actions .btn-icon-only { width: 28px; height: 28px; font-size: 0.875rem; } /* === Mobile Menu === */ .mobile-menu { display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: var(--color-bg); z-index: 1000; padding: var(--space-4); } .mobile-menu.open { display: block; } .mobile-menu-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--space-4); padding-bottom: var(--space-4); border-bottom: 1px solid var(--color-border); } .mobile-menu-header span { font-weight: 600; font-size: 1.125rem; } .mobile-menu-content { display: flex; flex-direction: column; gap: var(--space-2); } .mobile-menu-content a { display: block; padding: var(--space-3); background: var(--color-bg-secondary); border-radius: var(--radius-md); color: var(--color-text); text-decoration: none; font-size: 1rem; } .mobile-menu-content a:active { background: var(--color-bg-tertiary); } @media (max-width: 768px) { .mobile-menu { display: none; } .mobile-menu.open { display: block; } }