/** * ═══════════════════════════════════════════════════════════════════════════ * MONOLITHOS 1.0 — Master Stylesheet * ═══════════════════════════════════════════════════════════════════════════ * Phase 1: Settings Only * ═══════════════════════════════════════════════════════════════════════════ */ /* ═══════════════════════════════════════════════════════════════════════════ 1. FONT DECLARATIONS ═══════════════════════════════════════════════════════════════════════════ */ /* * Mac / iOS → 使用系统原生字体 (Baskerville, Menlo) * Windows → 使用 .obsidian/fonts/ 里的 woff2 文件 */ @font-face { font-family: 'Monolithos Serif'; src: local('Baskerville'), local('Baskerville Regular'), url('../fonts/libre-baskerville-v24-latin-regular.woff2') format('woff2'); font-weight: 400; font-style: normal; font-display: swap; } @font-face { font-family: 'Monolithos Serif'; src: local('Baskerville Bold'), local('Baskerville-Bold'), url('../fonts/libre-baskerville-v24-latin-700.woff2') format('woff2'); font-weight: 700; font-style: normal; font-display: swap; } @font-face { font-family: 'Monolithos Serif'; src: local('Baskerville Italic'), local('Baskerville-Italic'), url('../fonts/libre-baskerville-v24-latin-italic.woff2') format('woff2'); font-weight: 400; font-style: italic; font-display: swap; } @font-face { font-family: 'Monolithos Mono'; src: local('Menlo'), local('Menlo Regular'), url('../fonts/JetBrainsMono-Regular.woff2') format('woff2'); font-weight: 400; font-style: normal; font-display: swap; } @font-face { font-family: 'Monolithos Mono'; src: local('Menlo Bold'), local('Menlo-Bold'), url('../fonts/JetBrainsMono-Bold.woff2') format('woff2'); font-weight: 700; font-style: normal; font-display: swap; } @font-face { font-family: 'Monolithos Mono'; src: local('Menlo Italic'), local('Menlo-Italic'), url('../fonts/JetBrainsMono-Italic.woff2') format('woff2'); font-weight: 400; font-style: italic; font-display: swap; } @font-face { font-family: 'Monolithos Mono'; src: local('Menlo'), url('../fonts/JetBrainsMono-Medium.woff2') format('woff2'); font-weight: 500; font-style: normal; font-display: swap; } :root { --font-monolithos-serif: 'Monolithos Serif', 'Source Han Serif SC', 'Songti SC', 'Noto Serif CJK SC', Georgia, serif; --font-monolithos-mono: 'Monolithos Mono', 'Consolas', 'Monaco', monospace; } /* ═══════════════════════════════════════════════════════════════════════════ 2. CSS CUSTOM PROPERTIES (Spacing & Accents - Theme Independent) ═══════════════════════════════════════════════════════════════════════════ */ :root { /* Spacing System */ --space-xs: 4px; --space-sm: 8px; --space-md: 16px; --space-lg: 24px; --space-xl: 32px; } /* ═══════════════════════════════════════════════════════════════════════════ 3. DARK MODE THEME ═══════════════════════════════════════════════════════════════════════════ */ .theme-dark { /* Background Colors */ --settings-bg: #111111; /* Void */ --settings-module-bg: #151515; /* Stone */ /* Border & Dividers */ --settings-border: rgba(255, 255, 255, 0.08); /* Text Colors */ --settings-text: #E5E5E5; /* Primary */ --settings-text-dim: #888888; /* Secondary */ --settings-text-muted: #444444; /* Placeholder */ /* Input Styling */ --settings-input-line: #E5E5E5; /* Accent Colors (Softer for dark backgrounds) */ --settings-accent-green: #4ADE80; /* Green-400: Soft mint */ --settings-accent-red: #F87171; /* Red-400: Soft coral */ } /* ═══════════════════════════════════════════════════════════════════════════ 4. LIGHT MODE THEME ═══════════════════════════════════════════════════════════════════════════ */ .theme-light { /* Background Colors */ --settings-bg: #E5E5E5; /* Void */ --settings-module-bg: #EAEAEA; /* Stone */ /* Border & Dividers */ --settings-border: rgba(0, 0, 0, 0.08); /* Text Colors */ --settings-text: #1A1A1A; /* Primary */ --settings-text-dim: #666666; /* Secondary */ --settings-text-muted: #999999; /* Placeholder */ /* Input Styling */ --settings-input-line: #1A1A1A; /* Accent Colors (Deeper for light backgrounds) */ --settings-accent-green: #059669; /* Emerald-600: Deep teal-green */ --settings-accent-red: #DC2626; /* Red-600: Deep crimson */ } /* ═══════════════════════════════════════════════════════════════════════════ 5. MAIN CONTAINER (Override Obsidian Defaults) ═══════════════════════════════════════════════════════════════════════════ */ .monolith-settings-container { padding: 0 !important; background: var(--settings-bg) !important; min-height: 100%; } /* Override Obsidian's default setting tab styling */ .monolith-settings-container .vertical-tab-content { padding: 0 !important; background: var(--settings-bg) !important; } /* ═══════════════════════════════════════════════════════════════════════════ 6. SETTINGS GRID (Bento Layout) ═══════════════════════════════════════════════════════════════════════════ */ .monolith-settings { display: grid; grid-template-columns: 1fr; grid-template-rows: auto auto auto; gap: 1px; background: var(--settings-border); padding: 1px; max-width: 560px; margin: 0 auto; } /* ═══════════════════════════════════════════════════════════════════════════ 7. MODULE CONTAINERS ═══════════════════════════════════════════════════════════════════════════ */ .monolith-settings__module { background: var(--settings-module-bg); padding: var(--space-md); min-height: 80px; } /* Danger Zone gets extra visual weight */ .monolith-settings__module--danger { padding-top: var(--space-lg); padding-bottom: var(--space-lg); } /* ═══════════════════════════════════════════════════════════════════════════ 8. MODULE TITLE [ BRACKETED ] ═══════════════════════════════════════════════════════════════════════════ */ .module__title { font-family: var(--font-monolithos-mono); font-size: 11px; font-weight: 700; letter-spacing: 0.15em; text-transform: uppercase; color: var(--settings-text-dim); margin: 0 0 var(--space-md) 0; line-height: 1; } /* Brackets added via CSS pseudo-elements */ .module__title::before { content: '[ '; } .module__title::after { content: ' ]'; } /* ═══════════════════════════════════════════════════════════════════════════ 9. INPUT COMPONENTS (Underline Style) ═══════════════════════════════════════════════════════════════════════════ */ /* --- Input Wrapper --- */ .monolith-input { display: flex; flex-direction: column; gap: var(--space-xs); margin-bottom: var(--space-md); } /* --- Input Label --- */ .monolith-input__label { font-family: var(--font-monolithos-mono); font-size: 12px; font-weight: 400; letter-spacing: 0.02em; color: var(--settings-text-dim); margin: 0; } /* --- Input Field (Underline Only) --- */ .monolith-input__field { width: 100%; background: transparent; border: none; border-bottom: 1px solid var(--settings-input-line); border-radius: 0; color: var(--settings-text); font-family: var(--font-monolithos-mono); font-size: 13px; font-weight: 400; letter-spacing: 0.02em; padding: var(--space-sm) 0; outline: none; transition: border-color 150ms ease; box-sizing: border-box; } .monolith-input__field:focus { border-bottom-color: var(--settings-accent-green); } .monolith-input__field::placeholder { color: var(--settings-text-muted); } /* --- Password Field (Masked Characters) --- */ .monolith-input__field[type="password"] { letter-spacing: 0.2em; } /* ═══════════════════════════════════════════════════════════════════════════ 10. STATUS INDICATOR (Breathing Light) ═══════════════════════════════════════════════════════════════════════════ */ .monolith-status { display: flex; align-items: center; gap: var(--space-sm); margin-top: 12px; } .monolith-status__label { font-family: var(--font-monolithos-mono); font-size: 12px; font-weight: 400; letter-spacing: 0.02em; color: var(--settings-text-dim); } /* --- Status Dot (Default: Offline/Red) --- */ .monolith-status__dot { width: 8px; height: 8px; border-radius: 50%; background: var(--settings-accent-red); flex-shrink: 0; } /* --- Status Dot: Online (Green + Breathing Animation) --- */ .monolith-status__dot--online { background: var(--settings-accent-green); animation: statusPulse 2s ease-in-out infinite; } /* --- Breathing Animation Keyframes --- */ @keyframes statusPulse { 0%, 100% { opacity: 1; box-shadow: 0 0 4px var(--settings-accent-green); } 50% { opacity: 0.5; box-shadow: 0 0 8px var(--settings-accent-green); } } /* --- Status Text --- */ .monolith-status__text { font-family: var(--font-monolithos-mono); font-size: 10px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; } .monolith-status__text--online { color: var(--settings-accent-green); } .monolith-status__text--offline { color: var(--settings-accent-red); } /* --- Status: Validating --- */ .monolith-status__text--validating { color: var(--settings-text-muted); } .monolith-status__dot--validating { background: var(--settings-text-muted); animation: statusValidating 0.8s ease-in-out infinite; } @keyframes statusValidating { 0%, 100% { opacity: 0.3; } 50% { opacity: 1; } } /* ═══════════════════════════════════════════════════════════════════════════ 11. TEXTAREA COMPONENT ═══════════════════════════════════════════════════════════════════════════ */ .monolith-textarea { display: flex; flex-direction: column; gap: var(--space-xs); margin-bottom: var(--space-md); } .monolith-textarea__label { font-family: var(--font-monolithos-mono); font-size: 12px; font-weight: 400; letter-spacing: 0.02em; color: var(--settings-text-dim); margin: 0; } .monolith-textarea__field { width: 100%; min-height: 100px; background: transparent; border: 1px solid var(--settings-border); border-radius: 0; color: var(--settings-text); font-family: var(--font-monolithos-mono); font-size: 13px; font-weight: 400; letter-spacing: 0.02em; line-height: 1.5; padding: 12px; resize: vertical; outline: none; transition: border-color 150ms ease; box-sizing: border-box; } .monolith-textarea__field:focus { border-color: var(--settings-accent-green); } .monolith-textarea__field::placeholder { color: var(--settings-text-muted); } /* ═══════════════════════════════════════════════════════════════════════════ 12. SELECT / DROPDOWN COMPONENT ═══════════════════════════════════════════════════════════════════════════ */ .monolith-select { display: flex; flex-direction: column; gap: var(--space-xs); margin-bottom: var(--space-md); } .monolith-select__label { font-family: var(--font-monolithos-mono); font-size: 12px; font-weight: 400; letter-spacing: 0.02em; color: var(--settings-text-dim); margin: 0; } /* --- Select Field Container (for custom arrow) --- */ .monolith-select__wrapper { position: relative; width: 100%; } .monolith-select__field { width: 100%; background: transparent; border: 1px solid var(--settings-border); border-radius: 0; color: var(--settings-text); font-family: var(--font-monolithos-mono); font-size: 13px; font-weight: 400; letter-spacing: 0.02em; padding: var(--space-sm) 12px; padding-right: 32px; /* Space for arrow */ cursor: pointer; outline: none; transition: border-color 150ms ease; box-sizing: border-box; /* Remove default browser styling */ appearance: none; -webkit-appearance: none; -moz-appearance: none; } .monolith-select__field:focus { border-color: var(--settings-accent-green); } /* --- Custom Dropdown Arrow --- */ .monolith-select__wrapper::after { content: '▼'; position: absolute; right: 12px; top: 50%; transform: translateY(-50%); font-size: 8px; color: var(--settings-text-dim); pointer-events: none; } /* --- Dropdown Options Styling --- */ .monolith-select__field option { background: var(--settings-module-bg); color: var(--settings-text); padding: var(--space-sm); } /* ═══════════════════════════════════════════════════════════════════════════ 13. DANGER BUTTON (Factory Reset) ═══════════════════════════════════════════════════════════════════════════ */ .monolith-btn-danger { font-family: var(--font-monolithos-mono); font-size: 11px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--settings-accent-red); background: transparent; border: 1px solid var(--settings-accent-red); border-radius: 0; padding: 10px 16px; cursor: pointer; transition: all 150ms ease; outline: none; } /* Brackets around button text */ .monolith-btn-danger::before { content: '[ '; } .monolith-btn-danger::after { content: ' ]'; } /* Hover State */ .monolith-btn-danger:hover { background: var(--settings-accent-red); color: #FFFFFF; } /* Active/Pressed State */ .monolith-btn-danger:active { transform: scale(0.98); } /* ═══════════════════════════════════════════════════════════════════════════ 14. PAGE HEADER ═══════════════════════════════════════════════════════════════════════════ */ .monolith-settings__header { background: var(--settings-bg); padding: var(--space-lg) var(--space-md); text-align: center; border-bottom: 1px solid var(--settings-border); } .monolith-settings__title { font-family: var(--font-monolithos-mono); font-size: 14px; font-weight: 700; letter-spacing: 0.2em; text-transform: uppercase; color: var(--settings-text); margin: 0; } /* ═══════════════════════════════════════════════════════════════════════════ 15. UTILITY CLASSES ═══════════════════════════════════════════════════════════════════════════ */ /* Remove last margin in modules */ .monolith-settings__module > *:last-child { margin-bottom: 0; } /* Hidden elements */ .monolith-hidden { display: none !important; } /* Visually hidden (accessible) */ .monolith-sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); border: 0; } /* ═══════════════════════════════════════════════════════════════════════════ 16. CONFIRM DIALOG (Factory Reset) ═══════════════════════════════════════════════════════════════════════════ */ .monolith-confirm-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.85); display: flex; align-items: center; justify-content: center; z-index: 9999; } .monolith-confirm-dialog { background: var(--settings-module-bg); border: 1px solid var(--settings-border); padding: var(--space-lg); max-width: 320px; text-align: center; } .monolith-confirm-dialog__title { font-family: var(--font-monolithos-mono); font-size: 12px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--settings-accent-red); margin: 0 0 var(--space-md) 0; } .monolith-confirm-dialog__message { font-family: var(--font-monolithos-mono); font-size: 12px; color: var(--settings-text-dim); line-height: 1.5; margin: 0 0 var(--space-lg) 0; } .monolith-confirm-dialog__actions { display: flex; gap: var(--space-sm); justify-content: center; } .monolith-btn-secondary { font-family: var(--font-monolithos-mono); font-size: 11px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: var(--settings-text-dim); background: transparent; border: 1px solid var(--settings-border); border-radius: 0; padding: 10px 16px; cursor: pointer; transition: all 150ms ease; outline: none; } .monolith-btn-secondary:hover { border-color: var(--settings-text); color: var(--settings-text); } /* ═══════════════════════════════════════════════════════════════════════════ END OF PHASE 1 STYLESHEET Future phases will append: Synapse, Core, Chat, Audio, Gamma ═══════════════════════════════════════════════════════════════════════════ */ /** * ═══════════════════════════════════════════════════════════════════════════ * MONOLITHOS CORE - Final Stylesheet * ═══════════════════════════════════════════════════════════════════════════ * * Layout Structure: * - Header: Logo (left, clickable) + Title (right, 60% opacity) * - Main Section: Gamma + Audio (large icons, flex: 1) * - Function Section: Inject + Bottom 3 (fixed height) * * Color System: * - Background: #151515 (dark) / #EAEAEA (light) * - Title: 60% opacity gray * - Labels: #888888 (dark) / #666666 (light) * - Inject label: 55% opacity white/black * * Typography: Menlo, 14px labels, 17px would be for larger text * * @author Silas Yu * @version 1.0 Final */ /* ═══════════════════════════════════════════════════════════════════════════ FONT DEFINITION ═══════════════════════════════════════════════════════════════════════════ */ :root { --font-monolithos-mono: 'Menlo', 'JetBrains Mono', 'Monaco', 'Consolas', monospace; } /* ═══════════════════════════════════════════════════════════════════════════ MAIN CONTAINER ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-core-container { width: 100%; height: 100%; display: flex; flex-direction: column; padding: 20px; box-sizing: border-box; overflow-y: auto; } /* Dark Mode */ .theme-dark .monolithos-core-container { background: #151515; } /* Light Mode */ .theme-light .monolithos-core-container { background: #EAEAEA; } /* ═══════════════════════════════════════════════════════════════════════════ HEADER: Logo (left) + Title (right) ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-core-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 24px; flex-shrink: 0; } /* Logo - Clickable */ .monolithos-core-header-logo { width: 40px; height: auto; opacity: 0.7; cursor: pointer; transition: opacity 150ms ease; user-select: none; -webkit-user-drag: none; } .monolithos-core-header-logo:hover { opacity: 1; } /* Title - 60% opacity, not clickable */ .monolithos-core-header-title { font-family: var(--font-monolithos-mono); font-size: 14px; font-weight: 400; letter-spacing: 0.18em; user-select: none; } .theme-dark .monolithos-core-header-title { color: rgba(255, 255, 255, 0.6); } .theme-light .monolithos-core-header-title { color: rgba(0, 0, 0, 0.6); } /* ═══════════════════════════════════════════════════════════════════════════ MAIN SECTION: Gamma + Audio (large icons, takes remaining space) ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-core-main-section { flex: 1; display: flex; flex-direction: column; justify-content: center; align-items: center; min-height: 0; } .monolithos-core-main-row { width: 100%; display: flex; justify-content: space-around; align-items: flex-end; gap: 16px; } /* Main Icon Item */ .monolithos-core-main-item { display: flex; flex-direction: column; align-items: center; gap: 12px; cursor: pointer; transition: opacity 150ms ease; flex: 1; max-width: 45%; } .monolithos-core-main-item:hover { opacity: 0.8; } .monolithos-core-main-item:active { opacity: 0.6; } /* Main Icon Image - Large */ .monolithos-core-main-icon { width: 100%; max-height: 35vh; object-fit: contain; user-select: none; -webkit-user-drag: none; } /* Main Icon Label */ .monolithos-core-main-label { font-family: var(--font-monolithos-mono); font-size: 14px; font-weight: 400; text-align: center; } .theme-dark .monolithos-core-main-label { color: #888888; } .theme-light .monolithos-core-main-label { color: #666666; } /* ═══════════════════════════════════════════════════════════════════════════ FUNCTION SECTION: Inject + Bottom 3 (fixed, doesn't grow) ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-core-function-section { flex-shrink: 0; display: flex; flex-direction: column; align-items: center; gap: 24px; padding-top: 32px; } /* ═══════════════════════════════════════════════════════════════════════════ INJECT METADATA - Centered, special 55% opacity label ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-core-inject-item { display: flex; flex-direction: column; align-items: center; gap: 12px; cursor: pointer; transition: opacity 150ms ease; } .monolithos-core-inject-item:hover { opacity: 0.8; } .monolithos-core-inject-item:active { opacity: 0.6; } .monolithos-core-inject-icon { width: 72px; height: auto; object-fit: contain; user-select: none; -webkit-user-drag: none; } /* Inject Label - 55% opacity */ .monolithos-core-inject-label { font-family: var(--font-monolithos-mono); font-size: 13px; font-weight: 400; text-align: center; } .theme-dark .monolithos-core-inject-label { color: rgba(255, 255, 255, 0.55); } .theme-light .monolithos-core-inject-label { color: rgba(0, 0, 0, 0.55); } /* ═══════════════════════════════════════════════════════════════════════════ BOTTOM ROW: Boardroom, Crystallize, Rebuild ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-core-bottom-row { width: 100%; display: flex; justify-content: space-between; align-items: flex-start; padding: 0 8px; } .monolithos-core-bottom-item { display: flex; flex-direction: column; align-items: center; gap: 10px; cursor: pointer; transition: opacity 150ms ease; flex: 1; } .monolithos-core-bottom-item:hover { opacity: 0.7; } .monolithos-core-bottom-item:active { opacity: 0.5; } .monolithos-core-bottom-icon { width: 64px; height: 64px; object-fit: contain; user-select: none; -webkit-user-drag: none; } .monolithos-core-bottom-label { font-family: var(--font-monolithos-mono); font-size: 12px; font-weight: 400; text-align: center; } .theme-dark .monolithos-core-bottom-label { color: #888888; } .theme-light .monolithos-core-bottom-label { color: #666666; } /* ═══════════════════════════════════════════════════════════════════════════ RESPONSIVE: Narrow screens (iPhone sidebar) ═══════════════════════════════════════════════════════════════════════════ */ @media (max-width: 320px) { .monolithos-core-container { padding: 16px 12px; } .monolithos-core-header-title { font-size: 12px; letter-spacing: 0.12em; } .monolithos-core-main-icon { max-height: 28vh; } .monolithos-core-main-label, .monolithos-core-inject-label { font-size: 12px; } .monolithos-core-inject-icon { width: 60px; } .monolithos-core-bottom-icon { width: 52px; height: 52px; } .monolithos-core-bottom-label { font-size: 11px; } } /* Wider screens */ @media (min-width: 450px) { .monolithos-core-main-icon { max-height: 40vh; } .monolithos-core-inject-icon { width: 88px; } .monolithos-core-bottom-icon { width: 72px; height: 72px; } } /* ═══════════════════════════════════════════════════════════════════════════ LOADING STATE (for API calls) ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-core-inject-item.loading, .monolithos-core-bottom-item.loading { pointer-events: none; opacity: 0.5; } .monolithos-core-inject-item.loading .monolithos-core-inject-icon, .monolithos-core-bottom-item.loading .monolithos-core-bottom-icon { animation: pulse-glow 1.5s ease-in-out infinite; } @keyframes pulse-glow { 0%, 100% { opacity: 0.5; } 50% { opacity: 1; } } /* ═══════════════════════════════════════════════════════════════════════════ FOCUS STATES (Accessibility) ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-core-header-logo:focus-visible, .monolithos-core-main-item:focus-visible, .monolithos-core-inject-item:focus-visible, .monolithos-core-bottom-item:focus-visible { outline: 2px solid rgba(255, 255, 255, 0.3); outline-offset: 4px; border-radius: 8px; } .theme-light .monolithos-core-header-logo:focus-visible, .theme-light .monolithos-core-main-item:focus-visible, .theme-light .monolithos-core-inject-item:focus-visible, .theme-light .monolithos-core-bottom-item:focus-visible { outline-color: rgba(0, 0, 0, 0.3); } /* ═══════════════════════════════════════════════════════════════════════════ MONOLITHOS Chat Styles (Phase 3) 追加到 styles.css 末尾 ═══════════════════════════════════════════════════════════════════════════ */ /* ═══════════════════════════════════════════════════════════════════════════ CHAT CONTAINER ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-chat-container { width: 100%; height: 100%; display: flex; flex-direction: column; overflow: hidden; position: relative; padding: 0 32px; } .monolithos-chat-container.theme-dark { background: #151515; } .monolithos-chat-container.theme-light { background: #EAEAEA; } /* ═══════════════════════════════════════════════════════════════════════════ CHAT HEADER ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-chat-header { display: flex; justify-content: space-between; align-items: flex-start; padding: 28px 0 16px; flex-shrink: 0; } .monolithos-chat-header-left { display: flex; flex-direction: column; align-items: flex-start; } .monolithos-chat-logo { width: 60px; height: 60px; opacity: 0.85; transition: opacity 150ms ease; cursor: pointer; } .monolithos-chat-logo:hover { opacity: 1; } .monolithos-chat-header-right { display: flex; flex-direction: column; align-items: flex-end; gap: 2px; margin-top: 8px; } .monolithos-chat-header-btn { display: block; font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 12px; background: transparent; border: none; cursor: pointer; padding: 4px 0; transition: opacity 150ms ease; text-align: right; } .theme-dark .monolithos-chat-header-btn { color: #888888; } .theme-light .monolithos-chat-header-btn { color: #666666; } .monolithos-chat-header-btn:hover { opacity: 0.6; } /* ═══════════════════════════════════════════════════════════════════════════ MESSAGES AREA ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-chat-messages { flex: 1; overflow-y: auto; padding: 16px 20px; display: flex; flex-direction: column; gap: 28px; scroll-behavior: smooth; } .monolithos-chat-messages::-webkit-scrollbar { width: 3px; } .monolithos-chat-messages::-webkit-scrollbar-track { background: transparent; } .theme-dark .monolithos-chat-messages::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.08); border-radius: 2px; } .theme-light .monolithos-chat-messages::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, 0.08); border-radius: 2px; } .monolithos-message { align-self: flex-start; max-width: 88%; line-height: 1.6; position: relative; word-wrap: break-word; animation: messageAppear 0.3s ease-out; -webkit-user-select: text; user-select: text; cursor: text; } @keyframes messageAppear { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } /* User Message — Baskerville Bold Italic 17px */ .monolithos-message-user { font-family: var(--font-monolithos-serif, 'Libre Baskerville', 'Baskerville', serif); font-size: 17px; font-weight: 700; font-style: italic; line-height: 1.5; } .theme-dark .monolithos-message-user { color: #E5E5E5; } .theme-light .monolithos-message-user { color: #1A1A1A; } /* AI Message — Menlo 14px */ .monolithos-message-ai { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 14px; line-height: 1.7; padding-bottom: 28px; } .theme-dark .monolithos-message-ai { color: #FFFFFF; } .theme-light .monolithos-message-ai { color: #1A1A1A; } /* Thinking State */ .monolithos-message-thinking { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 14px; animation: pulse 1.5s ease-in-out infinite; } .theme-dark .monolithos-message-thinking { color: #6C6C6C; } .theme-light .monolithos-message-thinking { color: #888888; } @keyframes pulse { 0%, 100% { opacity: 0.5; } 50% { opacity: 1; } } /* Voice Message */ .monolithos-message-voice { font-family: var(--font-monolithos-serif, 'Libre Baskerville', 'Baskerville', serif); font-size: 17px; font-weight: 700; font-style: italic; line-height: 1.5; } .theme-dark .monolithos-message-voice { color: #E5E5E5; } .theme-light .monolithos-message-voice { color: #1A1A1A; } .voice-player { display: flex; flex-direction: column; gap: 8px; } .voice-player-header { display: flex; align-items: center; gap: 10px; } .voice-player-icon { font-size: 14px; } .voice-player-label { font-style: italic; } .voice-player-play { width: 20px; height: 20px; background: transparent; border: none; cursor: pointer; font-size: 12px; opacity: 0.8; } .voice-player-play:hover { opacity: 1; } .voice-progress { width: 100%; height: 4px; background: rgba(255, 255, 255, 0.1); border-radius: 2px; overflow: hidden; } .voice-progress-bar { width: 30%; height: 100%; background: #E5E5E5; border-radius: 2px; } /* Action Buttons */ /* ═══════════════════════════════════════════════════════════════════════════ MESSAGE ACTIONS (v1.3.5 - 重写) ═══════════════════════════════════════════════════════════════════════════ */ /* 旧样式已删除,使用 inline styles */ /* ═══════════════════════════════════════════════════════════════════════════ MODE DESCRIPTION ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-mode-description { padding: 12px 0; min-height: 50px; overflow: hidden; flex-shrink: 0; } .monolithos-mode-description-text { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 13px; line-height: 1.5; } .theme-dark .monolithos-mode-description-text { color: #6C6C6C; } .theme-light .monolithos-mode-description-text { color: #888888; } .monolithos-mode-description-text.typing::after { content: '█'; animation: blink 1s step-end infinite; margin-left: 2px; } @keyframes blink { 50% { opacity: 0; } } /* ═══════════════════════════════════════════════════════════════════════════ INPUT AREA ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-chat-input-area { padding: 24px 0 16px; flex-shrink: 0; position: relative; } .monolithos-chat-input-area::before { content: ''; position: absolute; top: 0; left: 12%; right: 12%; height: 1px; } .theme-dark .monolithos-chat-input-area::before { background: rgba(255, 255, 255, 0.1); } .theme-light .monolithos-chat-input-area::before { background: rgba(0, 0, 0, 0.1); } .monolithos-input-wrapper { position: relative; width: 100%; min-height: 70px; } .monolithos-chat-input { width: 100%; min-height: 50px; max-height: 70px; background: transparent; border: none; outline: none; font-family: var(--font-monolithos-serif, 'Libre Baskerville', 'Baskerville', serif); font-size: 14px; font-weight: 700; font-style: italic; padding: 0; padding-right: 60px; resize: none; line-height: 1.6; overflow-y: auto; } .theme-dark .monolithos-chat-input { color: #E5E5E5; } .theme-light .monolithos-chat-input { color: #1A1A1A; } .theme-dark .monolithos-chat-input::placeholder { color: #E5E5E5; opacity: 1; } .theme-light .monolithos-chat-input::placeholder { color: #1A1A1A; opacity: 1; } .monolithos-cursor { display: inline-block; width: 10px; height: 17px; background: #E5E5E5; position: absolute; top: 2px; left: 130px; animation: cursorBlink 1s step-end infinite; } .theme-light .monolithos-cursor { background: #1A1A1A; } .monolithos-cursor.hidden { display: none; } @keyframes cursorBlink { 50% { opacity: 0; } } .monolithos-chat-send-btn { position: absolute; right: 8px; top: 28px; font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 14px; background: transparent; border: none; cursor: pointer; padding: 4px; transition: opacity 150ms ease; } .theme-dark .monolithos-chat-send-btn { color: #888888; } .theme-light .monolithos-chat-send-btn { color: #666666; } .monolithos-chat-send-btn:hover { opacity: 0.6; } /* ═══════════════════════════════════════════════════════════════════════════ TOOLBAR ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-chat-toolbar { display: flex; flex-direction: column; gap: 10px; padding: 0 0 28px; flex-shrink: 0; position: relative; } .monolithos-file-tags-row { display: flex; align-items: center; gap: 8px; } .monolithos-at-symbol { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 14px; } .theme-dark .monolithos-at-symbol { color: #888888; } .theme-light .monolithos-at-symbol { color: #666666; } .monolithos-file-tag { display: inline-flex; align-items: center; font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 12px; padding: 4px 10px; border-radius: 4px; cursor: pointer; transition: opacity 150ms ease; } .theme-dark .monolithos-file-tag { background: rgba(255, 255, 255, 0.08); color: #888888; } .theme-light .monolithos-file-tag { background: rgba(0, 0, 0, 0.06); color: #666666; } .monolithos-file-tag:hover { opacity: 0.7; } /* Tools Row */ .monolithos-tools-row { display: flex; align-items: center; gap: 24px; position: relative; min-height: 24px; } .monolithos-tools-default { display: flex; align-items: center; gap: 24px; } .monolithos-tools-default.hidden { display: none; } .monolithos-add-btn, .monolithos-voice-btn { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 12px; background: transparent; border: none; cursor: pointer; padding: 0; transition: opacity 150ms ease; } .theme-dark .monolithos-add-btn, .theme-dark .monolithos-voice-btn { color: #666666; } .theme-light .monolithos-add-btn, .theme-light .monolithos-voice-btn { color: #888888; } .monolithos-add-btn:hover, .monolithos-voice-btn:hover { opacity: 0.6; } /* Recording State */ .monolithos-tools-recording { display: none; flex-direction: column; gap: 8px; width: 100%; } .monolithos-tools-recording.active { display: flex; } .recording-row-1 { display: flex; align-items: center; gap: 16px; } .recording-indicator { display: flex; align-items: center; gap: 6px; font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 12px; color: #FF4444; } .recording-dot { width: 8px; height: 8px; background: #FF4444; border-radius: 50%; animation: recordingPulse 1s ease-in-out infinite; } @keyframes recordingPulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } } .recording-time { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 12px; color: #888888; } .recording-stop { width: 14px; height: 14px; background: #E5E5E5; border: none; cursor: pointer; margin-left: 8px; } .recording-cursor { width: 2px; height: 14px; background: #888888; animation: cursorBlink 1s step-end infinite; } .recording-row-2 { display: flex; align-items: center; } .recording-send { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 12px; color: #888888; background: transparent; border: none; cursor: pointer; padding: 0; } .recording-send:hover { opacity: 0.6; } .recording-send-cursor { width: 2px; height: 14px; background: #888888; margin-left: 8px; animation: cursorBlink 1s step-end infinite; } /* ═══════════════════════════════════════════════════════════════════════════ MODE SWITCH ICON ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-mode-switch { position: absolute; right: 0; bottom: 12px; cursor: pointer; display: flex; align-items: center; justify-content: center; } .monolithos-mode-switch img { transition: opacity 150ms ease; } /* Auto Mode */ .monolithos-mode-switch img.mode-auto { width: 36px; height: 36px; position: relative; top: -20px; right: 16px; } /* Velocity/Deep/Flawless */ .monolithos-mode-switch img.mode-other { width: 85px; height: 85px; } /* Shadow Pulse */ .monolithos-mode-switch img.mode-shadow { width: 95px; height: 95px; } /* Omni Context */ .monolithos-mode-switch img.mode-omni { width: 65px; height: 65px; } .monolithos-mode-switch img:hover { opacity: 0.7; } /* ═══════════════════════════════════════════════════════════════════════════ MENUS ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-mode-menu { position: absolute; bottom: 55px; right: 0; min-width: 170px; padding: 10px; border-radius: 8px; opacity: 0; transform: translateY(10px); transition: opacity 200ms ease, transform 200ms ease; pointer-events: none; z-index: 100; } .monolithos-mode-menu.active { opacity: 1; transform: translateY(0); pointer-events: auto; } .theme-dark .monolithos-mode-menu { background: #1A1A1A; border: 1px solid rgba(255, 255, 255, 0.08); } .theme-light .monolithos-mode-menu { background: #F2F2F2; border: 1px solid rgba(0, 0, 0, 0.08); } .monolithos-mode-item { display: flex; align-items: center; gap: 10px; padding: 10px 8px; cursor: pointer; border-radius: 4px; transition: background 150ms ease; } .theme-dark .monolithos-mode-item:hover { background: rgba(255, 255, 255, 0.05); } .theme-light .monolithos-mode-item:hover { background: rgba(0, 0, 0, 0.05); } .monolithos-mode-symbol { font-size: 14px; width: 18px; text-align: center; } .theme-dark .monolithos-mode-symbol { color: #888888; } .theme-light .monolithos-mode-symbol { color: #666666; } .monolithos-mode-name { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 13px; } .theme-dark .monolithos-mode-name { color: #E5E5E5; } .theme-light .monolithos-mode-name { color: #1A1A1A; } /* History Menu */ .monolithos-history-menu { position: absolute; top: 100px; right: 0; min-width: 260px; max-height: 350px; overflow-y: auto; padding: 10px; border-radius: 8px; opacity: 0; transform: translateY(-10px); transition: opacity 200ms ease, transform 200ms ease; pointer-events: none; z-index: 100; } .monolithos-history-menu.active { opacity: 1; transform: translateY(0); pointer-events: auto; } .theme-dark .monolithos-history-menu { background: #1A1A1A; border: 1px solid rgba(255, 255, 255, 0.08); } .theme-light .monolithos-history-menu { background: #F2F2F2; border: 1px solid rgba(0, 0, 0, 0.08); } .monolithos-history-item { display: flex; justify-content: space-between; align-items: center; padding: 10px 8px; cursor: pointer; border-radius: 4px; transition: background 150ms ease; } .theme-dark .monolithos-history-item:hover { background: rgba(255, 255, 255, 0.05); } .theme-light .monolithos-history-item:hover { background: rgba(0, 0, 0, 0.05); } .monolithos-history-title { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 11px; flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-right: 8px; } .theme-dark .monolithos-history-title { color: #E5E5E5; } .theme-light .monolithos-history-title { color: #1A1A1A; } .monolithos-history-actions { display: none; gap: 6px; } .monolithos-history-item:hover .monolithos-history-actions { display: flex; } .monolithos-history-action { font-size: 10px; cursor: pointer; opacity: 0.5; } .monolithos-history-action:hover { opacity: 1; } /* Add Menu */ .monolithos-add-menu { position: absolute; bottom: 30px; left: 0; min-width: 140px; padding: 8px; border-radius: 8px; opacity: 0; transform: translateY(10px); transition: opacity 200ms ease, transform 200ms ease; pointer-events: none; z-index: 100; } .monolithos-add-menu.active { opacity: 1; transform: translateY(0); pointer-events: auto; } .theme-dark .monolithos-add-menu { background: #1A1A1A; border: 1px solid rgba(255, 255, 255, 0.08); } .theme-light .monolithos-add-menu { background: #F2F2F2; border: 1px solid rgba(0, 0, 0, 0.08); } .monolithos-add-menu-item { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 12px; padding: 10px 12px; cursor: pointer; border-radius: 4px; transition: background 150ms ease; } .theme-dark .monolithos-add-menu-item { color: #E5E5E5; } .theme-light .monolithos-add-menu-item { color: #1A1A1A; } .theme-dark .monolithos-add-menu-item:hover { background: rgba(255, 255, 255, 0.05); } .theme-light .monolithos-add-menu-item:hover { background: rgba(0, 0, 0, 0.05); } /* ═══════════════════════════════════════════════════════════════════════════ @ FILE REFERENCE SYSTEM v1.3 Multi-modal + Mobile Drawer + Drag & Drop + Sticky Context + Folder Support ═══════════════════════════════════════════════════════════════════════════ */ /* ═══════════════════════════════════════════════════════════════════════════ FILE TAGS ROW ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-file-tags-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; min-height: 28px; } .monolithos-file-tags-container { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; flex: 1; min-height: 24px; } .monolithos-file-tag-hint { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 12px; opacity: 0.4; cursor: pointer; } .monolithos-file-tag-hint:hover { opacity: 0.6; } /* ═══════════════════════════════════════════════════════════════════════════ CLEAR CONTEXT BUTTON ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-clear-context-btn { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 10px; padding: 2px 8px; border-radius: 10px; cursor: pointer; opacity: 0.5; transition: all 150ms ease; white-space: nowrap; } .theme-dark .monolithos-clear-context-btn { background: rgba(255, 100, 100, 0.2); color: #ff8888; } .theme-light .monolithos-clear-context-btn { background: rgba(200, 50, 50, 0.1); color: #cc4444; } .monolithos-clear-context-btn:hover { opacity: 1; } /* ═══════════════════════════════════════════════════════════════════════════ FILE CHIPS (Selected Items) ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-file-chip { display: inline-flex; align-items: center; gap: 4px; font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 11px; padding: 3px 8px; border-radius: 12px; max-width: 160px; transition: all 150ms ease; } .theme-dark .monolithos-file-chip { background: rgba(255, 255, 255, 0.1); color: #aaaaaa; } .theme-light .monolithos-file-chip { background: rgba(0, 0, 0, 0.08); color: #555555; } /* Chip type colors */ .monolithos-file-chip.chip-active { border: 1px solid rgba(255, 200, 0, 0.5); } .monolithos-file-chip.chip-folder { border: 1px solid rgba(100, 150, 255, 0.5); } .theme-dark .monolithos-file-chip.chip-active { background: rgba(255, 200, 0, 0.15); } .theme-dark .monolithos-file-chip.chip-folder { background: rgba(100, 150, 255, 0.15); } .theme-light .monolithos-file-chip.chip-active { background: rgba(255, 200, 0, 0.1); } .theme-light .monolithos-file-chip.chip-folder { background: rgba(100, 150, 255, 0.1); } .monolithos-file-chip-icon { font-size: 12px; flex-shrink: 0; } .monolithos-file-chip-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .monolithos-file-chip-remove { cursor: pointer; opacity: 0.6; font-size: 14px; line-height: 1; padding: 0 2px; transition: opacity 150ms ease; flex-shrink: 0; } .monolithos-file-chip-remove:hover { opacity: 1; } /* ═══════════════════════════════════════════════════════════════════════════ FILE SEARCH MENU (Desktop Popover) ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-file-search-menu { position: absolute; bottom: 55px; left: 0; right: 0; border-radius: 8px; display: none; flex-direction: column; z-index: 100; max-height: 320px; overflow: hidden; } .monolithos-file-search-menu.active { display: flex; } .theme-dark .monolithos-file-search-menu { background: #1a1a1a; border: 1px solid rgba(255, 255, 255, 0.1); box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5); } .theme-light .monolithos-file-search-menu { background: #ffffff; border: 1px solid rgba(0, 0, 0, 0.1); box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); } /* ═══════════════════════════════════════════════════════════════════════════ FILE SEARCH DRAWER (Mobile Bottom Sheet) ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-file-search-drawer { position: fixed; bottom: 0; left: 0; right: 0; border-radius: 16px 16px 0 0; display: none; flex-direction: column; z-index: 1000; max-height: 70vh; min-height: 55vh; /* ✨ 增加最小高度,确保输入框不被虚拟键盘遮挡 */ transform: translateY(100%); transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1); } .monolithos-file-search-drawer.active { display: flex; transform: translateY(0); } .theme-dark .monolithos-file-search-drawer { background: #1a1a1a; border-top: 1px solid rgba(255, 255, 255, 0.1); box-shadow: 0 -4px 30px rgba(0, 0, 0, 0.5); } .theme-light .monolithos-file-search-drawer { background: #ffffff; border-top: 1px solid rgba(0, 0, 0, 0.1); box-shadow: 0 -4px 30px rgba(0, 0, 0, 0.2); } /* Drawer handle */ .monolithos-file-search-drawer::before { content: ''; width: 40px; height: 4px; border-radius: 2px; margin: 8px auto; flex-shrink: 0; } .theme-dark .monolithos-file-search-drawer::before { background: rgba(255, 255, 255, 0.3); } .theme-light .monolithos-file-search-drawer::before { background: rgba(0, 0, 0, 0.2); } /* Drawer Overlay */ .monolithos-drawer-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.5); z-index: 999; display: none; opacity: 0; transition: opacity 300ms ease; } .monolithos-drawer-overlay.active { display: block; opacity: 1; } /* ═══════════════════════════════════════════════════════════════════════════ SEARCH INPUT ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-file-search-input { width: 100%; padding: 12px 16px; border: none; border-bottom: 1px solid var(--background-modifier-border); background: transparent; font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace) !important; font-size: 14px; outline: none; } .theme-dark .monolithos-file-search-input { color: #ffffff; } .theme-light .monolithos-file-search-input { color: #1a1a1a; } .monolithos-file-search-input::placeholder { opacity: 0.4; } /* ═══════════════════════════════════════════════════════════════════════════ SEARCH RESULTS ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-file-search-results { overflow-y: auto; flex: 1; min-height: 200px; /* ✨ 最小高度,保持 drawer 不会因结果少而缩小 */ } .monolithos-file-search-results::-webkit-scrollbar { width: 6px; } .theme-dark .monolithos-file-search-results::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.2); border-radius: 3px; } .theme-light .monolithos-file-search-results::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, 0.2); border-radius: 3px; } /* Search Item */ .monolithos-file-search-item { display: flex; align-items: center; padding: 10px 16px; gap: 10px; cursor: pointer; transition: background 150ms ease; } .theme-dark .monolithos-file-search-item:hover { background: rgba(255, 255, 255, 0.05); } .theme-light .monolithos-file-search-item:hover { background: rgba(0, 0, 0, 0.04); } .monolithos-file-search-item.selected { position: relative; } .theme-dark .monolithos-file-search-item.selected { background: rgba(255, 255, 255, 0.08); } .theme-light .monolithos-file-search-item.selected { background: rgba(0, 0, 0, 0.06); } /* Icon */ .monolithos-file-search-icon { font-size: 16px; width: 24px; text-align: center; flex-shrink: 0; } /* Name */ .monolithos-file-search-name { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 13px; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .theme-dark .monolithos-file-search-name { color: #dddddd; } .theme-light .monolithos-file-search-name { color: #333333; } /* Path */ .monolithos-file-search-path { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 10px; opacity: 0.4; margin-left: 8px; max-width: 120px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* Type Tags */ .monolithos-file-search-tag { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 9px; padding: 2px 6px; border-radius: 4px; text-transform: uppercase; letter-spacing: 0.5px; flex-shrink: 0; } .monolithos-file-search-tag.active { background: rgba(255, 200, 0, 0.3); color: #ffcc00; } .monolithos-file-search-tag.folder { background: rgba(100, 150, 255, 0.3); color: #6699ff; } /* Check Mark */ .monolithos-file-search-check { font-weight: bold; color: var(--interactive-accent); margin-left: auto; flex-shrink: 0; } /* Empty State */ .monolithos-file-search-empty { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); text-align: center; padding: 24px; font-size: 12px; opacity: 0.5; } /* ═══════════════════════════════════════════════════════════════════════════ DRAG & DROP OVERLAY ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-drop-overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: none; flex-direction: column; align-items: center; justify-content: center; z-index: 500; border-radius: 8px; pointer-events: none; } .monolithos-drop-overlay.active { display: flex; } .theme-dark .monolithos-drop-overlay { background: rgba(0, 0, 0, 0.85); border: 2px dashed rgba(255, 255, 255, 0.4); } .theme-light .monolithos-drop-overlay { background: rgba(255, 255, 255, 0.9); border: 2px dashed rgba(0, 0, 0, 0.3); } .monolithos-drop-overlay .drop-icon { font-size: 48px; margin-bottom: 16px; animation: dropPulse 1.5s ease-in-out infinite; } .monolithos-drop-overlay .drop-text { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 14px; opacity: 0.8; } @keyframes dropPulse { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.1); opacity: 0.8; } } /* ═══════════════════════════════════════════════════════════════════════════ MOBILE SPECIFIC STYLES ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-chat-container.is-mobile .monolithos-file-tags-row { padding: 8px 0; } .monolithos-chat-container.is-mobile .monolithos-file-chip { font-size: 10px; padding: 4px 8px; max-width: 120px; } .monolithos-chat-container.is-mobile .monolithos-file-search-item { padding: 14px 16px; } .monolithos-chat-container.is-mobile .monolithos-file-search-name { font-size: 14px; } /* ═══════════════════════════════════════════════════════════════════════════ @ SYMBOL STYLES (Enhanced) ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-at-symbol { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 14px; font-weight: bold; cursor: pointer; padding: 4px 8px; border-radius: 4px; transition: all 150ms ease; } .theme-dark .monolithos-at-symbol { color: #888888; } .theme-light .monolithos-at-symbol { color: #666666; } .theme-dark .monolithos-at-symbol:hover { background: rgba(255, 255, 255, 0.1); color: #ffffff; } .theme-light .monolithos-at-symbol:hover { background: rgba(0, 0, 0, 0.1); color: #000000; } /* ═══════════════════════════════════════════════════════════════════════════ EXTERNAL FILE CHIP STYLE (v1.3.1) ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-file-chip.chip-external { border: 1px solid rgba(150, 100, 255, 0.5); } .theme-dark .monolithos-file-chip.chip-external { background: rgba(150, 100, 255, 0.15); } .theme-light .monolithos-file-chip.chip-external { background: rgba(150, 100, 255, 0.1); } /* ═══════════════════════════════════════════════════════════════════════════ MARKDOWN CONTENT STYLES (v1.3.2) ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-markdown-content { line-height: 1.6; -webkit-user-select: text; user-select: text; } .monolithos-markdown-content h1, .monolithos-markdown-content h2, .monolithos-markdown-content h3 { margin-top: 1em; margin-bottom: 0.5em; } .monolithos-markdown-content p { margin-bottom: 0.8em; } .monolithos-markdown-content ul, .monolithos-markdown-content ol { margin-left: 1.5em; margin-bottom: 0.8em; } .monolithos-markdown-content code { font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 0.9em; padding: 2px 6px; border-radius: 4px; } .theme-dark .monolithos-markdown-content code { background: rgba(255, 255, 255, 0.1); } .theme-light .monolithos-markdown-content code { background: rgba(0, 0, 0, 0.06); } .monolithos-markdown-content pre { margin: 1em 0; padding: 12px 16px; border-radius: 6px; overflow-x: auto; } .theme-dark .monolithos-markdown-content pre { background: rgba(0, 0, 0, 0.3); } .theme-light .monolithos-markdown-content pre { background: rgba(0, 0, 0, 0.04); } .monolithos-markdown-content pre code { padding: 0; background: transparent; } .monolithos-markdown-content blockquote { border-left: 3px solid var(--interactive-accent); padding-left: 1em; margin: 1em 0; opacity: 0.9; } .monolithos-markdown-content a { color: var(--interactive-accent); text-decoration: none; } .monolithos-markdown-content a:hover { text-decoration: underline; } .monolithos-markdown-content table { width: 100%; border-collapse: collapse; margin: 1em 0; } .monolithos-markdown-content th, .monolithos-markdown-content td { padding: 8px 12px; text-align: left; } .theme-dark .monolithos-markdown-content th, .theme-dark .monolithos-markdown-content td { border: 1px solid rgba(255, 255, 255, 0.1); } .theme-light .monolithos-markdown-content th, .theme-light .monolithos-markdown-content td { border: 1px solid rgba(0, 0, 0, 0.1); } .theme-dark .monolithos-markdown-content th { background: rgba(255, 255, 255, 0.05); } .theme-light .monolithos-markdown-content th { background: rgba(0, 0, 0, 0.03); } /* ═══════════════════════════════════════════════════════════════════════════ BULLETPROOF FILE SEARCH CLOSE FIX (v1.3.3) 使用 [data-visible] 属性确保弹窗正确关闭 ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-file-search-menu[data-visible="false"], .monolithos-file-search-drawer[data-visible="false"] { display: none !important; visibility: hidden !important; pointer-events: none !important; } .monolithos-file-search-menu[data-visible="true"], .monolithos-file-search-drawer[data-visible="true"] { display: flex !important; visibility: visible !important; pointer-events: auto !important; } /* ═══════════════════════════════════════════════════════════════════════════ v1.3.4 FIXES ═══════════════════════════════════════════════════════════════════════════ */ /* Drop Overlay - 确保默认隐藏,只在拖拽时显示 */ .monolithos-drop-overlay { display: none !important; } .monolithos-drop-overlay.active { display: flex !important; } /* Mobile File Search Input - 确保可见 */ .is-mobile .monolithos-file-search-input, .monolithos-file-search-drawer .monolithos-file-search-input { min-height: 48px; font-size: 16px !important; /* 防止 iOS 自动缩放 */ padding: 14px 16px; } /* Action Buttons - Inline SVG styling */ .monolithos-action-btn { display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; background: transparent; border: none; cursor: pointer; transition: opacity 0.2s ease, background 0.2s ease; border-radius: 4px; padding: 4px; } .monolithos-action-btn:hover { opacity: 1; } .theme-dark .monolithos-action-btn:hover { background: rgba(255, 255, 255, 0.1); } .theme-light .monolithos-action-btn:hover { background: rgba(0, 0, 0, 0.05); } .monolithos-action-btn svg { width: 16px; height: 16px; flex-shrink: 0; } /* 确保 SVG 在浅色模式下可见 */ .theme-light .monolithos-action-btn svg { stroke: #555555; } .theme-dark .monolithos-action-btn svg { stroke: #aaaaaa; } /* Message Actions - 默认隐藏,hover/touch 显示 */ .monolithos-message-actions { opacity: 0; transition: opacity 0.2s ease; } .monolithos-message:hover .monolithos-message-actions, .monolithos-message.show-actions .monolithos-message-actions { opacity: 1; } /* Mobile touch - 点击消息显示 actions */ .is-mobile .monolithos-message-actions { opacity: 0.5; } /* v1.3.5 - 消息区域 padding 调整 */ .is-mobile .monolithos-chat-messages { padding: 16px 16px; } /* 确保 SVG 图标在所有情况下可见 */ .monolithos-message-actions svg { display: block; } .monolithos-message-actions svg rect, .monolithos-message-actions svg path, .monolithos-message-actions svg line, .monolithos-message-actions svg polyline { vector-effect: non-scaling-stroke; } /* ═══════════════════════════════════════════════════════════════════════════ v1.3.6 CRITICAL FIXES ═══════════════════════════════════════════════════════════════════════════ */ /* 1. 消息区域 padding - 强制覆盖 */ .monolithos-chat-messages { padding: 16px 24px !important; } .is-mobile .monolithos-chat-messages { padding: 16px 20px !important; } /* 2. iPhone @ 搜索输入框 - 确保可见 */ .monolithos-file-search-drawer .monolithos-file-search-input { width: 100% !important; min-width: 200px !important; box-sizing: border-box !important; flex-shrink: 0 !important; } /* 3. Action Buttons - 强制显示 SVG */ .monolithos-message-actions { display: flex !important; gap: 8px; margin-top: 12px; } .monolithos-action-btn { display: flex !important; align-items: center !important; justify-content: center !important; width: 28px !important; height: 28px !important; min-width: 28px !important; min-height: 28px !important; } .monolithos-action-btn svg { display: block !important; width: 16px !important; height: 16px !important; stroke-width: 2 !important; } /* 深色模式 SVG */ .theme-dark .monolithos-action-btn svg { stroke: #bbbbbb !important; } /* 浅色模式 SVG */ .theme-light .monolithos-action-btn svg { stroke: #444444 !important; } /* Hover 效果 */ .monolithos-action-btn:hover svg { stroke: var(--interactive-accent) !important; } /* v1.3.6 - 文字按钮样式 */ .monolithos-message-actions .monolithos-action-btn { width: auto !important; height: 24px !important; min-width: 45px !important; min-height: 24px !important; font-size: 10px !important; padding: 0 8px !important; color: inherit !important; opacity: 0.5; } .theme-dark .monolithos-message-actions .monolithos-action-btn { color: #999999 !important; border-color: #666666 !important; } .theme-light .monolithos-message-actions .monolithos-action-btn { color: #666666 !important; border-color: #999999 !important; } .monolithos-message-actions .monolithos-action-btn:hover { opacity: 1 !important; border-color: var(--interactive-accent) !important; color: var(--interactive-accent) !important; } /* ═══════════════════════════════════════════════════════════════════════════ GAMMA FORGE STYLES ═══════════════════════════════════════════════════════════════════════════ */ /** * ═══════════════════════════════════════════════════════════════════════════ * MONOLITHOS - GAMMA FORGE STYLES * Premium presentation forge interface * ═══════════════════════════════════════════════════════════════════════════ */ /* ═══════════════════════════════════════════════════════════════════════════ CONTAINER ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-gamma-container { width: 100%; height: 100%; display: flex; flex-direction: column; padding: 20px; box-sizing: border-box; position: relative; overflow: hidden; } .theme-dark .monolithos-gamma-container { background: #151515; } .theme-light .monolithos-gamma-container { background: #EAEAEA; } /* ═══════════════════════════════════════════════════════════════════════════ TOP SPACER - minimal spacing at top ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-gamma-top-spacer { height: 15px; flex-shrink: 0; } /* ═══════════════════════════════════════════════════════════════════════════ HEADER: Logo + Title/History on same line ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-gamma-header { display: flex; justify-content: space-between; align-items: flex-start; flex-shrink: 0; padding: 0 5px; } /* Legacy: gamma-top-row for backward compatibility */ .monolithos-gamma-top-row { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 24px; flex-shrink: 0; padding-top: 20px; } .monolithos-gamma-header-logo { width: 80px; height: auto; opacity: 0.7; cursor: pointer; transition: opacity 150ms ease; user-select: none; -webkit-user-drag: none; } .monolithos-gamma-header-logo:hover { opacity: 1; } .monolithos-gamma-header-right { text-align: right; padding-top: 5px; } .monolithos-gamma-title { font-family: var(--font-monolithos-mono); font-size: 16px; font-weight: 400; letter-spacing: 0.18em; margin-bottom: 10px; } .theme-dark .monolithos-gamma-title { color: #E5E5E5; } .theme-light .monolithos-gamma-title { color: #1A1A1A; } .monolithos-gamma-history-btn { font-family: var(--font-monolithos-mono); font-size: 13px; letter-spacing: 0.1em; cursor: pointer; transition: color 150ms ease; } .theme-dark .monolithos-gamma-history-btn { color: #888888; } .theme-light .monolithos-gamma-history-btn { color: #666666; } .monolithos-gamma-history-btn:hover { color: var(--text-normal); } /* ═══════════════════════════════════════════════════════════════════════════ FILE ROW - more spacing from header ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-gamma-file-row { display: flex; justify-content: flex-end; margin-top: 30px; margin-bottom: 12px; flex-shrink: 0; } .monolithos-gamma-file-section { display: flex; flex-direction: column; gap: 6px; align-items: flex-end; } .monolithos-gamma-file-tags { display: flex; flex-direction: column; gap: 6px; align-items: flex-end; } .monolithos-gamma-file-tag { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border-radius: 4px; font-family: var(--font-monolithos-mono); font-size: 12px; cursor: pointer; transition: background 150ms ease; } .theme-dark .monolithos-gamma-file-tag { background: rgba(255, 255, 255, 0.08); color: #888888; } .theme-light .monolithos-gamma-file-tag { background: rgba(0, 0, 0, 0.06); color: #666666; } .monolithos-gamma-file-tag::before { content: '@'; opacity: 0.6; } .monolithos-gamma-file-tag:hover { background: rgba(255, 255, 255, 0.12); } .theme-light .monolithos-gamma-file-tag:hover { background: rgba(0, 0, 0, 0.1); } .monolithos-gamma-file-remove { opacity: 0.5; cursor: pointer; margin-left: 4px; } .monolithos-gamma-file-remove:hover { opacity: 1; } .monolithos-gamma-add-file { font-family: var(--font-monolithos-mono); font-size: 11px; cursor: pointer; opacity: 0.6; transition: opacity 150ms ease; } .theme-dark .monolithos-gamma-add-file { color: #6C6C6C; } .theme-light .monolithos-gamma-add-file { color: #888888; } .monolithos-gamma-add-file:hover { opacity: 1; } /* ═══════════════════════════════════════════════════════════════════════════ INPUT ROW ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-gamma-input-row { margin-bottom: 16px; flex-shrink: 0; } .monolithos-gamma-input-wrapper { position: relative; width: 70%; } .monolithos-gamma-input { font-family: var(--font-monolithos-serif); font-size: 15px; background: transparent; border: none; outline: none; width: 100%; max-height: 72px; overflow-y: auto; resize: none; line-height: 1.5; text-align: left; } .theme-dark .monolithos-gamma-input { color: #888888; } .theme-light .monolithos-gamma-input { color: #666666; } .monolithos-gamma-placeholder { position: absolute; top: 0; left: 0; font-family: var(--font-monolithos-serif); font-size: 15px; pointer-events: none; line-height: 1.5; } .theme-dark .monolithos-gamma-placeholder { color: #6C6C6C; } .theme-light .monolithos-gamma-placeholder { color: #888888; } .monolithos-gamma-cursor { animation: monolithos-blink 1s step-end infinite; font-weight: 300; } @keyframes monolithos-blink { 0%, 50% { opacity: 1; } 51%, 100% { opacity: 0; } } .monolithos-gamma-input:focus ~ .monolithos-gamma-placeholder, .monolithos-gamma-input-wrapper.has-content .monolithos-gamma-placeholder { display: none; } /* ═══════════════════════════════════════════════════════════════════════════ PREVIEW SECTION - CSS Glowing Box ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-gamma-preview-section { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 0; position: relative; padding: 10px 0; gap: 12px; } .monolithos-gamma-preview-box { width: 95%; max-width: 600px; aspect-ratio: 16 / 9; border-radius: 8px; position: relative; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all 300ms ease; overflow: hidden; } .theme-dark .monolithos-gamma-preview-box { border: 2px solid rgba(255, 255, 255, 0.7); box-shadow: 0 0 30px rgba(255, 255, 255, 0.2), 0 0 60px rgba(255, 255, 255, 0.1), inset 0 0 40px rgba(255, 255, 255, 0.05); } .theme-light .monolithos-gamma-preview-box { border: 2px solid rgba(0, 0, 0, 0.3); box-shadow: 0 0 30px rgba(0, 0, 0, 0.1), 0 0 60px rgba(0, 0, 0, 0.05), inset 0 0 40px rgba(0, 0, 0, 0.02); } .theme-dark .monolithos-gamma-preview-box:hover { box-shadow: 0 0 40px rgba(255, 255, 255, 0.3), 0 0 80px rgba(255, 255, 255, 0.15), inset 0 0 50px rgba(255, 255, 255, 0.08); } .theme-light .monolithos-gamma-preview-box:hover { box-shadow: 0 0 40px rgba(0, 0, 0, 0.15), 0 0 80px rgba(0, 0, 0, 0.08), inset 0 0 50px rgba(0, 0, 0, 0.03); } /* Glow reflection below - hidden when has content */ .monolithos-gamma-preview-box::after { content: ''; position: absolute; bottom: -35px; left: 10%; width: 80%; height: 35px; filter: blur(10px); pointer-events: none; } .monolithos-gamma-preview-box.has-content::after { display: none; } .theme-dark .monolithos-gamma-preview-box::after { background: linear-gradient(to bottom, rgba(255,255,255,0.2), transparent); } .theme-light .monolithos-gamma-preview-box::after { background: linear-gradient(to bottom, rgba(0,0,0,0.08), transparent); } /* Placeholder text */ .monolithos-gamma-preview-placeholder { font-family: var(--font-monolithos-mono); font-size: 16px; letter-spacing: 0.15em; white-space: nowrap; text-align: center; } .theme-dark .monolithos-gamma-preview-placeholder { color: #6C6C6C; } .theme-light .monolithos-gamma-preview-placeholder { color: #888888; } /* Gamma glow effect on text */ .monolithos-gamma-preview-placeholder .gamma-glow { text-shadow: 0 0 10px currentColor, 0 0 20px currentColor; } /* Legacy preview text (backward compat) */ .monolithos-gamma-preview-text { font-family: var(--font-monolithos-mono); font-size: 16px; letter-spacing: 0.15em; white-space: nowrap; } .theme-dark .monolithos-gamma-preview-text { color: #6C6C6C; } .theme-light .monolithos-gamma-preview-text { color: #888888; } /* iframe for Gamma embed */ .monolithos-gamma-iframe { width: 100%; height: 100%; border: none; display: none; border-radius: 6px; } .monolithos-gamma-preview-box.has-content .monolithos-gamma-iframe { display: block; } .monolithos-gamma-preview-box.has-content .monolithos-gamma-preview-placeholder, .monolithos-gamma-preview-box.has-content .monolithos-gamma-preview-text { display: none; } /* Legacy preview img (backward compat) */ .monolithos-gamma-preview-img { width: 100%; height: 100%; object-fit: cover; display: none; } .monolithos-gamma-preview-box.has-content .monolithos-gamma-preview-img { display: block; } /* Open in Gamma button */ .monolithos-gamma-open-btn { font-family: var(--font-monolithos-mono); font-size: 13px; letter-spacing: 0.1em; cursor: pointer; transition: all 150ms ease; opacity: 0; pointer-events: none; padding: 8px 16px; } .monolithos-gamma-open-btn.visible { opacity: 1; pointer-events: auto; } .theme-dark .monolithos-gamma-open-btn { color: #888888; } .theme-light .monolithos-gamma-open-btn { color: #666666; } .monolithos-gamma-open-btn:hover { color: var(--text-normal); } /* ═══════════════════════════════════════════════════════════════════════════ CONTROLS SECTION ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-gamma-controls { flex-shrink: 0; padding-bottom: 60px; } /* SLIDERS */ .monolithos-gamma-sliders { display: flex; flex-direction: column; gap: 12px; margin-bottom: 16px; } .monolithos-gamma-slider-row { display: flex; align-items: center; gap: 10px; } .monolithos-gamma-slider-label { font-family: var(--font-monolithos-mono); font-size: 11px; padding: 4px 10px; border-radius: 4px; min-width: 85px; text-align: center; white-space: nowrap; } .theme-dark .monolithos-gamma-slider-label { color: #6C6C6C; border: 1px solid rgba(255, 255, 255, 0.15); } .theme-light .monolithos-gamma-slider-label { color: #888888; border: 1px solid rgba(0, 0, 0, 0.12); } .monolithos-gamma-slider-track { flex: 1; height: 2px; border-radius: 1px; position: relative; cursor: pointer; } .theme-dark .monolithos-gamma-slider-track { background: rgba(255, 255, 255, 0.15); } .theme-light .monolithos-gamma-slider-track { background: rgba(0, 0, 0, 0.12); } .monolithos-gamma-slider-thumb { position: absolute; top: 50%; transform: translate(-50%, -50%); width: 12px; height: 12px; border-radius: 2px; cursor: grab; transition: transform 50ms ease; } .theme-dark .monolithos-gamma-slider-thumb { background: #FFFFFF; } .theme-light .monolithos-gamma-slider-thumb { background: #1A1A1A; } .monolithos-gamma-slider-thumb:active, .monolithos-gamma-slider-thumb.dragging { cursor: grabbing; transform: translate(-50%, -50%) scale(1.1); } /* Arrow decorations */ .monolithos-gamma-slider-track::before, .monolithos-gamma-slider-track::after { content: ''; position: absolute; top: 50%; transform: translateY(-50%); width: 0; height: 0; border-style: solid; } .monolithos-gamma-slider-track::before { left: -8px; border-width: 4px 6px 4px 0; } .monolithos-gamma-slider-track::after { right: -8px; border-width: 4px 0 4px 6px; } .theme-dark .monolithos-gamma-slider-track::before { border-color: transparent rgba(255,255,255,0.3) transparent transparent; } .theme-dark .monolithos-gamma-slider-track::after { border-color: transparent transparent transparent rgba(255,255,255,0.3); } .theme-light .monolithos-gamma-slider-track::before { border-color: transparent rgba(0,0,0,0.2) transparent transparent; } .theme-light .monolithos-gamma-slider-track::after { border-color: transparent transparent transparent rgba(0,0,0,0.2); } /* MODE BUTTONS */ .monolithos-gamma-modes { display: flex; flex-direction: column; gap: 8px; margin-bottom: 20px; } .monolithos-gamma-mode-btn { width: 100%; padding: 12px 16px; border-radius: 6px; background: transparent; font-family: var(--font-monolithos-mono); font-size: 12px; text-align: center; cursor: pointer; transition: all 150ms ease; } .theme-dark .monolithos-gamma-mode-btn { border: 1px solid rgba(255, 255, 255, 0.1); color: #6C6C6C; } .theme-light .monolithos-gamma-mode-btn { border: 1px solid rgba(0, 0, 0, 0.1); color: #888888; } .theme-dark .monolithos-gamma-mode-btn:hover { border-color: rgba(255, 255, 255, 0.2); } .theme-light .monolithos-gamma-mode-btn:hover { border-color: rgba(0, 0, 0, 0.2); } .theme-dark .monolithos-gamma-mode-btn.selected { color: #FFFFFF; border-color: rgba(255, 255, 255, 0.25); } .theme-light .monolithos-gamma-mode-btn.selected { color: #1A1A1A; border-color: rgba(0, 0, 0, 0.25); } /* FORGE BUTTON */ .monolithos-gamma-forge-wrapper { display: flex; justify-content: center; } .monolithos-gamma-forge-btn { font-family: var(--font-monolithos-mono); font-size: 14px; letter-spacing: 0.08em; padding: 14px 36px; border-radius: 4px; cursor: pointer; transition: all 150ms ease; position: relative; overflow: hidden; } .theme-dark .monolithos-gamma-forge-btn { background: rgba(255, 255, 255, 0.08); border: 1px solid rgba(255, 255, 255, 0.15); color: #888888; } .theme-light .monolithos-gamma-forge-btn { background: rgba(0, 0, 0, 0.05); border: 1px solid rgba(0, 0, 0, 0.12); color: #666666; } .theme-dark .monolithos-gamma-forge-btn:hover { background: rgba(255, 255, 255, 0.12); color: #E5E5E5; } .theme-light .monolithos-gamma-forge-btn:hover { background: rgba(0, 0, 0, 0.08); color: #1A1A1A; } .monolithos-gamma-forge-btn.loading { pointer-events: none; animation: monolithos-pulse-border 2s ease-in-out infinite; } .theme-dark .monolithos-gamma-forge-btn.loading { color: #6C6C6C; } .theme-light .monolithos-gamma-forge-btn.loading { color: #888888; } .monolithos-gamma-forge-btn.loading::after { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; animation: monolithos-shimmer 1.5s infinite; } .theme-dark .monolithos-gamma-forge-btn.loading::after { background: linear-gradient(90deg, transparent, rgba(255,255,255,0.08), transparent); } .theme-light .monolithos-gamma-forge-btn.loading::after { background: linear-gradient(90deg, transparent, rgba(0,0,0,0.05), transparent); } @keyframes monolithos-shimmer { 0% { left: -100%; } 100% { left: 100%; } } @keyframes monolithos-pulse-border { 0%, 100% { border-color: rgba(255, 255, 255, 0.1); } 50% { border-color: rgba(255, 255, 255, 0.35); } } .theme-light .monolithos-gamma-forge-btn.loading { animation-name: monolithos-pulse-border-light; } @keyframes monolithos-pulse-border-light { 0%, 100% { border-color: rgba(0, 0, 0, 0.1); } 50% { border-color: rgba(0, 0, 0, 0.3); } } /* ═══════════════════════════════════════════════════════════════════════════ BOTTOM SWITCH ═══════════════════════════════════════════════════════════════════════════ */ /* Container for larger touch target on mobile */ .monolithos-gamma-switch-container { position: absolute; bottom: 10px; right: 10px; width: 64px; height: 64px; display: flex; align-items: center; justify-content: center; cursor: pointer; -webkit-tap-highlight-color: transparent; } .monolithos-gamma-switch { width: 44px; height: 44px; cursor: pointer; opacity: 0.5; transition: opacity 150ms ease; user-select: none; -webkit-user-drag: none; pointer-events: auto; } .monolithos-gamma-switch:hover, .monolithos-gamma-switch-container:hover .monolithos-gamma-switch { opacity: 0.9; } /* ═══════════════════════════════════════════════════════════════════════════ HISTORY DROPDOWN ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-gamma-history-dropdown { position: absolute; top: 100px; right: 20px; border-radius: 6px; padding: 8px 0; min-width: 320px; display: none; z-index: 100; max-height: 250px; overflow-y: auto; } .monolithos-gamma-history-dropdown.show { display: block; } .theme-dark .monolithos-gamma-history-dropdown { background: #1a1a1a; border: 1px solid rgba(255, 255, 255, 0.1); } .theme-light .monolithos-gamma-history-dropdown { background: #FFFFFF; border: 1px solid rgba(0, 0, 0, 0.1); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); } .monolithos-gamma-history-item { display: flex; align-items: center; justify-content: space-between; padding: 10px 16px; font-size: 12px; cursor: pointer; transition: background 150ms ease; } .theme-dark .monolithos-gamma-history-item:hover { background: rgba(255, 255, 255, 0.05); } .theme-light .monolithos-gamma-history-item:hover { background: rgba(0, 0, 0, 0.03); } .monolithos-gamma-history-title { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-right: 12px; font-family: var(--font-monolithos-mono); } .theme-dark .monolithos-gamma-history-title { color: #E5E5E5; } .theme-light .monolithos-gamma-history-title { color: #1A1A1A; } .monolithos-gamma-history-meta { white-space: nowrap; font-family: var(--font-monolithos-mono); } .theme-dark .monolithos-gamma-history-meta { color: #6C6C6C; } .theme-light .monolithos-gamma-history-meta { color: #888888; } .monolithos-gamma-history-empty { padding: 16px; text-align: center; font-family: var(--font-monolithos-mono); font-size: 12px; } .theme-dark .monolithos-gamma-history-empty { color: #6C6C6C; } .theme-light .monolithos-gamma-history-empty { color: #888888; } /* ═══════════════════════════════════════════════════════════════════════════ RESPONSIVE ═══════════════════════════════════════════════════════════════════════════ */ @media (max-width: 360px) { .monolithos-gamma-container { padding: 16px; } .monolithos-gamma-header-logo { width: 64px; } .monolithos-gamma-preview-box { width: 65%; } .monolithos-gamma-slider-label { font-size: 10px; min-width: 70px; padding: 3px 6px; } .monolithos-gamma-mode-btn { font-size: 11px; padding: 10px 12px; } .monolithos-gamma-preview-text { font-size: 14px; } .monolithos-gamma-history-dropdown { min-width: 280px; right: 16px; } } /* ═══════════════════════════════════════════════════════════════════════════ ACCESSIBILITY ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-gamma-forge-btn:focus-visible, .monolithos-gamma-mode-btn:focus-visible, .monolithos-gamma-history-btn:focus-visible { outline: 2px solid var(--interactive-accent); outline-offset: 2px; } .monolithos-gamma-input:focus-visible { outline: none; } /* ═══════════════════════════════════════════════════════════════════════════ MONOLITHOS AUDIO BRIEF STYLES - Complete v2.0 ═══════════════════════════════════════════════════════════════════════════ Features: - 4 Protocol buttons (vertical stack) - 12 Languages dropdown - Draggable progress bar - Slide-up player animation - Download button ═══════════════════════════════════════════════════════════════════════════ */ /* ═══════════════════════════════════════════════════════════════════════════ CONTAINER ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-audio-container { width: 100%; height: 100%; display: flex; flex-direction: column; position: relative; overflow: hidden; } .theme-dark .monolithos-audio-container { background: #111111; } .theme-light .monolithos-audio-container { background: #E5E5E5; } .monolithos-audio-top-spacer { height: 20px; flex-shrink: 0; } /* ═══════════════════════════════════════════════════════════════════════════ HEADER ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-audio-header { display: flex; justify-content: space-between; align-items: flex-start; padding: 0 20px; flex-shrink: 0; } .monolithos-audio-header-logo { width: 64px; height: auto; cursor: pointer; opacity: 0.7; transition: opacity 150ms ease; user-select: none; -webkit-user-drag: none; } .monolithos-audio-header-logo:hover { opacity: 1; } .monolithos-audio-header-right { text-align: right; } .monolithos-audio-header-title { font-family: var(--font-monolithos-mono); font-size: 16px; font-weight: 400; letter-spacing: 0.18em; margin-bottom: 6px; } .theme-dark .monolithos-audio-header-title { color: #E5E5E5; } .theme-light .monolithos-audio-header-title { color: #1A1A1A; } .monolithos-audio-header-history { font-family: var(--font-monolithos-mono); font-size: 13px; letter-spacing: 0.1em; cursor: pointer; transition: color 150ms ease; } .theme-dark .monolithos-audio-header-history { color: #888888; } .theme-light .monolithos-audio-header-history { color: #666666; } .monolithos-audio-header-history:hover { color: var(--text-normal); } /* ═══════════════════════════════════════════════════════════════════════════ MAIN CONTENT AREA ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-audio-main { flex: 1; position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 0; } /* Controls Layer - overlays the visual */ .monolithos-audio-controls-layer { position: absolute; top: 15%; left: 20px; right: 20px; display: flex; justify-content: space-between; align-items: flex-start; z-index: 10; pointer-events: none; } .monolithos-audio-controls-layer > * { pointer-events: auto; } /* Left Controls - File Tags */ .monolithos-audio-left-controls { display: flex; flex-direction: column; gap: 6px; } .monolithos-audio-file-tags { display: flex; flex-direction: column; gap: 6px; } .monolithos-audio-file-tag { display: inline-flex; align-items: center; gap: 6px; padding: 6px 10px; border-radius: 4px; font-family: var(--font-monolithos-mono); font-size: 12px; cursor: default; max-width: 160px; } .theme-dark .monolithos-audio-file-tag { background: rgba(255, 255, 255, 0.08); color: #888888; } .theme-light .monolithos-audio-file-tag { background: rgba(0, 0, 0, 0.06); color: #666666; } .monolithos-audio-file-tag-icon { flex-shrink: 0; opacity: 0.7; } .monolithos-audio-file-tag-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .monolithos-audio-file-tag-remove { opacity: 0.5; cursor: pointer; margin-left: auto; padding-left: 4px; } .monolithos-audio-file-tag-remove:hover { opacity: 1; } .monolithos-audio-add-file { font-family: var(--font-monolithos-mono); font-size: 11px; cursor: pointer; opacity: 0.6; transition: opacity 150ms ease; padding: 4px 0; } .theme-dark .monolithos-audio-add-file { color: #6C6C6C; } .theme-light .monolithos-audio-add-file { color: #888888; } .monolithos-audio-add-file:hover { opacity: 1; } /* ═══════════════════════════════════════════════════════════════════════════ AUDIO BRIEF - Inline File Search Panel ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-audio-file-search-panel { display: none; flex-direction: column; width: 280px; max-height: 320px; border-radius: 8px; overflow: hidden; margin-top: 8px; z-index: 100; } .monolithos-audio-file-search-panel.active { display: flex; } .theme-dark .monolithos-audio-file-search-panel { background: #1a1a1a; border: 1px solid rgba(255, 255, 255, 0.1); box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5); } .theme-light .monolithos-audio-file-search-panel { background: #ffffff; border: 1px solid rgba(0, 0, 0, 0.1); box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); } /* Reuse the shared file search item styles from Chat */ .monolithos-audio-file-search-panel .monolithos-file-search-input { width: 100%; padding: 10px 14px; border: none; font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); font-size: 12px; background: transparent; outline: none; } .monolithos-audio-file-search-panel .monolithos-file-search-results { overflow-y: auto; flex: 1; min-height: 100px; max-height: 260px; } .monolithos-audio-file-search-panel .monolithos-file-search-item { padding: 8px 14px; } /* Right Controls - Language & Protocol */ .monolithos-audio-right-controls { display: flex; flex-direction: column; align-items: flex-end; gap: 8px; } /* Language Row */ .monolithos-audio-lang-row { display: flex; align-items: center; gap: 8px; cursor: pointer; padding: 4px 0; } .monolithos-audio-lang-label { font-family: var(--font-monolithos-mono); font-size: 13px; } .theme-dark .monolithos-audio-lang-label { color: #888888; } .theme-light .monolithos-audio-lang-label { color: #666666; } .monolithos-audio-lang-arrow { font-family: var(--font-monolithos-mono); font-size: 12px; transition: transform 150ms ease; } .theme-dark .monolithos-audio-lang-arrow { color: #888888; } .theme-light .monolithos-audio-lang-arrow { color: #666666; } .monolithos-audio-lang-row:hover .monolithos-audio-lang-label, .monolithos-audio-lang-row:hover .monolithos-audio-lang-arrow { color: var(--text-normal); } /* Protocol Label */ .monolithos-audio-protocol-label { font-family: var(--font-monolithos-mono); font-size: 13px; margin-top: 8px; } .theme-dark .monolithos-audio-protocol-label { color: #888888; } .theme-light .monolithos-audio-protocol-label { color: #666666; } /* Protocol Buttons - 4 stacked vertically */ .monolithos-audio-protocol-btns { display: flex; flex-direction: column; gap: 6px; align-items: flex-end; } .monolithos-audio-protocol-btn { font-family: var(--font-monolithos-mono); font-size: 12px; padding: 8px 16px; border-radius: 4px; cursor: pointer; transition: all 150ms ease; min-width: 110px; text-align: center; } .theme-dark .monolithos-audio-protocol-btn { background: rgba(255, 255, 255, 0.06); color: #6C6C6C; border: 1px solid rgba(255, 255, 255, 0.08); } .theme-light .monolithos-audio-protocol-btn { background: rgba(0, 0, 0, 0.04); color: #888888; border: 1px solid rgba(0, 0, 0, 0.08); } .theme-dark .monolithos-audio-protocol-btn:hover { background: rgba(255, 255, 255, 0.1); color: #888888; } .theme-light .monolithos-audio-protocol-btn:hover { background: rgba(0, 0, 0, 0.08); color: #666666; } .theme-dark .monolithos-audio-protocol-btn.selected { background: rgba(255, 255, 255, 0.12); color: #E5E5E5; border-color: rgba(255, 255, 255, 0.2); } .theme-light .monolithos-audio-protocol-btn.selected { background: rgba(0, 0, 0, 0.1); color: #1A1A1A; border-color: rgba(0, 0, 0, 0.2); } /* Visual Center - Tower Image */ .monolithos-audio-visual-center { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; } .monolithos-audio-visual-img { max-width: 60%; max-height: 45vh; object-fit: contain; user-select: none; -webkit-user-drag: none; } /* ═══════════════════════════════════════════════════════════════════════════ BOTTOM SECTION ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-audio-bottom { display: flex; flex-direction: column; align-items: center; gap: 16px; padding: 20px; padding-bottom: 70px; flex-shrink: 0; } /* Input Wrapper with Cursor Placeholder */ .monolithos-audio-input-wrapper { position: relative; width: 100%; max-width: 400px; } .monolithos-audio-input { font-family: var(--font-monolithos-serif); font-size: 15px; background: transparent; border: none; outline: none; width: 100%; resize: none; text-align: center; min-height: 24px; } .theme-dark .monolithos-audio-input { color: #888888; } .theme-light .monolithos-audio-input { color: #666666; } /* Native placeholder styling */ .monolithos-audio-input::placeholder { font-family: var(--font-monolithos-serif); font-size: 15px; text-align: center; } .theme-dark .monolithos-audio-input::placeholder { color: #6C6C6C; } .theme-light .monolithos-audio-input::placeholder { color: #888888; } /* Legacy custom placeholder (kept for backwards compatibility) */ .monolithos-audio-input-placeholder { position: absolute; top: 0; left: 0; right: 0; font-family: var(--font-monolithos-serif); font-size: 15px; text-align: center; pointer-events: none; } .theme-dark .monolithos-audio-input-placeholder { color: #6C6C6C; } .theme-light .monolithos-audio-input-placeholder { color: #888888; } .monolithos-audio-cursor { animation: audio-cursor-blink 1s step-end infinite; font-weight: 300; } @keyframes audio-cursor-blink { 0%, 50% { opacity: 1; } 51%, 100% { opacity: 0; } } /* Hide placeholder when focused or has content */ .monolithos-audio-input:focus ~ .monolithos-audio-input-placeholder, .monolithos-audio-input-wrapper.has-content .monolithos-audio-input-placeholder, .monolithos-audio-input-wrapper.focused .monolithos-audio-input-placeholder { display: none; } /* Transmit Button */ .monolithos-audio-transmit-btn { font-family: var(--font-monolithos-mono); font-size: 14px; letter-spacing: 0.08em; padding: 14px 36px; border-radius: 4px; cursor: pointer; transition: all 150ms ease; position: relative; overflow: hidden; } .theme-dark .monolithos-audio-transmit-btn { background: rgba(255, 255, 255, 0.08); border: 1px solid rgba(255, 255, 255, 0.15); color: #888888; } .theme-light .monolithos-audio-transmit-btn { background: rgba(0, 0, 0, 0.05); border: 1px solid rgba(0, 0, 0, 0.12); color: #666666; } .theme-dark .monolithos-audio-transmit-btn:hover { background: rgba(255, 255, 255, 0.12); color: #E5E5E5; } .theme-light .monolithos-audio-transmit-btn:hover { background: rgba(0, 0, 0, 0.08); color: #1A1A1A; } /* Loading State */ .monolithos-audio-transmit-btn.loading { pointer-events: none; animation: audio-pulse-border 2s ease-in-out infinite; } .theme-dark .monolithos-audio-transmit-btn.loading { color: #6C6C6C; } .theme-light .monolithos-audio-transmit-btn.loading { color: #888888; } .monolithos-audio-transmit-btn.loading::before { content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; animation: audio-shimmer 1.5s infinite; } .theme-dark .monolithos-audio-transmit-btn.loading::before { background: linear-gradient(90deg, transparent, rgba(255,255,255,0.1), transparent); } .theme-light .monolithos-audio-transmit-btn.loading::before { background: linear-gradient(90deg, transparent, rgba(0,0,0,0.05), transparent); } @keyframes audio-shimmer { 0% { left: -100%; } 100% { left: 100%; } } @keyframes audio-pulse-border { 0%, 100% { border-color: rgba(255, 255, 255, 0.1); } 50% { border-color: rgba(255, 255, 255, 0.35); } } .theme-light .monolithos-audio-transmit-btn.loading { animation-name: audio-pulse-border-light; } @keyframes audio-pulse-border-light { 0%, 100% { border-color: rgba(0, 0, 0, 0.1); } 50% { border-color: rgba(0, 0, 0, 0.3); } } .monolithos-audio-transmit-btn.hidden { display: none; } /* ═══════════════════════════════════════════════════════════════════════════ AUDIO PLAYER - with Slide Up Animation ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-audio-player { width: 100%; max-width: 320px; display: none; flex-direction: column; gap: 10px; opacity: 0; transform: translateY(30px); } .monolithos-audio-player.show { display: flex; animation: audio-player-slide-up 0.4s ease-out forwards; } @keyframes audio-player-slide-up { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } .monolithos-audio-player-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .monolithos-audio-player-time { font-family: var(--font-monolithos-mono); font-size: 12px; min-width: 36px; } .theme-dark .monolithos-audio-player-time { color: #888888; } .theme-light .monolithos-audio-player-time { color: #666666; } .monolithos-audio-player-play { font-size: 16px; cursor: pointer; padding: 4px 12px; transition: opacity 150ms ease; user-select: none; /* Force text color on emoji characters */ font-family: var(--font-monolithos-mono); -webkit-text-fill-color: currentColor; } .theme-dark .monolithos-audio-player-play { color: #E5E5E5; } .theme-light .monolithos-audio-player-play { color: #1A1A1A; } .monolithos-audio-player-play:hover { opacity: 0.7; } /* Progress Bar - Draggable */ .monolithos-audio-player-progress { width: 100%; height: 4px; border-radius: 2px; position: relative; cursor: pointer; } .theme-dark .monolithos-audio-player-progress { background: rgba(255, 255, 255, 0.15); } .theme-light .monolithos-audio-player-progress { background: rgba(0, 0, 0, 0.12); } .monolithos-audio-player-progress-fill { width: 0%; height: 100%; border-radius: 2px; transition: width 0.1s linear; } .theme-dark .monolithos-audio-player-progress-fill { background: rgba(255, 255, 255, 0.6); } .theme-light .monolithos-audio-player-progress-fill { background: rgba(0, 0, 0, 0.5); } .monolithos-audio-player-progress-thumb { position: absolute; top: 50%; left: 0%; transform: translate(-50%, -50%); width: 12px; height: 12px; border-radius: 50%; cursor: grab; transition: transform 50ms ease, left 0.1s linear; } .theme-dark .monolithos-audio-player-progress-thumb { background: #FFFFFF; } .theme-light .monolithos-audio-player-progress-thumb { background: #1A1A1A; } .monolithos-audio-player-progress-thumb:hover { transform: translate(-50%, -50%) scale(1.2); } .monolithos-audio-player-progress-thumb:active { cursor: grabbing; transform: translate(-50%, -50%) scale(1.3); } .monolithos-audio-player-title { font-family: var(--font-monolithos-mono); font-size: 11px; text-align: center; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .theme-dark .monolithos-audio-player-title { color: #6C6C6C; } .theme-light .monolithos-audio-player-title { color: #888888; } /* Download Button - Text Style (matching HISTORY) */ .monolithos-audio-player-download { font-family: var(--font-monolithos-mono); font-size: 11px; letter-spacing: 0.05em; cursor: pointer; padding: 6px 12px; text-align: center; opacity: 0.6; transition: opacity 150ms ease; } .theme-dark .monolithos-audio-player-download { color: #888888; } .theme-light .monolithos-audio-player-download { color: #666666; } .monolithos-audio-player-download:hover { opacity: 1; } /* ═══════════════════════════════════════════════════════════════════════════ BOTTOM SWITCH ICON ═══════════════════════════════════════════════════════════════════════════ */ /* Container for larger touch target on mobile */ .monolithos-audio-bottom-switch-container { position: absolute; bottom: 10px; right: 10px; width: 64px; height: 64px; display: flex; align-items: center; justify-content: center; cursor: pointer; -webkit-tap-highlight-color: transparent; } .monolithos-audio-bottom-switch { width: 44px; height: 44px; cursor: pointer; opacity: 0.5; transition: opacity 150ms ease; user-select: none; -webkit-user-drag: none; pointer-events: auto; } .monolithos-audio-bottom-switch:hover, .monolithos-audio-bottom-switch-container:hover .monolithos-audio-bottom-switch { opacity: 0.9; } /* ═══════════════════════════════════════════════════════════════════════════ LANGUAGE DROPDOWN - 12 Languages ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-audio-language-dropdown { position: absolute; top: 120px; right: 20px; min-width: 200px; padding: 8px 0; border-radius: 6px; display: none; z-index: 100; max-height: 320px; overflow-y: auto; } .monolithos-audio-language-dropdown.show { display: block; } .theme-dark .monolithos-audio-language-dropdown { background: #1a1a1a; border: 1px solid rgba(255, 255, 255, 0.1); } .theme-light .monolithos-audio-language-dropdown { background: #f5f5f5; border: 1px solid rgba(0, 0, 0, 0.1); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); } .monolithos-audio-language-item { padding: 10px 16px; font-family: var(--font-monolithos-mono); font-size: 12px; cursor: pointer; transition: background 150ms ease; } .theme-dark .monolithos-audio-language-item { color: #888888; } .theme-light .monolithos-audio-language-item { color: #666666; } .theme-dark .monolithos-audio-language-item:hover { background: rgba(255, 255, 255, 0.05); } .theme-light .monolithos-audio-language-item:hover { background: rgba(0, 0, 0, 0.05); } .theme-dark .monolithos-audio-language-item.selected { color: #E5E5E5; background: rgba(255, 255, 255, 0.08); } .theme-light .monolithos-audio-language-item.selected { color: #1A1A1A; background: rgba(0, 0, 0, 0.08); } /* ═══════════════════════════════════════════════════════════════════════════ HISTORY DROPDOWN ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-audio-history-dropdown { position: absolute; top: 80px; right: 20px; min-width: 320px; padding: 8px 0; border-radius: 6px; display: none; z-index: 100; max-height: 300px; overflow-y: auto; } .monolithos-audio-history-dropdown.show { display: block; } .theme-dark .monolithos-audio-history-dropdown { background: #1a1a1a; border: 1px solid rgba(255, 255, 255, 0.1); } .theme-light .monolithos-audio-history-dropdown { background: #f5f5f5; border: 1px solid rgba(0, 0, 0, 0.1); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); } .monolithos-audio-history-item { display: flex; align-items: center; gap: 10px; padding: 12px 16px; font-family: var(--font-monolithos-mono); font-size: 12px; cursor: pointer; transition: background 150ms ease; } .theme-dark .monolithos-audio-history-item:hover { background: rgba(255, 255, 255, 0.05); } .theme-light .monolithos-audio-history-item:hover { background: rgba(0, 0, 0, 0.05); } .monolithos-audio-history-icon { flex-shrink: 0; } .theme-dark .monolithos-audio-history-icon { color: #6C6C6C; } .theme-light .monolithos-audio-history-icon { color: #888888; } .monolithos-audio-history-title { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .theme-dark .monolithos-audio-history-title { color: #E5E5E5; } .theme-light .monolithos-audio-history-title { color: #1A1A1A; } .monolithos-audio-history-meta { flex-shrink: 0; white-space: nowrap; } .theme-dark .monolithos-audio-history-meta { color: #6C6C6C; } .theme-light .monolithos-audio-history-meta { color: #888888; } .monolithos-audio-history-empty { padding: 20px 16px; text-align: center; font-family: var(--font-monolithos-mono); font-size: 12px; } .theme-dark .monolithos-audio-history-empty { color: #6C6C6C; } .theme-light .monolithos-audio-history-empty { color: #888888; } /* ═══════════════════════════════════════════════════════════════════════════ RESPONSIVE ═══════════════════════════════════════════════════════════════════════════ */ @media (max-width: 400px) { .monolithos-audio-container { padding: 0; } .monolithos-audio-controls-layer { top: 12%; left: 12px; right: 12px; } .monolithos-audio-visual-img { max-width: 55%; max-height: 40vh; } .monolithos-audio-header-title { font-size: 14px; } .monolithos-audio-protocol-btn { font-size: 11px; padding: 6px 12px; min-width: 90px; } .monolithos-audio-file-tag { font-size: 11px; padding: 5px 8px; max-width: 120px; } .monolithos-audio-history-dropdown, .monolithos-audio-language-dropdown { min-width: 260px; right: 12px; } .monolithos-audio-bottom { padding: 16px; padding-bottom: 60px; } .monolithos-audio-player { max-width: 280px; } } /* ═══════════════════════════════════════════════════════════════════════════ FOCUS STATES (Accessibility) ═══════════════════════════════════════════════════════════════════════════ */ .monolithos-audio-header-logo:focus-visible, .monolithos-audio-header-history:focus-visible, .monolithos-audio-transmit-btn:focus-visible, .monolithos-audio-protocol-btn:focus-visible, .monolithos-audio-bottom-switch:focus-visible, .monolithos-audio-player-play:focus-visible { outline: 2px solid rgba(255, 255, 255, 0.3); outline-offset: 2px; border-radius: 4px; } .theme-light .monolithos-audio-header-logo:focus-visible, .theme-light .monolithos-audio-header-history:focus-visible, .theme-light .monolithos-audio-transmit-btn:focus-visible, .theme-light .monolithos-audio-protocol-btn:focus-visible, .theme-light .monolithos-audio-bottom-switch:focus-visible, .theme-light .monolithos-audio-player-play:focus-visible { outline-color: rgba(0, 0, 0, 0.3); } .monolithos-audio-input:focus-visible { outline: none; } /* ═══════════════════════════════════════════════════════════════════════════ SYNAPSE — Floating AI Panel v1.2.4 ═══════════════════════════════════════════════════════════════════════════ */ :root { --synapse-z-panel: 10000; --synapse-z-submenu: 10001; --synapse-z-toolbar: 9999; } .theme-dark { --synapse-bg-panel: #131313; --synapse-bg-surface: #1A1A1A; --synapse-bg-hover: #252525; --synapse-bg-toolbar: #1A1A1A; --synapse-text-primary: #E5E5E5; --synapse-text-secondary: #808080; --synapse-text-muted: #4A4A4A; --synapse-border: #2A2A2A; --synapse-border-panel: rgba(255, 255, 255, 0.08); --synapse-shadow: 0 4px 24px rgba(0, 0, 0, 0.5); } .theme-light { --synapse-bg-panel: #FFFFFF; --synapse-bg-surface: #F5F5F5; --synapse-bg-hover: #E8E8E8; --synapse-bg-toolbar: #FFFFFF; --synapse-text-primary: #1A1A1A; --synapse-text-secondary: #555555; --synapse-text-muted: #888888; --synapse-border: #CCCCCC; --synapse-border-panel: rgba(0, 0, 0, 0.15); --synapse-shadow: 0 2px 8px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.08); } @keyframes synapseFadeIn { from { opacity: 0; transform: translate(-50%, -100%) scale(0.96); } to { opacity: 1; transform: translate(-50%, -100%) scale(1); } } @keyframes crystalPulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } @keyframes crystalSpin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .synapse-container { position: absolute; z-index: var(--synapse-z-panel); animation: synapseFadeIn 150ms ease-out; } .synapse-panel { background: var(--synapse-bg-panel); border: 1px solid var(--synapse-border-panel); border-radius: 8px; backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); box-shadow: var(--synapse-shadow); font-family: 'Menlo', 'Monaco', monospace; font-size: 14px; color: var(--synapse-text-primary); } /* Crystal Icon */ .synapse-crystal { width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; cursor: pointer; border-radius: 4px; } .synapse-crystal:hover { background: var(--synapse-bg-hover); } .synapse-crystal svg { width: 20px; height: 20px; animation: crystalPulse 2s ease-in-out infinite; } .synapse-crystal-small { width: 28px; height: 28px; } .synapse-crystal-small svg { width: 16px; height: 16px; } .synapse-crystal-spinning svg { animation: crystalSpin 1.5s linear infinite; } /* Mini Bar */ .synapse-minibar { display: flex; align-items: center; height: 40px; padding: 0 4px; gap: 2px; } .synapse-btn { font-family: inherit; font-size: 13px; color: var(--synapse-text-primary); background: transparent; border: none; padding: 8px 12px; cursor: pointer; border-radius: 4px; white-space: nowrap; } .synapse-btn:hover { background: var(--synapse-bg-hover); } .synapse-arrow { font-size: 10px; opacity: 0.6; margin-left: 4px; } .synapse-divider { width: 1px; height: 20px; background: var(--synapse-border); margin: 0 2px; } /* Mobile Keyboard Toolbar */ .synapse-keyboard-toolbar { position: fixed; left: 0; right: 0; bottom: 50px; z-index: 9999; background: var(--synapse-bg-toolbar); border-top: 1px solid var(--synapse-border-panel); box-shadow: 0 -2px 12px rgba(0, 0, 0, 0.15); -webkit-backdrop-filter: blur(20px); backdrop-filter: blur(20px); } .synapse-toolbar-content { display: flex; align-items: center; height: 44px; padding: 0 8px; gap: 2px; overflow-x: auto; -webkit-overflow-scrolling: touch; } .synapse-toolbar-btn { font-family: 'Menlo', monospace; font-size: 14px; color: var(--synapse-text-primary); background: transparent; border: none; padding: 8px 14px; cursor: pointer; border-radius: 4px; white-space: nowrap; -webkit-tap-highlight-color: transparent; } .synapse-toolbar-btn:active { background: var(--synapse-bg-hover); } .synapse-toolbar-submenu { position: fixed; background: var(--synapse-bg-panel); border: 1px solid var(--synapse-border-panel); border-radius: 8px; box-shadow: var(--synapse-shadow); padding: 8px; min-width: 120px; max-height: 280px; overflow-y: auto; z-index: 10001; } .synapse-toolbar-submenu-item { font-size: 14px; color: var(--synapse-text-primary); padding: 10px 12px; border-radius: 4px; } .synapse-toolbar-submenu-item:active { background: var(--synapse-bg-hover); } /* Expanded Menu */ .synapse-expanded { width: 280px; padding: 16px; } .synapse-input-row { display: flex; align-items: center; gap: 8px; background: var(--synapse-bg-surface); border-radius: 6px; padding: 8px 12px; margin-bottom: 16px; border: 1px solid var(--synapse-border); } .synapse-input { flex: 1; background: transparent; border: none; outline: none; font-family: 'Georgia', serif; font-size: 15px; font-style: italic; color: var(--synapse-text-primary); } .synapse-input::placeholder { color: var(--synapse-text-secondary); } .synapse-category { margin-bottom: 12px; } .synapse-category-label { font-size: 10px; letter-spacing: 0.12em; color: var(--synapse-text-muted); text-transform: uppercase; padding: 4px 0; margin-bottom: 4px; } .synapse-menu-item { font-size: 14px; color: var(--synapse-text-primary); padding: 8px 12px; margin: 0 -12px; cursor: pointer; border-radius: 4px; display: flex; align-items: center; justify-content: space-between; } .synapse-menu-item:hover { background: var(--synapse-bg-hover); } /* Submenu */ .synapse-submenu { position: absolute; top: 0; left: 100%; margin-left: 4px; background: var(--synapse-bg-panel); border: 1px solid var(--synapse-border-panel); border-radius: 6px; box-shadow: var(--synapse-shadow); padding: 8px; min-width: 120px; max-height: 200px; overflow-y: auto; z-index: var(--synapse-z-submenu); } .synapse-submenu-expanded { top: 100%; left: 0; margin-left: 0; margin-top: 4px; } /* Mobile fixed submenu */ .synapse-submenu-mobile-fixed { position: fixed; background: var(--synapse-bg-panel); border: 1px solid var(--synapse-border-panel); border-radius: 8px; box-shadow: var(--synapse-shadow); padding: 8px; min-width: 120px; max-height: 280px; overflow-y: auto; z-index: 10002; } .synapse-submenu-item { font-size: 13px; color: var(--synapse-text-primary); padding: 8px 12px; cursor: pointer; border-radius: 4px; } .synapse-submenu-item:hover { background: var(--synapse-bg-hover); } /* Forging State */ .synapse-forging { display: flex; align-items: center; justify-content: center; gap: 12px; padding: 16px 24px; } .synapse-forging-text { font-size: 14px; color: var(--synapse-text-secondary); animation: crystalPulse 2s ease-in-out infinite; } /* Result State */ .synapse-result { width: 320px; max-width: 90vw; padding: 16px; } .synapse-result-content { font-size: 14px; line-height: 1.6; color: var(--synapse-text-primary); background: var(--synapse-bg-surface); padding: 12px; border-radius: 6px; border: 1px solid var(--synapse-border); max-height: 300px; overflow-y: auto; white-space: pre-wrap; word-break: break-word; } .synapse-action-bar { display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap; } .synapse-action-btn { font-family: inherit; font-size: 12px; color: var(--synapse-text-primary); background: var(--synapse-bg-surface); border: 1px solid var(--synapse-border); padding: 8px 12px; cursor: pointer; border-radius: 4px; } .synapse-action-btn:hover { background: var(--synapse-bg-hover); } /* Error State */ .synapse-error { width: 240px; padding: 16px; text-align: center; } .synapse-error-message { font-size: 13px; color: var(--synapse-text-secondary); margin-bottom: 16px; } .synapse-error-btn { font-family: inherit; font-size: 12px; color: var(--synapse-text-primary); background: transparent; border: none; padding: 8px 12px; cursor: pointer; } .synapse-error-btn:hover { text-decoration: underline; } /* Typewriter cursor */ @keyframes synapseBlink { 0%, 100% { opacity: 1; } 50% { opacity: 0; } } .synapse-typewriter-cursor { animation: synapseBlink 0.6s step-end infinite; color: var(--synapse-text-secondary); font-weight: 300; } /* Mobile */ @media (max-width: 480px) { .synapse-expanded, .synapse-result { width: calc(100vw - 32px); } } /* ═══════════════════════════════════════════════════════════════════════════ PROMPT SELECTOR — Settings Panel ═══════════════════════════════════════════════════════════════════════════ */ .monolith-prompt-selector { margin-bottom: 16px; } .monolith-prompt-selector__row { display: flex; gap: 8px; align-items: center; margin-top: 6px; } .monolith-prompt-selector__select { flex: 1; } .monolith-prompt-selector__add-btn { font-family: var(--font-monolithos-mono); font-size: 16px; font-weight: 700; width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; background: transparent; border: 1px solid var(--settings-border, rgba(255,255,255,0.08)); color: var(--settings-text-dim, #666); cursor: pointer; transition: all 150ms ease; flex-shrink: 0; } .monolith-prompt-selector__add-btn:hover { border-color: var(--settings-text, #e5e5e5); color: var(--settings-text, #e5e5e5); background: rgba(255, 255, 255, 0.03); } /* Preview header with edit link */ .monolith-prompt-preview__header { display: flex; justify-content: space-between; align-items: center; } .monolith-prompt-preview__edit-link { font-family: var(--font-monolithos-mono); font-size: 10px; letter-spacing: 0.05em; color: var(--settings-text-dim, #666); cursor: pointer; transition: color 150ms ease; opacity: 0.6; } .monolith-prompt-preview__edit-link:hover { color: var(--settings-text, #e5e5e5); opacity: 1; } /* Delete prompt button */ .monolith-prompt-delete-btn { font-family: var(--font-monolithos-mono); font-size: 10px; letter-spacing: 0.05em; color: #ff4444; background: transparent; border: none; padding: 8px 0; cursor: pointer; opacity: 0.5; transition: opacity 150ms ease; } .monolith-prompt-delete-btn:hover { opacity: 1; } /* Add Prompt Modal */ .monolith-add-prompt-modal { padding: 20px; max-width: 460px; } .monolith-add-prompt-modal__title { font-family: var(--font-monolithos-mono); font-size: 14px; font-weight: 700; letter-spacing: 0.15em; text-transform: uppercase; margin: 0 0 8px 0; } .monolith-add-prompt-modal__hint { font-size: 11px; color: var(--text-muted); margin-bottom: 20px; line-height: 1.5; } .monolith-add-prompt-modal__error { font-size: 12px; color: #ff4444; min-height: 18px; margin: 8px 0; } .monolith-add-prompt-modal__buttons { display: flex; gap: 10px; justify-content: flex-end; margin-top: 16px; } .monolith-btn-primary { font-family: var(--font-monolithos-mono); font-size: 11px; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: #000; background: var(--settings-text, #e5e5e5); border: none; padding: 10px 20px; cursor: pointer; transition: all 150ms ease; outline: none; } .monolith-btn-primary:hover { background: #fff; } .monolith-btn-primary:disabled { opacity: 0.5; cursor: not-allowed; } /* Light mode adjustments */ .theme-light .monolith-prompt-selector__add-btn { border-color: rgba(0, 0, 0, 0.12); color: #888; } .theme-light .monolith-prompt-selector__add-btn:hover { border-color: #333; color: #333; background: rgba(0, 0, 0, 0.03); } .theme-light .monolith-prompt-preview__edit-link { color: #888; } .theme-light .monolith-prompt-preview__edit-link:hover { color: #333; } .theme-light .monolith-btn-primary { color: #fff; background: #333; } .theme-light .monolith-btn-primary:hover { background: #111; } /* ═══════════════════════════════════════════════════════════════════════════ SOURCE: Mobile Immersion v6 隐藏移动端底部状态栏 ═══════════════════════════════════════════════════════════════════════════ */ /* 只隐藏右侧抽屉的底部栏,保留左侧的(切换库 + 设置按钮) */ .workspace-drawer.mod-right .workspace-drawer-header { display: none !important; height: 0 !important; max-height: 0 !important; min-height: 0 !important; padding: 0 !important; margin: 0 !important; visibility: hidden !important; overflow: hidden !important; } /* 让内容区撑满 */ .workspace-drawer.mod-right .workspace-drawer-inner { padding-bottom: env(safe-area-inset-bottom) !important; } .workspace-drawer.mod-right .workspace-leaf-content { height: 100% !important; } /* ============================================ MMC Phase 2: Night Watch + Pending Review ============================================ */ .monolithos-nightwatch-section { margin-top: 24px; padding: 16px; border: 1px solid var(--background-modifier-border); border-radius: 8px; background: var(--background-secondary); } .monolithos-nw-header { font-family: 'JetBrains Mono', 'Menlo', monospace; font-size: 13px; font-weight: 600; letter-spacing: 0.05em; color: var(--text-normal); margin-bottom: 12px; } .monolithos-nw-status { font-family: 'JetBrains Mono', 'Menlo', monospace; font-size: 11px; color: var(--text-muted); line-height: 1.6; margin-bottom: 12px; } .monolithos-nw-status .nw-status-running { color: #f0a500; } .monolithos-nw-status .nw-status-idle { color: var(--text-muted); } .monolithos-nw-folders { margin-bottom: 12px; } .monolithos-nw-folders-label { font-family: 'JetBrains Mono', 'Menlo', monospace; font-size: 11px; color: var(--text-muted); margin-bottom: 6px; } .monolithos-nw-folder-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 8px; } .monolithos-nw-folder-tag { display: inline-flex; align-items: center; gap: 4px; padding: 3px 8px; background: var(--background-modifier-border); border-radius: 4px; font-family: 'JetBrains Mono', 'Menlo', monospace; font-size: 11px; color: var(--text-muted); } .monolithos-nw-folder-tag .remove-tag { cursor: pointer; opacity: 0.5; font-size: 10px; } .monolithos-nw-folder-tag .remove-tag:hover { opacity: 1; color: #e55; } .monolithos-nw-add-folder-btn { font-family: 'JetBrains Mono', 'Menlo', monospace; font-size: 11px; padding: 4px 10px; cursor: pointer; background: transparent; border: 1px dashed var(--background-modifier-border); border-radius: 4px; color: var(--text-muted); } .monolithos-nw-add-folder-btn:hover { border-color: var(--text-normal); color: var(--text-normal); } .monolithos-nw-schedule { display: flex; align-items: center; gap: 12px; margin-bottom: 16px; font-family: 'JetBrains Mono', 'Menlo', monospace; font-size: 11px; color: var(--text-muted); } .monolithos-nw-schedule input[type="time"] { font-family: 'JetBrains Mono', 'Menlo', monospace; font-size: 11px; padding: 3px 6px; background: var(--background-primary); border: 1px solid var(--background-modifier-border); border-radius: 4px; color: var(--text-normal); } .monolithos-nw-auto-toggle { font-family: 'JetBrains Mono', 'Menlo', monospace; font-size: 11px; padding: 3px 10px; background: var(--background-primary); border: 1px solid var(--background-modifier-border); border-radius: 4px; color: var(--text-muted); cursor: pointer; } .monolithos-nw-auto-toggle.nw-toggle-on { color: #00c853; border-color: #00c853; } .monolithos-nw-run-btn { width: 100%; padding: 10px; font-family: 'JetBrains Mono', 'Menlo', monospace; font-size: 12px; font-weight: 600; letter-spacing: 0.05em; background: var(--background-primary); border: 1px solid var(--background-modifier-border); border-radius: 6px; color: var(--text-normal); cursor: pointer; transition: all 0.2s ease; } .monolithos-nw-run-btn:hover { background: var(--background-modifier-border); } .monolithos-nw-run-btn:disabled { opacity: 0.4; cursor: not-allowed; } .monolithos-pending-section { margin-top: 16px; padding: 16px; border: 1px solid var(--background-modifier-border); border-radius: 8px; background: var(--background-secondary); } .monolithos-pr-header { font-family: 'JetBrains Mono', 'Menlo', monospace; font-size: 13px; font-weight: 600; letter-spacing: 0.05em; color: var(--text-normal); margin-bottom: 12px; } .monolithos-pr-count { color: var(--text-muted); font-weight: 400; } .monolithos-pr-list { display: flex; flex-direction: column; gap: 8px; max-height: 400px; overflow-y: auto; } .monolithos-pr-item { padding: 10px 12px; background: var(--background-primary); border-radius: 6px; border: 1px solid var(--background-modifier-border); } .monolithos-pr-name { font-family: 'JetBrains Mono', 'Menlo', monospace; font-size: 12px; color: var(--text-normal); margin-bottom: 4px; } .monolithos-pr-name a { color: var(--text-normal); text-decoration: none; cursor: pointer; } .monolithos-pr-name a:hover { text-decoration: underline; } .monolithos-pr-summary { font-size: 11px; color: var(--text-muted); font-style: italic; margin-bottom: 8px; line-height: 1.4; } .monolithos-pr-actions { display: flex; gap: 8px; justify-content: flex-end; } .monolithos-pr-btn { width: 32px; height: 28px; border-radius: 4px; border: 1px solid var(--background-modifier-border); background: transparent; cursor: pointer; font-size: 14px; display: flex; align-items: center; justify-content: center; transition: all 0.15s ease; } .monolithos-pr-approve:hover { background: rgba(0, 200, 83, 0.15); border-color: #00c853; color: #00c853; } .monolithos-pr-reject:hover { background: rgba(255, 82, 82, 0.15); border-color: #ff5252; color: #ff5252; } .monolithos-pr-empty { font-family: 'JetBrains Mono', 'Menlo', monospace; font-size: 11px; color: var(--text-faint); text-align: center; padding: 16px; } /* Night Watch Inline Panel (expand/collapse) */ .monolithos-nw-panel { border-top: 1px solid rgba(240, 165, 0, 0.15); margin-top: 8px; padding-top: 8px; } .monolithos-nw-panel .monolithos-nightwatch-section { margin-top: 0; border: none; padding: 0; background: transparent; } .monolithos-nw-panel .monolithos-pending-section { border: none; padding: 0; background: transparent; } /* Core panel: Pending badge */ .monolithos-pending-badge { font-family: 'JetBrains Mono', 'Menlo', monospace; font-size: 11px; text-align: center; color: #f0a500; padding: 8px 0 4px; letter-spacing: 0.03em; } /* ============================================ MMC Phase 3+4: Memory Retrieval + Provenance ============================================ */ /* Memory retrieval indicator (above chat input) */ .monolithos-memory-indicator { font-family: 'JetBrains Mono', 'Menlo', monospace; font-size: 11px; color: #b8a060; padding: 8px 16px; text-align: center; opacity: 1; transition: opacity 1s ease; border: 1px solid rgba(184, 160, 96, 0.25); border-radius: 6px; margin: 4px 0; background: rgba(184, 160, 96, 0.06); } .monolithos-memory-indicator-fade { opacity: 0; } /* Manual mode ⬡ button in chat input — matches send button style */ .monolithos-memory-btn { position: absolute; right: 32px; top: 28px; background: transparent; border: none; font-size: 14px; font-family: var(--font-monolithos-mono, 'Menlo', 'Monaco', monospace); cursor: pointer; padding: 4px; display: flex; align-items: center; justify-content: center; transition: all 0.2s ease; z-index: 2; } .theme-dark .monolithos-memory-btn { color: #888888; } .theme-light .monolithos-memory-btn { color: #666666; } .monolithos-memory-btn:hover { opacity: 0.6; } .monolithos-memory-btn-searching { color: #b8a060 !important; animation: memoryPulse 0.6s ease-in-out infinite; } .monolithos-memory-btn-active { color: #b8a060 !important; text-shadow: 0 0 8px rgba(184, 160, 96, 0.6); } .monolithos-memory-btn-miss { color: #aa4444 !important; } @keyframes memoryPulse { 0%, 100% { opacity: 0.3; } 50% { opacity: 1; } } /* Crystal reference links in chat messages */ .mmc-crystal-ref { color: #b8a060; font-family: 'JetBrains Mono', 'Menlo', monospace; font-size: 0.92em; border-bottom: 1px dotted rgba(184, 160, 96, 0.5); padding: 0 2px; transition: all 0.15s ease; } .mmc-crystal-ref:hover { background: rgba(184, 160, 96, 0.12); border-bottom-color: #b8a060; } /* Crystal file badge in File Explorer */ .monolithos-crystal-badge { color: var(--text-faint); font-size: 10px; margin-right: 4px; opacity: 0.7; } /* Block reference links inside Crystal files */ a.internal-link[href*="#^"] { color: var(--text-muted); font-family: 'JetBrains Mono', 'Menlo', monospace; font-size: 0.9em; opacity: 0.8; } a.internal-link[href*="#^"]:hover { opacity: 1; text-decoration: underline; } .markdown-rendered li a.internal-link[href*="#^"] { border-bottom: 1px dotted var(--text-faint); } /* Settings: Memory Core radio group */ .monolith-settings__radio-group { display: flex; flex-direction: column; gap: 8px; margin-top: 8px; } .monolith-settings__radio-label { display: flex; align-items: center; gap: 6px; font-family: 'JetBrains Mono', 'Menlo', monospace; font-size: 12px; cursor: pointer; } .monolith-settings__hint { color: var(--text-faint); font-size: 11px; } /* ════════════════════════════════════════════════════════════ MMC DASHBOARD — 数据看板样式 ════════════════════════════════════════════════════════════ */ .mmc-dashboard { --mmc-void: #0A0A0A; --mmc-abyss: #111111; --mmc-obsidian: #1A1A1A; --mmc-slate: #222222; --mmc-iron: #2A2A2A; --mmc-ash: #3A3A3A; --mmc-smoke: #555555; --mmc-fog: #888888; --mmc-mist: #AAAAAA; --mmc-bone: #CCCCCC; --mmc-ivory: #E8E4DE; --mmc-crystal-gold: #C9A84C; --mmc-crystal-dim: #8B7A3A; --mmc-crystal-faint: rgba(201, 168, 76, 0.08); --mmc-active: #4A8C5C; --mmc-pending: #B8860B; --mmc-archived: #555555; --mmc-rejected: #8B3A3A; --mmc-integrity-high: #4A8C5C; --mmc-integrity-mid: #B8860B; --mmc-integrity-low: #8B3A3A; } .theme-light .mmc-dashboard { --mmc-void: #F5F5F0; --mmc-abyss: #EEEEE8; --mmc-obsidian: #E5E5DF; --mmc-slate: #DDDDD7; --mmc-iron: #D0D0CA; --mmc-ash: #B8B8B2; --mmc-smoke: #888882; --mmc-fog: #666660; --mmc-mist: #555550; --mmc-bone: #333330; --mmc-ivory: #1A1A18; --mmc-crystal-gold: #9A7A30; --mmc-crystal-dim: #7A6228; --mmc-crystal-faint: rgba(154, 122, 48, 0.06); } /* ── Toggle 按钮(右上角文字) ── */ .mmc-dash-toggle-btn { cursor: pointer !important; transition: color 0.2s ease, letter-spacing 0.2s ease; user-select: none; } .mmc-dash-toggle-btn:hover { color: var(--mmc-crystal-gold, #C9A84C) !important; } /* ── Dashboard 主容器 ── */ .mmc-dashboard-container { height: 100%; overflow-y: auto; overflow-x: hidden; } .mmc-dashboard { padding: 16px; font-family: 'JetBrains Mono', 'Menlo', monospace; font-size: 11px; line-height: 1.5; color: var(--mmc-bone); } /* ── Header ── */ .mmc-dash-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; padding-bottom: 12px; border-bottom: 1px solid var(--mmc-iron); } .mmc-dash-title-text { font-size: 9px; font-weight: 600; letter-spacing: 4px; text-transform: uppercase; color: var(--mmc-crystal-gold); } .mmc-dash-header-status { display: flex; align-items: center; gap: 8px; font-size: 9px; color: var(--mmc-smoke); letter-spacing: 0.5px; } .mmc-dash-status-dot { width: 5px; height: 5px; border-radius: 50%; background: var(--mmc-active); animation: mmcStatusPulse 2s ease-in-out infinite; } @keyframes mmcStatusPulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.3; } } /* ── Stats Row ── */ .mmc-dash-stats-row { display: grid; grid-template-columns: repeat(5, 1fr); gap: 1px; background: var(--mmc-iron); margin-bottom: 16px; } .mmc-dash-stat-card { background: var(--mmc-abyss); padding: 14px 12px; transition: background 0.2s ease; } .mmc-dash-stat-card:hover { background: var(--mmc-obsidian); } .mmc-dash-stat-label { font-size: 8px; font-weight: 500; letter-spacing: 2px; text-transform: uppercase; color: var(--mmc-smoke); margin-bottom: 6px; } .mmc-dash-stat-value { font-size: 22px; font-weight: 300; color: var(--mmc-ivory); line-height: 1; margin-bottom: 4px; font-variant-numeric: tabular-nums; } .mmc-dash-stat-value.gold { color: var(--mmc-crystal-gold); } .mmc-dash-stat-meta { font-size: 9px; color: var(--mmc-ash); } /* ── Section 通用 ── */ .mmc-dash-section { margin-bottom: 16px; background: var(--mmc-abyss); padding: 16px; } .mmc-dash-section-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 1px solid var(--mmc-slate); } .mmc-dash-section-title { font-size: 9px; font-weight: 600; letter-spacing: 2px; text-transform: uppercase; color: var(--mmc-mist); } .mmc-dash-section-badge { font-size: 8px; letter-spacing: 1.5px; color: var(--mmc-crystal-dim); padding: 2px 6px; border: 1px solid var(--mmc-iron); } /* ── Timeline 时间线 ── */ .mmc-dash-timeline-chart { display: flex; align-items: flex-end; gap: 2px; height: 120px; padding-top: 12px; } .mmc-dash-timeline-group { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 4px; height: 100%; justify-content: flex-end; } .mmc-dash-timeline-bar { width: 100%; max-width: 20px; background: var(--mmc-crystal-gold); opacity: 0.7; border-radius: 1px; min-height: 2px; cursor: crosshair; transition: opacity 0.2s ease; animation: mmcBarGrow 0.6s cubic-bezier(0.23, 1, 0.32, 1) both; transform-origin: bottom; position: relative; } .mmc-dash-timeline-bar:hover { opacity: 1; } .mmc-dash-timeline-bar:hover::after { content: attr(data-count); position: absolute; top: -16px; left: 50%; transform: translateX(-50%); font-size: 9px; color: var(--mmc-crystal-gold); font-weight: 500; } .mmc-dash-timeline-label { font-size: 7px; color: var(--mmc-ash); letter-spacing: 0.5px; } @keyframes mmcBarGrow { from { transform: scaleY(0); } to { transform: scaleY(1); } } /* ── Integrity 分布 ── */ .mmc-dash-integrity-grid { display: flex; flex-direction: column; gap: 4px; } .mmc-dash-integrity-row { display: flex; align-items: center; gap: 8px; } .mmc-dash-integrity-range { font-size: 9px; color: var(--mmc-smoke); width: 44px; text-align: right; font-variant-numeric: tabular-nums; } .mmc-dash-integrity-track { flex: 1; height: 14px; background: var(--mmc-obsidian); border-radius: 1px; overflow: hidden; } .mmc-dash-integrity-fill { height: 100%; border-radius: 1px; transition: width 1s cubic-bezier(0.23, 1, 0.32, 1); } .mmc-dash-integrity-count { font-size: 9px; color: var(--mmc-fog); width: 24px; text-align: right; font-variant-numeric: tabular-nums; } .mmc-dash-integrity-summary { display: flex; justify-content: space-between; margin-top: 12px; padding-top: 10px; border-top: 1px solid var(--mmc-slate); } .mmc-dash-integrity-stat { text-align: center; } .mmc-dash-integrity-stat-value { font-size: 16px; font-weight: 300; color: var(--mmc-ivory); } .mmc-dash-integrity-stat-label { font-size: 7px; letter-spacing: 1.5px; text-transform: uppercase; color: var(--mmc-smoke); margin-top: 2px; } /* ── Tag Cloud ── */ .mmc-dash-tag-cloud { display: flex; flex-wrap: wrap; gap: 4px; align-content: flex-start; } .mmc-dash-tag-item { padding: 4px 10px; font-size: 9px; letter-spacing: 0.5px; border: 1px solid var(--mmc-iron); color: var(--mmc-fog); background: var(--mmc-obsidian); cursor: default; transition: all 0.2s ease; } .mmc-dash-tag-item:hover { border-color: var(--mmc-crystal-dim); color: var(--mmc-crystal-gold); background: var(--mmc-crystal-faint); } .mmc-dash-tag-item.tier-1 { font-size: 11px; font-weight: 500; color: var(--mmc-crystal-gold); border-color: var(--mmc-crystal-dim); padding: 5px 12px; } .mmc-dash-tag-item.tier-2 { font-size: 10px; color: var(--mmc-mist); border-color: var(--mmc-ash); } .mmc-dash-tag-item.tier-3 { font-size: 8px; color: var(--mmc-smoke); } .mmc-dash-tag-count { font-size: 7px; color: var(--mmc-ash); margin-left: 4px; } /* ── Crystal Lifecycle ── */ .mmc-dash-lifecycle-wrapper { display: flex; flex-direction: column; gap: 16px; } .mmc-dash-lifecycle-bar-section { display: flex; flex-direction: column; gap: 10px; } .mmc-dash-lifecycle-stack { display: flex; height: 24px; width: 100%; border-radius: 2px; overflow: hidden; gap: 1px; } .mmc-dash-lifecycle-block { height: 100%; transition: width 1s cubic-bezier(0.23, 1, 0.32, 1); } .mmc-dash-lifecycle-block.active { background: var(--mmc-active); } .mmc-dash-lifecycle-block.pending { background: var(--mmc-pending); } .mmc-dash-lifecycle-block.archived { background: var(--mmc-archived); } .mmc-dash-lifecycle-block.rejected { background: var(--mmc-rejected); } .mmc-dash-lifecycle-total { display: flex; align-items: baseline; gap: 8px; } .mmc-dash-lifecycle-total-value { font-size: 24px; font-weight: 300; color: var(--mmc-ivory); } .mmc-dash-lifecycle-total-label { font-size: 8px; letter-spacing: 1.5px; text-transform: uppercase; color: var(--mmc-smoke); } .mmc-dash-lifecycle-legend { display: flex; gap: 14px; flex-wrap: wrap; } .mmc-dash-lifecycle-legend-item { display: flex; align-items: center; gap: 5px; font-size: 9px; color: var(--mmc-smoke); } .mmc-dash-lifecycle-legend-dot { width: 7px; height: 7px; border-radius: 1px; } .mmc-dash-lifecycle-legend-dot.active { background: var(--mmc-active); } .mmc-dash-lifecycle-legend-dot.pending { background: var(--mmc-pending); } .mmc-dash-lifecycle-legend-dot.archived { background: var(--mmc-archived); } .mmc-dash-lifecycle-legend-dot.rejected { background: var(--mmc-rejected); } /* ── Lineage ── */ .mmc-dash-lineage-section { padding-top: 12px; border-top: 1px solid var(--mmc-slate); } .mmc-dash-lineage-title { font-size: 8px; letter-spacing: 2px; text-transform: uppercase; color: var(--mmc-smoke); margin-bottom: 8px; } .mmc-dash-lineage-row { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; } .mmc-dash-lineage-type { width: 64px; font-size: 9px; color: var(--mmc-smoke); text-align: right; font-variant-numeric: tabular-nums; } .mmc-dash-lineage-track { flex: 1; height: 8px; background: var(--mmc-obsidian); border-radius: 1px; overflow: hidden; } .mmc-dash-lineage-fill { height: 100%; border-radius: 1px; background: var(--mmc-crystal-dim); opacity: 0.7; } .mmc-dash-lineage-count { width: 20px; font-size: 9px; color: var(--mmc-fog); text-align: right; font-variant-numeric: tabular-nums; } /* ── Recent Crystals 列表 ── */ .mmc-dash-crystal-list { display: flex; flex-direction: column; gap: 2px; } .mmc-dash-crystal-entry { display: grid; grid-template-columns: 16px 1fr 96px 36px 42px; gap: 8px; align-items: center; padding: 8px 10px; background: var(--mmc-obsidian); font-size: 10px; transition: background 0.2s ease; cursor: pointer; } .mmc-dash-crystal-entry:hover { background: var(--mmc-slate); } .mmc-dash-crystal-entry:hover .mmc-dash-crystal-name { color: var(--mmc-crystal-gold); } .mmc-dash-crystal-hex { color: var(--mmc-crystal-dim); font-size: 11px; } .mmc-dash-crystal-name { color: var(--mmc-mist); font-weight: 400; letter-spacing: 0.2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; transition: color 0.2s ease; } .mmc-dash-crystal-origin { color: var(--mmc-smoke); font-size: 8px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .mmc-dash-crystal-integrity { text-align: right; font-variant-numeric: tabular-nums; font-weight: 500; } .mmc-dash-crystal-integrity.high { color: var(--mmc-integrity-high); } .mmc-dash-crystal-integrity.mid { color: var(--mmc-integrity-mid); } .mmc-dash-crystal-integrity.low { color: var(--mmc-integrity-low); } .mmc-dash-crystal-time { text-align: right; color: var(--mmc-ash); font-size: 8px; font-variant-numeric: tabular-nums; } /* ── Footer ── */ .mmc-dash-footer { margin-top: 24px; padding-top: 12px; border-top: 1px solid var(--mmc-iron); display: flex; justify-content: space-between; align-items: center; } .mmc-dash-footer-left { font-size: 8px; letter-spacing: 2px; text-transform: uppercase; color: var(--mmc-ash); } .mmc-dash-footer-right { font-style: italic; font-size: 10px; color: var(--mmc-smoke); } /* ── Scrollbar ── */ .mmc-dashboard-container::-webkit-scrollbar { width: 3px; } .mmc-dashboard-container::-webkit-scrollbar-track { background: transparent; } .mmc-dashboard-container::-webkit-scrollbar-thumb { background: var(--mmc-iron); } .mmc-dashboard-container::-webkit-scrollbar-thumb:hover { background: var(--mmc-ash); } /* ── Tag Click Expand ── */ .mmc-dash-tag-item { cursor: pointer; } .mmc-dash-tag-item.tag-active { border-color: var(--mmc-crystal-gold) !important; color: var(--mmc-crystal-gold) !important; background: var(--mmc-crystal-faint) !important; } .mmc-dash-tag-expand { margin-top: 12px; border: 1px solid var(--mmc-iron); background: var(--mmc-obsidian); animation: mmcTagExpand 0.25s ease-out; } @keyframes mmcTagExpand { from { opacity: 0; max-height: 0; } to { opacity: 1; max-height: 400px; } } .mmc-dash-tag-expand-header { display: flex; justify-content: space-between; align-items: center; padding: 10px 14px 8px; border-bottom: 1px solid var(--mmc-iron); } .mmc-dash-tag-expand-title { font-size: 10px; font-weight: 600; letter-spacing: 1px; color: var(--mmc-crystal-gold); } .mmc-dash-tag-expand-count { font-size: 8px; letter-spacing: 1px; color: var(--mmc-smoke); text-transform: uppercase; } .mmc-dash-tag-expand-row { display: flex; justify-content: space-between; align-items: center; padding: 7px 14px; cursor: pointer; transition: background 0.15s ease; } .mmc-dash-tag-expand-row:hover { background: var(--mmc-slate); } .mmc-dash-tag-expand-name { font-size: 10px; color: var(--mmc-mist); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex: 1; margin-right: 12px; transition: color 0.15s ease; } .mmc-dash-tag-expand-row:hover .mmc-dash-tag-expand-name { color: var(--mmc-crystal-gold); } .mmc-dash-tag-expand-int { font-size: 9px; font-weight: 500; font-variant-numeric: tabular-nums; min-width: 24px; text-align: right; } .mmc-dash-tag-expand-int.high { color: var(--mmc-integrity-high); } .mmc-dash-tag-expand-int.mid { color: var(--mmc-integrity-mid); } .mmc-dash-tag-expand-int.low { color: var(--mmc-integrity-low); }