/* RSSPipe - Base App Styles & Global Utilities */ * { box-sizing: border-box; margin: 0; padding: 0; -webkit-tap-highlight-color: transparent; } html, body, #root { height: 100%; width: 100%; overflow: hidden; font-family: var(--font-sans); background-color: var(--bg-app); color: var(--text-primary); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } /* Custom Minimal Micro-Scrollbars */ ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: var(--radius-full); } ::-webkit-scrollbar-thumb:hover { background: var(--text-muted); } /* Base App Shell */ .app-container { display: flex; flex-direction: column; height: 100vh; width: 100vw; overflow: hidden; background: var(--bg-app); position: relative; } /* Shared Top Navigation Header */ .app-header { height: var(--header-height); min-height: var(--header-height); background: var(--bg-surface); border-bottom: 1px solid var(--border-subtle); display: flex; align-items: center; justify-content: space-between; padding: 0 1.25rem; z-index: 40; user-select: none; gap: 1rem; } .header-left, .header-right { display: flex; align-items: center; gap: 0.65rem; flex-shrink: 0; } .brand-badge { display: flex; align-items: center; gap: 0.55rem; font-weight: 800; font-size: 1.05rem; color: var(--text-primary); text-decoration: none; cursor: pointer; letter-spacing: -0.02em; } .brand-icon { width: 22px; height: 22px; color: var(--text-primary); } /* Wide Prominent Search Bar */ .search-container { position: relative; display: flex; align-items: center; width: 380px; max-width: 480px; flex: 0 1 420px; } .search-input { width: 100%; height: 34px; padding: 0 2rem 0 2.2rem; background: var(--bg-subtle); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); font-size: 0.85rem; color: var(--text-primary); outline: none; transition: var(--transition-fast); } .search-input:focus { border-color: var(--border-focus); background: var(--bg-surface); box-shadow: 0 0 0 2px rgba(24, 24, 27, 0.08); } .search-icon-inside { position: absolute; left: 0.75rem; color: var(--text-muted); pointer-events: none; } .search-shortcut-badge { position: absolute; right: 0.6rem; padding: 1px 5px; background: var(--bg-surface); border: 1px solid var(--border-strong); border-radius: var(--radius-xs); font-size: 0.7rem; font-family: var(--font-mono); color: var(--text-muted); pointer-events: none; } /* Minimal Action Buttons */ .btn-icon { display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--border-subtle); background: var(--bg-surface); color: var(--text-secondary); cursor: pointer; transition: var(--transition-fast); } .btn-icon:hover { background: var(--bg-subtle); color: var(--text-primary); border-color: var(--border-strong); } .btn-icon:active { transform: scale(0.96); } .btn-primary { display: inline-flex; align-items: center; justify-content: center; gap: 0.4rem; padding: 0.45rem 0.85rem; height: 32px; font-size: 0.85rem; font-weight: 600; border-radius: var(--radius-sm); background: var(--accent-primary); color: var(--text-inverse); border: none; cursor: pointer; transition: var(--transition-fast); } .btn-primary:hover { background: var(--accent-hover); } .btn-primary:disabled { opacity: 0.5; cursor: not-allowed; } .btn-secondary { display: inline-flex; align-items: center; justify-content: center; padding: 0.45rem 0.85rem; height: 32px; font-size: 0.85rem; font-weight: 500; border-radius: var(--radius-sm); background: var(--bg-surface); color: var(--text-secondary); border: 1px solid var(--border-subtle); cursor: pointer; transition: var(--transition-fast); } .btn-secondary:hover { background: var(--bg-subtle); color: var(--text-primary); border-color: var(--border-strong); } /* Discrete View Mode Toggle */ .discrete-view-toggle { display: inline-flex; align-items: center; gap: 0.4rem; padding: 0.3rem 0.65rem; height: 32px; border-radius: var(--radius-sm); background: var(--bg-surface); border: 1px solid var(--border-subtle); font-size: 0.8rem; font-weight: 600; color: var(--text-secondary); cursor: pointer; transition: var(--transition-fast); } .discrete-view-toggle:hover { background: var(--bg-subtle); color: var(--text-primary); border-color: var(--border-strong); } /* Spinning Animation for Refresh */ @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .spinning { display: inline-block !important; animation: spin 0.8s linear infinite !important; transform-origin: center center !important; } /* Search Autocomplete Dropdown */ .search-autocomplete-menu { position: absolute; top: calc(100% + 6px); left: 0; right: 0; background: var(--bg-surface); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); box-shadow: var(--shadow-md); z-index: 50; max-height: 280px; overflow-y: auto; padding: 0.35rem 0; } .search-autocomplete-header { display: flex; align-items: center; justify-content: space-between; padding: 0.35rem 0.75rem; font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-muted); } .search-autocomplete-item { display: flex; align-items: center; justify-content: space-between; padding: 0.45rem 0.75rem; font-size: 0.82rem; color: var(--text-primary); cursor: pointer; transition: var(--transition-fast); gap: 0.5rem; } .search-autocomplete-item:hover, .search-autocomplete-item.active { background: var(--bg-subtle); } .search-autocomplete-delete-btn { opacity: 0; background: transparent; border: none; cursor: pointer; color: var(--text-muted); padding: 2px; border-radius: var(--radius-xs); display: flex; align-items: center; justify-content: center; transition: var(--transition-fast); } .search-autocomplete-item:hover .search-autocomplete-delete-btn { opacity: 1; } .search-autocomplete-delete-btn:hover { color: var(--danger); background: var(--danger-soft); } /* Badge Utilities */ .badge { display: inline-flex; align-items: center; padding: 2px 7px; font-size: 0.7rem; font-weight: 600; border-radius: var(--radius-full); } .badge-unread { background: var(--accent-soft); color: var(--accent-primary); } .badge-starred { background: var(--star-bg); color: var(--star-gold); } .badge-ai { background: var(--badge-ai-soft); color: var(--badge-ai); } .badge-tts { background: var(--badge-tts-soft); color: var(--badge-tts); }