| |
| |
| |
| |
| |
|
|
| |
| :root { |
| --ff-bg: #1a1a2e; |
| --ff-surface: #16213e; |
| --ff-surface2: #0f3460; |
| --ff-text: #e0d7c6; |
| --ff-text-dim: #a89f91; |
| --ff-accent: #e8b44b; |
| --ff-accent-glow: rgba(232, 180, 75, 0.3); |
| --ff-accent2: #d4756b; |
| --ff-green: #7eb77f; |
| --ff-border: #2a2a4a; |
| --ff-pip-bg: #0d1117; |
| --ff-radius: 8px; |
| --ff-font-mono: 'JetBrains Mono', 'SF Mono', 'Fira Code', 'Courier New', monospace; |
| --ff-font-sans: 'Inter', 'SF Pro Display', 'Segoe UI', system-ui, sans-serif; |
| } |
|
|
| |
| .gradio-container { |
| background: var(--ff-bg) !important; |
| font-family: var(--ff-font-sans) !important; |
| color: var(--ff-text) !important; |
| } |
|
|
| h1, h2, h3, h4, h5, h6 { |
| font-family: var(--ff-font-sans) !important; |
| color: var(--ff-accent) !important; |
| font-weight: 600 !important; |
| } |
|
|
| a { |
| color: var(--ff-accent) !important; |
| } |
|
|
| |
| .ff-header { |
| text-align: center; |
| padding: 24px 0 32px; |
| } |
|
|
| .ff-header h1 { |
| font-size: 2.4em; |
| margin: 0; |
| background: linear-gradient(135deg, var(--ff-accent), var(--ff-accent2)); |
| -webkit-background-clip: text; |
| -webkit-text-fill-color: transparent; |
| background-clip: text; |
| } |
|
|
| |
| .ff-pip-panel { |
| background: var(--ff-pip-bg); |
| border: 2px solid var(--ff-border); |
| border-radius: 12px; |
| padding: 24px 20px; |
| min-height: 320px; |
| display: flex; |
| flex-direction: column; |
| align-items: center; |
| justify-content: center; |
| box-shadow: 0 0 40px var(--ff-accent-glow) inset; |
| } |
|
|
| .ff-pip-art { |
| font-family: var(--ff-font-mono) !important; |
| font-size: 13px !important; |
| line-height: 1.35 !important; |
| color: var(--ff-accent) !important; |
| white-space: pre !important; |
| text-align: center !important; |
| background: transparent !important; |
| border: none !important; |
| padding: 16px !important; |
| min-height: 240px !important; |
| text-shadow: 0 0 20px var(--ff-accent-glow); |
| } |
|
|
| .ff-pip-art textarea { |
| font-family: var(--ff-font-mono) !important; |
| color: var(--ff-accent) !important; |
| background: transparent !important; |
| border: none !important; |
| resize: none !important; |
| text-align: center !important; |
| } |
|
|
| |
| .ff-timer { |
| font-family: var(--ff-font-mono); |
| font-size: 3.5em; |
| text-align: center; |
| color: var(--ff-accent); |
| padding: 16px; |
| letter-spacing: 4px; |
| text-shadow: 0 0 30px var(--ff-accent-glow); |
| } |
|
|
| .ff-timer.warning { |
| color: var(--ff-accent2); |
| animation: pulse 1s ease-in-out infinite; |
| } |
|
|
| @keyframes pulse { |
| 0%, 100% { opacity: 1; } |
| 50% { opacity: 0.5; } |
| } |
|
|
| |
| .ff-mode-bar { |
| display: flex; |
| gap: 8px; |
| padding: 12px; |
| background: var(--ff-surface); |
| border-radius: 12px; |
| border: 1px solid var(--ff-border); |
| margin-bottom: 16px; |
| } |
|
|
| .ff-mode-bar button { |
| font-family: var(--ff-font-sans) !important; |
| font-weight: 500 !important; |
| font-size: 0.95em !important; |
| padding: 10px 20px !important; |
| border-radius: 8px !important; |
| border: 1px solid var(--ff-border) !important; |
| background: var(--ff-surface2) !important; |
| color: var(--ff-text-dim) !important; |
| cursor: pointer !important; |
| transition: all 0.25s ease !important; |
| flex: 1 !important; |
| } |
|
|
| .ff-mode-bar button:hover { |
| background: rgba(232, 180, 75, 0.15) !important; |
| color: var(--ff-accent) !important; |
| border-color: var(--ff-accent) !important; |
| transform: translateY(-1px); |
| } |
|
|
| .ff-mode-bar button.active, |
| .ff-mode-bar button.selected { |
| background: var(--ff-accent) !important; |
| color: var(--ff-bg) !important; |
| border-color: var(--ff-accent) !important; |
| font-weight: 600 !important; |
| box-shadow: 0 0 20px var(--ff-accent-glow); |
| } |
|
|
| |
| .ff-chatbot { |
| border: 1px solid var(--ff-border) !important; |
| border-radius: 12px !important; |
| background: var(--ff-surface) !important; |
| overflow: hidden !important; |
| } |
|
|
| .ff-chatbot .message-wrap { |
| padding: 12px 16px !important; |
| } |
|
|
| .ff-chatbot .user { |
| background: var(--ff-surface2) !important; |
| border-radius: 8px !important; |
| margin: 4px 0 !important; |
| } |
|
|
| .ff-chatbot .bot { |
| background: var(--ff-pip-bg) !important; |
| border-left: 3px solid var(--ff-accent) !important; |
| border-radius: 0 8px 8px 0 !important; |
| margin: 4px 0 !important; |
| } |
|
|
| .ff-chatbot .bot p { |
| color: var(--ff-text) !important; |
| } |
|
|
| |
| .ff-chat-input textarea { |
| background: var(--ff-surface) !important; |
| border: 1px solid var(--ff-border) !important; |
| border-radius: 8px !important; |
| color: var(--ff-text) !important; |
| font-family: var(--ff-font-sans) !important; |
| padding: 12px !important; |
| resize: none !important; |
| } |
|
|
| .ff-chat-input textarea:focus { |
| border-color: var(--ff-accent) !important; |
| box-shadow: 0 0 15px var(--ff-accent-glow) !important; |
| } |
|
|
| |
| button.primary, |
| button[variant="primary"] { |
| background: var(--ff-accent) !important; |
| color: var(--ff-bg) !important; |
| font-weight: 600 !important; |
| border: none !important; |
| border-radius: 8px !important; |
| padding: 10px 24px !important; |
| transition: all 0.25s ease !important; |
| font-size: 1em !important; |
| } |
|
|
| button.primary:hover, |
| button[variant="primary"]:hover { |
| background: #f0c55a !important; |
| box-shadow: 0 4px 20px var(--ff-accent-glow) !important; |
| transform: translateY(-1px); |
| } |
|
|
| button.primary:active, |
| button[variant="primary"]:active { |
| transform: translateY(0); |
| } |
|
|
| |
| button.secondary { |
| background: var(--ff-surface2) !important; |
| color: var(--ff-text) !important; |
| border: 1px solid var(--ff-border) !important; |
| border-radius: 8px !important; |
| padding: 10px 24px !important; |
| transition: all 0.25s ease !important; |
| } |
|
|
| button.secondary:hover { |
| border-color: var(--ff-accent) !important; |
| color: var(--ff-accent) !important; |
| } |
|
|
| |
| select, .dropdown { |
| background: var(--ff-surface) !important; |
| border: 1px solid var(--ff-border) !important; |
| border-radius: 8px !important; |
| color: var(--ff-text) !important; |
| padding: 8px 12px !important; |
| } |
|
|
| input[type="range"] { |
| accent-color: var(--ff-accent); |
| } |
|
|
| |
| .gr-group { |
| background: var(--ff-surface) !important; |
| border: 1px solid var(--ff-border) !important; |
| border-radius: 12px !important; |
| padding: 16px !important; |
| margin-bottom: 12px !important; |
| } |
|
|
| |
| .gr-accordion { |
| background: var(--ff-surface) !important; |
| border: 1px solid var(--ff-border) !important; |
| border-radius: 12px !important; |
| } |
|
|
| |
| ::-webkit-scrollbar { |
| width: 8px; |
| height: 8px; |
| } |
|
|
| ::-webkit-scrollbar-track { |
| background: var(--ff-bg); |
| border-radius: 4px; |
| } |
|
|
| ::-webkit-scrollbar-thumb { |
| background: var(--ff-border); |
| border-radius: 4px; |
| } |
|
|
| ::-webkit-scrollbar-thumb:hover { |
| background: var(--ff-accent); |
| } |
|
|
| |
| footer { |
| display: none !important; |
| } |
|
|
| |
| .tabs { |
| border: none !important; |
| } |
|
|
| .tab-nav { |
| display: none !important; |
| } |
|
|
| |
| @media (max-width: 768px) { |
| .ff-pip-panel { |
| min-height: 200px; |
| padding: 12px; |
| } |
|
|
| .ff-pip-art { |
| font-size: 10px !important; |
| min-height: 160px !important; |
| } |
|
|
| .ff-mode-bar { |
| flex-wrap: wrap; |
| } |
|
|
| .ff-mode-bar button { |
| font-size: 0.85em !important; |
| padding: 8px 12px !important; |
| } |
|
|
| .ff-timer { |
| font-size: 2.5em; |
| } |
| } |
|
|
| |
| .ff-breathing-in { |
| animation: breatheIn 4s ease-in-out; |
| } |
|
|
| .ff-breathing-out { |
| animation: breatheOut 8s ease-in-out; |
| } |
|
|
| @keyframes breatheIn { |
| from { transform: scale(1); } |
| to { transform: scale(1.05); } |
| } |
|
|
| @keyframes breatheOut { |
| from { transform: scale(1.05); } |
| to { transform: scale(1); } |
| } |
|
|
| |
| .ff-celebrate { |
| animation: celebrate 0.5s ease-in-out 3; |
| } |
|
|
| @keyframes celebrate { |
| 0%, 100% { transform: translateY(0); } |
| 50% { transform: translateY(-10px); } |
| } |
|
|