From ae341625c52e4096829143e5077eb839d9f02237 Mon Sep 17 00:00:00 2001 From: "Izzo, Anthony M" Date: Fri, 29 May 2026 13:45:44 -0700 Subject: [PATCH 1/3] feat: Refresh AI model defaults and fix provider SDK compatibility Update default models to the current generation (balanced, cost-aware tier): Gemini 3.5 Flash, GPT-5.4-mini, Claude Sonnet 4.6, Command A. Remove the end-of-life gemini-2.0-flash-001 and the invalid claude-opus-4-1 model ID. Adapt provider request construction so the newer model families work instead of returning 400s or empty output: - OpenAI GPT-5/o-series: use max_completion_tokens + reasoning_effort and omit the unsupported temperature (shared is_openai_reasoning_model) - Gemini 3: set thinking_level=LOW and use the model-default temperature - Claude Opus 4.7+: omit sampling params (temperature/top_p/top_k), which those models reject with a 400; Sonnet/Haiku keep temperature - Settings UI preselects the registry default instead of the alphabetically-first model; the "Test OpenAI" path is reasoning-safe Embeddings are unchanged, so no FAISS re-index is required. Adds request-compatibility tests; updates CHANGELOG and README. --- CHANGELOG.md | 12 ++ README.md | 19 +- src/plexmix/ai/claude_provider.py | 37 +++- src/plexmix/ai/cohere_provider.py | 2 +- src/plexmix/ai/gemini_provider.py | 19 +- src/plexmix/ai/openai_provider.py | 38 +++- src/plexmix/services/registry.py | 43 +++- src/plexmix/ui/states/_settings_testing.py | 20 +- src/plexmix/ui/states/settings_state.py | 7 +- tests/test_cohere.py | 4 +- tests/test_provider_request_compat.py | 240 +++++++++++++++++++++ tests/test_registry.py | 66 +++++- tests/ui/test_states.py | 43 ++++ 13 files changed, 491 insertions(+), 59 deletions(-) create mode 100644 tests/test_provider_request_compat.py diff --git a/CHANGELOG.md b/CHANGELOG.md index c88a100..29f4e57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed +- Refresh default AI models to the current generation in a balanced, cost-aware tier: Gemini `gemini-3.5-flash`, OpenAI `gpt-5.4-mini`, Claude `claude-sonnet-4-6`, Cohere `command-a-03-2025`. Newer flagship options (`gpt-5.5`, `claude-opus-4-8`, `gemini-3.1-pro-preview`, `command-a-plus-05-2026`) are also selectable. Embedding models are unchanged, so existing FAISS indexes do not need to be regenerated. +- The configured `temperature` setting now has no effect for OpenAI GPT-5, Gemini 3, and Claude Opus 4.7+ models — those families don't accept a custom temperature. It still applies to Claude Sonnet/Haiku, Cohere, custom, and local providers. + +### Fixed +- OpenAI GPT-5 requests now use `max_completion_tokens` and omit the unsupported `temperature` (GPT-5/o-series reject the old `max_tokens` + custom-temperature combination), so OpenAI playlist generation and the Settings "Test OpenAI" button no longer fail with a 400. +- Gemini 3 requests now constrain thinking (`thinking_level=low`) and use the model's default temperature, so responses aren't starved of output tokens or pushed into low-temperature loops. +- Claude Opus 4.7+/4.8 requests now omit sampling parameters (`temperature`/`top_p`/`top_k`), which those models reject with a 400; Sonnet and Haiku continue to honor `temperature`. + +### Removed +- The end-of-life `gemini-2.0-flash-001` model (Google shutdown 2026-06-01) and the invalid `claude-opus-4-1-20250414` model ID. + ## [0.10.0] - 2026-05-28 ### Added diff --git a/README.md b/README.md index c03e8a3..3ef3eb7 100644 --- a/README.md +++ b/README.md @@ -660,13 +660,13 @@ PlexMix stores all music metadata locally: | Provider | Model | Context Window | Default Temp | Speed | Quality | Cost | Best For | |----------|-------|----------------|--------------|-------|---------|------|----------| -| OpenAI | gpt-5-mini | 400K tokens | 0.7 | ⚡⚡ Moderate | ⭐⭐⭐⭐⭐ Outstanding | 💰💰 Medium | High-quality responses, reasoning | -| Anthropic | claude-sonnet-4-5 | 200K tokens | 0.7 | ⚡⚡ Moderate | ⭐⭐⭐⭐⭐ Outstanding | 💰💰💰 High | Advanced reasoning, analysis | -| Cohere | command-r-plus-08-2024 | 128K tokens | 0.3 | ⚡⚡ Moderate | ⭐⭐⭐⭐⭐ Outstanding | 💰💰 Medium | Multilingual, complex tasks | -| **Google Gemini** ⭐ | gemini-2.5-flash | 1M tokens | 0.7 | ⚡⚡⚡ Fast | ⭐⭐⭐⭐ Excellent | 💰 Low | General use, RAG, large contexts | -| OpenAI | gpt-5-nano | 400K tokens | 0.7 | ⚡⚡⚡ Fast | ⭐⭐⭐⭐ Excellent | 💰 Low | Speed-optimized, efficient | -| Cohere | command-r7b-12-2024 | 128K tokens | 0.3 | ⚡⚡⚡ Fast | ⭐⭐⭐⭐ Excellent | 💰 Low | RAG, tool use, agents | -| Cohere | command-r-08-2024 | 128K tokens | 0.3 | ⚡⚡⚡ Fast | ⭐⭐⭐⭐ Excellent | 💰 Low | Balanced performance | +| **Google Gemini** ⭐ | gemini-3.5-flash | 1M tokens | n/a¹ | ⚡⚡⚡ Fast | ⭐⭐⭐⭐⭐ Outstanding | 💰 Low | General use, RAG, large contexts (default) | +| OpenAI | gpt-5.4-mini | 400K tokens | n/a¹ | ⚡⚡ Moderate | ⭐⭐⭐⭐⭐ Outstanding | 💰💰 Medium | High-quality reasoning | +| Anthropic | claude-sonnet-4-6 | 200K tokens | 0.7 | ⚡⚡ Moderate | ⭐⭐⭐⭐⭐ Outstanding | 💰💰💰 High | Advanced reasoning, analysis | +| OpenAI | gpt-5.5 | 400K tokens | n/a¹ | ⚡⚡ Moderate | ⭐⭐⭐⭐⭐ Frontier | 💰💰💰 High | Most complex tasks | +| Anthropic | claude-opus-4-8 | 1M tokens | n/a¹ | ⚡⚡ Moderate | ⭐⭐⭐⭐⭐ Frontier | 💰💰💰 High | Highest-capability reasoning | +| Cohere | command-a-03-2025 | 256K tokens | 0.3 | ⚡⚡ Moderate | ⭐⭐⭐⭐⭐ Outstanding | 💰💰 Medium | Multilingual, agentic, RAG | +| OpenAI | gpt-5.4-nano | 400K tokens | n/a¹ | ⚡⚡⚡ Fast | ⭐⭐⭐⭐ Excellent | 💰 Low | Speed-optimized, efficient | | Anthropic | claude-haiku-4-5 | 200K tokens | 0.7 | ⚡⚡⚡ Fast | ⭐⭐⭐⭐ Excellent | 💰 Low | Fast responses, efficiency | **Legend:** @@ -674,6 +674,7 @@ PlexMix stores all music metadata locally: - Speed: ⚡ Slow, ⚡⚡ Moderate, ⚡⚡⚡ Fast - Quality: ⭐ Basic → ⭐⭐⭐⭐⭐ Outstanding - Cost: 💰 Low, 💰💰 Medium, 💰💰💰 High +- ¹ Reasoning models (GPT-5, Gemini 3, Claude Opus 4.7+) ignore the temperature setting ## Embedding Provider Comparison @@ -745,13 +746,13 @@ If you ever want to nuke cached weights, delete the relevant directories under ` ### Online (Best Latency & Reasoning) -- **AI Provider:** `gemini-2.5-flash` (default). For more advanced reasoning, upgrade to `gpt-5-mini` or `claude-sonnet-4-5` if you have the budget. +- **AI Provider:** `gemini-3.5-flash` (default). For more advanced reasoning, upgrade to `claude-sonnet-4-6`, `gpt-5.5`, or `claude-opus-4-8` if you have the budget. - **Embeddings:** `gemini-embedding-001` for maximum semantic precision, or `text-embedding-3-small` if you want faster generation with a slightly smaller vector size. - **Network Tips:** Keep API keys in `~/.plexmix/credentials` and run `plexmix config init` to verify connectivity. Use `plexmix ui --reload` during development to check the status cards. ### Hybrid (Cloud AI + Local Embeddings) -- **AI Provider:** Keep using `gemini-2.5-flash` (or `gpt-5-mini`) for playlist prompts so you get the latest reasoning updates. +- **AI Provider:** Keep using `gemini-3.5-flash` (or `gpt-5.4-mini`) for playlist prompts so you get the latest reasoning updates. - **Embeddings:** Run `mixedbread-ai/mxbai-embed-large-v1` locally so FAISS never leaves your machine while still benefiting from high-quality vectors. - **Workflow Tips:** Regenerate embeddings locally after every sync, but keep the AI provider online. This gives you the best of both worlds—fast semantic search without exposing track metadata, plus cloud-scale LLM quality. diff --git a/src/plexmix/ai/claude_provider.py b/src/plexmix/ai/claude_provider.py index 5f7188e..ecbac81 100644 --- a/src/plexmix/ai/claude_provider.py +++ b/src/plexmix/ai/claude_provider.py @@ -1,4 +1,4 @@ -from typing import Optional +from typing import Any, Optional import logging import time @@ -7,10 +7,22 @@ logger = logging.getLogger(__name__) +def _claude_rejects_sampling_params(model: str) -> bool: + """Return True for Claude models that reject non-default sampling params. + + Claude Opus 4.7 and later return a 400 if ``temperature``, ``top_p``, or + ``top_k`` is set to a non-default value. Opus 4.6 and earlier, and all + Sonnet/Haiku models, still accept ``temperature``. + """ + m = model.lower() + if not m.startswith("claude-opus-4-"): + return False + minor = m[len("claude-opus-4-") :].split("-")[0] + return minor.isdigit() and int(minor) >= 7 + + class ClaudeProvider(AIProvider): - def __init__( - self, api_key: str, model: str = "claude-sonnet-4-5-20250929", temperature: float = 0.7 - ): + def __init__(self, api_key: str, model: str = "claude-sonnet-4-6", temperature: float = 0.7): super().__init__(api_key, model, temperature) try: from anthropic import Anthropic @@ -30,6 +42,16 @@ def complete( """Send a prompt to Claude and return the text response.""" temp = temperature if temperature is not None else self.temperature + # Opus 4.7+ reject any non-default sampling parameter (temperature/ + # top_p/top_k) with a 400; omit temperature for those models. + request_kwargs: dict[str, Any] = { + "model": self.model, + "max_tokens": max_tokens, + "messages": [{"role": "user", "content": prompt}], + } + if not _claude_rejects_sampling_params(self.model): + request_kwargs["temperature"] = temp + # Retry with exponential backoff max_retries = 3 base_delay = 1 @@ -37,10 +59,7 @@ def complete( for attempt in range(max_retries): try: response = self.client.with_options(timeout=float(timeout)).messages.create( - model=self.model, - max_tokens=max_tokens, - temperature=temp, - messages=[{"role": "user", "content": prompt}], + **request_kwargs ) if not response.content: @@ -51,7 +70,7 @@ def complete( if not hasattr(first_block, "text") or not first_block.text: # type: ignore[union-attr] raise ValueError("Empty response from Claude") - return first_block.text # type: ignore[union-attr] + return str(first_block.text) except Exception as e: error_str = str(e).lower() diff --git a/src/plexmix/ai/cohere_provider.py b/src/plexmix/ai/cohere_provider.py index 6ed2142..e30616a 100644 --- a/src/plexmix/ai/cohere_provider.py +++ b/src/plexmix/ai/cohere_provider.py @@ -8,7 +8,7 @@ class CohereProvider(AIProvider): - def __init__(self, api_key: str, model: str = "command-r7b-12-2024", temperature: float = 0.3): + def __init__(self, api_key: str, model: str = "command-a-03-2025", temperature: float = 0.3): super().__init__(api_key, model, temperature) try: import cohere diff --git a/src/plexmix/ai/gemini_provider.py b/src/plexmix/ai/gemini_provider.py index 58f9c85..60a90f6 100644 --- a/src/plexmix/ai/gemini_provider.py +++ b/src/plexmix/ai/gemini_provider.py @@ -1,4 +1,4 @@ -from typing import Optional +from typing import Any, Optional import logging import time @@ -8,7 +8,7 @@ class GeminiProvider(AIProvider): - def __init__(self, api_key: str, model: str = "gemini-2.5-flash", temperature: float = 0.7): + def __init__(self, api_key: str, model: str = "gemini-3.5-flash", temperature: float = 0.7): super().__init__(api_key, model, temperature) try: from google import genai @@ -30,10 +30,17 @@ def complete( """Send a prompt to Gemini and return the text response.""" temp = temperature if temperature is not None else self.temperature - config = self.types.GenerateContentConfig( - temperature=temp, - max_output_tokens=max_tokens, - ) + # Gemini 3 is tuned for the default temperature (1.0) and loops at low + # values; max_output_tokens is a *combined* thinking+output budget, so + # constrain thinking to LOW to avoid starving the response. + config_kwargs: dict[str, Any] = {"max_output_tokens": max_tokens} + if self.model.lower().startswith("gemini-3"): + config_kwargs["thinking_config"] = self.types.ThinkingConfig( + thinking_level=self.types.ThinkingLevel.LOW + ) + else: + config_kwargs["temperature"] = temp + config = self.types.GenerateContentConfig(**config_kwargs) # Retry with exponential backoff max_retries = 3 diff --git a/src/plexmix/ai/openai_provider.py b/src/plexmix/ai/openai_provider.py index 69d459e..05c026b 100644 --- a/src/plexmix/ai/openai_provider.py +++ b/src/plexmix/ai/openai_provider.py @@ -1,4 +1,4 @@ -from typing import Optional +from typing import Any, Optional import logging import time @@ -7,8 +7,18 @@ logger = logging.getLogger(__name__) +def is_openai_reasoning_model(model: str) -> bool: + """Return True for OpenAI reasoning models (GPT-5 / o-series). + + These models reject a non-default ``temperature`` and require + ``max_completion_tokens`` instead of ``max_tokens`` on the Chat + Completions API. + """ + return model.lower().startswith(("gpt-5", "o1", "o3", "o4")) + + class OpenAIProvider(AIProvider): - def __init__(self, api_key: str, model: str = "gpt-5-mini", temperature: float = 0.7): + def __init__(self, api_key: str, model: str = "gpt-5.4-mini", temperature: float = 0.7): super().__init__(api_key, model, temperature) try: from openai import OpenAI @@ -28,24 +38,32 @@ def complete( """Send a prompt to OpenAI and return the text response.""" temp = temperature if temperature is not None else self.temperature + # Reasoning models (GPT-5 / o-series) reject a custom temperature and + # require max_completion_tokens instead of max_tokens. + request_kwargs: dict[str, Any] = { + "model": self.model, + "messages": [{"role": "user", "content": prompt}], + "timeout": timeout, + } + if is_openai_reasoning_model(self.model): + request_kwargs["max_completion_tokens"] = max_tokens + request_kwargs["reasoning_effort"] = "low" + else: + request_kwargs["max_tokens"] = max_tokens + request_kwargs["temperature"] = temp + # Retry with exponential backoff max_retries = 3 base_delay = 1 for attempt in range(max_retries): try: - response = self.client.chat.completions.create( - model=self.model, - messages=[{"role": "user", "content": prompt}], - temperature=temp, - max_tokens=max_tokens, - timeout=timeout, - ) + response = self.client.chat.completions.create(**request_kwargs) if not response.choices or not response.choices[0].message.content: raise ValueError("Empty response from OpenAI") - return response.choices[0].message.content + return str(response.choices[0].message.content) except Exception as e: error_str = str(e).lower() diff --git a/src/plexmix/services/registry.py b/src/plexmix/services/registry.py index b80b75d..054051f 100644 --- a/src/plexmix/services/registry.py +++ b/src/plexmix/services/registry.py @@ -58,22 +58,27 @@ class LocalEmbeddingModel: "gemini": CloudAIProvider( id="gemini", display_name="Gemini", - default_model="gemini-2.5-flash", - models=["gemini-2.5-flash", "gemini-2.5-pro", "gemini-2.0-flash-001"], + default_model="gemini-3.5-flash", + models=[ + "gemini-3.5-flash", + "gemini-3.1-flash-lite", + "gemini-3.1-pro-preview", + "gemini-2.5-flash", + ], ), "openai": CloudAIProvider( id="openai", display_name="OpenAI", - default_model="gpt-5-mini", - models=["gpt-5", "gpt-5-mini", "gpt-5-nano"], + default_model="gpt-5.4-mini", + models=["gpt-5.5", "gpt-5.4-mini", "gpt-5.4-nano"], ), "claude": CloudAIProvider( id="claude", display_name="Claude", - default_model="claude-sonnet-4-5-20250929", + default_model="claude-sonnet-4-6", models=[ - "claude-sonnet-4-5-20250929", - "claude-opus-4-1-20250414", + "claude-sonnet-4-6", + "claude-opus-4-8", "claude-haiku-4-5-20251001", ], aliases=["anthropic"], @@ -81,8 +86,14 @@ class LocalEmbeddingModel: "cohere": CloudAIProvider( id="cohere", display_name="Cohere", - default_model="command-r7b-12-2024", - models=["command-r7b-12-2024", "command-r-plus", "command-r", "command-a-03-2025"], + default_model="command-a-03-2025", + models=[ + "command-a-03-2025", + "command-a-plus-05-2026", + "command-r-plus-08-2024", + "command-r-08-2024", + "command-r7b-12-2024", + ], ), "custom": CloudAIProvider( id="custom", @@ -201,6 +212,20 @@ def get_default_ai_model(provider: str) -> str: return entry.default_model if entry else "" +def get_default_ai_model_display(provider: str) -> str: + """Return the default AI model in the form shown by ``get_ai_models_display``. + + Resolves the ``anthropic`` UI alias and strips the date suffix from Claude + IDs so the result matches an entry in ``get_ai_models_display(provider)``. + """ + if provider == "anthropic": + provider = "claude" + default = get_default_ai_model(provider) + if provider == "claude": + return _short_claude_name(default) + return default + + def get_embedding_models(provider: str) -> List[str]: """Return the sorted model list for an embedding provider.""" if provider == "local": diff --git a/src/plexmix/ui/states/_settings_testing.py b/src/plexmix/ui/states/_settings_testing.py index 408714c..cb3c9c7 100644 --- a/src/plexmix/ui/states/_settings_testing.py +++ b/src/plexmix/ui/states/_settings_testing.py @@ -100,7 +100,7 @@ def test_gemini(): client = genai.Client(api_key=api_key) response = client.models.generate_content( - model=state.ai_model or "gemini-2.5-flash", + model=state.ai_model or "gemini-3.5-flash", contents="Say 'test successful' in exactly two words.", ) return response.text @@ -114,11 +114,21 @@ def test_gemini(): def test_openai(): from openai import OpenAI + from plexmix.ai.openai_provider import is_openai_reasoning_model + client = OpenAI(api_key=api_key) + model = state.ai_model or "gpt-5.4-mini" + # GPT-5 reasoning models reject max_tokens/custom temperature; + # use max_completion_tokens with low effort instead. + token_kwargs: dict[str, Any] = ( + {"max_completion_tokens": 64, "reasoning_effort": "low"} + if is_openai_reasoning_model(model) + else {"max_tokens": 10} + ) response = client.chat.completions.create( - model=state.ai_model or "gpt-5-mini", + model=model, messages=[{"role": "user", "content": "Say 'test' in one word."}], - max_tokens=10, + **token_kwargs, ) return response.choices[0].message.content @@ -133,7 +143,7 @@ def test_anthropic(): client = anthropic.Anthropic(api_key=api_key) response = client.messages.create( - model=state.ai_model or "claude-sonnet-4-5", + model=state.ai_model or "claude-sonnet-4-6", max_tokens=10, messages=[{"role": "user", "content": "Say 'test' in one word."}], ) @@ -150,7 +160,7 @@ def test_cohere(): client = cohere.ClientV2(api_key=api_key) response = client.chat( - model=state.ai_model or "command-r7b-12-2024", + model=state.ai_model or "command-a-03-2025", messages=[{"role": "user", "content": "Say 'test' in one word."}], max_tokens=10, ) diff --git a/src/plexmix/ui/states/settings_state.py b/src/plexmix/ui/states/settings_state.py index d4e9b54..f01c80f 100644 --- a/src/plexmix/ui/states/settings_state.py +++ b/src/plexmix/ui/states/settings_state.py @@ -196,6 +196,7 @@ def load_settings(self): def update_model_lists(self): from plexmix.services.registry import ( get_ai_models_display, + get_default_ai_model_display, get_embedding_models, ) @@ -203,7 +204,7 @@ def update_model_lists(self): self.ai_models = models # Only auto-select if model is empty (preserve custom model names) if models and not self.ai_model: - self.ai_model = models[0] + self.ai_model = get_default_ai_model_display(self.ai_provider) or models[0] models = get_embedding_models(self.embedding_provider) self.embedding_models = models @@ -226,10 +227,12 @@ def _load_embedding_api_key_for_provider(self, provider: str) -> None: self.embedding_api_key = resolve_embedding_api_key(provider) or "" def set_ai_provider(self, provider: str): + from plexmix.services.registry import get_default_ai_model_display + self.ai_provider = provider self.update_model_lists() if self.ai_models: - self.ai_model = self.ai_models[0] + self.ai_model = get_default_ai_model_display(provider) or self.ai_models[0] if provider == "local" and not self.ai_model: self.ai_model = LOCAL_LLM_DEFAULT_MODEL if provider != "local": diff --git a/tests/test_cohere.py b/tests/test_cohere.py index 9f6e73c..32347cd 100644 --- a/tests/test_cohere.py +++ b/tests/test_cohere.py @@ -19,7 +19,7 @@ def test_cohere_provider_initialization(mock_cohere_module): provider = CohereProvider(api_key="test-key") assert provider.api_key == "test-key" - assert provider.model == "command-r7b-12-2024" + assert provider.model == "command-a-03-2025" assert provider.temperature == 0.3 @@ -170,7 +170,7 @@ def test_get_ai_provider_cohere(mock_cohere_module): provider = get_ai_provider("cohere", api_key="test-key") - assert provider.model == "command-r7b-12-2024" + assert provider.model == "command-a-03-2025" assert provider.temperature == 0.7 diff --git a/tests/test_provider_request_compat.py b/tests/test_provider_request_compat.py new file mode 100644 index 0000000..2dd3e1b --- /dev/null +++ b/tests/test_provider_request_compat.py @@ -0,0 +1,240 @@ +"""Request-construction compatibility across model families. + +Covers the model-family-specific request shaping added in the +``refresh-ai-model-defaults`` change: OpenAI reasoning models, +Gemini 3 thinking models, and Claude Opus 4.7+ sampling-parameter +restrictions, plus factory construction of the new defaults. +""" + +import asyncio +from unittest.mock import MagicMock, patch + + +def _openai_response(text: str = "ok") -> MagicMock: + resp = MagicMock() + choice = MagicMock() + choice.message.content = text + resp.choices = [choice] + return resp + + +def _claude_response(text: str = "ok") -> MagicMock: + block = MagicMock() + block.text = text + resp = MagicMock() + resp.content = [block] + return resp + + +def _gemini_response(text: str = "ok") -> MagicMock: + resp = MagicMock() + resp.text = text + return resp + + +class _FakeState: + """Minimal SettingsState stand-in usable as an async context manager. + + The Settings provider-test helpers (``test_ai_provider_impl``) are + standalone functions that take a ``state`` and use ``async with state``; + this lets us drive them with ``asyncio.run`` and inspect the SDK calls. + """ + + def __init__(self, **kwargs): + self.testing_connection = False + self.ai_test_status = "" + self.ai_provider = "openai" + self.ai_api_key = "sk-test" + self.ai_model = "" + self.ai_custom_endpoint = "" + self.ai_custom_model = "" + self.ai_custom_api_key = "" + self.ai_local_mode = "builtin" + self.ai_local_endpoint = "" + self.ai_local_auth_token = "" + for key, value in kwargs.items(): + setattr(self, key, value) + + async def __aenter__(self): + return self + + async def __aexit__(self, *exc): + return False + + +class TestOpenAIReasoningParams: + def test_predicate_classifies_models(self): + from plexmix.ai.openai_provider import is_openai_reasoning_model + + for m in ("gpt-5.4-mini", "gpt-5.5", "gpt-5-nano", "o1", "o3-mini", "o4"): + assert is_openai_reasoning_model(m), m + for m in ("gpt-4o", "gpt-4.1", "llama3", "mistral"): + assert not is_openai_reasoning_model(m), m + + def test_gpt5_uses_max_completion_tokens_and_omits_temperature(self): + with patch("openai.OpenAI") as mock_openai: + from plexmix.ai.openai_provider import OpenAIProvider + + client = mock_openai.return_value + client.chat.completions.create.return_value = _openai_response("hi") + + OpenAIProvider(api_key="sk-test", model="gpt-5.4-mini").complete( + "hello", max_tokens=1234 + ) + + kwargs = client.chat.completions.create.call_args.kwargs + assert kwargs["max_completion_tokens"] == 1234 + assert kwargs.get("reasoning_effort") == "low" + assert "temperature" not in kwargs + assert "max_tokens" not in kwargs + + def test_non_reasoning_model_keeps_max_tokens_and_temperature(self): + with patch("openai.OpenAI") as mock_openai: + from plexmix.ai.openai_provider import OpenAIProvider + + client = mock_openai.return_value + client.chat.completions.create.return_value = _openai_response("hi") + + OpenAIProvider(api_key="sk-test", model="gpt-4o").complete( + "hello", temperature=0.5, max_tokens=99 + ) + + kwargs = client.chat.completions.create.call_args.kwargs + assert kwargs["max_tokens"] == 99 + assert kwargs["temperature"] == 0.5 + assert "max_completion_tokens" not in kwargs + + +class TestGeminiThinkingConfig: + def test_gemini3_sets_thinking_level_low_and_omits_temperature(self): + with patch("google.genai.Client") as mock_client_cls: + from google.genai import types + + from plexmix.ai.gemini_provider import GeminiProvider + + client = mock_client_cls.return_value + client.models.generate_content.return_value = _gemini_response("hi") + + GeminiProvider(api_key="test", model="gemini-3.5-flash").complete( + "hello", temperature=0.2, max_tokens=2048 + ) + + config = client.models.generate_content.call_args.kwargs["config"] + assert config.thinking_config is not None + assert config.thinking_config.thinking_level == types.ThinkingLevel.LOW + assert config.temperature is None + + def test_gemini25_keeps_temperature_and_no_thinking_config(self): + with patch("google.genai.Client") as mock_client_cls: + from plexmix.ai.gemini_provider import GeminiProvider + + client = mock_client_cls.return_value + client.models.generate_content.return_value = _gemini_response("hi") + + GeminiProvider(api_key="test", model="gemini-2.5-flash").complete( + "hello", temperature=0.2, max_tokens=2048 + ) + + config = client.models.generate_content.call_args.kwargs["config"] + assert config.temperature == 0.2 + assert config.thinking_config is None + + +class TestClaudeSamplingParams: + def test_predicate_scopes_to_opus_47_plus(self): + from plexmix.ai.claude_provider import _claude_rejects_sampling_params + + assert _claude_rejects_sampling_params("claude-opus-4-8") + assert _claude_rejects_sampling_params("claude-opus-4-7") + assert _claude_rejects_sampling_params("claude-opus-4-9") + assert _claude_rejects_sampling_params("claude-opus-4-10") # two-digit minor >= 7 + assert not _claude_rejects_sampling_params("claude-opus-4-6") + assert not _claude_rejects_sampling_params("claude-opus-4-1-20250414") + assert not _claude_rejects_sampling_params("claude-sonnet-4-6") + assert not _claude_rejects_sampling_params("claude-haiku-4-5-20251001") + + def test_opus_omits_sampling_params(self): + with patch("anthropic.Anthropic") as mock_anthropic: + from plexmix.ai.claude_provider import ClaudeProvider + + client = mock_anthropic.return_value + client.with_options.return_value.messages.create.return_value = _claude_response("hi") + + ClaudeProvider(api_key="sk-test", model="claude-opus-4-8").complete( + "hello", temperature=0.7 + ) + + kwargs = client.with_options.return_value.messages.create.call_args.kwargs + assert "temperature" not in kwargs + assert "top_p" not in kwargs + assert "top_k" not in kwargs + + def test_sonnet_and_haiku_keep_temperature(self): + for model in ("claude-sonnet-4-6", "claude-haiku-4-5-20251001"): + with patch("anthropic.Anthropic") as mock_anthropic: + from plexmix.ai.claude_provider import ClaudeProvider + + client = mock_anthropic.return_value + client.with_options.return_value.messages.create.return_value = _claude_response( + "hi" + ) + + ClaudeProvider(api_key="sk-test", model=model).complete("hello", temperature=0.4) + + kwargs = client.with_options.return_value.messages.create.call_args.kwargs + assert kwargs["temperature"] == 0.4, model + + +class TestFactoryConstructsNewDefaults: + def test_openai_default(self): + with patch("openai.OpenAI"): + from plexmix.ai import get_ai_provider + + assert get_ai_provider("openai", api_key="sk-test").model == "gpt-5.4-mini" + + def test_gemini_default(self): + with patch("google.genai.Client"): + from plexmix.ai import get_ai_provider + + assert get_ai_provider("gemini", api_key="test-key").model == "gemini-3.5-flash" + + def test_claude_default(self): + with patch("anthropic.Anthropic"): + from plexmix.ai import get_ai_provider + + assert get_ai_provider("claude", api_key="sk-test").model == "claude-sonnet-4-6" + + +class TestSettingsTestPaths: + """The Settings provider-connection test paths (_settings_testing.py).""" + + def test_test_openai_path_uses_reasoning_params(self): + from plexmix.ui.states._settings_testing import test_ai_provider_impl + + state = _FakeState(ai_provider="openai", ai_model="gpt-5.4-mini", ai_api_key="sk-test") + with patch("openai.OpenAI") as mock_openai: + client = mock_openai.return_value + client.chat.completions.create.return_value = _openai_response("test") + asyncio.run(test_ai_provider_impl(state)) + + kwargs = client.chat.completions.create.call_args.kwargs + assert "max_completion_tokens" in kwargs + assert "max_tokens" not in kwargs + assert "✓" in state.ai_test_status # reached the success path (no 400) + + def test_test_custom_path_keeps_max_tokens(self): + from plexmix.ui.states._settings_testing import test_ai_provider_impl + + state = _FakeState( + ai_provider="custom", + ai_custom_endpoint="http://localhost:11434/v1", + ai_custom_model="llama3", + ) + with patch("openai.OpenAI") as mock_openai: + client = mock_openai.return_value + client.chat.completions.create.return_value = _openai_response("test") + asyncio.run(test_ai_provider_impl(state)) + + kwargs = client.chat.completions.create.call_args.kwargs + assert kwargs["max_tokens"] == 10 + assert "max_completion_tokens" not in kwargs diff --git a/tests/test_registry.py b/tests/test_registry.py index 562390e..7b94c96 100644 --- a/tests/test_registry.py +++ b/tests/test_registry.py @@ -8,6 +8,7 @@ get_ai_models, get_ai_models_display, get_default_ai_model, + get_default_ai_model_display, get_embedding_models, get_default_embedding_model, get_embedding_dimension, @@ -80,11 +81,11 @@ def test_gemini_sorted(self): def test_openai(self): models = get_ai_models("openai") - assert "gpt-5-mini" in models + assert "gpt-5.4-mini" in models def test_claude(self): models = get_ai_models("claude") - assert "claude-sonnet-4-5-20250929" in models + assert "claude-sonnet-4-6" in models def test_cohere(self): models = get_ai_models("cohere") @@ -115,16 +116,16 @@ def test_gemini_same_as_regular(self): class TestGetDefaultAIModel: def test_gemini(self): - assert get_default_ai_model("gemini") == "gemini-2.5-flash" + assert get_default_ai_model("gemini") == "gemini-3.5-flash" def test_openai(self): - assert get_default_ai_model("openai") == "gpt-5-mini" + assert get_default_ai_model("openai") == "gpt-5.4-mini" def test_claude(self): - assert get_default_ai_model("claude") == "claude-sonnet-4-5-20250929" + assert get_default_ai_model("claude") == "claude-sonnet-4-6" def test_cohere(self): - assert get_default_ai_model("cohere") == "command-r7b-12-2024" + assert get_default_ai_model("cohere") == "command-a-03-2025" def test_local(self): assert get_default_ai_model("local") == "google/gemma-3-1b" @@ -234,3 +235,56 @@ def test_embedding_cloud_providers(self): def test_embedding_local_custom_no_key(self): assert not requires_embedding_api_key("local") assert not requires_embedding_api_key("custom") + + +# --------------------------------------------------------------------------- +# Default model in display form (used by the Settings UI default selection) +# --------------------------------------------------------------------------- + + +class TestGetDefaultAIModelDisplay: + def test_gemini(self): + assert get_default_ai_model_display("gemini") == "gemini-3.5-flash" + + def test_openai(self): + assert get_default_ai_model_display("openai") == "gpt-5.4-mini" + + def test_claude(self): + assert get_default_ai_model_display("claude") == "claude-sonnet-4-6" + + def test_anthropic_alias_resolves_to_claude_default(self): + assert get_default_ai_model_display("anthropic") == "claude-sonnet-4-6" + + def test_default_is_present_in_display_list(self): + for p in ("gemini", "openai", "claude", "anthropic", "cohere"): + assert get_default_ai_model_display(p) in get_ai_models_display(p), p + + +# --------------------------------------------------------------------------- +# Catalog currency — new defaults present, EOL/invalid/deprecated absent +# --------------------------------------------------------------------------- + + +class TestCatalogCurrency: + def test_new_default_models(self): + assert AI_PROVIDERS["gemini"].default_model == "gemini-3.5-flash" + assert AI_PROVIDERS["openai"].default_model == "gpt-5.4-mini" + assert AI_PROVIDERS["claude"].default_model == "claude-sonnet-4-6" + assert AI_PROVIDERS["cohere"].default_model == "command-a-03-2025" + + def test_eol_invalid_and_deprecated_models_absent(self): + all_models = [m for p in AI_PROVIDERS.values() for m in p.models] + for dead in ( + "gemini-2.0-flash-001", # EOL 2026-06-01 + "claude-opus-4-1-20250414", # invalid ID + "gpt-5-mini", # superseded GPT-5.0 tier + "command-r-plus", # deprecated undated alias + "command-r", # deprecated undated alias + ): + assert dead not in all_models, f"{dead} should not be offered" + + def test_embedding_catalog_unchanged(self): + assert EMBEDDING_PROVIDERS["gemini"].default_model == "gemini-embedding-001" + assert EMBEDDING_PROVIDERS["gemini"].default_dimension == 3072 + assert EMBEDDING_PROVIDERS["openai"].default_model == "text-embedding-3-small" + assert EMBEDDING_PROVIDERS["cohere"].default_model == "embed-v4.0" diff --git a/tests/ui/test_states.py b/tests/ui/test_states.py index 98ae477..0d2b463 100644 --- a/tests/ui/test_states.py +++ b/tests/ui/test_states.py @@ -243,6 +243,27 @@ def test_update_model_lists(self): assert len(state.ai_models) > 0 assert any("gpt" in model.lower() for model in state.ai_models) + def test_update_model_lists_preselects_registry_default(self): + """An empty model auto-selects the registry default, not sorted-first.""" + from plexmix.ui.states.settings_state import SettingsState + + state = SettingsState() + state.ai_provider = "gemini" + state.ai_model = "" + state.update_model_lists() + assert state.ai_model == "gemini-3.5-flash" + + def test_set_ai_provider_selects_registry_default(self): + """Switching providers selects that provider's registry default.""" + from unittest.mock import patch + from plexmix.ui.states.settings_state import SettingsState + + state = SettingsState() + state.ai_model = "gemini-3.5-flash" # a previous provider's selection + with patch("plexmix.ui.states.settings_state.SettingsState._load_ai_api_key_for_provider"): + state.set_ai_provider("anthropic") + assert state.ai_model == "claude-sonnet-4-6" + class TestGeneratorState: """Test cases for GeneratorState.""" @@ -788,6 +809,28 @@ def test_set_embedding_provider_triggers_sync(self): state.set_embedding_provider("openai") assert state.embedding_dimension == 1536 + def test_set_ai_provider_custom_has_empty_model_list(self): + from unittest.mock import patch + from plexmix.ui.states.settings_state import SettingsState + + state = SettingsState() + with patch("plexmix.ui.states.settings_state.SettingsState._load_ai_api_key_for_provider"): + state.set_ai_provider("custom") + # Custom has no catalog models; the dropdown is empty and nothing crashes. + assert state.ai_models == [] + + def test_set_ai_provider_local_selects_default_model(self): + from unittest.mock import patch + from plexmix.ui.states.settings_state import SettingsState + from plexmix.ai.local_provider import LOCAL_LLM_DEFAULT_MODEL + + state = SettingsState() + state.ai_model = "gpt-5.4-mini" # a previous provider's selection + with patch("plexmix.ui.states.settings_state.SettingsState._load_ai_api_key_for_provider"): + state.set_ai_provider("local") + assert state.ai_model == LOCAL_LLM_DEFAULT_MODEL + assert len(state.ai_models) > 0 + def test_set_ai_provider_loads_key_for_new_provider(self): from unittest.mock import patch from plexmix.ui.states.settings_state import SettingsState From 1d1f7259f6049619b4e09b9d30d8414428d3d5a0 Mon Sep 17 00:00:00 2001 From: "Izzo, Anthony M" Date: Mon, 1 Jun 2026 11:22:06 -0700 Subject: [PATCH 2/3] feat: redesign web UI and add cancellable long-running jobs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Redesign the web UI around a glass icon-rail and a ⌘K command palette (page search, action runner, quick vibes, g+key navigation). The Generator becomes an "AI-thinking" showpiece: a live particle vector-field, a four-phase progress tracker bound to the real generation pipeline, a streaming terminal log, and a results playlist with removable tracks. Add Settings → Appearance (theme toggle, density, accent intensity; persisted across reloads) and default the UI to light mode. Make every long-running job cancellable from the UI — library sync, embedding generation, MusicBrainz enrichment, audio analysis, Doctor fixes, and tagging — behind a single shared, shell-level confirmation that works from any page and the command palette. Work loops stop cooperatively at their next checkpoint and the "cancelled" outcome is surfaced (no longer reported as completed). Add a global "Cancel running task" command (⌘K) that stops all TaskStore-backed jobs plus an in-progress playlist generation. Backend: generate_embeddings_for_tracks and generate_tags_batch now honor a cancel_event between batches. Remove the orphaned per-page cancel-confirm machinery in LibraryState (request_cancel_sync / cancel_sync / request_cancel_audio / cancel_audio_analysis, their dismiss siblings, and the show_*_confirm vars), superseded by the shared AppState.request_cancel / confirm_cancel dialog mounted in the shell. Also: refresh logos, favicon, and brand assets; regenerate README hero screenshots; add the Claude Design handoff bundle under docs/design/; and gitignore .codex/. --- .gitignore | 2 + CHANGELOG.md | 7 + README.md | 33 +- assets/colors_and_type.css | 270 ++++ assets/favicon.svg | 121 +- assets/icon-orange.svg | 29 + assets/logo-dark.svg | 123 +- assets/logo-light.svg | 134 +- assets/redesign.css | 516 ++++++++ docs/design/plexmix-webui/README.md | 25 + docs/design/plexmix-webui/chats/chat1.md | 353 ++++++ docs/design/plexmix-webui/project/.thumbnail | Bin 0 -> 5340 bytes .../plexmix-webui/project/PlexMix WebUI.html | 51 + docs/design/plexmix-webui/project/app.css | 229 ++++ .../plexmix-webui/project/assets/favicon.svg | 29 + .../fonts/IBMPlexMono-Medium-latin.woff2 | Bin 0 -> 10060 bytes .../fonts/IBMPlexMono-Regular-latin.woff2 | Bin 0 -> 10052 bytes .../assets/fonts/IBMPlexSans-latin.woff2 | Bin 0 -> 40240 bytes .../assets/fonts/SpaceGrotesk-latin.woff2 | Bin 0 -> 22320 bytes .../project/assets/icon-orange.svg | 29 + .../project/assets/logo-dark.svg | 25 + .../project/assets/logo-light.svg | 27 + .../plexmix-webui/project/colors_and_type.css | 270 ++++ .../project/screenshots/01-03-results.png | Bin 0 -> 29214 bytes .../project/screenshots/01-generator.png | Bin 0 -> 35627 bytes .../project/screenshots/01-tag.png | Bin 0 -> 46317 bytes .../project/screenshots/02-03-results.png | Bin 0 -> 41017 bytes .../project/screenshots/02-tag.png | Bin 0 -> 47019 bytes .../project/screenshots/02-thinking.png | Bin 0 -> 14223 bytes .../project/screenshots/03-results.png | Bin 0 -> 14223 bytes .../plexmix-webui/project/screenshots/cmd.png | Bin 0 -> 47227 bytes .../project/screenshots/dark-gen.png | Bin 0 -> 40050 bytes .../project/screenshots/dash.png | Bin 0 -> 48502 bytes .../plexmix-webui/project/screenshots/doc.png | Bin 0 -> 42020 bytes .../project/screenshots/header.png | Bin 0 -> 48961 bytes .../project/screenshots/hist.png | Bin 0 -> 39075 bytes .../plexmix-webui/project/screenshots/lib.png | Bin 0 -> 57458 bytes .../plexmix-webui/project/screenshots/set.png | Bin 0 -> 24897 bytes docs/design/plexmix-webui/project/src/app.jsx | 103 ++ .../plexmix-webui/project/src/dashboard.jsx | 106 ++ .../design/plexmix-webui/project/src/data.jsx | 114 ++ .../plexmix-webui/project/src/doctor.jsx | 81 ++ .../plexmix-webui/project/src/generator.jsx | 338 +++++ .../plexmix-webui/project/src/history.jsx | 97 ++ .../plexmix-webui/project/src/library.jsx | 113 ++ .../plexmix-webui/project/src/primitives.jsx | 125 ++ .../plexmix-webui/project/src/settings.jsx | 141 +++ .../plexmix-webui/project/src/shell.jsx | 197 +++ .../plexmix-webui/project/src/tagging.jsx | 136 ++ .../project/src/tweaks-panel.jsx | 540 ++++++++ docs/design/plexmix-webui/project/styles.css | 278 +++++ docs/screenshots/dashboard-dark.png | Bin 156746 -> 186066 bytes docs/screenshots/dashboard-light.png | Bin 154152 -> 179250 bytes docs/screenshots/generator.png | Bin 162479 -> 347581 bytes docs/screenshots/hero-dashboard-dark.png | Bin 160723 -> 194410 bytes docs/screenshots/hero-dashboard-light.png | Bin 158523 -> 191275 bytes docs/screenshots/hero-generator.png | Bin 167294 -> 367277 bytes docs/screenshots/hero-library.png | Bin 140702 -> 299500 bytes docs/screenshots/hero-settings.png | Bin 202097 -> 163810 bytes docs/screenshots/library.png | Bin 135816 -> 279816 bytes docs/screenshots/settings.png | Bin 197798 -> 154918 bytes make_hero_screenshots.py | 42 +- plexmix_ui/assets/logo-dark.svg | 123 +- plexmix_ui/assets/logo-light.svg | 134 +- plexmix_ui/plexmix_ui.py | 12 +- plexmix_ui/public/logo-dark.svg | 123 +- plexmix_ui/public/logo-light.svg | 134 +- src/plexmix/playlist/generator.py | 13 + src/plexmix/services/tagging_service.py | 5 + src/plexmix/ui/components/navbar.py | 863 ++++++------- src/plexmix/ui/job_manager.py | 21 + src/plexmix/ui/pages/dashboard.py | 348 ++---- src/plexmix/ui/pages/doctor.py | 678 +++------- src/plexmix/ui/pages/generator.py | 1107 ++++++----------- src/plexmix/ui/pages/history.py | 857 ++----------- src/plexmix/ui/pages/library.py | 866 ++++--------- src/plexmix/ui/pages/settings.py | 68 +- src/plexmix/ui/pages/tagging.py | 653 +++------- src/plexmix/ui/states/app_state.py | 45 + src/plexmix/ui/states/appearance_state.py | 30 + .../ui/states/command_palette_state.py | 170 +++ src/plexmix/ui/states/doctor_state.py | 69 +- src/plexmix/ui/states/generator_state.py | 70 ++ src/plexmix/ui/states/library_state.py | 45 +- src/plexmix/ui/states/tagging_state.py | 5 +- take_screenshots.py | 111 +- 86 files changed, 6530 insertions(+), 4704 deletions(-) create mode 100644 assets/colors_and_type.css create mode 100644 assets/icon-orange.svg create mode 100644 assets/redesign.css create mode 100644 docs/design/plexmix-webui/README.md create mode 100644 docs/design/plexmix-webui/chats/chat1.md create mode 100644 docs/design/plexmix-webui/project/.thumbnail create mode 100644 docs/design/plexmix-webui/project/PlexMix WebUI.html create mode 100644 docs/design/plexmix-webui/project/app.css create mode 100644 docs/design/plexmix-webui/project/assets/favicon.svg create mode 100644 docs/design/plexmix-webui/project/assets/fonts/IBMPlexMono-Medium-latin.woff2 create mode 100644 docs/design/plexmix-webui/project/assets/fonts/IBMPlexMono-Regular-latin.woff2 create mode 100644 docs/design/plexmix-webui/project/assets/fonts/IBMPlexSans-latin.woff2 create mode 100644 docs/design/plexmix-webui/project/assets/fonts/SpaceGrotesk-latin.woff2 create mode 100644 docs/design/plexmix-webui/project/assets/icon-orange.svg create mode 100644 docs/design/plexmix-webui/project/assets/logo-dark.svg create mode 100644 docs/design/plexmix-webui/project/assets/logo-light.svg create mode 100644 docs/design/plexmix-webui/project/colors_and_type.css create mode 100644 docs/design/plexmix-webui/project/screenshots/01-03-results.png create mode 100644 docs/design/plexmix-webui/project/screenshots/01-generator.png create mode 100644 docs/design/plexmix-webui/project/screenshots/01-tag.png create mode 100644 docs/design/plexmix-webui/project/screenshots/02-03-results.png create mode 100644 docs/design/plexmix-webui/project/screenshots/02-tag.png create mode 100644 docs/design/plexmix-webui/project/screenshots/02-thinking.png create mode 100644 docs/design/plexmix-webui/project/screenshots/03-results.png create mode 100644 docs/design/plexmix-webui/project/screenshots/cmd.png create mode 100644 docs/design/plexmix-webui/project/screenshots/dark-gen.png create mode 100644 docs/design/plexmix-webui/project/screenshots/dash.png create mode 100644 docs/design/plexmix-webui/project/screenshots/doc.png create mode 100644 docs/design/plexmix-webui/project/screenshots/header.png create mode 100644 docs/design/plexmix-webui/project/screenshots/hist.png create mode 100644 docs/design/plexmix-webui/project/screenshots/lib.png create mode 100644 docs/design/plexmix-webui/project/screenshots/set.png create mode 100644 docs/design/plexmix-webui/project/src/app.jsx create mode 100644 docs/design/plexmix-webui/project/src/dashboard.jsx create mode 100644 docs/design/plexmix-webui/project/src/data.jsx create mode 100644 docs/design/plexmix-webui/project/src/doctor.jsx create mode 100644 docs/design/plexmix-webui/project/src/generator.jsx create mode 100644 docs/design/plexmix-webui/project/src/history.jsx create mode 100644 docs/design/plexmix-webui/project/src/library.jsx create mode 100644 docs/design/plexmix-webui/project/src/primitives.jsx create mode 100644 docs/design/plexmix-webui/project/src/settings.jsx create mode 100644 docs/design/plexmix-webui/project/src/shell.jsx create mode 100644 docs/design/plexmix-webui/project/src/tagging.jsx create mode 100644 docs/design/plexmix-webui/project/src/tweaks-panel.jsx create mode 100644 docs/design/plexmix-webui/project/styles.css create mode 100644 src/plexmix/ui/states/appearance_state.py create mode 100644 src/plexmix/ui/states/command_palette_state.py diff --git a/.gitignore b/.gitignore index 9f19474..058c124 100644 --- a/.gitignore +++ b/.gitignore @@ -60,6 +60,8 @@ dmypy.json .idea/ .vscode/ .cursor/ +.agents/ +.codex/ *.code-workspace .early.coverage diff --git a/CHANGELOG.md b/CHANGELOG.md index 29f4e57..5b38ed2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added +- Redesign the web UI around a glass icon-rail and a ⌘K command palette (search pages, run actions, fire a quick vibe; `g`+key navigation). The Generator is reimagined as an "AI-thinking" showpiece: a live particle vector-field, a four-phase progress tracker bound to the real generation pipeline, a streaming terminal log, and a results playlist with removable tracks. +- Add a Settings → Appearance section with a theme toggle plus Density (comfortable/compact) and Accent-intensity (subtle/balanced/vivid) preferences, persisted across reloads. +- Allow cancelling an in-progress playlist generation from the Generator. +- Cancel any running long-running job from the UI — library sync, embedding generation, MusicBrainz enrichment, audio analysis, Doctor fixes, and tagging — each behind a confirmation, with the work actually stopping and a "cancelled" outcome shown. Adds a global **"Cancel running task"** command (⌘K) that stops everything in flight. + ### Changed +- **The web UI now defaults to light mode** (previously dark). Your choice is remembered and can be toggled from the rail, the top bar, or Settings → Appearance. - Refresh default AI models to the current generation in a balanced, cost-aware tier: Gemini `gemini-3.5-flash`, OpenAI `gpt-5.4-mini`, Claude `claude-sonnet-4-6`, Cohere `command-a-03-2025`. Newer flagship options (`gpt-5.5`, `claude-opus-4-8`, `gemini-3.1-pro-preview`, `command-a-plus-05-2026`) are also selectable. Embedding models are unchanged, so existing FAISS indexes do not need to be regenerated. - The configured `temperature` setting now has no effect for OpenAI GPT-5, Gemini 3, and Claude Opus 4.7+ models — those families don't accept a custom temperature. It still applies to Claude Sonnet/Haiku, Cohere, custom, and local providers. diff --git a/README.md b/README.md index 3ef3eb7..2ef8000 100644 --- a/README.md +++ b/README.md @@ -148,41 +148,42 @@ PLEXMIX_UI_PASSWORD=mysecret plexmix ui --host 0.0.0.0 Dashboard - Light Mode Dashboard - Dark Mode +*Dashboard — glass icon rail, ⌘K command palette, and a working light/dark theme* + Playlist Generator -*AI-powered playlist generator with mood-based queries* +*The Generator showpiece — describe a vibe and an animated AI-thinking pipeline curates a playlist from your own library* Library Manager -*Browse and manage your music library with advanced filtering* +*Library — search, filter, sync, and bulk-manage thousands of tracks* Settings -*Configure Plex, AI providers, and embeddings* +*Settings — connections, providers, embeddings, and the new Appearance controls (theme, density, accent)* #### Web UI Features -The web interface provides a modern, intuitive way to interact with PlexMix: +The web interface is built around a slim glass **icon rail** and a **⌘K command palette**: -- **📊 Dashboard** - Overview of library stats, configuration status, and quick actions -- **⚙️ Settings** - Configure Plex, AI providers, and embeddings with real-time validation and model auto-discovery +- **📊 Dashboard** - Library stats, configuration status, quick actions, and recent playlists at a glance +- **🎵 Playlist Generator** - The showpiece: describe a vibe and watch an animated AI-thinking pipeline (embed → vector search → diversity → order) curate a playlist, then reorder/save the result (4 ordering modes, advanced audio filters, cancellable) - **📚 Library Manager** - Browse, search, filter by tag/genre/audio, sync with live progress, bulk tag/delete operations -- **🎵 Playlist Generator** - Create mood-based playlists with template gallery, 4 ordering modes, and advanced audio filters -- **🏷️ AI Tagging** - Batch generate tags with stale tag detection and retag support -- **📜 Playlist History** - View, reorder, rerun, export (JSON/M3U/Plex), and import playlists -- **🩺 Doctor** - Database health dashboard with automated repair +- **🏷️ AI Tagging** - Batch generate tags with stale tag detection, retag support, and inline tag editing +- **📜 Playlist History** - Album-mosaic cards; view, rerun, export (JSON/M3U/Plex), and import playlists +- **🩺 Doctor** - Database health checks with one-click fixes +- **⚙️ Settings** - Configure Plex, AI providers, and embeddings (with model auto-discovery), plus theme / density / accent under **Appearance** #### Key UI Features -- **🌓 Dark/Light Mode** - Toggle between themes with automatic logo switching -- **⌨️ Keyboard Shortcuts** - Vim-style `g+key` navigation, `/` for search, `Esc` to blur +- **🧭 Glass icon rail + ⌘K command palette** - A slim navigation rail with hover tooltips and `g+key` hints, plus a command palette (⌘K or `/`) to jump to any page, run an action, or fire a quick vibe +- **🎬 Generator showpiece** - An animated "AI-thinking" pipeline with a live particle vector-field, a four-phase tracker bound to the real generation pipeline, and a streaming terminal log +- **🌓 Light-first theme + appearance controls** - Light by default with a dark toggle (auto logo switching), plus Density (comfortable/compact) and Accent-intensity (subtle/balanced/vivid) preferences in Settings → Appearance +- **⌨️ Keyboard-driven** - Vim-style `g+key` navigation, ⌘K / `/` to open the palette, ↑↓ + Enter to pick a command, `Esc` to close - **Real-time Progress** - Live updates for sync, tagging, and generation operations -- **Form Validation** - Instant feedback on configuration settings -- **Loading States** - Skeleton screens and spinners for smooth UX -- **Error Handling** - User-friendly error messages with recovery options -- **Responsive Design** - Mobile-optimized with icon-only buttons, hidden columns, and adaptive layouts +- **Resilient UX** - Form validation, empty/loading states, and user-friendly error messages with recovery options ## Installation diff --git a/assets/colors_and_type.css b/assets/colors_and_type.css new file mode 100644 index 0000000..b5e4d86 --- /dev/null +++ b/assets/colors_and_type.css @@ -0,0 +1,270 @@ +/* ================================================================ + PlexMix Design System — colors_and_type.css + ---------------------------------------------------------------- + Single source of truth for color + type tokens, lifted directly + from the product's assets/styles.css (Reflex/Radix theme). + LIGHT MODE IS THE DEFAULT (:root). Add class="dark" to + for the dark variant — every token has a dark override below. + ================================================================ */ + +/* ---------------------------------------------------------------- + 0. Self-hosted fonts (latin subset, from the repo) + ---------------------------------------------------------------- */ +@font-face { + font-family: 'Space Grotesk'; + font-style: normal; + font-weight: 400 700; /* variable */ + font-display: swap; + src: url('/fonts/SpaceGrotesk-latin.woff2') format('woff2'); +} +@font-face { + font-family: 'IBM Plex Sans'; + font-style: normal; + font-weight: 400 700; /* variable */ + font-display: swap; + src: url('/fonts/IBMPlexSans-latin.woff2') format('woff2'); +} +@font-face { + font-family: 'IBM Plex Mono'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('/fonts/IBMPlexMono-Regular-latin.woff2') format('woff2'); +} +@font-face { + font-family: 'IBM Plex Mono'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('/fonts/IBMPlexMono-Medium-latin.woff2') format('woff2'); +} + +/* ================================================================ + 1. LIGHT MODE — the product's default appearance (:root). + Dark mode is opt-in via .dark / [data-theme="dark"] (see below). + ================================================================ */ +:root { + /* --- Brand Orange — 12-step scale (light) --- */ + --brand-1: #fef8f4; + --brand-2: #fdf3ec; + --brand-3: #fceadd; + --brand-4: #f9dcc9; + --brand-5: #f3c9a8; + --brand-6: #eab382; + --brand-7: #e09b5e; + --brand-8: #d68034; + --brand-9: #F97316; /* primary brand orange */ + --brand-10: #EA580C; /* hover / pressed */ + --brand-11: #b55f18; /* accent text on light */ + --brand-12: #5c2d0f; + --brand-glow: rgba(249, 115, 22, 0.15); + + /* --- Legacy vinyl palette (retired; decorative album-art swatches only) --- */ + --logo-crimson: #e94560; + --logo-amber: #f39c12; + + /* --- Gray scale (light) --- */ + --pm-gray-1: #fcfcfc; + --pm-gray-2: #f9f9f9; + --pm-gray-3: #f0f0f0; + --pm-gray-4: #e8e8e8; + --pm-gray-5: #e0e0e0; + --pm-gray-6: #d9d9d9; + --pm-gray-7: #cecece; + --pm-gray-8: #bbbbbb; + --pm-gray-9: #8d8d8d; + --pm-gray-10: #838383; + --pm-gray-11: #646464; + --pm-gray-12: #202020; + + /* --- Semantic --- */ + --pm-success: #22C55E; + --pm-warning: #EAB308; + --pm-error: #EF4444; + --pm-info: #3B82F6; + --pm-purple: #A855F7; /* accent-only (e.g. MusicBrainz stat) */ + + /* --- Ink: text that sits on a saturated fill (theme-independent) --- */ + --brand-ink: #1f1208; /* on orange (--brand-9) buttons */ + --success-ink: #06240f; /* on green (--pm-success) buttons */ + --on-solid: #ffffff; /* on blue / error / info fills */ + + /* --- Tints: soft icon-chip / callout backgrounds (light) --- */ + --brand-bg: var(--brand-3); + --success-bg: rgba(34, 197, 94, 0.14); + --warning-bg: rgba(234, 179, 8, 0.16); + --error-bg: rgba(239, 68, 68, 0.12); + --info-bg: rgba(59, 130, 246, 0.12); + --purple-bg: rgba(168, 85, 247, 0.14); + + /* --- Legacy aliases --- */ + --plexmix-orange: var(--brand-9); + --plexmix-orange-hover: var(--brand-10); + --plexmix-orange-light: var(--brand-glow); + + /* --- Layout --- */ + --navbar-width: 220px; + --content-max-width: 1200px; + + /* --- Spacing (4px grid) --- */ + --space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 16px; + --space-5: 20px; --space-6: 24px; --space-8: 32px; --space-10: 40px; + --space-12: 48px; --space-16: 64px; + + /* --- Border radius --- */ + --radius-sm: 6px; + --radius-md: 8px; + --radius-lg: 12px; + --radius-xl: 16px; + + /* --- Shadows --- */ + --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05); + --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08); + --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.12); + --shadow-glow: 0 0 20px var(--brand-glow); + + /* --- Motion --- */ + --ease-default: cubic-bezier(0.4, 0, 0.2, 1); + --ease-out: cubic-bezier(0.16, 1, 0.3, 1); + --ease-spring: cubic-bezier(0.175, 0.885, 0.32, 1.275); + --duration-fast: 150ms; + --duration-normal: 250ms; + --duration-slow: 400ms; + + /* --- Typography stacks --- */ + --font-display: 'Space Grotesk', system-ui, -apple-system, sans-serif; + --font-body: 'IBM Plex Sans', system-ui, -apple-system, sans-serif; + --font-mono: 'IBM Plex Mono', 'JetBrains Mono', 'Fira Code', ui-monospace, monospace; + + /* --- Surface aliases (resolve light/dark) --- */ + --surface-app: var(--pm-gray-1); /* page background */ + --surface-raised: var(--pm-gray-2); /* cards, tiles, bars */ + --surface-sunken: var(--pm-gray-3); /* code blocks, hover rows */ + --border-subtle: var(--pm-gray-4); + --border-strong: var(--pm-gray-6); + --fg-1: var(--pm-gray-12); /* primary text */ + --fg-2: var(--pm-gray-11); /* secondary text */ + --fg-3: var(--pm-gray-9); /* muted / meta text */ + --accent-fg: var(--brand-11); /* orange text that reads on bg */ + + /* --- Glass chrome (sidebar / bars) --- */ + --glass-bg: rgba(255, 255, 255, 0.8); + --glass-border: rgba(0, 0, 0, 0.08); +} + +/* ================================================================ + 2. DARK MODE (product default) + ================================================================ */ +.dark, +[data-theme="dark"] { + --brand-1: #1f1208; + --brand-2: #2a180d; + --brand-3: #3d2212; + --brand-4: #522e18; + --brand-5: #6b3d20; + --brand-6: #8c522d; + --brand-7: #b06b3d; + --brand-8: #d68034; + --brand-9: #F97316; + --brand-10: #f5933d; + --brand-11: #ffb366; + --brand-12: #ffdfc7; + + --pm-gray-1: #09090B; + --pm-gray-2: #18181B; + --pm-gray-3: #27272A; + --pm-gray-4: #3F3F46; + --pm-gray-5: #52525B; + --pm-gray-6: #71717A; + --pm-gray-7: #A1A1AA; + --pm-gray-8: #D4D4D8; + --pm-gray-9: #6e6e6e; + --pm-gray-10: #7a7a7a; + --pm-gray-11: #b0b0b0; + --pm-gray-12: #FAFAFA; + + --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3); + --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.25); + --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.3); + + --accent-fg: var(--brand-11); + + /* --- Glass chrome (dark) --- */ + --glass-bg: rgba(24, 24, 27, 0.8); + --glass-border: rgba(63, 63, 70, 0.5); + + /* --- Tints (dark — slightly stronger for visibility) --- */ + --success-bg: rgba(34, 197, 94, 0.18); + --warning-bg: rgba(234, 179, 8, 0.20); + --error-bg: rgba(239, 68, 68, 0.18); + --info-bg: rgba(59, 130, 246, 0.18); + --purple-bg: rgba(168, 85, 247, 0.18); +} + +/* ================================================================ + 3. SEMANTIC TYPE SCALE + ---------------------------------------------------------------- + Mirrors the Radix "size" steps the product uses. Headings use + Space Grotesk; body uses IBM Plex Sans; numbers/code use Mono. + ================================================================ */ +:root { + /* Display / headings (Space Grotesk) */ + --h1-size: 39px; --h1-weight: 700; --h1-line: 1.15; /* Radix heading size 8 — page titles */ + --h2-size: 30px; --h2-weight: 700; --h2-line: 1.2; /* size 6 — section heads */ + --h3-size: 23px; --h3-weight: 600; --h3-line: 1.25; /* size 5 */ + --h4-size: 18px; --h4-weight: 600; --h4-line: 1.3; /* size 4 — card titles */ + + /* Body (IBM Plex Sans) */ + --body-lg-size: 16px; --body-lg-line: 1.6; /* size 3 — hero inputs, intros */ + --body-size: 14px; --body-line: 1.55; /* size 2 — default UI text */ + --body-sm-size: 13px; --body-sm-line: 1.5; /* size 1 — meta, labels */ + --caption-size: 11px; --caption-line: 1.4; /* badges, eyebrow labels */ + + /* Mono (IBM Plex Mono) — stats, durations, timestamps, code */ + --mono-size: 14px; +} + +/* ---------------------------------------------------------------- + 3a. Element defaults (opt-in by importing this file) + ---------------------------------------------------------------- */ +body { + font-family: var(--font-body); + font-size: var(--body-size); + line-height: var(--body-line); + color: var(--fg-1); + background-color: var(--surface-app); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +h1, h2, h3, h4, h5, h6 { font-family: var(--font-display); margin: 0; } +h1 { font-size: var(--h1-size); font-weight: var(--h1-weight); line-height: var(--h1-line); letter-spacing: -0.02em; } +h2 { font-size: var(--h2-size); font-weight: var(--h2-weight); line-height: var(--h2-line); letter-spacing: -0.01em; } +h3 { font-size: var(--h3-size); font-weight: var(--h3-weight); line-height: var(--h3-line); } +h4 { font-size: var(--h4-size); font-weight: var(--h4-weight); line-height: var(--h4-line); } + +p { margin: 0; } + +code, pre, kbd, samp { + font-family: var(--font-mono); + font-size: var(--mono-size); +} + +/* Eyebrow / section label — uppercase muted, used in the sidebar */ +.eyebrow { + font-family: var(--font-body); + font-size: var(--caption-size); + font-weight: 500; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--fg-3); +} + +/* The "stat number" treatment — large mono numerals */ +.stat-number { + font-family: var(--font-mono); + font-weight: 700; + font-size: 30px; + line-height: 1; + color: var(--fg-1); +} diff --git a/assets/favicon.svg b/assets/favicon.svg index 7dbd73a..fe823b4 100644 --- a/assets/favicon.svg +++ b/assets/favicon.svg @@ -1,102 +1,29 @@ - + - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - P - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/icon-orange.svg b/assets/icon-orange.svg new file mode 100644 index 0000000..fe823b4 --- /dev/null +++ b/assets/icon-orange.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/logo-dark.svg b/assets/logo-dark.svg index 7dbd73a..c028a17 100644 --- a/assets/logo-dark.svg +++ b/assets/logo-dark.svg @@ -1,102 +1,25 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - P - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/logo-light.svg b/assets/logo-light.svg index 58a794a..35f9081 100644 --- a/assets/logo-light.svg +++ b/assets/logo-light.svg @@ -1,111 +1,27 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - P - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/assets/redesign.css b/assets/redesign.css new file mode 100644 index 0000000..dac6d10 --- /dev/null +++ b/assets/redesign.css @@ -0,0 +1,516 @@ +/* ================================================================ + PlexMix WebUI — reimagined shell. + Built on the PlexMix design tokens (colors_and_type.css). + Light-first; .dark on flips theme. + Tweak hooks: [data-density], [data-accent] on . + ================================================================ */ + +* { box-sizing: border-box; } +html, body { margin: 0; padding: 0; height: 100%; } +body { + font-family: var(--font-body); + background: var(--surface-app); + color: var(--fg-1); + font-size: 14px; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + overflow: hidden; +} +#root { height: 100vh; } +a { color: inherit; text-decoration: none; } +button { font-family: inherit; } +::-webkit-scrollbar { width: 10px; height: 10px; } +::-webkit-scrollbar-thumb { background: var(--pm-gray-5); border-radius: 5px; } +::-webkit-scrollbar-thumb:hover { background: var(--pm-gray-6); } +::-webkit-scrollbar-track { background: transparent; } +::selection { background: var(--brand-4); color: var(--fg-1); } + +/* ---------- Density + accent tweak variables ---------- */ +:root { + --rail-w: 76px; + --topbar-h: 60px; + --page-pad-x: 44px; + --page-pad-y: 36px; + --row-pad-y: 12px; + --card-pad: 20px; + --section-gap: 32px; + --glow-strength: 0.5; /* multiplier the accent tweak scales */ + --cta-glow: var(--shadow-glow); +} +[data-density="compact"] { + --page-pad-x: 32px; + --page-pad-y: 24px; + --row-pad-y: 7px; + --card-pad: 14px; + --section-gap: 22px; +} +[data-accent="subtle"] { --cta-glow: none; --glow-strength: 0; } +[data-accent="vivid"] { --cta-glow: 0 0 28px var(--brand-glow); --glow-strength: 1; } + +/* ================================================================ + App shell — icon rail + main column + ================================================================ */ +.shell { display: flex; height: 100vh; overflow: hidden; } + +.rail { + position: relative; z-index: 60; + width: var(--rail-w); flex-shrink: 0; + height: 100vh; padding: 16px 0 14px; + display: flex; flex-direction: column; align-items: center; gap: 6px; + background: var(--glass-bg); + backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px); + border-right: 1px solid var(--glass-border); +} +.rail-logo { width: 42px; height: 42px; border-radius: 12px; display: block; box-shadow: var(--shadow-sm); cursor: pointer; transition: transform .25s var(--ease-spring); } +.rail-logo:hover { transform: scale(1.06) rotate(-3deg); } +.rail-sep { width: 28px; height: 1px; background: var(--border-subtle); margin: 8px 0; flex-shrink: 0; } +.rail-spacer { flex: 1; } +.rail-group { display: flex; flex-direction: column; align-items: center; gap: 4px; } + +.rail-item { + position: relative; width: 46px; height: 42px; + display: flex; align-items: center; justify-content: center; + border-radius: var(--radius-md); color: var(--fg-3); cursor: pointer; + transition: color .15s var(--ease-default), background-color .15s var(--ease-default); +} +.rail-item:hover { background: var(--surface-sunken); color: var(--fg-1); } +.rail-item.active { background: var(--brand-3); color: var(--brand-11); } +[data-accent="vivid"] .rail-item.active { box-shadow: inset 0 0 0 1px var(--brand-6); } +.rail-item.active::before { + content: ""; position: absolute; left: -16px; top: 50%; transform: translateY(-50%); + width: 3px; height: 22px; border-radius: 2px; background: var(--brand-9); +} +.rail-tip { + position: absolute; left: calc(100% + 12px); top: 50%; transform: translateY(-50%) translateX(-4px); + background: var(--pm-gray-12); color: var(--pm-gray-1); + font-size: 12px; font-weight: 500; padding: 5px 9px; border-radius: var(--radius-sm); + white-space: nowrap; pointer-events: none; opacity: 0; transition: all .15s var(--ease-out); + z-index: 200; box-shadow: var(--shadow-md); +} +.rail-tip .k { font-family: var(--font-mono); font-size: 11px; opacity: .6; margin-left: 6px; } +.rail-item:hover .rail-tip { opacity: 1; transform: translateY(-50%) translateX(0); } +.rail-badge { + position: absolute; top: 5px; right: 7px; width: 7px; height: 7px; border-radius: 50%; + background: var(--pm-error); box-shadow: 0 0 0 2px var(--glass-bg); +} + +.main { flex: 1; min-width: 0; display: flex; flex-direction: column; height: 100vh; } + +/* ---------- Top bar ---------- */ +.topbar { + height: var(--topbar-h); flex-shrink: 0; + display: flex; align-items: center; gap: 16px; + padding: 0 var(--page-pad-x); + border-bottom: 1px solid var(--border-subtle); + background: var(--glass-bg); + backdrop-filter: blur(18px); -webkit-backdrop-filter: blur(18px); + position: relative; z-index: 40; +} +.topbar-title { display: flex; align-items: baseline; gap: 10px; min-width: 0; } +.topbar-title .brand { font-family: var(--font-display); font-size: 19px; font-weight: 700; letter-spacing: -.01em; color: var(--brand-11); } +.topbar-title .crumb-sep { font-family: var(--font-display); font-size: 17px; font-weight: 400; color: var(--fg-3); } +.topbar-title .t { font-family: var(--font-display); font-size: 19px; font-weight: 700; letter-spacing: -.01em; } +.topbar-title .s { font-size: 13px; color: var(--fg-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.topbar-spacer { flex: 1; } + +.cmd-trigger { + display: flex; align-items: center; gap: 10px; height: 34px; padding: 0 10px 0 12px; + background: var(--surface-raised); border: 1px solid var(--border-subtle); + border-radius: var(--radius-md); color: var(--fg-3); font-size: 13px; cursor: pointer; + transition: all .15s var(--ease-default); min-width: 210px; +} +.cmd-trigger:hover { border-color: var(--border-strong); color: var(--fg-2); } +.cmd-trigger .kbd { margin-left: auto; } +.kbd { + font-family: var(--font-mono); font-size: 11px; color: var(--fg-2); + background: var(--surface-sunken); border: 1px solid var(--border-subtle); + border-radius: 5px; padding: 2px 6px; line-height: 1; +} +.icon-btn { + width: 34px; height: 34px; border-radius: var(--radius-md); border: 1px solid transparent; + background: transparent; color: var(--fg-2); cursor: pointer; display: flex; + align-items: center; justify-content: center; transition: all .15s var(--ease-default); flex-shrink: 0; +} +.icon-btn:hover { background: var(--surface-sunken); color: var(--fg-1); } +.avatar { + width: 34px; height: 34px; border-radius: 50%; flex-shrink: 0; cursor: pointer; + background: linear-gradient(135deg, var(--brand-9), var(--brand-10)); + color: #fff; font-family: var(--font-display); font-weight: 700; font-size: 13px; + display: flex; align-items: center; justify-content: center; box-shadow: var(--shadow-sm); +} + +/* ---------- Page scroll area ---------- */ +.scroll { flex: 1; overflow-y: auto; position: relative; } +.page { padding: var(--page-pad-y) var(--page-pad-x); max-width: 1240px; margin: 0 auto; } +.page-wide { max-width: 1400px; } +.page-head { margin-bottom: var(--section-gap); } +.page-head h1 { font-family: var(--font-display); font-size: 32px; font-weight: 700; letter-spacing: -.02em; } +.page-head .sub { font-size: 15px; color: var(--fg-3); margin-top: 5px; } +.section { margin-bottom: var(--section-gap); } +.section-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; } +.section-head h2 { font-family: var(--font-display); font-size: 17px; font-weight: 700; } +.section-head .more { font-size: 13px; color: var(--accent-fg); cursor: pointer; } +.eyebrow { font-family: var(--font-body); font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: .08em; color: var(--fg-3); } + +/* indeterminate top loading bar */ +.loadbar { position: absolute; top: 0; left: 0; right: 0; height: 2px; background: transparent; overflow: hidden; z-index: 50; } +.loadbar .ind { height: 100%; width: 30%; background: var(--brand-9); border-radius: 1px; animation: prog 1.3s var(--ease-default) infinite; } +@keyframes prog { 0% { transform: translateX(-110%); } 100% { transform: translateX(360%); } } + +/* ================================================================ + Reusable brand components (from the kit) + ================================================================ */ +.btn { font-family: var(--font-body); font-weight: 500; border: none; cursor: pointer; + border-radius: var(--radius-md); display: inline-flex; align-items: center; justify-content: center; gap: 8px; + transition: transform .1s var(--ease-default), background-color .15s, box-shadow .2s; white-space: nowrap; } +.btn:active { transform: scale(.98); } +.btn:disabled { opacity: .5; cursor: not-allowed; } +.btn-3 { height: 40px; padding: 0 16px; font-size: 14px; } +.btn-4 { height: 50px; padding: 0 24px; font-size: 16px; } +.btn-sm { height: 32px; padding: 0 12px; font-size: 13px; } +.btn-primary { background: var(--brand-9); color: var(--brand-ink); } +.btn-primary:hover:not(:disabled) { background: var(--brand-10); } +.btn-primary.glow { box-shadow: var(--cta-glow); } +.btn-primary.glow:hover:not(:disabled) { box-shadow: 0 0 26px var(--brand-glow); } +.btn-blue { background: var(--pm-info); color: var(--on-solid); } +.btn-blue:hover:not(:disabled) { filter: brightness(.95); } +.btn-green { background: var(--pm-success); color: var(--success-ink); } +.btn-green:hover:not(:disabled) { filter: brightness(.97); } +.btn-soft { background: var(--surface-sunken); color: var(--fg-1); border: 1px solid var(--border-subtle); } +.btn-soft:hover:not(:disabled) { background: var(--pm-gray-4); } +.btn-ghost { background: transparent; color: var(--fg-2); } +.btn-ghost:hover:not(:disabled) { background: var(--surface-sunken); color: var(--fg-1); } +.btn-outline { background: transparent; color: var(--fg-1); border: 1px solid var(--border-strong); } +.btn-outline:hover:not(:disabled) { border-color: var(--brand-9); color: var(--brand-11); } +.btn-icon { padding: 0; width: 32px; height: 32px; } + +.card { background: var(--surface-raised); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); } +.tile { background: var(--surface-raised); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); padding: var(--card-pad); } +.hover-lift { transition: transform .2s var(--ease-out), box-shadow .2s var(--ease-out), border-color .2s; } +.hover-lift:hover { transform: translateY(-2px); box-shadow: var(--shadow-lg); } + +.badge { font-size: 11px; font-weight: 500; border-radius: var(--radius-sm); padding: 3px 8px; display: inline-flex; align-items: center; gap: 5px; line-height: 1.4; } +.badge-orange { background: var(--brand-3); color: var(--brand-11); } +.badge-gray { background: var(--surface-sunken); color: var(--fg-2); } +.badge-green { background: var(--success-bg); color: var(--pm-success); } +.badge-blue { background: var(--info-bg); color: var(--pm-info); } +.badge-purple { background: var(--purple-bg); color: var(--pm-purple); } +.badge-red { background: var(--error-bg); color: var(--pm-error); } +.badge-yellow { background: var(--warning-bg); color: var(--pm-warning); } + +.mono { font-family: var(--font-mono); } +.fg2 { color: var(--fg-2); } .fg3 { color: var(--fg-3); } + +.dot { width: 7px; height: 7px; border-radius: 50%; display: inline-block; flex-shrink: 0; } +.dot-success { background: var(--pm-success); } .dot-error { background: var(--pm-error); } +.dot-warning { background: var(--pm-warning); } .dot-info { background: var(--pm-info); } +.dot-idle { background: var(--pm-gray-7); } +.pulse { animation: pulse 2s ease-in-out infinite; } +@keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: .4; } } + +.input, .textarea, .select { width: 100%; font-family: var(--font-body); font-size: 14px; + background: var(--surface-app); color: var(--fg-1); + border: 1px solid var(--border-strong); border-radius: var(--radius-md); padding: 10px 12px; outline: none; + transition: border-color .15s, box-shadow .15s; } +.input::placeholder, .textarea::placeholder { color: var(--fg-3); } +.input:focus, .textarea:focus, .select:focus { border-color: var(--brand-9); box-shadow: 0 0 0 3px var(--brand-glow); } +.textarea { resize: none; line-height: 1.55; } +.select { cursor: pointer; appearance: none; background-image: none; } +.field-label { display: block; font-size: 13px; font-weight: 500; color: var(--fg-2); margin-bottom: 6px; } +.field-help { font-size: 12px; color: var(--fg-3); margin-top: 6px; line-height: 1.5; } + +input[type="checkbox"] { accent-color: var(--brand-9); width: 16px; height: 16px; cursor: pointer; } +input[type="range"] { accent-color: var(--brand-9); width: 100%; cursor: pointer; } + +/* ---------- Table ---------- */ +.tbl { width: 100%; border-collapse: collapse; } +.tbl th { text-align: left; font-size: 12px; font-weight: 600; color: var(--fg-3); text-transform: uppercase; letter-spacing: .04em; + padding: 10px 14px; border-bottom: 1px solid var(--border-subtle); white-space: nowrap; position: sticky; top: 0; background: var(--surface-raised); z-index: 1; } +.tbl td { font-size: 14px; padding: var(--row-pad-y) 14px; border-bottom: 1px solid var(--border-subtle); } +.tbl tbody tr { transition: background-color .12s var(--ease-default); } +.tbl tbody tr:hover td { background: var(--surface-sunken); } +.tbl tbody tr:last-child td { border-bottom: none; } +.tbl-wrap { background: var(--surface-raised); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); overflow: hidden; } + +/* ---------- Progress ---------- */ +.pbar { height: 8px; background: var(--surface-sunken); border-radius: 4px; overflow: hidden; flex: 1; } +.pfill { height: 100%; background: var(--brand-9); border-radius: 4px; transition: width .35s var(--ease-out); } +.pfill.indet { width: 35% !important; animation: prog 1.2s var(--ease-default) infinite; } + +/* ---------- Callout ---------- */ +.callout { display: flex; gap: 11px; align-items: flex-start; padding: 13px 15px; border-radius: var(--radius-md); font-size: 13px; line-height: 1.5; } +.callout .c-ico { flex-shrink: 0; margin-top: 1px; } +.callout .c-title { font-weight: 600; margin-bottom: 2px; } +.callout .c-body { color: var(--fg-2); } +.callout .c-body code, .codeinline { font-family: var(--font-mono); font-size: 12px; background: var(--surface-sunken); padding: 1px 6px; border-radius: var(--radius-sm); } +.callout-info { background: var(--info-bg); color: var(--pm-info); } +.callout-warning { background: var(--warning-bg); color: var(--pm-warning); } +.callout-error { background: var(--error-bg); color: var(--pm-error); } +.callout-success { background: var(--success-bg); color: var(--pm-success); } + +/* ---------- Empty / skeleton ---------- */ +.empty { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 8px; + padding: 52px 24px; border: 1px dashed var(--border-strong); border-radius: var(--radius-lg); background: var(--surface-raised); } +.empty .e-ico { width: 54px; height: 54px; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: var(--surface-sunken); margin-bottom: 4px; } +.empty .e-title { font-size: 16px; font-weight: 700; } +.empty .e-desc { font-size: 14px; color: var(--fg-3); max-width: 420px; } +.skeleton { background: linear-gradient(90deg, var(--pm-gray-3) 25%, var(--pm-gray-4) 50%, var(--pm-gray-3) 75%); + background-size: 200% 100%; animation: shimmer 1.5s infinite linear; border-radius: var(--radius-sm); } +@keyframes shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } + +.spin { animation: spin 1s linear infinite; } +@keyframes spin { to { transform: rotate(360deg); } } + +/* ---------- Entrance animations (transform-only, never opacity, so a + frozen/throttled iframe still shows content) ---------- */ +.fade-up { animation: fadeUp .4s var(--ease-out) both; } +@keyframes fadeUp { from { transform: translateY(12px); } to { transform: translateY(0); } } +.scale-in { animation: scaleIn .25s var(--ease-spring) both; } +@keyframes scaleIn { from { transform: scale(.97); } to { transform: scale(1); } } +.s1 { animation-delay: .04s; } .s2 { animation-delay: .08s; } .s3 { animation-delay: .12s; } +.s4 { animation-delay: .16s; } .s5 { animation-delay: .20s; } .s6 { animation-delay: .24s; } +@media (prefers-reduced-motion: reduce) { * { animation: none !important; transition: none !important; } } + +/* ---------- Album art swatch ---------- */ +.art { border-radius: var(--radius-sm); flex-shrink: 0; position: relative; overflow: hidden; display: flex; align-items: center; justify-content: center; } +.art::after { content: ""; position: absolute; inset: 0; background: radial-gradient(circle at 30% 25%, rgba(255,255,255,.28), transparent 55%); } +.art .gloss { position: relative; z-index: 1; width: 38%; height: 38%; border-radius: 50%; border: 2px solid rgba(255,255,255,.55); } +.art .gloss::after { content:""; position:absolute; inset:38%; border-radius:50%; background: rgba(0,0,0,.35); } + +/* ================================================================ + PlexMix WebUI — Generator showpiece, command palette, page bits + ================================================================ */ + +/* ---------- Command palette ---------- */ +.cmdk-backdrop { position: fixed; inset: 0; z-index: 300; background: rgba(0,0,0,.4); + backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); + display: flex; align-items: flex-start; justify-content: center; padding-top: 12vh; animation: fadeIn .15s ease; } +@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } +.cmdk { width: 560px; max-width: calc(100vw - 32px); background: var(--surface-raised); + border: 1px solid var(--border-subtle); border-radius: var(--radius-xl); box-shadow: var(--shadow-lg); + overflow: hidden; animation: scaleIn .2s var(--ease-spring); } +.cmdk-input-row { display: flex; align-items: center; gap: 12px; padding: 16px 18px; border-bottom: 1px solid var(--border-subtle); } +.cmdk-input { flex: 1; border: none; outline: none; background: transparent; font-family: var(--font-body); + font-size: 16px; color: var(--fg-1); } +.cmdk-input::placeholder { color: var(--fg-3); } +.cmdk-list { max-height: 380px; overflow-y: auto; padding: 8px; } +.cmdk-group-label { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: .06em; color: var(--fg-3); padding: 10px 10px 6px; } +.cmdk-item { display: flex; align-items: center; gap: 12px; padding: 10px 10px; border-radius: var(--radius-md); cursor: pointer; } +.cmdk-item .ci-ico { width: 30px; height: 30px; border-radius: var(--radius-sm); background: var(--surface-sunken); display: flex; align-items: center; justify-content: center; color: var(--fg-2); flex-shrink: 0; } +.cmdk-item .ci-title { font-size: 14px; font-weight: 500; } +.cmdk-item .ci-sub { font-size: 12px; color: var(--fg-3); } +.cmdk-item.sel { background: var(--brand-3); } +.cmdk-item.sel .ci-ico { background: var(--brand-9); color: var(--brand-ink); } +.cmdk-item.sel .ci-title { color: var(--brand-11); } +.cmdk-foot { display: flex; gap: 16px; padding: 10px 16px; border-top: 1px solid var(--border-subtle); font-size: 11px; color: var(--fg-3); } +.cmdk-foot span { display: inline-flex; align-items: center; gap: 6px; } + +/* ================================================================ + GENERATOR — the showpiece + ================================================================ */ +.gen-stage { min-height: calc(100vh - var(--topbar-h)); display: flex; flex-direction: column; } + +/* idle / hero state */ +.gen-hero { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; + padding: 40px var(--page-pad-x) 64px; position: relative; } +.gen-hero-glow { position: absolute; top: -10%; left: 50%; transform: translateX(-50%); + width: 760px; height: 460px; pointer-events: none; + background: radial-gradient(ellipse at 50% 0%, var(--brand-glow), transparent 62%); + opacity: var(--glow-strength); } +.gen-hero-inner { width: 100%; max-width: 720px; position: relative; z-index: 1; text-align: center; } +.gen-kicker { display: inline-flex; align-items: center; gap: 7px; font-size: 12px; font-weight: 600; + color: var(--brand-11); background: var(--brand-3); padding: 5px 12px; border-radius: var(--radius-xl); margin-bottom: 22px; } +.gen-title { font-family: var(--font-display); font-size: 46px; font-weight: 700; line-height: 1.05; letter-spacing: -.025em; } +.gen-title .accent { color: var(--brand-9); } +.gen-sub { font-size: 17px; color: var(--fg-2); margin-top: 16px; max-width: 540px; margin-left: auto; margin-right: auto; } + +.prompt-box { margin-top: 32px; text-align: left; background: var(--surface-raised); + border: 1px solid var(--border-strong); border-radius: var(--radius-xl); box-shadow: var(--shadow-md); + transition: border-color .2s, box-shadow .2s; overflow: hidden; } +.prompt-box.focus { border-color: var(--brand-9); box-shadow: 0 0 0 4px var(--brand-glow), var(--shadow-md); } +.prompt-input { width: 100%; border: none; outline: none; resize: none; background: transparent; + font-family: var(--font-body); font-size: 19px; line-height: 1.5; color: var(--fg-1); padding: 22px 22px 8px; min-height: 96px; } +.prompt-input::placeholder { color: var(--fg-3); } +.prompt-foot { display: flex; align-items: center; gap: 10px; padding: 12px 16px 14px; } +.prompt-foot .opt-btn { display: inline-flex; align-items: center; gap: 7px; height: 36px; padding: 0 12px; + border-radius: var(--radius-md); border: 1px solid var(--border-subtle); background: var(--surface-app); + color: var(--fg-2); font-size: 13px; font-weight: 500; cursor: pointer; transition: all .15s; } +.prompt-foot .opt-btn:hover { border-color: var(--border-strong); color: var(--fg-1); } +.prompt-foot .opt-btn.on { border-color: var(--brand-7); color: var(--brand-11); background: var(--brand-2); } +.prompt-foot .spacer { flex: 1; } +.prompt-foot .charcount { font-family: var(--font-mono); font-size: 12px; color: var(--fg-3); } + +.vibe-row { margin-top: 26px; display: flex; flex-wrap: wrap; gap: 9px; justify-content: center; } +.vibe-pill { font-size: 13px; border: 1px solid var(--border-strong); background: var(--surface-raised); + color: var(--fg-2); border-radius: var(--radius-xl); padding: 8px 15px; cursor: pointer; + transition: all .15s var(--ease-default); } +.vibe-pill:hover { border-color: var(--brand-7); color: var(--brand-11); background: var(--brand-2); transform: translateY(-1px); } +.vibe-pill .em { font-style: normal; margin-right: 6px; opacity: .8; } + +/* advanced options panel */ +.adv-panel { margin-top: 16px; border-top: 1px solid var(--border-subtle); padding: 18px 20px 20px; + display: grid; grid-template-columns: 1fr 1fr; gap: 18px 28px; background: var(--surface-app); } +.adv-full { grid-column: 1 / -1; } +.adv-label { display: flex; align-items: center; justify-content: space-between; font-size: 13px; font-weight: 500; color: var(--fg-2); margin-bottom: 9px; } +.adv-label .val { font-family: var(--font-mono); font-size: 13px; color: var(--brand-11); } +.seg { display: flex; gap: 4px; background: var(--surface-sunken); padding: 3px; border-radius: var(--radius-md); } +.seg button { flex: 1; border: none; background: transparent; color: var(--fg-2); font-size: 12.5px; font-weight: 500; + padding: 7px 6px; border-radius: 6px; cursor: pointer; transition: all .15s; font-family: inherit; white-space: nowrap; } +.seg button.on { background: var(--surface-raised); color: var(--brand-11); box-shadow: var(--shadow-sm); } + +/* ---------- THINKING STAGE ---------- */ +.think { flex: 1; display: flex; flex-direction: column; align-items: center; padding: 28px var(--page-pad-x) 40px; } +.think-inner { width: 100%; max-width: 860px; } +.think-head { text-align: center; margin-bottom: 8px; } +.think-query { display: inline-flex; align-items: center; gap: 9px; font-size: 15px; color: var(--fg-2); white-space: nowrap; + background: var(--surface-raised); border: 1px solid var(--border-subtle); border-radius: var(--radius-xl); padding: 8px 16px; } +.think-query b { color: var(--fg-1); font-weight: 600; } + +.viz-wrap { position: relative; margin: 24px 0 8px; height: 240px; border-radius: var(--radius-xl); + background: var(--surface-raised); border: 1px solid var(--border-subtle); overflow: hidden; } +.viz-wrap canvas { display: block; width: 100%; height: 100%; } +.viz-phase-label { position: absolute; left: 0; right: 0; bottom: 16px; text-align: center; + font-family: var(--font-mono); font-size: 13px; color: var(--brand-11); letter-spacing: .02em; } + +.phase-track { display: flex; align-items: center; gap: 0; margin: 22px 0 18px; } +.phase-node { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 9px; position: relative; } +.phase-dot { width: 34px; height: 34px; border-radius: 50%; display: flex; align-items: center; justify-content: center; + background: var(--surface-raised); border: 1.5px solid var(--border-strong); color: var(--fg-3); transition: all .3s var(--ease-out); z-index: 1; } +.phase-node.active .phase-dot { background: var(--brand-9); border-color: var(--brand-9); color: var(--brand-ink); box-shadow: var(--shadow-glow); } +.phase-node.done .phase-dot { background: var(--success-bg); border-color: var(--pm-success); color: var(--pm-success); } +.phase-label { font-size: 12px; font-weight: 500; color: var(--fg-3); text-align: center; transition: color .3s; } +.phase-node.active .phase-label { color: var(--brand-11); font-weight: 600; } +.phase-node.done .phase-label { color: var(--fg-2); } +.phase-line { position: absolute; top: 17px; left: 50%; width: 100%; height: 2px; background: var(--border-subtle); z-index: 0; } +.phase-line .fill { height: 100%; width: 0; background: var(--brand-9); transition: width .4s var(--ease-out); } +.phase-node:last-child .phase-line { display: none; } + +.gen-progress { display: flex; align-items: center; gap: 14px; margin: 4px 0 16px; } +.gen-progress .pct { font-family: var(--font-mono); font-size: 14px; font-weight: 500; color: var(--fg-1); min-width: 46px; text-align: right; } + +.genlog { background: var(--pm-gray-12); border-radius: var(--radius-lg); padding: 16px 18px; max-height: 184px; overflow-y: auto; } +.dark .genlog { background: #050506; border: 1px solid var(--border-subtle); } +.genlog .ln { font-family: var(--font-mono); font-size: 12.5px; line-height: 1.85; color: #c9c9cf; display: flex; gap: 10px; } +.genlog .ln .pmt { color: var(--brand-9); } +.genlog .ln .ok { color: var(--pm-success); } +.genlog .ln .dim { color: #6e6e78; } +.genlog .ln .warn { color: var(--pm-warning); } + +/* ---------- RESULTS ---------- */ +.gen-results { padding: var(--page-pad-y) var(--page-pad-x); max-width: 1100px; margin: 0 auto; width: 100%; } +.result-head { display: flex; align-items: flex-start; gap: 20px; margin-bottom: 22px; } +.result-cover { width: 116px; height: 116px; border-radius: var(--radius-lg); flex-shrink: 0; overflow: hidden; + display: grid; grid-template-columns: 1fr 1fr; box-shadow: var(--shadow-md); } +.result-cover > div { width: 100%; height: 100%; } +.result-meta { flex: 1; min-width: 0; } +.result-meta .rk { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .06em; color: var(--accent-fg); } +.result-meta h1 { font-family: var(--font-display); font-size: 30px; font-weight: 700; letter-spacing: -.02em; margin: 4px 0 8px; } +.result-stats { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--fg-3); flex-wrap: wrap; } +.result-stats span { white-space: nowrap; } +.result-stats .mono { color: var(--fg-2); } +.result-actions { display: flex; gap: 10px; margin-top: 16px; flex-wrap: wrap; } + +.trk { display: flex; align-items: center; gap: 14px; padding: 9px 12px; border-radius: var(--radius-md); transition: background-color .12s; } +.trk:hover { background: var(--surface-sunken); } +.trk .tnum { font-family: var(--font-mono); font-size: 13px; color: var(--fg-3); width: 26px; text-align: right; flex-shrink: 0; } +.trk .play { width: 26px; text-align: center; color: var(--brand-9); opacity: 0; flex-shrink: 0; } +.trk:hover .tnum { display: none; } +.trk:hover .play { opacity: 1; } +.trk .tinfo { flex: 1; min-width: 0; } +.trk .ttitle { font-size: 14px; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.trk .tartist { font-size: 12.5px; color: var(--fg-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.trk .talbum { font-size: 13px; color: var(--fg-3); flex: 0 0 26%; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.trk .tdur { font-family: var(--font-mono); font-size: 13px; color: var(--fg-3); flex-shrink: 0; } +.trk .trm { opacity: 0; flex-shrink: 0; } +.trk:hover .trm { opacity: 1; } +.trk .grip { color: var(--fg-3); cursor: grab; opacity: 0; flex-shrink: 0; } +.trk:hover .grip { opacity: .7; } + +/* ================================================================ + DASHBOARD / shared page widgets + ================================================================ */ +.stat-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; } +.stat-tile { padding: var(--card-pad); display: flex; flex-direction: column; gap: 14px; } +.stat-tile .ico { width: 38px; height: 38px; border-radius: var(--radius-md); display: flex; align-items: center; justify-content: center; } +.stat-tile .num { font-family: var(--font-mono); font-weight: 700; font-size: 28px; line-height: 1; } +.stat-tile .lab { font-size: 13px; color: var(--fg-3); margin-top: 5px; } +.stat-tile .delta { font-family: var(--font-mono); font-size: 12px; } + +.qa-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; } +.qa { display: flex; align-items: center; gap: 14px; padding: var(--card-pad); cursor: pointer; border-left: 3px solid transparent; } +.qa.primary { border-left-color: var(--brand-9); } +.qa .ico { width: 42px; height: 42px; border-radius: var(--radius-md); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } +.qa .qt { font-size: 15px; font-weight: 600; font-family: var(--font-display); } +.qa .qd { font-size: 13px; color: var(--fg-3); margin-top: 2px; } +.qa .arrow { margin-left: auto; color: var(--fg-3); transition: transform .2s; } +.qa:hover .arrow { transform: translateX(3px); color: var(--brand-9); } + +.statusbar { display: flex; align-items: center; gap: 22px; padding: 14px 18px; flex-wrap: wrap; } +.statusbar .item { display: flex; align-items: center; gap: 9px; font-size: 13px; } +.statusbar .item .lab { color: var(--fg-3); } +.statusbar .item .val { font-weight: 500; } +.vsep { width: 1px; height: 22px; background: var(--border-subtle); } + +/* playlist history cards */ +.pl-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(248px, 1fr)); gap: 18px; } +.pl-card { overflow: hidden; cursor: pointer; } +.pl-cover { aspect-ratio: 1; display: grid; grid-template-columns: 1fr 1fr; position: relative; } +.pl-cover > div { width: 100%; height: 100%; } +.pl-card .pl-body { padding: 14px 16px 16px; } +.pl-card .pl-name { font-family: var(--font-display); font-size: 16px; font-weight: 700; } +.pl-card .pl-mood { font-size: 12.5px; color: var(--accent-fg); margin-top: 2px; } +.pl-card .pl-meta { font-family: var(--font-mono); font-size: 12px; color: var(--fg-3); margin-top: 10px; } +.pl-overlay { position: absolute; inset: 0; background: rgba(0,0,0,.55); display: flex; align-items: center; justify-content: center; gap: 8px; + opacity: 0; transition: opacity .2s; } +.pl-card:hover .pl-overlay { opacity: 1; } +.pl-overlay .pob { width: 40px; height: 40px; border-radius: 50%; background: rgba(255,255,255,.16); backdrop-filter: blur(4px); + display: flex; align-items: center; justify-content: center; color: #fff; cursor: pointer; transition: background .15s; } +.pl-overlay .pob:hover { background: var(--brand-9); } + +/* segmented tabs (settings) */ +.tabs { display: flex; gap: 4px; background: var(--surface-sunken); padding: 4px; border-radius: var(--radius-md); width: fit-content; } +.tabs button { border: none; background: transparent; color: var(--fg-2); font-family: inherit; font-size: 13.5px; font-weight: 500; + padding: 8px 16px; border-radius: 6px; cursor: pointer; transition: all .15s; display: inline-flex; align-items: center; gap: 8px; } +.tabs button.on { background: var(--surface-raised); color: var(--fg-1); box-shadow: var(--shadow-sm); } + +/* doctor check rows */ +.check { display: flex; align-items: center; gap: 14px; padding: 16px 18px; border-bottom: 1px solid var(--border-subtle); } +.check:last-child { border-bottom: none; } +.check .ico { width: 38px; height: 38px; border-radius: var(--radius-md); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } +.check .cinfo { flex: 1; min-width: 0; } +.check .cname { font-size: 14px; font-weight: 600; } +.check .cdetail { font-size: 13px; color: var(--fg-3); margin-top: 2px; } +.check .cdetail code { font-family: var(--font-mono); font-size: 12px; background: var(--surface-sunken); padding: 1px 6px; border-radius: 4px; } + +/* toast */ +.toast-wrap { position: fixed; bottom: 24px; right: 24px; z-index: 400; display: flex; flex-direction: column; gap: 10px; } +.toast { display: flex; align-items: center; gap: 11px; background: var(--surface-raised); border: 1px solid var(--border-subtle); + border-radius: var(--radius-md); box-shadow: var(--shadow-lg); padding: 13px 16px; min-width: 280px; animation: scaleIn .2s var(--ease-spring); } +.toast .t-ico { flex-shrink: 0; } +.toast .t-msg { font-size: 13.5px; font-weight: 500; } + +/* filter bar */ +.filterbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 18px; } +.search { display: flex; align-items: center; gap: 9px; background: var(--surface-raised); border: 1px solid var(--border-strong); + border-radius: var(--radius-md); padding: 0 12px; height: 40px; flex: 1; min-width: 220px; max-width: 380px; } +.search input { border: none; outline: none; background: transparent; flex: 1; font-family: inherit; font-size: 14px; color: var(--fg-1); } +.search input::placeholder { color: var(--fg-3); } +.minisel { height: 40px; padding: 0 12px; border-radius: var(--radius-md); border: 1px solid var(--border-strong); + background: var(--surface-raised); color: var(--fg-1); font-family: inherit; font-size: 13.5px; cursor: pointer; } + +/* modal */ +.modal-backdrop { position: fixed; inset: 0; z-index: 320; background: rgba(0,0,0,.6); backdrop-filter: blur(4px); + display: flex; align-items: center; justify-content: center; padding: 24px; animation: fadeIn .15s ease; } +.modal { width: 100%; max-width: 620px; max-height: 86vh; background: var(--surface-raised); border: 1px solid var(--border-subtle); + border-radius: var(--radius-xl); box-shadow: var(--shadow-lg); display: flex; flex-direction: column; animation: scaleIn .22s var(--ease-spring); overflow: hidden; } +.modal-head { display: flex; align-items: flex-start; justify-content: space-between; padding: 22px 24px 16px; } +.modal-body { padding: 0 24px; overflow-y: auto; } +.modal-foot { display: flex; gap: 10px; padding: 18px 24px; border-top: 1px solid var(--border-subtle); margin-top: 16px; } + +/* ---- Redesign integration tweaks (PlexMix Reflex port) ---- */ +/* Focus glow without JS state (prototype toggled a .focus class). */ +.prompt-box:focus-within { border-color: var(--brand-9); box-shadow: 0 0 0 4px var(--brand-glow), var(--shadow-md); } +/* The Reflex scroll area already provides height; let the gen stage fill it. */ +.gen-stage { min-height: calc(100vh - var(--topbar-h)); } +.hover-row { transition: background-color .12s var(--ease-default); } +.hover-row:hover { background: var(--surface-sunken); } diff --git a/docs/design/plexmix-webui/README.md b/docs/design/plexmix-webui/README.md new file mode 100644 index 0000000..e549418 --- /dev/null +++ b/docs/design/plexmix-webui/README.md @@ -0,0 +1,25 @@ +# CODING AGENTS: READ THIS FIRST + +This is a **handoff bundle** from Claude Design (claude.ai/design). + +A user mocked up designs in HTML/CSS/JS using an AI design tool, then exported this bundle so a coding agent can implement the designs for real. + +## What you should do — IMPORTANT + +**Read the chat transcripts first.** There are 1 chat transcript(s) in `plexmix-webui/chats/`. The transcripts show the full back-and-forth between the user and the design assistant — they tell you **what the user actually wants** and **where they landed** after iterating. Don't skip them. The final HTML files are the output, but the chat is where the intent lives. + +**Read `plexmix-webui/project/PlexMix WebUI.html` in full.** The user had this file open when they triggered the handoff, so it's almost certainly the primary design they want built. Read it top to bottom — don't skim. Then **follow its imports**: open every file it pulls in (shared components, CSS, scripts) so you understand how the pieces fit together before you start implementing. + +**If anything is ambiguous, ask the user to confirm before you start implementing.** It's much cheaper to clarify scope up front than to build the wrong thing. + +## About the design files + +The design medium is **HTML/CSS/JS** — these are prototypes, not production code. Your job is to **recreate them pixel-perfectly** in whatever technology makes sense for the target codebase (React, Vue, native, whatever fits). Match the visual output; don't copy the prototype's internal structure unless it happens to fit. + +**Don't render these files in a browser or take screenshots unless the user asks you to.** Everything you need — dimensions, colors, layout rules — is spelled out in the source. Read the HTML and CSS directly; a screenshot won't tell you anything they don't. + +## Bundle contents + +- `plexmix-webui/README.md` — this file +- `plexmix-webui/chats/` — conversation transcripts (read these!) +- `plexmix-webui/project/` — the `PlexMix WebUI` project files (HTML prototypes, assets, components) diff --git a/docs/design/plexmix-webui/chats/chat1.md b/docs/design/plexmix-webui/chats/chat1.md new file mode 100644 index 0000000..927a7bb --- /dev/null +++ b/docs/design/plexmix-webui/chats/chat1.md @@ -0,0 +1,353 @@ +# Plexmix Web Interface + +_Started 2026-05-29 19:16 UTC_ + +--- + +## User + +GitHub connected + +## Assistant + +GitHub's connected! Paste a github.com repository URL and I'll explore its structure, then import the files we need as reference for building your design mockups. Whether it's a UI you want to recreate, theme tokens to match, or components to riff on, just point me at the repo and tell me what you're after. + +## User + +Make a thorough and fully-baked WebUI mockup for https://github.com/izzoa/plexmix + +Do not rely on the existing webui infrastructure or design + +## Assistant + +_[tool: list_files]_ + +_[tool: github_read_file]_ + +I'll start by exploring both the design system and the actual repo to understand PlexMix's functionality and visual language. Let me gather context in parallel. + +_[tool: read_file]_ + +_[tool: list_files]_ + +_[tool: view_image]_ + +Let me look at the design tokens, the existing UI kit (to understand the visual vocabulary I should evolve, not copy), and the uploaded screenshots. + +_[tool: questions_v2]_ + +I've got strong context now: PlexMix is an AI playlist generator over your own Plex library, with 7 pages (Dashboard, Generator, Library, Tagging, History, Doctor, Settings), and a clear brand system (Space Grotesk + IBM Plex, single orange accent, light-first). You've asked me **not** to lean on the existing Reflex web UI — so I'll treat the brand tokens as binding but design the layout, IA, and interactions fresh. + +Before I build, a few questions so I aim this right: + +## User + +Questions answered: +- scope_pages: All seven — full product +- departure: Bolder reinvention — new navigation metaphor, more expressive use of the brand +- theme: Both with a working theme toggle +- hero_feature: Make the Generator a showpiece, everything else supporting +- interactivity: Fully interactive prototype — typing, generating, navigating, fake-async progress +- generator_flow: The 'AI thinking' / generation progress moment +- responsive: Desktop-focused +- variations: Yes — visual style (density, accent treatment) variations +- data_realism: Rich and believable — real-sounding tracks, varied artists, plausible counts + +## Assistant + +_[tool: read_file]_ + +_[tool: read_file]_ + +Got it — full product, bold reinvention, both themes, Generator as the showpiece with a special "AI thinking" moment, fully interactive, with visual-style tweaks. Let me pull the brand assets and component CSS I'll build on. + +_[tool: read_file]_ + +_[tool: read_file]_ + +_[tool: read_file]_ + +Excellent — these primitives and component styles are exactly what I need. Now the brand marks. + +_[tool: copy_files]_ + +_[tool: update_todos]_ + +I have everything I need. Let me set up the project: copy fonts, tokens, and brand marks. + +_[tool: list_files]_ + +_[tool: update_todos]_ + +_[tool: write_file]_ + +Now the foundational stylesheet — brand component classes plus my new shell, command palette, generator showpiece, and tweak-driven density/accent variables. + +_[tool: write_file]_ + +Now the bespoke styles for the command palette and the Generator showpiece (the AI-thinking pipeline). + +_[tool: write_file]_ + +Now the data layer — believable tracks, artists, playlists, and helpers. + +_[tool: write_file]_ + +Now the shell — icon rail, top bar, and the command palette (the new navigation metaphor). + +_[tool: write_file]_ + +Now the showpiece — the Generator with its animated AI-thinking pipeline. + +_[tool: write_file]_ + +Now the supporting pages. Dashboard first: + +_[tool: write_file]_ + +_[tool: write_file]_ + +_[tool: write_file]_ + +_[tool: write_file]_ + +_[tool: write_file]_ + +_[tool: copy_starter_component]_ + +Now let me wire it together. First the tweaks panel starter. + +_[tool: str_replace_edit]_ + +Now drop the dead rail button and wire the root app. + +_[tool: str_replace_edit]_ + +_[tool: write_file]_ + +_[tool: str_replace_edit]_ + +I need each Babel script to have its own React-hooks destructure (separate scopes). Let me add that to each file that uses hooks. + +_[tool: str_replace_edit]_ + +_[tool: str_replace_edit]_ + +_[tool: str_replace_edit]_ + +_[tool: str_replace_edit]_ + +_[tool: str_replace_edit]_ + +_[tool: str_replace_edit]_ + +_[tool: str_replace_edit]_ + +_[tool: str_replace_edit]_ + +_[tool: write_file]_ + +Now the main HTML file: + +_[tool: show_html]_ + +Let me preview and check for console errors. + +_[tool: show_html]_ + +_[tool: get_webview_logs]_ + +_[tool: save_screenshot]_ + +Clean. Let me see it. + +_[tool: show_html]_ + +_[tool: save_screenshot]_ + +_[tool: view_image]_ + +_[tool: multi_screenshot]_ + +Beautiful. Let me capture the AI-thinking moment and the results. + +_[tool: save_screenshot]_ + +html-to-image doesn't capture the canvas/animation well. Let me use a real pixel capture instead. + +_[tool: show_html]_ + +_[tool: save_screenshot]_ + +_[tool: view_image]_ + +_[tool: eval_js]_ + +Real bug — the thinking stage renders empty. Let me inspect the live DOM. + +_[tool: eval_js]_ + +_[tool: show_html]_ + +Results render fine (it had already completed). The earlier blanks were timing. Let me catch the thinking stage with a shorter delay. + +_[tool: save_screenshot]_ + +_[tool: view_image]_ + +_[tool: eval_js]_ + +_[tool: eval_js]_ + +_[tool: eval_js]_ + +_[tool: save_screenshot]_ + +It renders fine — the earlier blanks were stale state. It's in thinking mode now; let me capture it. + +_[tool: view_image]_ + +_[tool: show_html]_ + +Let me do a clean fresh-load capture through to results with a generous wait. + +_[tool: save_screenshot]_ + +_[tool: view_image]_ + +_[tool: str_replace_edit]_ + +Found it — my `.fade-up`/`.scale-in` animate opacity from near-zero, and in a throttled/backgrounded iframe the animation freezes at the start frame, leaving content invisible. The design system deliberately animates transform only. Let me fix that. + +_[tool: grep]_ + +_[tool: show_html]_ + +Now let me verify — capture the results state. + +_[tool: save_screenshot]_ + +_[tool: view_image]_ + +_[tool: view_image]_ + +The thinking moment looks fantastic. Let me check results. + +_[tool: str_replace_edit]_ + +Results are excellent. Two small text-wrap fixes, then I'll sweep the other pages. + +_[tool: str_replace_edit]_ + +Now let me sweep the other pages. Dashboard first: + +_[tool: show_html]_ + +_[tool: save_screenshot]_ + +_[tool: view_image]_ + +_[tool: save_screenshot]_ + +Dashboard is on-brand. Let me check Library, then dark mode. + +_[tool: view_image]_ + +_[tool: save_screenshot]_ + +Library is solid. Now dark mode — let me see the Generator hero in dark, plus History and Doctor. + +_[tool: view_image]_ + +_[tool: save_screenshot]_ + +Dark mode is gorgeous and the logo auto-switches. Let me verify the remaining pages — History, Doctor, Tagging, Settings. + +_[tool: view_image]_ + +_[tool: save_screenshot]_ + +History looks great. Doctor and Settings: + +_[tool: view_image]_ + +_[tool: save_screenshot]_ + +Doctor is great. Settings and Tagging: + +_[tool: view_image]_ + +_[tool: save_screenshot]_ + +Settings is clean. Now Tagging and the command palette: + +_[tool: view_image]_ + +_[tool: save_screenshot]_ + +All seven pages work in both themes. Quick check of the command palette: + +_[tool: view_image]_ + +_[tool: eval_js]_ + +_[tool: save_screenshot]_ + +It works (16 items rendered). It's open now — let me capture it. + +_[tool: view_image]_ + +_[tool: snip]_ + +_[tool: update_todos]_ + +The palette is confirmed working via DOM inspection (16 items, valid layout) — the screenshot harness just resets transient overlay state between calls, which is an environment quirk, not a product bug. Everything checks out: all seven pages, both themes, the showpiece thinking→results flow, and the command palette. + +Let me snip the early exploration noise and finalize. + +_[tool: done]_ + +_[tool: fork_verifier_agent]_ + +Done — the **PlexMix WebUI** mockup is built and live. + +**What it is:** a fully interactive, seven-page product reimagined from the ground up (not the existing Reflex layout), built strictly on the PlexMix design tokens — Space Grotesk + IBM Plex, single orange accent, mono-for-data, light-first with full dark. + +**The new navigation metaphor:** a slim glass **icon rail** (with hover tooltips and vim-style `g+key` hints) plus a first-class **⌘K command palette** — search pages, run actions, or fire a quick vibe — leaning into PlexMix's terminal heritage. + +**The Generator showpiece:** type a vibe → an animated **AI-thinking pipeline** with a live particle vector-field (query embedding → FAISS candidates light up → diversity cull → energy-curve ordering), a phase tracker, determinate progress, and a streaming mono terminal log → results materialize as a reorderable, saveable playlist. + +**Supporting pages:** Dashboard (status bar, stat tiles, quick actions, coverage), Library (filterable track table, sync progress, bulk embed), Tagging (batch progress + inline tag editing), History (album-mosaic cards + detail modal), Doctor (diagnostic checks), Settings (tabbed connections with test buttons). + +**Tweaks** (toolbar): Dark mode, Density (comfortable/compact), and Orange intensity (subtle/balanced/vivid). + +Notes & next steps: +- All data is believable but fictional (original track/artist names) so nothing is copyrighted. +- A background verifier is doing a final pass; I'll flag anything it catches. +- Easy follow-ups if you want them: drag-to-reorder on the results list, a mobile/responsive Generator, or wiring real album art via image slots. + +## User + +Address these comments from my teammates: + +**Anthony** (on `PlexMix WebUI.html` at `[data-comment-anchor="d147d5e130-span-67-9"]`): +Can we add "PlexMix" to the header? + +## Assistant + +_[tool: read_file]_ + +_[tool: str_replace_edit]_ + +Good call from Anthony — the brand only lives on the rail icon. I'll add a "PlexMix" wordmark to the header as a breadcrumb prefix before the page title. + +_[tool: str_replace_edit]_ + +_[tool: show_html]_ + +_[tool: save_screenshot]_ + +_[tool: view_image]_ + +The header now reads **PlexMix / Dashboard** — the orange wordmark sits as a breadcrumb prefix before the page title, so the brand is present on every page while keeping the page context. Addressed Anthony's note. + diff --git a/docs/design/plexmix-webui/project/.thumbnail b/docs/design/plexmix-webui/project/.thumbnail new file mode 100644 index 0000000000000000000000000000000000000000..6c932b122cb3c4c90edca7df43d5ab972bcfcb27 GIT binary patch literal 5340 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 H2m<~GQV_hL literal 0 HcmV?d00001 diff --git a/docs/design/plexmix-webui/project/PlexMix WebUI.html b/docs/design/plexmix-webui/project/PlexMix WebUI.html new file mode 100644 index 0000000..769ff47 --- /dev/null +++ b/docs/design/plexmix-webui/project/PlexMix WebUI.html @@ -0,0 +1,51 @@ + + + + + + PlexMix — WebUI + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + diff --git a/docs/design/plexmix-webui/project/app.css b/docs/design/plexmix-webui/project/app.css new file mode 100644 index 0000000..059e2e4 --- /dev/null +++ b/docs/design/plexmix-webui/project/app.css @@ -0,0 +1,229 @@ +/* ================================================================ + PlexMix WebUI — Generator showpiece, command palette, page bits + ================================================================ */ + +/* ---------- Command palette ---------- */ +.cmdk-backdrop { position: fixed; inset: 0; z-index: 300; background: rgba(0,0,0,.4); + backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); + display: flex; align-items: flex-start; justify-content: center; padding-top: 12vh; animation: fadeIn .15s ease; } +@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } +.cmdk { width: 560px; max-width: calc(100vw - 32px); background: var(--surface-raised); + border: 1px solid var(--border-subtle); border-radius: var(--radius-xl); box-shadow: var(--shadow-lg); + overflow: hidden; animation: scaleIn .2s var(--ease-spring); } +.cmdk-input-row { display: flex; align-items: center; gap: 12px; padding: 16px 18px; border-bottom: 1px solid var(--border-subtle); } +.cmdk-input { flex: 1; border: none; outline: none; background: transparent; font-family: var(--font-body); + font-size: 16px; color: var(--fg-1); } +.cmdk-input::placeholder { color: var(--fg-3); } +.cmdk-list { max-height: 380px; overflow-y: auto; padding: 8px; } +.cmdk-group-label { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: .06em; color: var(--fg-3); padding: 10px 10px 6px; } +.cmdk-item { display: flex; align-items: center; gap: 12px; padding: 10px 10px; border-radius: var(--radius-md); cursor: pointer; } +.cmdk-item .ci-ico { width: 30px; height: 30px; border-radius: var(--radius-sm); background: var(--surface-sunken); display: flex; align-items: center; justify-content: center; color: var(--fg-2); flex-shrink: 0; } +.cmdk-item .ci-title { font-size: 14px; font-weight: 500; } +.cmdk-item .ci-sub { font-size: 12px; color: var(--fg-3); } +.cmdk-item.sel { background: var(--brand-3); } +.cmdk-item.sel .ci-ico { background: var(--brand-9); color: var(--brand-ink); } +.cmdk-item.sel .ci-title { color: var(--brand-11); } +.cmdk-foot { display: flex; gap: 16px; padding: 10px 16px; border-top: 1px solid var(--border-subtle); font-size: 11px; color: var(--fg-3); } +.cmdk-foot span { display: inline-flex; align-items: center; gap: 6px; } + +/* ================================================================ + GENERATOR — the showpiece + ================================================================ */ +.gen-stage { min-height: calc(100vh - var(--topbar-h)); display: flex; flex-direction: column; } + +/* idle / hero state */ +.gen-hero { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; + padding: 40px var(--page-pad-x) 64px; position: relative; } +.gen-hero-glow { position: absolute; top: -10%; left: 50%; transform: translateX(-50%); + width: 760px; height: 460px; pointer-events: none; + background: radial-gradient(ellipse at 50% 0%, var(--brand-glow), transparent 62%); + opacity: var(--glow-strength); } +.gen-hero-inner { width: 100%; max-width: 720px; position: relative; z-index: 1; text-align: center; } +.gen-kicker { display: inline-flex; align-items: center; gap: 7px; font-size: 12px; font-weight: 600; + color: var(--brand-11); background: var(--brand-3); padding: 5px 12px; border-radius: var(--radius-xl); margin-bottom: 22px; } +.gen-title { font-family: var(--font-display); font-size: 46px; font-weight: 700; line-height: 1.05; letter-spacing: -.025em; } +.gen-title .accent { color: var(--brand-9); } +.gen-sub { font-size: 17px; color: var(--fg-2); margin-top: 16px; max-width: 540px; margin-left: auto; margin-right: auto; } + +.prompt-box { margin-top: 32px; text-align: left; background: var(--surface-raised); + border: 1px solid var(--border-strong); border-radius: var(--radius-xl); box-shadow: var(--shadow-md); + transition: border-color .2s, box-shadow .2s; overflow: hidden; } +.prompt-box.focus { border-color: var(--brand-9); box-shadow: 0 0 0 4px var(--brand-glow), var(--shadow-md); } +.prompt-input { width: 100%; border: none; outline: none; resize: none; background: transparent; + font-family: var(--font-body); font-size: 19px; line-height: 1.5; color: var(--fg-1); padding: 22px 22px 8px; min-height: 96px; } +.prompt-input::placeholder { color: var(--fg-3); } +.prompt-foot { display: flex; align-items: center; gap: 10px; padding: 12px 16px 14px; } +.prompt-foot .opt-btn { display: inline-flex; align-items: center; gap: 7px; height: 36px; padding: 0 12px; + border-radius: var(--radius-md); border: 1px solid var(--border-subtle); background: var(--surface-app); + color: var(--fg-2); font-size: 13px; font-weight: 500; cursor: pointer; transition: all .15s; } +.prompt-foot .opt-btn:hover { border-color: var(--border-strong); color: var(--fg-1); } +.prompt-foot .opt-btn.on { border-color: var(--brand-7); color: var(--brand-11); background: var(--brand-2); } +.prompt-foot .spacer { flex: 1; } +.prompt-foot .charcount { font-family: var(--font-mono); font-size: 12px; color: var(--fg-3); } + +.vibe-row { margin-top: 26px; display: flex; flex-wrap: wrap; gap: 9px; justify-content: center; } +.vibe-pill { font-size: 13px; border: 1px solid var(--border-strong); background: var(--surface-raised); + color: var(--fg-2); border-radius: var(--radius-xl); padding: 8px 15px; cursor: pointer; + transition: all .15s var(--ease-default); } +.vibe-pill:hover { border-color: var(--brand-7); color: var(--brand-11); background: var(--brand-2); transform: translateY(-1px); } +.vibe-pill .em { font-style: normal; margin-right: 6px; opacity: .8; } + +/* advanced options panel */ +.adv-panel { margin-top: 16px; border-top: 1px solid var(--border-subtle); padding: 18px 20px 20px; + display: grid; grid-template-columns: 1fr 1fr; gap: 18px 28px; background: var(--surface-app); } +.adv-full { grid-column: 1 / -1; } +.adv-label { display: flex; align-items: center; justify-content: space-between; font-size: 13px; font-weight: 500; color: var(--fg-2); margin-bottom: 9px; } +.adv-label .val { font-family: var(--font-mono); font-size: 13px; color: var(--brand-11); } +.seg { display: flex; gap: 4px; background: var(--surface-sunken); padding: 3px; border-radius: var(--radius-md); } +.seg button { flex: 1; border: none; background: transparent; color: var(--fg-2); font-size: 12.5px; font-weight: 500; + padding: 7px 6px; border-radius: 6px; cursor: pointer; transition: all .15s; font-family: inherit; white-space: nowrap; } +.seg button.on { background: var(--surface-raised); color: var(--brand-11); box-shadow: var(--shadow-sm); } + +/* ---------- THINKING STAGE ---------- */ +.think { flex: 1; display: flex; flex-direction: column; align-items: center; padding: 28px var(--page-pad-x) 40px; } +.think-inner { width: 100%; max-width: 860px; } +.think-head { text-align: center; margin-bottom: 8px; } +.think-query { display: inline-flex; align-items: center; gap: 9px; font-size: 15px; color: var(--fg-2); white-space: nowrap; + background: var(--surface-raised); border: 1px solid var(--border-subtle); border-radius: var(--radius-xl); padding: 8px 16px; } +.think-query b { color: var(--fg-1); font-weight: 600; } + +.viz-wrap { position: relative; margin: 24px 0 8px; height: 240px; border-radius: var(--radius-xl); + background: var(--surface-raised); border: 1px solid var(--border-subtle); overflow: hidden; } +.viz-wrap canvas { display: block; width: 100%; height: 100%; } +.viz-phase-label { position: absolute; left: 0; right: 0; bottom: 16px; text-align: center; + font-family: var(--font-mono); font-size: 13px; color: var(--brand-11); letter-spacing: .02em; } + +.phase-track { display: flex; align-items: center; gap: 0; margin: 22px 0 18px; } +.phase-node { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 9px; position: relative; } +.phase-dot { width: 34px; height: 34px; border-radius: 50%; display: flex; align-items: center; justify-content: center; + background: var(--surface-raised); border: 1.5px solid var(--border-strong); color: var(--fg-3); transition: all .3s var(--ease-out); z-index: 1; } +.phase-node.active .phase-dot { background: var(--brand-9); border-color: var(--brand-9); color: var(--brand-ink); box-shadow: var(--shadow-glow); } +.phase-node.done .phase-dot { background: var(--success-bg); border-color: var(--pm-success); color: var(--pm-success); } +.phase-label { font-size: 12px; font-weight: 500; color: var(--fg-3); text-align: center; transition: color .3s; } +.phase-node.active .phase-label { color: var(--brand-11); font-weight: 600; } +.phase-node.done .phase-label { color: var(--fg-2); } +.phase-line { position: absolute; top: 17px; left: 50%; width: 100%; height: 2px; background: var(--border-subtle); z-index: 0; } +.phase-line .fill { height: 100%; width: 0; background: var(--brand-9); transition: width .4s var(--ease-out); } +.phase-node:last-child .phase-line { display: none; } + +.gen-progress { display: flex; align-items: center; gap: 14px; margin: 4px 0 16px; } +.gen-progress .pct { font-family: var(--font-mono); font-size: 14px; font-weight: 500; color: var(--fg-1); min-width: 46px; text-align: right; } + +.genlog { background: var(--pm-gray-12); border-radius: var(--radius-lg); padding: 16px 18px; max-height: 184px; overflow-y: auto; } +.dark .genlog { background: #050506; border: 1px solid var(--border-subtle); } +.genlog .ln { font-family: var(--font-mono); font-size: 12.5px; line-height: 1.85; color: #c9c9cf; display: flex; gap: 10px; } +.genlog .ln .pmt { color: var(--brand-9); } +.genlog .ln .ok { color: var(--pm-success); } +.genlog .ln .dim { color: #6e6e78; } +.genlog .ln .warn { color: var(--pm-warning); } + +/* ---------- RESULTS ---------- */ +.gen-results { padding: var(--page-pad-y) var(--page-pad-x); max-width: 1100px; margin: 0 auto; width: 100%; } +.result-head { display: flex; align-items: flex-start; gap: 20px; margin-bottom: 22px; } +.result-cover { width: 116px; height: 116px; border-radius: var(--radius-lg); flex-shrink: 0; overflow: hidden; + display: grid; grid-template-columns: 1fr 1fr; box-shadow: var(--shadow-md); } +.result-cover > div { width: 100%; height: 100%; } +.result-meta { flex: 1; min-width: 0; } +.result-meta .rk { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .06em; color: var(--accent-fg); } +.result-meta h1 { font-family: var(--font-display); font-size: 30px; font-weight: 700; letter-spacing: -.02em; margin: 4px 0 8px; } +.result-stats { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--fg-3); flex-wrap: wrap; } +.result-stats span { white-space: nowrap; } +.result-stats .mono { color: var(--fg-2); } +.result-actions { display: flex; gap: 10px; margin-top: 16px; flex-wrap: wrap; } + +.trk { display: flex; align-items: center; gap: 14px; padding: 9px 12px; border-radius: var(--radius-md); transition: background-color .12s; } +.trk:hover { background: var(--surface-sunken); } +.trk .tnum { font-family: var(--font-mono); font-size: 13px; color: var(--fg-3); width: 26px; text-align: right; flex-shrink: 0; } +.trk .play { width: 26px; text-align: center; color: var(--brand-9); opacity: 0; flex-shrink: 0; } +.trk:hover .tnum { display: none; } +.trk:hover .play { opacity: 1; } +.trk .tinfo { flex: 1; min-width: 0; } +.trk .ttitle { font-size: 14px; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.trk .tartist { font-size: 12.5px; color: var(--fg-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.trk .talbum { font-size: 13px; color: var(--fg-3); flex: 0 0 26%; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.trk .tdur { font-family: var(--font-mono); font-size: 13px; color: var(--fg-3); flex-shrink: 0; } +.trk .trm { opacity: 0; flex-shrink: 0; } +.trk:hover .trm { opacity: 1; } +.trk .grip { color: var(--fg-3); cursor: grab; opacity: 0; flex-shrink: 0; } +.trk:hover .grip { opacity: .7; } + +/* ================================================================ + DASHBOARD / shared page widgets + ================================================================ */ +.stat-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; } +.stat-tile { padding: var(--card-pad); display: flex; flex-direction: column; gap: 14px; } +.stat-tile .ico { width: 38px; height: 38px; border-radius: var(--radius-md); display: flex; align-items: center; justify-content: center; } +.stat-tile .num { font-family: var(--font-mono); font-weight: 700; font-size: 28px; line-height: 1; } +.stat-tile .lab { font-size: 13px; color: var(--fg-3); margin-top: 5px; } +.stat-tile .delta { font-family: var(--font-mono); font-size: 12px; } + +.qa-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; } +.qa { display: flex; align-items: center; gap: 14px; padding: var(--card-pad); cursor: pointer; border-left: 3px solid transparent; } +.qa.primary { border-left-color: var(--brand-9); } +.qa .ico { width: 42px; height: 42px; border-radius: var(--radius-md); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } +.qa .qt { font-size: 15px; font-weight: 600; font-family: var(--font-display); } +.qa .qd { font-size: 13px; color: var(--fg-3); margin-top: 2px; } +.qa .arrow { margin-left: auto; color: var(--fg-3); transition: transform .2s; } +.qa:hover .arrow { transform: translateX(3px); color: var(--brand-9); } + +.statusbar { display: flex; align-items: center; gap: 22px; padding: 14px 18px; flex-wrap: wrap; } +.statusbar .item { display: flex; align-items: center; gap: 9px; font-size: 13px; } +.statusbar .item .lab { color: var(--fg-3); } +.statusbar .item .val { font-weight: 500; } +.vsep { width: 1px; height: 22px; background: var(--border-subtle); } + +/* playlist history cards */ +.pl-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(248px, 1fr)); gap: 18px; } +.pl-card { overflow: hidden; cursor: pointer; } +.pl-cover { aspect-ratio: 1; display: grid; grid-template-columns: 1fr 1fr; position: relative; } +.pl-cover > div { width: 100%; height: 100%; } +.pl-card .pl-body { padding: 14px 16px 16px; } +.pl-card .pl-name { font-family: var(--font-display); font-size: 16px; font-weight: 700; } +.pl-card .pl-mood { font-size: 12.5px; color: var(--accent-fg); margin-top: 2px; } +.pl-card .pl-meta { font-family: var(--font-mono); font-size: 12px; color: var(--fg-3); margin-top: 10px; } +.pl-overlay { position: absolute; inset: 0; background: rgba(0,0,0,.55); display: flex; align-items: center; justify-content: center; gap: 8px; + opacity: 0; transition: opacity .2s; } +.pl-card:hover .pl-overlay { opacity: 1; } +.pl-overlay .pob { width: 40px; height: 40px; border-radius: 50%; background: rgba(255,255,255,.16); backdrop-filter: blur(4px); + display: flex; align-items: center; justify-content: center; color: #fff; cursor: pointer; transition: background .15s; } +.pl-overlay .pob:hover { background: var(--brand-9); } + +/* segmented tabs (settings) */ +.tabs { display: flex; gap: 4px; background: var(--surface-sunken); padding: 4px; border-radius: var(--radius-md); width: fit-content; } +.tabs button { border: none; background: transparent; color: var(--fg-2); font-family: inherit; font-size: 13.5px; font-weight: 500; + padding: 8px 16px; border-radius: 6px; cursor: pointer; transition: all .15s; display: inline-flex; align-items: center; gap: 8px; } +.tabs button.on { background: var(--surface-raised); color: var(--fg-1); box-shadow: var(--shadow-sm); } + +/* doctor check rows */ +.check { display: flex; align-items: center; gap: 14px; padding: 16px 18px; border-bottom: 1px solid var(--border-subtle); } +.check:last-child { border-bottom: none; } +.check .ico { width: 38px; height: 38px; border-radius: var(--radius-md); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } +.check .cinfo { flex: 1; min-width: 0; } +.check .cname { font-size: 14px; font-weight: 600; } +.check .cdetail { font-size: 13px; color: var(--fg-3); margin-top: 2px; } +.check .cdetail code { font-family: var(--font-mono); font-size: 12px; background: var(--surface-sunken); padding: 1px 6px; border-radius: 4px; } + +/* toast */ +.toast-wrap { position: fixed; bottom: 24px; right: 24px; z-index: 400; display: flex; flex-direction: column; gap: 10px; } +.toast { display: flex; align-items: center; gap: 11px; background: var(--surface-raised); border: 1px solid var(--border-subtle); + border-radius: var(--radius-md); box-shadow: var(--shadow-lg); padding: 13px 16px; min-width: 280px; animation: scaleIn .2s var(--ease-spring); } +.toast .t-ico { flex-shrink: 0; } +.toast .t-msg { font-size: 13.5px; font-weight: 500; } + +/* filter bar */ +.filterbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 18px; } +.search { display: flex; align-items: center; gap: 9px; background: var(--surface-raised); border: 1px solid var(--border-strong); + border-radius: var(--radius-md); padding: 0 12px; height: 40px; flex: 1; min-width: 220px; max-width: 380px; } +.search input { border: none; outline: none; background: transparent; flex: 1; font-family: inherit; font-size: 14px; color: var(--fg-1); } +.search input::placeholder { color: var(--fg-3); } +.minisel { height: 40px; padding: 0 12px; border-radius: var(--radius-md); border: 1px solid var(--border-strong); + background: var(--surface-raised); color: var(--fg-1); font-family: inherit; font-size: 13.5px; cursor: pointer; } + +/* modal */ +.modal-backdrop { position: fixed; inset: 0; z-index: 320; background: rgba(0,0,0,.6); backdrop-filter: blur(4px); + display: flex; align-items: center; justify-content: center; padding: 24px; animation: fadeIn .15s ease; } +.modal { width: 100%; max-width: 620px; max-height: 86vh; background: var(--surface-raised); border: 1px solid var(--border-subtle); + border-radius: var(--radius-xl); box-shadow: var(--shadow-lg); display: flex; flex-direction: column; animation: scaleIn .22s var(--ease-spring); overflow: hidden; } +.modal-head { display: flex; align-items: flex-start; justify-content: space-between; padding: 22px 24px 16px; } +.modal-body { padding: 0 24px; overflow-y: auto; } +.modal-foot { display: flex; gap: 10px; padding: 18px 24px; border-top: 1px solid var(--border-subtle); margin-top: 16px; } diff --git a/docs/design/plexmix-webui/project/assets/favicon.svg b/docs/design/plexmix-webui/project/assets/favicon.svg new file mode 100644 index 0000000..fe823b4 --- /dev/null +++ b/docs/design/plexmix-webui/project/assets/favicon.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/design/plexmix-webui/project/assets/fonts/IBMPlexMono-Medium-latin.woff2 b/docs/design/plexmix-webui/project/assets/fonts/IBMPlexMono-Medium-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3308bce2432c298817ed344eeac33007c83cecd0 GIT binary patch literal 10060 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 literal 0 HcmV?d00001 diff --git a/docs/design/plexmix-webui/project/assets/fonts/IBMPlexSans-latin.woff2 b/docs/design/plexmix-webui/project/assets/fonts/IBMPlexSans-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e5ebabbddc52459948f27539fb06d60db5fc2929 GIT binary patch literal 40240 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

@c9dd0tdWKJRyVy<;N5h+G* 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 literal 0 HcmV?d00001 diff --git a/docs/design/plexmix-webui/project/assets/fonts/SpaceGrotesk-latin.woff2 b/docs/design/plexmix-webui/project/assets/fonts/SpaceGrotesk-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7b0e76a5c9bdfdb5ccc8c9ab44780b5ff788c6db GIT binary patch literal 22320 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/design/plexmix-webui/project/assets/logo-dark.svg b/docs/design/plexmix-webui/project/assets/logo-dark.svg new file mode 100644 index 0000000..c028a17 --- /dev/null +++ b/docs/design/plexmix-webui/project/assets/logo-dark.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/design/plexmix-webui/project/assets/logo-light.svg b/docs/design/plexmix-webui/project/assets/logo-light.svg new file mode 100644 index 0000000..35f9081 --- /dev/null +++ b/docs/design/plexmix-webui/project/assets/logo-light.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/design/plexmix-webui/project/colors_and_type.css b/docs/design/plexmix-webui/project/colors_and_type.css new file mode 100644 index 0000000..cdd2e47 --- /dev/null +++ b/docs/design/plexmix-webui/project/colors_and_type.css @@ -0,0 +1,270 @@ +/* ================================================================ + PlexMix Design System — colors_and_type.css + ---------------------------------------------------------------- + Single source of truth for color + type tokens, lifted directly + from the product's assets/styles.css (Reflex/Radix theme). + LIGHT MODE IS THE DEFAULT (:root). Add class="dark" to + for the dark variant — every token has a dark override below. + ================================================================ */ + +/* ---------------------------------------------------------------- + 0. Self-hosted fonts (latin subset, from the repo) + ---------------------------------------------------------------- */ +@font-face { + font-family: 'Space Grotesk'; + font-style: normal; + font-weight: 400 700; /* variable */ + font-display: swap; + src: url('assets/fonts/SpaceGrotesk-latin.woff2') format('woff2'); +} +@font-face { + font-family: 'IBM Plex Sans'; + font-style: normal; + font-weight: 400 700; /* variable */ + font-display: swap; + src: url('assets/fonts/IBMPlexSans-latin.woff2') format('woff2'); +} +@font-face { + font-family: 'IBM Plex Mono'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('assets/fonts/IBMPlexMono-Regular-latin.woff2') format('woff2'); +} +@font-face { + font-family: 'IBM Plex Mono'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: url('assets/fonts/IBMPlexMono-Medium-latin.woff2') format('woff2'); +} + +/* ================================================================ + 1. LIGHT MODE — the product's default appearance (:root). + Dark mode is opt-in via .dark / [data-theme="dark"] (see below). + ================================================================ */ +:root { + /* --- Brand Orange — 12-step scale (light) --- */ + --brand-1: #fef8f4; + --brand-2: #fdf3ec; + --brand-3: #fceadd; + --brand-4: #f9dcc9; + --brand-5: #f3c9a8; + --brand-6: #eab382; + --brand-7: #e09b5e; + --brand-8: #d68034; + --brand-9: #F97316; /* primary brand orange */ + --brand-10: #EA580C; /* hover / pressed */ + --brand-11: #b55f18; /* accent text on light */ + --brand-12: #5c2d0f; + --brand-glow: rgba(249, 115, 22, 0.15); + + /* --- Legacy vinyl palette (retired; decorative album-art swatches only) --- */ + --logo-crimson: #e94560; + --logo-amber: #f39c12; + + /* --- Gray scale (light) --- */ + --pm-gray-1: #fcfcfc; + --pm-gray-2: #f9f9f9; + --pm-gray-3: #f0f0f0; + --pm-gray-4: #e8e8e8; + --pm-gray-5: #e0e0e0; + --pm-gray-6: #d9d9d9; + --pm-gray-7: #cecece; + --pm-gray-8: #bbbbbb; + --pm-gray-9: #8d8d8d; + --pm-gray-10: #838383; + --pm-gray-11: #646464; + --pm-gray-12: #202020; + + /* --- Semantic --- */ + --pm-success: #22C55E; + --pm-warning: #EAB308; + --pm-error: #EF4444; + --pm-info: #3B82F6; + --pm-purple: #A855F7; /* accent-only (e.g. MusicBrainz stat) */ + + /* --- Ink: text that sits on a saturated fill (theme-independent) --- */ + --brand-ink: #1f1208; /* on orange (--brand-9) buttons */ + --success-ink: #06240f; /* on green (--pm-success) buttons */ + --on-solid: #ffffff; /* on blue / error / info fills */ + + /* --- Tints: soft icon-chip / callout backgrounds (light) --- */ + --brand-bg: var(--brand-3); + --success-bg: rgba(34, 197, 94, 0.14); + --warning-bg: rgba(234, 179, 8, 0.16); + --error-bg: rgba(239, 68, 68, 0.12); + --info-bg: rgba(59, 130, 246, 0.12); + --purple-bg: rgba(168, 85, 247, 0.14); + + /* --- Legacy aliases --- */ + --plexmix-orange: var(--brand-9); + --plexmix-orange-hover: var(--brand-10); + --plexmix-orange-light: var(--brand-glow); + + /* --- Layout --- */ + --navbar-width: 220px; + --content-max-width: 1200px; + + /* --- Spacing (4px grid) --- */ + --space-1: 4px; --space-2: 8px; --space-3: 12px; --space-4: 16px; + --space-5: 20px; --space-6: 24px; --space-8: 32px; --space-10: 40px; + --space-12: 48px; --space-16: 64px; + + /* --- Border radius --- */ + --radius-sm: 6px; + --radius-md: 8px; + --radius-lg: 12px; + --radius-xl: 16px; + + /* --- Shadows --- */ + --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05); + --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08); + --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.12); + --shadow-glow: 0 0 20px var(--brand-glow); + + /* --- Motion --- */ + --ease-default: cubic-bezier(0.4, 0, 0.2, 1); + --ease-out: cubic-bezier(0.16, 1, 0.3, 1); + --ease-spring: cubic-bezier(0.175, 0.885, 0.32, 1.275); + --duration-fast: 150ms; + --duration-normal: 250ms; + --duration-slow: 400ms; + + /* --- Typography stacks --- */ + --font-display: 'Space Grotesk', system-ui, -apple-system, sans-serif; + --font-body: 'IBM Plex Sans', system-ui, -apple-system, sans-serif; + --font-mono: 'IBM Plex Mono', 'JetBrains Mono', 'Fira Code', ui-monospace, monospace; + + /* --- Surface aliases (resolve light/dark) --- */ + --surface-app: var(--pm-gray-1); /* page background */ + --surface-raised: var(--pm-gray-2); /* cards, tiles, bars */ + --surface-sunken: var(--pm-gray-3); /* code blocks, hover rows */ + --border-subtle: var(--pm-gray-4); + --border-strong: var(--pm-gray-6); + --fg-1: var(--pm-gray-12); /* primary text */ + --fg-2: var(--pm-gray-11); /* secondary text */ + --fg-3: var(--pm-gray-9); /* muted / meta text */ + --accent-fg: var(--brand-11); /* orange text that reads on bg */ + + /* --- Glass chrome (sidebar / bars) --- */ + --glass-bg: rgba(255, 255, 255, 0.8); + --glass-border: rgba(0, 0, 0, 0.08); +} + +/* ================================================================ + 2. DARK MODE (product default) + ================================================================ */ +.dark, +[data-theme="dark"] { + --brand-1: #1f1208; + --brand-2: #2a180d; + --brand-3: #3d2212; + --brand-4: #522e18; + --brand-5: #6b3d20; + --brand-6: #8c522d; + --brand-7: #b06b3d; + --brand-8: #d68034; + --brand-9: #F97316; + --brand-10: #f5933d; + --brand-11: #ffb366; + --brand-12: #ffdfc7; + + --pm-gray-1: #09090B; + --pm-gray-2: #18181B; + --pm-gray-3: #27272A; + --pm-gray-4: #3F3F46; + --pm-gray-5: #52525B; + --pm-gray-6: #71717A; + --pm-gray-7: #A1A1AA; + --pm-gray-8: #D4D4D8; + --pm-gray-9: #6e6e6e; + --pm-gray-10: #7a7a7a; + --pm-gray-11: #b0b0b0; + --pm-gray-12: #FAFAFA; + + --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3); + --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.25); + --shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.3); + + --accent-fg: var(--brand-11); + + /* --- Glass chrome (dark) --- */ + --glass-bg: rgba(24, 24, 27, 0.8); + --glass-border: rgba(63, 63, 70, 0.5); + + /* --- Tints (dark — slightly stronger for visibility) --- */ + --success-bg: rgba(34, 197, 94, 0.18); + --warning-bg: rgba(234, 179, 8, 0.20); + --error-bg: rgba(239, 68, 68, 0.18); + --info-bg: rgba(59, 130, 246, 0.18); + --purple-bg: rgba(168, 85, 247, 0.18); +} + +/* ================================================================ + 3. SEMANTIC TYPE SCALE + ---------------------------------------------------------------- + Mirrors the Radix "size" steps the product uses. Headings use + Space Grotesk; body uses IBM Plex Sans; numbers/code use Mono. + ================================================================ */ +:root { + /* Display / headings (Space Grotesk) */ + --h1-size: 39px; --h1-weight: 700; --h1-line: 1.15; /* Radix heading size 8 — page titles */ + --h2-size: 30px; --h2-weight: 700; --h2-line: 1.2; /* size 6 — section heads */ + --h3-size: 23px; --h3-weight: 600; --h3-line: 1.25; /* size 5 */ + --h4-size: 18px; --h4-weight: 600; --h4-line: 1.3; /* size 4 — card titles */ + + /* Body (IBM Plex Sans) */ + --body-lg-size: 16px; --body-lg-line: 1.6; /* size 3 — hero inputs, intros */ + --body-size: 14px; --body-line: 1.55; /* size 2 — default UI text */ + --body-sm-size: 13px; --body-sm-line: 1.5; /* size 1 — meta, labels */ + --caption-size: 11px; --caption-line: 1.4; /* badges, eyebrow labels */ + + /* Mono (IBM Plex Mono) — stats, durations, timestamps, code */ + --mono-size: 14px; +} + +/* ---------------------------------------------------------------- + 3a. Element defaults (opt-in by importing this file) + ---------------------------------------------------------------- */ +body { + font-family: var(--font-body); + font-size: var(--body-size); + line-height: var(--body-line); + color: var(--fg-1); + background-color: var(--surface-app); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +h1, h2, h3, h4, h5, h6 { font-family: var(--font-display); margin: 0; } +h1 { font-size: var(--h1-size); font-weight: var(--h1-weight); line-height: var(--h1-line); letter-spacing: -0.02em; } +h2 { font-size: var(--h2-size); font-weight: var(--h2-weight); line-height: var(--h2-line); letter-spacing: -0.01em; } +h3 { font-size: var(--h3-size); font-weight: var(--h3-weight); line-height: var(--h3-line); } +h4 { font-size: var(--h4-size); font-weight: var(--h4-weight); line-height: var(--h4-line); } + +p { margin: 0; } + +code, pre, kbd, samp { + font-family: var(--font-mono); + font-size: var(--mono-size); +} + +/* Eyebrow / section label — uppercase muted, used in the sidebar */ +.eyebrow { + font-family: var(--font-body); + font-size: var(--caption-size); + font-weight: 500; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--fg-3); +} + +/* The "stat number" treatment — large mono numerals */ +.stat-number { + font-family: var(--font-mono); + font-weight: 700; + font-size: 30px; + line-height: 1; + color: var(--fg-1); +} diff --git a/docs/design/plexmix-webui/project/screenshots/01-03-results.png b/docs/design/plexmix-webui/project/screenshots/01-03-results.png new file mode 100644 index 0000000000000000000000000000000000000000..3f0a5cb573635dbe88515d05a34fcaef526f29a8 GIT binary patch literal 29214 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

eIar&mLi} z1*>P7A4qUN3)NWp6fD(eCgb{bv_oMP zc@vT}94<8}r8pEkK~CP+0l=HR)7>XJ!s=SgLnPMCPtTHg7u#8BOgOxACSPOMp)7RY z-F)y#h`-n9FqY`+&U16!zrK00XWPeNSx=S#M-LBor+!jL`nW_?5|lgLn{m+rRz`&I zM~D*s`n&h)OtmdZ6%fdzPjW$)=a!^S+USEPPYS9yC+-%)zKaYOkD&2)uFSvh<%M(F zIemFh%Gw;16gJ=R`O2-}O6uK{XHVIqP%wAw_(%Y3^LB;*fxE4u8M_LoLfGhrjN?l} zF8A14MHn5||1Rg4%_CoHS0!`jS@Xlxp_nVu@89!>` z;ab>;3Wk6~pia8ns-(Ia3WpGhJ*=^I80+0yqD!d5TqTn*R(1nZ^@j#mIuu5dN=@sc z(?`%2g6gl7&cYJ!M-mBdh z{hfcb8ug$~zBSTR6HZte@mxZR3FnIuLcGsk^jHr!|KAFj^8ns{tK+-tf3zqd{titv zalc=zC|!m`A|><>{<6+lZ69Oxm{-1+rOfx%Q5j|R4uT%vm>811k}bwu=E$OAQUHAq zQ09aG6)Ar-&sDYUMekdItDrLmYl}lFT(FK=l*15{{>`vXT5BU?WR%oufop+dku&|* z;0mF+*1B}+gGNI;PpGS_aZpK3Se(uK3fPC~uKXlt zvVc6&B(#gJpnND$Sx_=UplNyIkuI8;%smBowRdFiP0yi$*34pJ$&k_~*{JZ&gjW#M zxxeS;pLC|!o@aH#!>InS!o6v!;_-ea<}_00@((NilFk{e- zj<3(2aoxGxLR(lDYIWFp?;O~rk%05}kw9)h+#sH!ro`&ZtxFGQsx-0g#Xirjq!vW% zswF!!?=jtV_VYnFwQyT$wE%Oz%&{1H(>+VlKGa;N-Lhxc`y`LTJ*tVK_{!u~2x#9} z$32IPk?H1QKe%A1wQe7t2j83asGoWF7@Jby)`LA;u}Nc}vHyk@;@zUs@P&=T9<7!> zwB%!P-p*I&_8giQG~O)c!b2$)pVm7Fqa>CmWb=`p_)?KAB^1KDbm$4MtY!oARxjLX zL63PFNz%Dnn_^ARiJGV5+k^vFR#w*L3-_W)(W0BY&^=0xMYo(!Kf)fD9)nBV*oG~` zYY(3(tR51ob(_ou!v(5)jZx->vRU^G%KR~ffP%&5a%)7n)q=Lleu;(0JI7>{1SsV# zNeNO1acC9$W8v(1hxjF6Y&KITjL^(x43AM=J#sEaK~*f)bl2(cmzxFf*fwqE@ydk-KFyklIn+UZf&=LT6H&ivl^HC3ymjG=r!&Ku9Iat&UKKYaP%Yt1 zghkF$n-!vHUNxW8Lnt6ccq>sb->`;=fjIGX&##Z@LTyVgkx}*n;YDx*HDVn7069xt z{DI<*DCU#N!y$fH<%N2eY+r&c)Z~^c*T*-e7#m&gQnRTh>0Wp0!<^1dK7Qdt5kcs> zgu2;$`kq<)?yhR*qa)M8*<;xq8681^#Hy1q7U#+cS9Gi;;KyUP;ZP{lB<%<}T6F4M z_;_Gon5OPntFX0ddOWJ=4b#F8D5&~k9e;l^u|wH*RaGOo$K2Akg8tgGc=++AYx;C{1p6DU9SoIDg3T-*s~;DUR6C8rVQvvOJDH+vlDIZ`1H+x zQ2%hwU0Z4T^*`FQ0AMuFf3W;t^U0l7_#QP(XTOabtjmvm>Kt-bg{pM%3vVkO4&^8t zb{G1Ik1~hJ6ja$WOpbsCBU_{O6uX`Qx1bHbohaFdtMB ztKmb=KRmQxSX~;Hp0OW&>~w<;j*!BcW?OzVn2d2*kA3D)N}J{eINYIZNMm*7afTS&ambfX96%~ICn-Aho|wOPS4+@Ret?yihPUU53VHMxIJ0Vk z;1pZ8t);-bv@Sp;Iu~-NrPLOJNX@Gh51u9*oWJjB)L>qFsII;J-oyn*kpczV-Nq85 z@FonOEmn_P=4Z7IJo0{YlBn7A3x+f#%Z&Ef^z~y_=XdGq-yhRxVbd@km+yV5G{%ZX zkIKtqk`FDcuehY}mgknjrh~6WL=qfp>j|DgV=0fjR$kaR4C98Nwa-32$qVJ+oMN~M z_a2QUyz|@Y`6K?fllDFWaA~OmB-R2)FO9DhKlZjhccs7VM~wr;og1a`nt?SKA7cC4 zz}-r2el99fEv9yH0vc?Y2+h5pFTI)$VE@^CwsNXyl>t5XK=@>;eBf&-~+f%r%S=_;*YB$I<_G=&JeFOEojx z+h6}P3dWSj@R|r2QanC;ljhL_bv3H=LV_bvKUc%MwxJSF!w6V98S-G+opQ3IG{)Mo zbl{ru${oAf+FDHV(_#0bg-|$@TdToY(=aU7RMz~N=+{k7^@Z~_4=yb`zhP<}r7@26f*se<=M{7g zvPZ>AR~$eNBAPc=xMXj1K3@2&}&qi^}kP+v~-UttAyrjnpa9q)Hqk@DNP6-lH=dxPhd4}Sb@=->HY$>(pk{$0$A z0N%06_>Y#IU!(QhPaH|n|Ev)JQm+Ggkd);Jh{tO1xr+V58U%dThe`OL&J6S+w%)Cj z>45{6&R|x=P%PD>X)aX;v3SkI3dIDmoODk$u@6KDym}e? z&Y$qkefnphPFB0Yw7Ya0N_p;QO{im`?@jYU0;1=rCTVGRgeZ4&m<>x=N=9f?eF7^E zo^O46Rep%Cx&P9v#97q9tp5^Yr3_V%FDL0hl;`Z5iLZxX$5j@HREG8Z@c=}}Y@?)G z3N2@vgzsq1JpVEOZlV9d{ba~BrW46*&%is4*OwdQ1z3*yfA_OgRrEp1tAM|ItoYmA zu~mw=*Q})euCsbQ0IYvxUIz@W9zBGmqYGy|vXh25a_1Os!9z!QsQ;#d@88-&t^;Dbwd{0cSKqDM+Q~jedE7$Bui%iu-I;X ze>p7(Rh3u`Ce!t>27ls_jnRb3*mPT2Cb=T%ne>q0z}%*!0H@R6(7j*uK^GEA$nT)>E;PqEps!Vi>(?E+M8!_7@d$;|dJ~U^@v-NEv zZxS*g?{I7kzIv2%>6B}jVC!E=5Q=o z&>cOoJ7ZT=-UJQNdbhQeRp^4@yI(%-st7xJXIK@ZIGIZiHz+>yf|}kIY+^3PL-6#Y zSH%DR;q3Am)YR~*jHC^)=%jXS9oG(988_w!(Es!K7v7|NO~30Q^zOq3_hY6#&5Ycw@&4F7)7M%<3`fO%6O8yMo9^X_S@~ylMV{Ge#Q?pi~aJI&&(m#81KQT`u13L_y+mxBRTMH!5r_u*AyaV~9 zkTCnQYu!Ev9-dE5XDyJSXH3sR%^q5ZuaE=!#5dy^DZmPFtgJxqT+ZEfr#=zTw}5YD zpYUD-);DNQYm0 zwZ(AfQXewO!(+;8!L@5)&LbFW=OW?9U^~5DU%Tc0R$;FOCGEGM;AQx~vqnPA zQ@kgoq*H1oEjnw6boGe(siExrY(J$!i)Jir#%pNXim#1T=%|j;5VMXob7k|_SHACh z9RODQ99cc?9RL8%GcbX-l56@^T1ycR(K%#7_+j66gMgi{O037(`qBqwqb+v;5AMZ? zGD&Uo-kdS7$==h!)~o|}VnX+}tGBOWr|$-ADk@NKp=Mz9VWhIs7}7>%;fUfug&;gI zyfr_+nx`I z7cDl$y#E}Ob1#{AW2f{Tz)R*OA)5GQN8D@7=5fn)R`rGV{4uvjBCdSbLo@%{<|V`b zI|}gYWj?k8X4gT{3>-Jx>H4W9*r_~Sy51|FUIMhXd*uC)R$GgwbDWAB zDYDCrE`x>YvaJ(0_PNwO+Z8)c>hO1oVmggadiU^Y?kVZB@23C&_zKWch~VG>{o)jpAW}RFSNJZ?;mSihj+p3n9QfL>Lw-ASY`#rnR~*0+KPG{;RvBJM|3kjEzO6M_j4h<= zog(@YU^wbI^6Ak}zXSA4CLnRF$|fRc@e{A_;~_2Om2%;Nh)At7)A{Cw9b=lRlJgeZ z&wyjc>Im?ni2%UB?C49b-WrJ*9>#0Jgo;(N+1y^M#gBj$gO^`%%mMV6pgslL`})fe zy>3KDd*<3r5lCbc-sx0GHu-?|?DuyFs?1{Vy0g$=&Txbu|C@v7KQst_MFKeRi|6%1 zYS(b6FZMh`)sl81{QYohL_io$~Z@`hrcqs zTm4HOfBRfXp26Qf2s+D>^d;!W0T3~;tQJ?qrK|#XA#*FyRydsX8Eb2z33d9|?ea@a z3#EP9uCwcI`#Y#bxVrE5o!`m)X^+13)?a70;UxVmxX)!r%JXl;t$R&gXb<_T9gm}f?t-u}9Y~zjYo12waav!K} z*P1d!k>oL3-IUH%^W9jh?6Pqmn0iHu9^^Pk13(^-t^q78%`8uRV3e0GQylQ#r`_BY zTBWKCAlvs#8yw3&N@r_fMbgh-ilgm!HG}B|WasQ|`Sgzq;)e}hTMSnBy{WCu01>v_wlp0bP zD}TaEg1_>0<87*<<`DnVFv{wgn*G#e6`L{0lHIDRYY6?`l9_0FF1-hn9~Iot$0vyi zbd3FFVEfA!e}kr;o~Q^7339AHATT*_jhCyqp%>g%q9GeqO~*>&ZU+Adc9O@d&*9%) z&H5J1*JUEI0sUZ@ZIV(84O zROYSgfaS{#&#kX?!>{ySc|e1N&3?-Kv>O40V~v?n=N8>Yg68u%V=KxvXDccFO55pLJvIwL6T|XoKG0igL`4WIGRLHO0)9(b=0b7^*=qS9DXp^cG*>cHr27KBHjg#$J8fa&zUf<`xM_fC3twI3a|Ds$6F zhd)D3mY$F%-gID@8+Ei+Vki~6yXUV6sE@qMgwZwFCk=Php%lcq(KcHj;a#y|I$+>K!Nc2am{*{^cSQ+e@HDmwjFy z2M+IsK!Q_K#XhSr(>-0I*vkTc47F(e2OkiybyM7=Tcs0+B9TF6mh*RltlEoR@>?8R zL{*#t3tO;zPAH5gi6NWgJul^|{( zw6mBhg_N@g=yWP)%f*q@3ryoTPIzzqr7Hl}L7xGv!aFvTGf$EGE#k{7E-V4_rf?%Bcnsk#OrJ{*LRTqBs@XbIj{LE)h@4mZ zfgl>@Coikw3fl4{)YR06@2pLE&5^erb|LuD-mu%(f6LGB_*ZpR&CXiVjpa@yzk~JL zs29qP7ytObrR%&T0s5C;oJf6@67=#&IX4YNiWl7&~t;sb^iJuyyE z+12vKl*^SNOe?tU-=ctT`c_nv99kLO64Li}ddyQ*av9V})`x%h?Z3mcAXp%_o<(Zt z7M8N+;&Y22Nv!paf8hk#V6BMY5Ykt#?u9e@oO>^?Zx%;{xVlfzP)j$|3S~$y8kgAM zkQ3nvv&b@?*{z3mhKq zob~1wVWWDX``mutvrE8j5(Ak$leJ}Is7kr{Ev`9&W@(RY2f109}u{ty+(pRd3Ck!?Xz zQ5$G}Kl1il13knU1Q`0~8&_)83rH~C_dixqW|NoE|MKr3+8h?vbeSD=2C03qZ$QmJ ze`1lZYOrbWjg*12;w5I1G)G-I0)pUe3@M%!)1mEAiFD1E*FCZX7I^3|1*dy{IT7T#UCO@hll!)-D8ba zQdx@`%1cpN)=?cKyrZWC3o~RiTUk*#^K-}jOELV-s`IUBW5WK^3&|K|hR^Cpc}LK^ znPS>8%~>^^yQeAVK*3|50mRI;&zY z0lU#)ZGIUz5_Ahf@x@H}h1HN_y%gY8wD2k+&oGTaWz0zkhmNA@g<=jD{tL zEOu%=N`{+g1Pc|9Y%??@rv7^m?Cg8FKV)NFmtxkXM=)bRQWh6GUd45cKU{zJ)37Wv zdHk)%^zpg&k+hZHzsmjPVFuNKW@;R(v92&PE4R{03I5%xG3kK;w@f|(2 z)oBx)%7omoSa2KhG2bhlIoSe-8lNFna7_hWth|0G z)Ld!y1**t5r{u7>*@IW+R1IE-5kJinJj!Z&8|~zCXch)ZO?{AB>BD%<#N*eTUbEVM zg}1_KR!1Hl8N$@Il}0uc5mCdvW;Gu+swt*@Hc6pfo+NUJA)A=%8u-vY%wFRZBWl>w z+Ll_P49HdXLfK8cEwcsFr}=4BrM9Tx#sOGd`Yh4;5%FAPW-N0X7hP4Dbc!>>^TQ^z zw5PI@!(etZ0|i#i<#F9T>ASeO_}ccyFF5wCPWGaDY(5_~((e;McJ6iMGiG6~$(MM= zA^x!~hWP_683d}fQ{mL}*0}MZdQ@yawuPb6^6M!>iW9Y8))l-seEYTFcwv|(0a3nZ zo)7ha_sqi^JFb++v(l=j1I{808T|<7H@|*Z)!~xEtx@){(pZ^84BU~dlJ44$9xf&~ zU1bp`lf$?C#YOs&E|w9bPL98J#lCw|5i$SFrzYQf4B6u@5+@v|-boUjQ_V&}Zs7PT z#z4GJas-i_+Ab=rFiB-GuvT$V%=^*IU`=&+**KFD*PTA$LtN+igU8tf@<=3xa5h33 z*)H>W2JQg<7W8gblvkS;pvo)Khx%~Y!Qx3pp6lrkVk;xGa8jk_tRyaIJ8%9|VQS&M zeiozK5)RGkIOFPLt&DQX4z&^51Pioo{qUc*>?!me##(OD6x7tm<#FC!_mh;bqveDB z)xu&{5J}8Ew!gU8Cr~pS6iA~bAX37A%L4$UvAq;qclVW5RR(^B)vz-6rsm_|CSx~d zG`a{CxmYsWRT&vOJGh|N=0p~OtB}aPNQbL4JVUY9tb-D~z*&Mh$Eq5`QaHER&%eFv zJV=tXP+<3(=mbjIm}1ogetKa6wnxdM6{91=uKKUv9C&|SFUl6Hi7Al4;1Y|Ym;aWX zfBg2ZS^FB8Cvog~essTK4NI&vU!?v?dw|zBMekN7c@hy$a;GP;Q_*W~byX#yvit*+ z9j-=>6QQ%j?bUZHv^snDvc)ApAR{_SKZ=cWIWF1!RddpJwOvKza-;NSLJPdW>+$`o zW7CDX4vE@WTf?-8UbP41_3IH=1>ZOyz6@N(ZJ{H0{?>)WfEgYyI$m03I2y;1w|Wo4y0$F`=ahF}i#^zJp=F10RpAi`(! zz@r@{t@Snb9K^a56YrC_7%NzK;ckYU4mZAE>fnpP(RdCS69ZHU_4Lkl z?nzm6B6vy0sbGRY9GU9R>S*tPfNP>Hszn^6}yM$DNJN@c4g-RK}$4NftS}nJaORe8;oCMex`FJDfH)EQ4V4}LIZ99{tNJ$Q^S9O!v7@7Yq()Z?f7}@ zS^cNXBLwH0ZZ8a?ObO0ET+y$w?D<+;pUm6+-i(PBeq9Ic_WC~?o z{*Y#4KQf1o>J;VXHfBz5E9J{`pHH;rw8|0TnOd|pZNsC5?dyAhm6QY(*+}4}p_*{i zdz)*$LOvypaWNfijO8h74!uUUX+pJaLwDvdLri2E9T{`M=9|`*wLr@&!WAOv+dkXY z9Hkj>V!Jr@N#{ml`1Nkq5I4U1{AZ76Lwbm5YTbo$^0U2#L)91@g*{lqJQ3mD#VsGB zaG_*L$u8Ie0-*)JdGO7XXC8_QZYdv~vkesz-d)Q|(@BFo+h+GavkfBNRh5<5=x7!2 z1}OvYMy%zxZ7Hv)2!%C2pV1jIqH?otSLKXy{V=up-Ywwu!E+t4a47_VI6e9rq463y z@S4>B)6uWtX8q5@oI>^dpDePW71iM~lDHotCtlw2gB$9aC?r}#i*^WS1{xL3`82w} zH|M(TVeO+gYd2f=Y(Dd>@cbj~)6Gw&Pj`-8%k8m=K|IzsbYMijFCAg9h7gs?>@f-vLgeaI@jID3Pt_q{>)YP;w&Ig?bn)myo zZFnxR>D^X*xZ5%LHz;$CMp!^i7x$ke#4Q0{9pQQHg?p4GGKqz?Q>w&?`hXWx1Kljo z-pd}BQ=ub8ml`X)n@Pe^htxt>+|zL;nKV{E!)qwk} zDC3&(P*(qmkui~yA)D;(V&%)IOF$fE{@K*-OqT%C4XZ0Msvzrrppl0R@4nE$zt7TG z#kiL}#C6i@6Vy5d)Wz`}Ib7=#OLP((k>S2l<~P+%<%#F}PmhF6#WMngspBVu9NjMt z%u_;L$YhP6@K#Yp-Yz>by_sCjrZo}1YH6Rvbf;sKpmDmV&ZbH<7G{ytB@mBK^=6F} zTx;^*GNMTcZg1FT-(5D1!%>~mymL~lb3`yLqunj2b~qkkqI?C zczr!qjCnR?MvqI(;vXxoI?1~taZ$oO7pU6#9h6W?mwB)vB!CXT*ThdQzw$hqG=#Bq z6ri|hReC@FM6Z9bqNXsI4Sv62hG5y2c@bB$DTkHbOuIbzE=vQm%Wt-o)a>E7pJmXV ze0oe%U1du#sSG3FV{4#Lg?rJ{`&EVRWu+u&nm}yV-k#Q?Y^@xyl@N`W0L8O|esWG} zq;WIBYDf9yg8c5-y?Ip+`;?^AREcX`a;0tg1@aLT>EkN~G6h8fOSOrVQO(sfE}T4B+sm&rf^l z5H2<4rqPvR9F+rSL_J8;z?_=M#+52K=k^lt%=+H^Gyfk)lj1tNdb*`F;yl;iA5E?( z5I5nhU}=MI1%e&p3SAJE|21!6~@?n zs^7?Pm{8C}fqN=XZJ76x$!BcA?PapFbd}hu-m7T>{M3<<4`t6L?;)zMeMKs!?57_Y?WKl?55|mr^$~JuKymH*PSCjqN%o61Dl5X>@1>ovjh^#zB!+i?VFU| zxs^ywlv|t+b3HL62+hwEfRohzt=B1I_@h=72qJX+-n2yyFVc*lWsUVp0WrmnM=FP~ z1QSGcVi~y2 zzh8~PS@E6nn=d~xc#jv2qaxfK9l7<_R*(WU=5WJuhRHK)$*z8a#I$s|t5*d<_a zu8qiE}J`t0@i} zl{Ws+B%o!pgl{shWJ^yNz^lq~$Q!#@tdhQ?nZc=5oQVU{#JF1sQ}1)~Qc^>h`;_yI z?wVd1UcGS&!J)OKQbJ+%!=1($QN#`4 zew%$NbC|RBFGJ}akbOZ=@N%Ra@f~>|in?zXLM?TYe7SgB^ zYdGiKR5lWAk@&uz(!R18maeTJHG^M&+x%8Ht|nv`iNuz!>K#n^+VN^X#uf{jlrZIs zi>n$)4h{9T!Hn^_Tkwq?shLP0g5|<{JAbb~{asvwV$AW$#3S(X%}kc{!l@;|d~yGC z&hKv}y=Koov2f<}?d#aOTpkS{i+Ao1E}HprWie)o;ZHox3^eUXmEgf0zzurfw*$I5 zC9bZP9_6#OU0pJ~@ff3b=f=X2W*PwxHReFXg&`;$zdm)W>6@J!t4f;qhv5zx$S8DG zY2-dHsywP5vdFlOqSy(rSFJV{k_vA#yi``MmYW&Z_iK9S&P-XX_jYeypSFdu1Ux+n zkWis_P>Ubo;KrxE1^`XIARQyBqH2xP6f@&Q9jv}SPf9#MZ2#P7wsvqn?rSh}N0<6* zi{E^1RG^{pJ+V5AJl!uLhxfP#s^7{1qZMtgqU=htj31&@) zs~I?W)&~IAo?^u6mB8Vt(u+yF#|UsQYrx`5y*SlXEG4g-qs|u>YeG(&;i8P0Gdn4$ zh$bA&q#xlP%$}bGubZxH;PusC>1D)Hr7T^feV1Ylp3ih^*Nbl#D38);$= zXq0qRtd(ZMh1`Dx_~n-NhXn23oUh6yn4)U zzn^biT=(eVU3{r1xorCl`)!6@85-L=ZtF=&&CSmaFR&+f@TJwWty86@c7gyJ4?1;( zY17`yvvFkfDK~LK`HzScieFHy=6wF60`yuGYT;fgsGU-8?fI%~{CT7|nd9_eD3eoD zj&k+igazkjGg(C&cMxV-X$45xku=5ETG;bwI?Ps6z}Gh9Rnd#x`EL!OJhDqY zCEcVyYz=r)(Y?(jx0?xZ?(-Ib-!#hfYvPJxVR(^L&gEmcPTb>}XrF#*b(%_DqYue&Zg_XlI1WE#y##d{N7dB-637jtW z*Bj;)Edl$V!aphoKb}^Dreq|={_b!3!oT7D-_n_S_N6)# z9tGaJin6!z&`fuRe;D1`{O%g6Tb%#8o|VPu$0q4mJZIBT6CQ0##%pAggI!yGI9IxG zii_#0=^9v5OQ~e=8*0iHnQv3J$SI0R^(Pf2EkPYJIJ_`cec&0DY7iSaEO5=k=GwWku(87vt={{c2 zYPml)dX6kLv(8#c%4=f@LF*egIAih+{rMVmKQFJyAOvLaPaU)b$H((vNAG*j#f2K-O@>1AWZuc2M`ey;$6NWqqnIf7g$Ecuwj*?KdUMyt8$bW0PhbM=_xbD&yC*NJXnQ=cuQ9xFp8`{!*pH*N21%}d8w;i2_i z12?X8XLchvW;<4>a8x*a2Ub+s*8=z0-V>0oOtMMWCg3a)<|E{$3Ty!GUR9h7zhg~y zJw?~0R(!P0cUKI-9u5r~9_Ypq1C)hN3!P*^BD&t44Fd3#%C)nm32Myt`=Ny;z^U^) zDz=1}U29=p10~PqdzC~5AfsHsHe1mMD#d{yw~eVK80CgECc@-#N)(O?Wxne&=cKAZ zjqK7vd*2E;H~UqgT7X1PH_<(-;tV(z#7l^7FXSLZ-K6yGI}1lw4l6>;pJdZaW1Han ziN+#V;;Bz$;3S6m&QM#aE!U~CA5u^0nNw^S>7e-sI69IWHu2?7$Mf>?bQV-+v424l zWwuLEMsJVC8p&{o-_!;G5bjls|fAd!`#yH`5ziA|7&U-0K)2Aa?73v!L{1Oo3QMe zPa=tN%Gm<`74|_yaruUx{23~zdt&Ro?+tbWQ2V?REZvH*RY;?xd_-KEr%h{NFLn$2jEQ{CA5=(XAn<3 z^pJPAl9&P_`~d>TN03-7nZjg+re2gU6ZfARc;kCug{oeenwRB#1ArRJ{Ed4}`fX-o zXOAgQjf3O(dUJY;9kjk3v=(N^PFeBy5#V_;eEI z0kBY4Y_0%rsAEj+vUR+QY2Z73TksC>uM4m@D;IAjGnasEi~hlnlJ7-M^*jVkseXU! z`!)AE-n`utoXCEo4pUZW^_10~)`T~+Y&x@}*)?>N8+gpYD)CY!XuBdN$D|9+5=@K( z{-RJQ3K^J|H4`i%O~hVL3bMHu5JsiEgsH+Opv?sPq1;#jX{naPVb7K}fU7y#XY7bd zjqYkIg^P%gbp#*~5exf=J4++|(Clt<-c>1$;6%Ln@fUenZ=y@9?OQYF(Iwcf+^qFO z!i$z9;YCe+{tPj}3UPWXKG8hBc^Hu};awChHIYp!4nWE`Xv#;*4T!S#*y+d)J3NO zPj#V+!o%HYJn!teIN^d_Ke_ zT2_g&C`k*laruC*0%8_F8+#x_DiYZS7v4+DyGnHHqcW}-tbY^Pqn3ys_7N!i{MQBM z@Hc5V5)GB|d@3(hdTQUdr;nEjdDQ|m_`ORwe4oa$(V52&iM6YVz*sCK$`0N#4s-b0 zAoO1skem6x>;>Y%t%hHxu)j;-HHKqbtdqWZbYx@Mx$YXcJwpzv?1SE#s6EO`?6dk> znZz1lrpFGTk~qebLD1VmiqR~e+(dh35hb_&&Ne|(WHQn?r0oHKiiQJa*-T$Y(>y2sZisG0#|HQ=kR@1aPhpCYUJA&O4sDT2RRkrx3Nl7{> zI^64|v=srBe=QZZnXL~BjqzU#rA?TXxR$x*l`_|X#ym@=wH*}DQYcUq0zw7BR?*^~ ze%cpcOW22He7)zLbI(1w=j7aX&-vX>#34b+c3)C2siXFO1?0C+4z20a__l!qp3`U} z9u}~)4`6Cdq^SFT)tDpr)l{3EghBX{kBUZnri4bw-$q2Q5^HTUT)~!X2Q~ahb1RiY zwT$o}(lnJIVcJT8ez@rIX(C{KkzK&5%AZL!_)w9^tsZ5>)LCjOi7lIIQRl+j? z#r6z(f}nioE%9a-pi+{B*Cb=Gn5nk&o7-m5%d8$Sz7-_D+fvnBPk~{6eBT2u?s@qL zqQKguC3t%rC5Hf}y3Hx;z0k8pVxL^4Ng>Oz!iQwU=FNV#e0%LI5_t-N9`odl@HTFGUg-pS2uG|9qxVX3vf(a5k9MO14kJ0 zzT#1s)0*OiM1Rt*g~$^n~ym7;amAu27>vxmb$AzEFxFk-S4%y zhO)gFi=TAuL{zbvll7ucju=Oj8;)8N7zaLdZuEQ3&&GCjR_>#84ILX%t`uiTx@<-W z-ge{ru%jYhzK8Kp!OlmV5z`V|WA3K2%tLw3<9>oZ=W&{n)L8Gj!}xX`w+pY;5!6s3 z1OOp1wZL~WeUM)Leihl6oAp4GXLlqe3jh!YRG;AeT4d(IXqUpds$KF@>W!h8=uDSq zr#>3#L^@~NtNaNA z{Mvf|7e_|e;~19lT}eG%<>bpUI5T~fwjxvu-Xy<_3|zPju>(T>+)XF_*M`#)JR-CroloYY-Ep!PfW&k=%=)3P^E4utQk%mPI5$mC6zX6c7j@ge5>g7Aw7#MM4E- zhgd+UWh;_}J*5y*WHUs9B$7bb!5H>^c`vlR+xPkI`+3^;`+eU(@8QSH$;_EEXJ)RM zGv~})*Y4}xVc@gNme!WQzI_0&5Bvjm`TJg5U%cq?)m3{-Yq-USj9&o|4xR%5bRah5 zs?|SEI=diF9v=QsVlVHeS7^{){2u`1yTaPz4ggHZf1vsAl8<=b3iSdB=D`0`AzW9t2y74*r1@$O5Bd7)MG*G}@iV@E!ae_ldj*B;(LVrbjL`vM zdv)!>p2SCQ1zvLiXx+c zMq?Bcm!4+QLS z*iWH|_(T_lof~`bx-3n}6Cx{6Ckg|y7A%c}wNqp2A_g{~$hPtNb}x~ZGQ;}Bodu3n z`Sa2K8=ZkCZk6|Dj3JEA_C?p6{<;-@HkD>(UNmpd*qhEM|0pY~BBGPS4|F_pNQ$D@ z+2z;VyHc6OLg_3%Bk9UtcZ$b*Hgs7s%+`NZ$dtMsSv{bl&RU`vkbH5E3w*8njNDVE zVgk`3p>QX?etM4HFmWyBi$MJJ+kxq$C!*OYrX|^{Df5o~dEs;Tn7Lz@jJXPF(=m<& z7sA2mSzA3Dx_?d6$|Qv{(@f#ZGB1ALtWhOp`!$@suAeiSARL$9YMHXiV=S!%)aowf zW!2nbj^x!Y^wo&@aoSb;a}PBX?*h*;mA&ZGp0D}Aj!fMIf+69x{40wxZKzaYmN21U zGJon_)~m^Z?Nk9G#@-drgg+`CxXX}dPJV(l3G1J(e3(1gO477`6|PE>wU7ADkCnfV6xA$=+T4cOF zQZ^|Is1~E?rWE=zt`9U}@L3bp`q?Q0*)_~0@Zwy1WR+xyo{$5M0n{(6=sj2?2T*-G^pXZN47gtC(S~qms_4fZ zX{WG`ZEdMv(%J%V<)ii!{;0_EAg)0Ps*(Nx7kA3CM5K@?;1O42F61di zB;=Eqew&sbCg|*+vadzrh z=RFp`!^SoFUL>4uLOyim8GO(nn2VvhxD?12)pW*9b>lHBf$E$jrrT!IzRX7duz^as znnv@1qlm`FaKefmJlk_ng~C>gVk!G^3V82CzAp>NR;SsS2B(quSt%>|*+FckArdto z~fsmr!hF!q4B>D6L!f23)c5j1kPx110fysBG-`b6>#zB%H=JaB|oF);!4-9TSx{|G*~X|!QxJ&%>UaB~@lk{Ip$WG&R=(4`JM2O(RNEOE0l zT~8)En|PIhnA?Hxo{q;jV@Dwb#}|p zH#eh7Wp;r$INLb08Rl?G7#*GiUl;HP?~zmGpWz2OWIaxoEGoFCWJRgvdui&c=;i%O zH;}&Zx^morA6NuU!jC=y@tFr z+mKf|8&&4@3aOtLS>|E72x1ugPoHdien zXT3TagV5sI^7w&<8;6=>G~G~eb_1dzv~p3=UIqTTR72x9MWhIsY#w2A@~AY^qD;4< z)~hTpxU){0Y3HuiiObGPNGW@v2QCqMKOdE#MPHGVzYb>`)FNADA(;nnkr!d+eXp`O z&8oXV%^8uX>9~dt>l`b2pN77?v)NF)>sM^pu+d~c;ga{hyKHB?>5pD=?v2`VF#5o< zd$8?KVd3OOGN&!z*8?Ke-c4S~r*V8w6x997dZ2?nxL48VdNPsYlxS^WAVp)aNL4Z- zxtlUF2@`h4Y+LsUFC~(E?=f}xCG*5Jdr-bGnq;fNy5&677)lIXvN+f6Q-d<^a)^Hv z@Zx|YHh7SY)RstsvvXH*^mLQ?c{`I*zo!%q#yWK<=y=hgHzt*D(_@7u>v6iOHcjf* z9WbZJl%hb^R_Q_jV7Y0z*tmA*Z?5QnCRZBb<(V0&r17C+~#c`!3<>ys)(%*{Q z_M7(OV$#rx;mpYFDn_+z8(7zR?uLCewRm&C=4Ec9emTOpMBkiG*GaN7nzITEA0vYW zG1I0$m-Feyu)dnsq0Tzpr>IqwSZCms;rwmY*Sx-%Z!Yuc&RLa4ZEzveRn0@D%rNzW$B zuxGKe3HF;%*-)obp$VG|?M~{gXP5gLb;=!$3-#=N6RLQGuA9?i)a?_I#i4g=|1OO`82R;>~lvx2c3VmOvM4B`F!)uCr3H{jD*Q z_}eegtG-ivB{*v#AKlqkmTRApllThh)99G+;1T6a^AMBzE%^@8<4~!SZVKFscF(X| z9ZBT%`DUt2f#zR~{#{f-T_H?ArF3S(qJ*66=%ZrTMvrItw8GaW6)tg~kN8KanySP3 zcyd9$@R^u`!t`OlS<^zdJqK31>rRQz%!myJFtat?et z694h*pd>u2db~>XvPBW=`26%aPl_beQMI>;fN{Wl%~A>dC)*SH2y&yetn6j% z|D}P`W0E46RQUO)%9X`bufImP1QsrR{v}wL2{J6$EBiiauZ|{=-Sqn^?7ePBy|3Z_ zXQB@cdXfD9wv~&i-h2IYFhLMWuVyc%-nfJx$h$3H^?ymy9YFbB^Od(p#9BShtQeri z6@LCMA>m!h9kI32sYkJD8~e}yd8z)l_@2vW561JFBBcmDJUA zy6>`D?izKlRdR)LO&1uzL2xAY+%vyBH{J{Q?}L5+>hh1Dd~o{x?{psl|LU0!8SmSC z26VH5aO5B7_oDv^JYS9Et<|FZ%G=u7x-dg$pXf|lXP)AQdY5;N=2(e@bFc%pIhdr7 z@!|nFp%_A7!igmR4D9>ezqHru{{wvX=y!rA9|Qk&{C>~+Q~c+F+kgH~8UGP2m_BG* zD8{lXJKlq6RdrD)bx|ny^l|#EgJtz214dVooL_y>R{YDJO8gX{6X+%?EO>!6>xqpZQn^S_#Z)Pvu5ejn8A$$AL~Y0su|gYWrOw>Pe-_6 z2UMU;S-+Nu>~X5f*wIgWMYC_bLRQbze2 z8-l+$%R!De2D;jl&$e~hAB)x|EzfHgc8ZB>w+;bMNsgmQj(Q`V2>7Z{T=qFK1Tmjh zr+T|@(WA4aOo!qT*tHALi&x|N1{3n4HsR)T<0Xrx)!V0J0pK@h=*thi^jpLKWAyPQ zaQ=UQkAU-g$Y-Ykb-e}Kx_=~URUhG}Cn4Am<|UiYI^mnW{1PUi+I(87sY~~LdEq6Z zqt|Kl3!mtbl-&L%nySS2rBD04U%8(4QFq}a%L#aH6H2~=K0yy<0_Ux15aSaMC@)=2 z)(ptRHgmf-R5Qz_uytSg(qxgzXL*F79huZ46FqaRw3%R#7}@Wbj;B;?x>_k7^NqAv zel#_%N8 zTltas>gB~Ux=ejj#cHhq`R#n9tW}N6((65LL>6l)mnns^+zhFTi`!IRc})(Gq}w2} zQQ9<0#11a^LOI2tn4eLMnzu!xtHdO8+qz<=@Y~t*w;sGorlFk+-kllr9JH>K;YUc6 zFS^xwUN{N%`W}4wAp-WF{|)&|(cjofyyy4F(hq#{VG61HjTL>F?r|#1IU@tDyU|rw zO*2^Y1PyJw`AJjt={a-9?2taA^^^(UytdwW-+R$`nFTM8j1{j=>yD(Qidr8Aw3+jE zfc~UJ?osoR;jD62M9LbKkQ@4*(xvh$6cZx6Dl`h@_kdQ zsnyZ-6BinZMHiuN^)I@X!{|M^?F>`bQiY`80clY?7OcBj2q|q=(jR*>LQuXJopO?m z7+hNENUMX6CAq8X=Fif^62VDgi zYBXjh51~douB3(O54JK|ZClfS&sN!4FXLNm^qeguH>w@xRqFe$ZGD}BbU)$Pv}xHH z)cdgYl#{~eXu@f)NN;n?4(z?(bou*}%Dv$`cn1vr8hi}yxPLlj1=?tPJMR7e(4Pl> zUy}dwnh7ojf56@vxCfxFIe6!rlPBM=dLNQLd4K%*9{)|^59xm){M#}eJarIcdmx*c zuO67l9PPXg&CraM;d0QOLD=^D7qOWuCCLJDJhWGWg%YQR=JpZ9T`%j>laGg&G}|2dat4_^`{NDbep$_%UFgm_3Ns(FonA^$gIc;Yt%c{Jhefma zBh#JZQ^rH5jd10C91DZZ^|lDX4E6j{f4xT)zvXy+rNS(xd2=J`KqYt@d%(k`k~syn zv~{$r%%B{#V;b)QnuQ|Y#9NiORJO9FL&CCFIWZ-MI|0K0pu5aYeePG|uhi&(PY;w| z;oS%j)x5AIsQ1vj9?opnsH{fwH-)`Zg5SE*c-4H%CNOP)X=~(6mr5)+)4a`~roX%+ zYGt?7U9WV`HptSQlHANeleq;?W>f5vS@xH(v5>EsWqG+P5j=E>*9!U$XiNYne`EO9 zHsZe%pUD4$*!~IE2g*5RQ70HV$&uTbUKlBLy_=3_Xw#A~+R~}3I(35NGA=q=#@8P) zv`kPtd>;6_ixgPhXWxAWh$_<7);6SAyTHg;1r;;&CUhfC(e-6c{kj)_WpeXC=A51F z(uoIg8t$67)RmCnU0~J}%4=43&|Y@}{eqa`a)u2Gg&c2n-Nft&JpQR}gfGY=3o9Uz zTkEmI_{3eHFWRMl)%;eo8B2Ku6CIqsW3RX_FzehPMu7~h=Y3s<#B#FDtO-NuqwqX8 z)q4buOpl#QbLQtg5j%HGsiA?BySiE8u(<-dgP#FV;dT9pBXS;|`8h-Rz%&+*Dz5#1#yUMF=i(k!7q!lp0hEDpQe zDOGuiIL}hjV|(@Xrw?<&$ShE{l5))+e$xZ3A! z?9boF+^|cT+9@&#>0X-{%4utV)8yW8$baUXSGVn2h@+df`u8twzuvSp{kEXLnRyPSv0_G!I z(x5Tx<#XHNW9vK%?>=PM;&$oXL1-I1NU(~gM$>Ced{X%phe}U*b;z89FC;cv9c$FD zM{UWv>^!Dg9niO0Qnm4+8$sMnbXE}$Wo?@u!s1kYi_ckRjtp6T!X0>kQ>jMvnvf+Y zO+SA%(&x?cdF8H#uN{pflvOKAFU7gEw)~K^^#)3rS&Tcjbj!%Wqkla6!PiytD?){`+lpoS760H&mMG9r0ocf!oZdFWdtVYeXG&S)d z`9(~zac_%J@-jQ$xYrXUov@Ikn%8VM%fw)q&G-hh<5T=i zOM>x0Z{}uwlYAfBF1>s^S2Yke?Z;-U>jrN@8Q9k2g1ZCcH$wgVNly9;)VZ-K(VU%$ zMU(5aXQp98ut)}`2e~BB$QM)nyl1+Uvs_}($0~&>zx};jKyZZSnycO`sWo{`Wv#Lcp38O2p zWOmTk2DbDMZ}4`qebz2+N$&#BFs~INM(pR`n2l4mpRb;1au<<0(*3MMq8QivVEtn2 zmf8;N{uX%`AiFec^m~}u#1JBfTb&cC%G)=00fUvV!%9cxB|Q9E3Q&t^#gcb%w5T^H zw)O7o<;+LHxvIZ--Zn0gk2%(Q;;51TfJ1U+CzL~E-`>`XQ30q&`BJlh^Fyt=jx3YKKW6;=&e-nnJ^>aV7K4oXD*q z-#gQa+tbut;FZ(zed=M=Yx7d6))nOR)1h{kyBvMgWka{N-CVND;cQPO!>-==pO+?g z7H{nWR|&;1stigq{$jE{-lr+1G|8)7InbkLU#8Q%d%S&Qi9tt!SNlUb(}jFRnwuin z9aM!+?a$N|fR6d&2Wij2@ zg*Js!e=xzam1+XlII(t4R$CW}rscmz&N-cR_w*$>CycL?OeI+!4h)%K?`-05!SU>M zAH&#piobY_Vt0Yl)bqCoR4;;U@+hm!6$!Pp!B8YUl^C@es784~9i;(UL_cO!g_K=-&BSK=7neFklinNs`r7fLucpDreyC@9W(cJ~aT6R)} z5bpgoU#rXu_f0D`)7DYaYzWcZJ|f6O9SWJ zC$UVF(}scl=RsBRm%&NnOCP#Uhx?bk(Pt0XWs$JuBgrh}NQN&-Y@Cv_w#1}6Q_eb1 zRy*gf5^`Km{#|40gB+kq<=O8wORTGoULwVeJUZO7A?~n(9Dw({LD;m#LtYK^VTY1FkQ9fVRQx&RqN^Fqx|gMF0crbKf(}W9M|%it)K1))X-2+6n(dTICrgA z`tW7X4#iZ7+ikr|{#dRDWvL(M8*4P0z+qLJHS{k{UZBJ6WM((AX;f2D$SQ|roVTs| z3$&zvq}PaRK*v#!T?0?*c5X~ZTghTYe^jnlS6scAI%ftNlW|MCz_z_bAHs|>r8SM) zXnw9_K;{MBUe(z+_Pts42AFH*#+us^l_&F9(Ji^9yFg1=+;pwt!8m&VE|5VjZ!)FY ztPDw^^%W1hxGO*?oCQCu;)Pwn+e5dRF%b4pY}Fu~v-n-4h_TaCBY$O&oZxoXUP;P3 zA=_{@5*7n_IdqJ{mdiE}4g__1m5*_KxN^BBYIBt)?uF}1b@jR22$D|&%eTikYeRqJ zOXRX-XL;v!hI=qx{e|y9>@M)ckau{J7VnW;*$Iz!CMS{#^(RHE+6g1LxPjEo09xko z+t32ceJ6wI=6P#6jZ(7N+R$fo)a`UJnP58aGAS;fr-~{r^D*IWQ7mG|V`>-J1?(O0`R+yzF>9X6K@JW%Ivdg16|M*<3k`K& zPl#+ZYEE3c?-U)CuXD45804KRKyBhSo6OtbXycKIhkgk)+iD`@B>5T8wZH@cmCeY1RB+j?)h@6&o&+dd+m5_PK_ zef_a8)!zBg^%%A9JML*aIo*#(ujaO)*NyGrGhRAH(Kb~`=2=Fw&)Q=Q9=4!Ncr3xTY8%*hjG$8Y2;Ip*HeuT-b`axjBtN0#t8P4X)N z+0Rl>L$pbyXnv$nbf@T$iQ}guz0S?Bc2;6!9`BI(SaxgqNb#C`ZddH>#Y39O8#aeZ z&P`+2)zj}XZ?nOhBLbr3&O5>{io?`xo7gV>H7k3g6T@`EeN8#UU`cLQJ5$yi^TMz` zUyQ*UjMA)GZo>GZX|1ii>Be~aAF9b|tx9ALJH8+wdRJgvHY|BHbqo(skNC_!d$#G} z+A1z*;?5DuM!cI|B3L3f9PImj6BDb9+?$rabGq2KVG@{Aha$+U2KGbz63ZJYwEWZe zU7xik+vA$fwF&*+W#>0E<%-Yw1ez4N*c~%07QTJcJ$LWZ>7V$m1;N~O?dWtnwdT#J zcE+!=yTG5+mt&QsAGjZ0I!Nw1v#*jz8`1u~2?mOvE|GJhjB>6IB2zUWe5FN-1f~)Fjy~^X zgRFRxuW*#qnSP2ceNZTwkiXtLMlV~_BR6uapADDq9DU5gbQ_t)KZ8F+`xKRz$9`hT z*}2g<7oO8U^=2I{Yl%X8I41~KvxAHdU$Mha*W3MwQ+FY0YOnb=EXN#HF!H2d$IVJU z_403vFgIw@oa+&N*ljrPohMVV+5n?9g)bhOpqA)F*`8k5E|L_qzOF!v>k&jJQ`elf zZrd+Wx1Ybm#{FV|U7yW#%B@Q3na8V=T<+bht?2Ww0X6CCohx>t5$+4lP!4osn=VEfL?;na}4fvk$CT!%ylr>YnxP>x}RZ$y7s9Fm>aC2gywS{XSPyQAf<-xd(ztLUkv zy}lJywAr#Po!TO|+{=&kUm!C{C^HXz6{^gP=O)kQ9%@`1YC61P9a^tkg58GTqbjB| zsJG=CMp?!qjK4E9Agx4qMlF&aDBzonhl>Pw%RRVtfW~&FMsm21HKp zU9EH0Ub-i5>H_YHBqA^7G7QnFPW@}{Dk>&7?H+@&Qv1v-OADe_QqK;o&2!4vTA$?> z6W2m)RnSPhL+jDO<>O0B{7!VyFUGgZ?ic>#_;^-{)%<4tEk3P}dA8kVMp=PDv}nlX zWTi3_Y_N+;R7`t&U%GcZ2U;nzXyTPrWlj~Zt z^G>mR=LI&-ir;-#Yn+QK2~Wt+c$4`y=bAd5J|JBa#eRE@>2L)a_^BPElaRWpg(OM5 z8XcvJlQ%>CmP)=HdFe&R>y>+C5}#wuw!piK1#y@BH3Pdzvp`F97nt~`k@Suuc;j*V`-p;}*z`&x$|e?(|3x1nFoh%>WZ$5M`@Fv#;}GR(8s0vKDhEbod0L3Dj+sD+vO0P7G_YG0r}NsP^Hh=K$XJnm{E zpIb~1nTm^#pIbBtjW#S}w99&>=z%^wlw(99hnh@Z42wEYcn%wb&OP)zOx_!q%Bfl_%lq-wu@9mY|_x z)Ncbs-(xart5W6MJ>SGE!mO&wTt^k>qIQ7_kG`+hG`CbWHx_pR^o5qS z&|M(%TwKmBureqxvMMHS%iPtPK|{r1j-*Mw4P!+M|M@8+pPW3-oL8<;Om4CUs#xap zh!t($myUef2b-K5t;!r&K3p-y&0#K;*f`lHoA##&P>xE~TZ}$8Sm6{W$fuE~xeJIs zY@`o#r2p9Za!5S$?Gn2-nEhr`0K+wETG^#vsUo{)^!m|ZY$mab%f0^1^xW3X@0<8_ zP#>E3T8WaUNq$eg*0ic#1|vNR-iLyLM>M};A4MBxTE$h5&D5~;OZut)(WN-wHFc-h z8dE$|+fLzm^>{CG`^JfFvALZxRcqGv=@N>AEc=avIL)-dKDU2H=fv3@l!G4OsAod{ zCR7eONsaeeO}aWj6d>9c<`6yU)1n3aF@$5%PLXd%$_27fy$Nb_Llt&}mg6NpDrlGG zl&4Fo$DSDNZ<1+_Ua7RTEedpdm3k)PZz{Ee?vFccuFf~1W#Oj|RUpe+&={*QJxf2gT9+p3l^xh5gYjjou^`ZFc_wiZ0*?{H*9u+7 z__=6OVS}x6Ty+&~7dX)n`IZJlx_Qb{?N6^{-<+zqvkk*62$8!$Z@2qzO3KRD<|+Lt zz11$%WYJ`S)xYG+4&`XNwl=@1jo9wPq2&L4UfhDR|> z0P(eQa0oQw+}+V8&uhF{BF)Z?v_$m{)<`a$IO|+1j2uZ2@`Zlbuvy!17{Ze@+2h;i znpLleY8&qmcb+Scc#=oDvv>J%n7rb^aBFJC$V?G>ErPdB)~Pk^Ev?kh(2!pjP?AZ=z(FFtT@Dhp zY~dLj!kSL%Cf=rx5aBz7hGXXb&;gNZcZO>)Mz)7j9|0O!6-7~9=yMa^Q+~OaRE_?H zES`6hrZl%YqgH4=+PC;Ewz*V(en1LlQ5rLeh!M9I}UMT;pU{j2%*XFy9lYBhu zHeRP1bqTi>2Ba@fh2DJds()md6Wh;MF|9Uvfvqw});q~r`sIvO4RyG$?E<*S+30_n z)9_1%Lnh@_HrVzJ=iC85TIx<^oKQnZi$Xa(Aud-Lv_#R!3*gck9*DJStq*+A=tC;i z!@VQ6gO7<(-Q4J_o6U0ld)ApB;W+4svMSbj_0rWg69OHpm|#fdQxZ9K@%){1<|HlI zy0qhZy7XuxDXt@jIJ@;MHs!8)bREe^lYtql!TJLbgoqAaawnH{mX<%*4qy<3L6Kx39!cid*c^0o+rFo=L5H{MZhcdymrqLo?Ec{?d< zzHjAEr@E{(*W5)L%R6#};_{mt@h^=JU)%+RmS)RUn@yYF6oFJtYHk?z+8Rc0c!n(G z(c``fZq{lEh*5)c!b3(=N?C^XZnd{6-)@*bA7MS*&k@bF#dRE?K;L$ZNZHCKd`ta#9^5_g z%0M;r@r``>bECbwol<(_x=2pk9HFGS7Ht)tlcY(uI8~xj-?e9{53E2gz%vSpQrVAeI^fTHC z6*J^U*W~-j4ROwkR{vP?Sg}i6GkVvMe2SNR|Nbw^f$Iy0?@tZM8(n-__Ot_85n{VO z(5#o3wJnQqv#T1ZOedf1&!%g0s{T1U;uirr*$6*jGfaHh8$Cyeb78KSMtFp9hBu8* zZ0%#?O00)F+_4>EjRV`mQm^bxA5BH`ZV}zrj!d&Qlv`l*H=8&5bVX4o@J@>-* zEey6_OG#xvK2)2BT>Q?}HCKvYovTq)@FmNKF{xm$|8hu^kvaXP7md;1$KB5HPUKO4 zi7rTYeOf}X&a_X*RbCcoD=1VRwv1LYvW?M|A&I5cR?rZv28^j}Jo9g=u=nKq!5eO$ zgBNqo|LMs5uk!(q+5ro2m9u(aKpjL>`qG>tb;T|#X7hcZlgG&d>68>DW%AOB>^rF-IB`)22ac{`>wVp*_tk+rjOsC72&qN`OdT1KZvcCt|(_N z5D&cG_`39(L@(kNN!^-8*W+buwneNT@N+6JJ*+5?)8i$_T4*_(##M7ERr$WSkNyeC zl!r(*Uj|=16!%Mf+|baXEa%&b%z8k~PT*%HTSep`)4;dK@XMs=S=i4SYJUjk8GrQ?L<2>sMwrH|_x<=mj9c`nVWTNAJP<_Tn1wMHolM(k+MQ&JKgnF?okr)Mt_ zWbHc5+uG-0ZFenAsS@sLEM}6gAN~yYmQH8tDYjY~IcK%aZgc;XV_h(N@$y(P7d9)E zGP+WG15t|L zAc+y{YG}tV{mV*8v(lspVXB=+!Eo0nJPjj+di0};ioJ$^=j^x+WeU0AdtQc|G_-$T z4GQk4-0Ty6FyZNRTBEbTb)cuFQ9b%~HMlSDxGbP>iRU%cWrBO`DzzL^L1mt@oqUUK zLxZF}CayZ7#k4;C#6$0F+`QIR!UXZcfY)eJ*rU-bt~yP2b3dQliO)=OJ*|#>SI$=Q zCd0A$RZ*pegJgf|MZT`Oyq6~Y!$8koE{M^2qT2$cMfu#Px4gpRRKMys{vlD zFbZ>Sz^_x9tJ+-SaV!X(6jr;@Q&nE7*a=pkT3*5`FcNq)!N7MUZ$4Xjy%`7kam`sO znpCxHUMBG}syrDrX^X&!xnwu*Kq;D&0Q-2gH@^ZWNX2smlH_?Sv6L4;}z<2bf!E;f_&LxvcATT8+Y>h)%D=ftOwa@E(KHIxdSBa(dKGJ zB&H|)qjs1N&AQwJqOSKYk!bnW;l~PH!{Bj}+GWQYDWaeeyfyk(#HcY1< zW}==I_iSl5Z`MOhG%b-!b)^~xL{4i`1ZV1vPaVCp^lTq`4fp%q5S@vC=K=gT;vKpd zu=W$S*j4XxpXwooUOrVk`mnl=hbbg502(OEB2{TNiSarY2Lt5Y-7L_ymM~f{Tjd-- zYkb^za*%o6Fv^Bi2OVjRHY|j8IWCtBl&(`3q+jxEj$_wK)K`*L2LfNY28NpT<`y2v zO_f)^SV8>=H!;}Y8Y+BbF~_`icW|QGnHj;UH*EdkPVj_^&T^ApWv)Qmk6*H!BzO@% z-WfMo_kBWM-E#+BEemqu%yg^UXuDyL;MIZ0l^xRLGO5?dK>0$5o%-1LNRL_giaKpc zm*|=t9RoU2j4pIk%Eft4bqrT7`U^X$QC+21tWzmWdEfid;Utv&{2KL<(G$Z)=SBZ% zBbo9!KGFTvySb6Xt=H8Yk)NiaHxp89HQmo72%IoY)WxtnAzGY|bT+mkYhxM6#x{gu z7kV&jiQ{V}@Dnf@aj|}cLtQq2`_DJO%Fafc8hL3wH;PcO_QmBnnH=>kkOgt*P|ky8RSptXE+V$ z+@B4P3+}zfX8qJ=S&~^LVIE#a;qul?HH=&>`t)+z*jfnB@JU(ofSKYG`o&(X>G~gO zKCi3fil_}f1vyGq(3SlFJ;Yz3ImP{$}20C%bQB?sTi^wEE%GB z<1o6oWNMQ(ayi>s?yW&BDJp74UAhU&ph{qRaRDgsD+IdP6%cV;Vs86#RXO=iXuT<8 zr5heRN|A76=u{nbZC3Hh+X(fpH1eL7hr2(-yqlIA-RgcR_durtE3b$vx7c{GLZ0l! zJq|%j_mB4GNW6`l~8 zGBH!L+Ze{czK)IniOT0WS&7}ZUGJ&D98(&M&(>B4qpI7ZXhJvL2!6`Cu>0jD!$=hL zS#y$dO~E|qiOXze2o-mHFDf8zjm`+DA9}&DR_~RoZiQZf!ilz3M`M=@y(Kc8RV=tq zXDZ6+v5Mh}7Xvj)FX{Jt=H9K0uhuqMgvA+R?(jYFXRq8>iNaa`l&pJCMSkf#Q7?IM9Wx$~|+ zHnMp-T?3I=AOyvp+LEB}0#JP-pOE3nY~0oh#6}OiWjH4$vwXD7SLbo>*!x~Qo#(%z zL3vVsWMnqoADx!2-4pw8>78ez)lR8Y!0UPLI^;#LZ57lk+>2o98u0ec#7vcZINT{u zm*ONwOUrZY;Jr}BIoV6}2I5B(8ZAG?P)&ndMGG%<@tK~l{AbIPXjRZwnqpM0)tRl; zTeMUKyYF5FUsW+G4;J&A6X;(Rg+TmAUUJvf;9*b8Xlaet6359~qph(4P41e{5v*5^ zYKFD5I2!a4p=7(K@WQhvoh(at=Ta1?9ci+TTSd7x8vUJRCDFCd^ud<|)kqcKoAY&x z8%D#1If)%bIf!(<=71~7F=X!is_*&>tv;Rl@@sin^Zd%=Pazq3SDLrBypZq0z7lmi z$3#o2c&Wf{HMTE}q>zaM;+hr;Vgzr*p(t*4KPo9_DvoU5V%+SAujt0F5a&ko`316| zjeE}Z(3zHdS!F|)+qC}8Li!()23THA&um6hgm{Kus+mCm!07y8(-AgIOFre!Ak~&p z4%+8r2gM1FLZ$G*;^HRDNo%p_y!zXAfs{jbm5Z{jQ9`K&SJ6+eE~abP)tqYQ2#Ds9 z<_FFJ%HTIT&VU}8gLnQz&Hp92oLh}6?g~bzcp9&`6#YPxnzl8b=fb4(3z=e_|GX{^ z^A8>GO;b-j%~y`SmasH`_{OB31cK z2RS!F$mq`%s?@`-)>$(Z z(nPD2Xs_3@%K3yV>GvIS(Qqy?%1@s+LqDrbs^rBmk~ai=m{0QNrhpq z+>B4-l#V{QzXfl~3waZ-2i%wGcp{Nm-hr?!YF4`N+;E`sdZae8`c?;eZk~lkPmp=N z{bJ>$WrIZ;nK?&;D9Co>DBH@5hcAVy8HU*5DV=FeXv}Riy0m~PwjMb6vYXtEA0Ta% z*Eo|(BRPJAH?kKWmv#HM2fT*-KpZ8%ac#S*2Oi|d#&$n=L`KKL9Wqa=9WR4j<%DwI zwA9n#q-OY|%FWTNlt+TJ1z!l z$Z%rM_YxpMo@5(gtNV7gT)sIwCno$z({m>|N0eUvg#H|F7k~{eNANqNM)NJIE}IMR zp!kzL5m|3!-$ryIZqe}({ElYcqd+G88A;iOpgURCd7m^cmB8n5!h+{}+(Z_-=DC>2 z#5t}?_|`X6oB6h0kuqXecv0XOcljx<3M$rUxiHx_qcuH&)F-o(X@z7q(>Z%w{B230 zdgcY9hq0};V~sS$Up2|lo`5qdcYNhl0p-PhIYxA>QGl(g1k)Y*=RMG5K3{OV4mU4g zL_w-z1nF`@?PlKj@I&8vysZl}5ay~nUB8kB0Y6(JY_#KSOSA?&?q^Ex6xJ?y5qn+z zvblPbvhc2m`0s64^Gzx$`dM5PLn!BpbGJbunN-;5&??(zWkR*2T6iTPOK??aVO$e> zv*N5{i+BYKp*3FKZp1dgKo<{uf1Q+7vdO~8($FtrGDFI&J2Q)_qO%Pul6=A&R|QA2 zRaGDsRX^m-+dVhXw6Qv91u68}I8X?kAYW!iJCB~Gyvq&xX_*aPr+ZYj3#4rCBcAiu z#4&C)(mxuN>s8|+Io%bhsZ!|E^=~p~3q9vi7{!PfzA@~ZmvUtur>35xqGsDKvzZdS z8d~mb^bb#GQ6a@2NU6^et z(t?N7(a8FD%_wdEn?&;-t~P9E=j4>ATgXIn?m^envlwEJVLtdpf@~otZMpTf&#U20 zOTVW|1Bb?>sGXMhnr=9gG^z*y@aJJ=w6+G@x5hV zKX=mm(z|2}{BnT)!s9nx;sIGiqga^N)1QLjEbunHSZ7>U^L1j&4|ExbA1#A4nkcaK zMP{WMPX1)%WpyzbZ5dsCJx^Rrg6v$N>ArJ2LjNx+i{Es|-+Y~5U#iN{NQ@0vH7Omm zj=V6QwZW{+VyBwOY@)r%s?d91m95k#2yzl9DSa@zv5Q_B7xBHD)F)%JO6kp8SL7U8 z#V0ADHx9}4jgVoZIpLTyW zhxs%72ud`Yi6r!Vy(vX_yVBCX3xpxLsK!+?a5eZU#-{uB*NI6Rfe!M}?umy)?i


r#olm~b%>V!W*BaK!<*sx0Id|`K&b@c%!NWq> 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 literal 0 HcmV?d00001 diff --git a/docs/design/plexmix-webui/project/screenshots/01-tag.png b/docs/design/plexmix-webui/project/screenshots/01-tag.png new file mode 100644 index 0000000000000000000000000000000000000000..273a37cb335931a32cf4f0b4ddade4eb31121785 GIT binary patch literal 46317 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

kA=XZkqZDQIm-|f?l_$ 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 literal 0 HcmV?d00001 diff --git a/docs/design/plexmix-webui/project/screenshots/02-tag.png b/docs/design/plexmix-webui/project/screenshots/02-tag.png new file mode 100644 index 0000000000000000000000000000000000000000..597525420c24a098943723d445fca8657ec8c5ea GIT binary patch literal 47019 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 literal 0 HcmV?d00001 diff --git a/docs/design/plexmix-webui/project/screenshots/dash.png b/docs/design/plexmix-webui/project/screenshots/dash.png new file mode 100644 index 0000000000000000000000000000000000000000..86058e61151e511f5f742510b48c5da180a16952 GIT binary patch literal 48502 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

y9q9j*t8rgEPSRB5@qg2*>K~ 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 literal 0 HcmV?d00001 diff --git a/docs/design/plexmix-webui/project/screenshots/header.png b/docs/design/plexmix-webui/project/screenshots/header.png new file mode 100644 index 0000000000000000000000000000000000000000..e3b005f4c7209134d95078ca3c57744fefc4d2c2 GIT binary patch literal 48961 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 N%lUuN1moer{{!>%mFxfj literal 0 HcmV?d00001 diff --git a/docs/design/plexmix-webui/project/screenshots/hist.png b/docs/design/plexmix-webui/project/screenshots/hist.png new file mode 100644 index 0000000000000000000000000000000000000000..242127af7a4d06fc98e393e143ad0b3ef85e0a18 GIT binary patch literal 39075 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 literal 0 HcmV?d00001 diff --git a/docs/design/plexmix-webui/project/screenshots/lib.png b/docs/design/plexmix-webui/project/screenshots/lib.png new file mode 100644 index 0000000000000000000000000000000000000000..a2c1afede186878ef12c2b7920206574c093db01 GIT binary patch literal 57458 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 S|2O6yRD-rxcz~9E>;FFr=Q)u8 literal 0 HcmV?d00001 diff --git a/docs/design/plexmix-webui/project/screenshots/set.png b/docs/design/plexmix-webui/project/screenshots/set.png new file mode 100644 index 0000000000000000000000000000000000000000..62fdedb193bec8897eb938fcb7e4b16bcf8b32b3 GIT binary patch literal 24897 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 bP`h*SXSx4Fi38RE|K>33uU$31{o(%uF8ELk literal 0 HcmV?d00001 diff --git a/docs/design/plexmix-webui/project/src/app.jsx b/docs/design/plexmix-webui/project/src/app.jsx new file mode 100644 index 0000000..7e83550 --- /dev/null +++ b/docs/design/plexmix-webui/project/src/app.jsx @@ -0,0 +1,103 @@ +// PlexMix WebUI — root app +const { useState, useEffect, useRef } = React; +const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ + "dark": false, + "density": "comfortable", + "accent": "balanced" +}/*EDITMODE-END*/; + +function App() { + const [t, setTweak] = useTweaks(TWEAK_DEFAULTS); + const [page, setPage] = useState("generator"); + const [cmdOpen, setCmdOpen] = useState(false); + const [toasts, setToasts] = useState([]); + const [seed, setSeed] = useState(null); + const [syncing, setSyncing] = useState(false); + const [syncProgress, setSyncProgress] = useState(0); + const syncRef = useRef(false); + + const theme = t.dark ? "dark" : "light"; + const toggleTheme = () => setTweak("dark", !t.dark); + + useEffect(() => { + const r = document.documentElement; + r.classList.toggle("dark", !!t.dark); + r.setAttribute("data-density", t.density); + r.setAttribute("data-accent", t.accent); + }, [t.dark, t.density, t.accent]); + + function addToast(msg, tone = "info") { + const id = Date.now() + Math.random(); + setToasts((ts) => [...ts, { id, msg, tone }]); + setTimeout(() => setToasts((ts) => ts.filter((x) => x.id !== id)), 2800); + } + + async function startSync() { + if (syncRef.current) return; + syncRef.current = true; setSyncing(true); setSyncProgress(0); + for (let i = 1; i <= 30; i++) { + await new Promise((r) => setTimeout(r, 90)); + setSyncProgress(Math.round((i / 30) * 100)); + } + setSyncing(false); syncRef.current = false; + addToast("Library synced · 218 new tracks", "success"); + } + + function runAction(a) { + if (a === "sync") { setPage("library"); startSync(); } + else if (a === "theme") { toggleTheme(); } + else if (a.startsWith("vibe:")) { setPage("generator"); setSeed(a.slice(5)); } + } + + // keyboard: ⌘K palette, "/" palette, vim g+key nav + useEffect(() => { + let gPending = false, gTimer = null; + const isTyping = (e) => { const el = e.target; return el && (el.tagName === "INPUT" || el.tagName === "TEXTAREA" || el.isContentEditable); }; + const onKey = (e) => { + if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") { e.preventDefault(); setCmdOpen((o) => !o); return; } + if (isTyping(e)) return; + if (e.key === "/") { e.preventDefault(); setCmdOpen(true); return; } + if (gPending) { + const map = { d: "dashboard", g: "generator", l: "library", t: "tagging", h: "history", x: "doctor", s: "settings" }; + if (map[e.key.toLowerCase()]) { setPage(map[e.key.toLowerCase()]); } + gPending = false; clearTimeout(gTimer); return; + } + if (e.key.toLowerCase() === "g") { gPending = true; gTimer = setTimeout(() => { gPending = false; }, 700); } + }; + window.addEventListener("keydown", onKey); + return () => window.removeEventListener("keydown", onKey); + }, []); + + let body; + if (page === "dashboard") body = ; + else if (page === "generator") body = setSeed(null)} />; + else if (page === "library") body = ; + else if (page === "tagging") body = ; + else if (page === "history") body = ; + else if (page === "doctor") body = ; + else if (page === "settings") body = ; + + return ( +

+ +
+ setCmdOpen(true)} theme={theme} toggleTheme={toggleTheme} setPage={setPage} /> + {body} +
+ + setCmdOpen(false)} setPage={setPage} runAction={runAction} /> + + + + + setTweak("dark", v)} /> + + setTweak("density", v)} /> + + setTweak("accent", v)} /> + +
+ ); +} + +ReactDOM.createRoot(document.getElementById("root")).render(); diff --git a/docs/design/plexmix-webui/project/src/dashboard.jsx b/docs/design/plexmix-webui/project/src/dashboard.jsx new file mode 100644 index 0000000..fa9fc24 --- /dev/null +++ b/docs/design/plexmix-webui/project/src/dashboard.jsx @@ -0,0 +1,106 @@ +// PlexMix WebUI — Dashboard +function Dashboard({ setPage, onToast, runAction }) { + const stats = [ + { lab: "Tracks", num: LIB.totalTracks.toLocaleString(), icon: "music", col: "var(--pm-info)", bg: "var(--info-bg)", delta: "+218 this week" }, + { lab: "Embedded", num: LIB.embedded.toLocaleString(), icon: "layers", col: "var(--pm-success)", bg: "var(--success-bg)", delta: "97.2% coverage" }, + { lab: "Tagged", num: LIB.tagged.toLocaleString(), icon: "tags", col: "var(--pm-purple)", bg: "var(--purple-bg)", delta: "688 untagged" }, + { lab: "Playlists", num: LIB.playlists, icon: "list-music", col: "var(--brand-9)", bg: "var(--brand-3)", delta: "6 this month" }, + ]; + const embPct = Math.round((LIB.embedded / LIB.totalTracks) * 100); + const tagPct = Math.round((LIB.tagged / LIB.totalTracks) * 100); + + return ( +
+ {/* connection status */} +
+
Plexconnected
+
+
AIGemini 2.0 Flash
+
+
Embeddingsgemini · 3072d
+
+
Last sync{LIB.lastSync}
+ + +
+ + {/* stat tiles */} +
+ {stats.map((s, i) => ( +
+
+
+
{s.num}
+
{s.lab}
+
{s.delta}
+
+
+ ))} +
+ +
+ {/* quick actions */} +
+

Quick Actions

+
+
setPage("generator")}> +
+
Generate Playlist
Describe a vibe, get a mix
+ +
+
runAction("sync")}> +
+
Sync Library
Pull latest from Plex
+ +
+
setPage("tagging")}> +
+
Tag Untagged
688 tracks need tags
+ +
+
setPage("doctor")}> +
+
Run Doctor
Check system health
+ +
+
+ + {/* coverage */} +
+
Pipeline coverage
+ {[["Embeddings", embPct, "var(--pm-success)"], ["AI tags", tagPct, "var(--pm-purple)"]].map(([l, pct, c]) => ( +
+
+ {l}{pct}% +
+
+
+ ))} +
+
+ + {/* recent playlists */} +
+

Recent Playlists

setPage("history")}>View all
+
+ {PLAYLISTS.slice(0, 5).map((p, i) => ( +
setPage("history")} + style={{ display: "flex", alignItems: "center", gap: 13, padding: "12px 16px", cursor: "pointer", borderBottom: i < 4 ? "1px solid var(--border-subtle)" : "none" }} + className="hover-row"> +
+ {p.seeds.map((s, j) =>
)} +
+
+
{p.name}
+
{p.count} tracks · {fmtTotal(p.dur)}
+
+ +
+ ))} +
+
+
+
+ ); +} +Object.assign(window, { Dashboard }); diff --git a/docs/design/plexmix-webui/project/src/data.jsx b/docs/design/plexmix-webui/project/src/data.jsx new file mode 100644 index 0000000..fcbc4b1 --- /dev/null +++ b/docs/design/plexmix-webui/project/src/data.jsx @@ -0,0 +1,114 @@ +// PlexMix WebUI — sample data + helpers (original, believable content) +const { useState, useEffect, useRef, useCallback, useMemo } = React; + +// ---- helpers ---------------------------------------------------- +function fmtDur(sec) { + const m = Math.floor(sec / 60), s = sec % 60; + return m + ":" + String(s).padStart(2, "0"); +} +function fmtTotal(sec) { + const h = Math.floor(sec / 3600), m = Math.round((sec % 3600) / 60); + return h > 0 ? `${h} hr ${m} min` : `${m} min`; +} +// deterministic warm-leaning gradient for an album-art swatch +function artColors(seed) { + let h = 0; + for (let i = 0; i < seed.length; i++) h = (h * 31 + seed.charCodeAt(i)) % 100000; + const palettes = [ + ["#F97316", "#EA580C"], ["#fb923c", "#c2410c"], ["#f59e0b", "#d97706"], + ["#e94560", "#b91c1c"], ["#A855F7", "#7c3aed"], ["#3B82F6", "#1d4ed8"], + ["#22C55E", "#15803d"], ["#0ea5e9", "#0369a1"], ["#f43f5e", "#9f1239"], + ["#84cc16", "#4d7c0f"], ["#14b8a6", "#0f766e"], ["#eab308", "#a16207"], + ]; + const p = palettes[h % palettes.length]; + const ang = 100 + (h % 80); + return `linear-gradient(${ang}deg, ${p[0]}, ${p[1]})`; +} +function Art({ seed, size = 40, radius = 6 }) { + return ( +
+
+
+ ); +} + +// ---- example vibes ---------------------------------------------- +const VIBES = [ + "rainy day melancholy", "high energy dance floor", "90s nostalgia road trip", + "chill study session", "late night coding focus", "sunday morning coffee", + "golden hour drive", "heartbreak at 2am", "warehouse warmup", +]; + +// ---- track pool (original names) -------------------------------- +const TRACKS = [ + { t: "Paper Lanterns", a: "Halcyon Drift", al: "Slow Tide", g: "Indie", y: 2021, d: 224, tags: "dreamy,nostalgic,warm", env: "bedroom,rainy", inst: "guitar,synth", emb: true }, + { t: "Neon Cartography", a: "Vela Mono", al: "Citylight", g: "Electronic", y: 2019, d: 312, tags: "energetic,nocturnal,pulsing", env: "club,city", inst: "synth,drum machine", emb: true }, + { t: "Cinder & Smoke", a: "The Lowfields", al: "Ember Roads", g: "Folk", y: 2017, d: 268, tags: "wistful,acoustic,intimate", env: "campfire,forest", inst: "guitar,banjo", emb: true }, + { t: "Glasshouse", a: "Marrow Sun", al: "Greenhouse", g: "Indie", y: 2022, d: 198, tags: "bright,hopeful,airy", env: "morning,garden", inst: "piano,vocals", emb: true }, + { t: "Undertow", a: "Cassette Ghosts", al: "Static Bloom", g: "Shoegaze", y: 2020, d: 287, tags: "hazy,reverb,melancholy", env: "rainy,coastal", inst: "guitar,bass", emb: true }, + { t: "Midnight Arithmetic", a: "Vela Mono", al: "Citylight", g: "Electronic", y: 2019, d: 256, tags: "focus,driving,minimal", env: "late night,studio", inst: "synth,arp", emb: true }, + { t: "Saltwater Hymn", a: "Halcyon Drift", al: "Slow Tide", g: "Indie", y: 2021, d: 241, tags: "calm,oceanic,tender", env: "beach,dusk", inst: "guitar,strings", emb: true }, + { t: "Brass Knuckle Sunrise", a: "The Pocket Kings", al: "Daybreak Soul", g: "Funk", y: 2018, d: 233, tags: "groovy,upbeat,warm", env: "party,summer", inst: "bass,horns", emb: true }, + { t: "Quietest Room", a: "Aoife Lin", al: "Hush", g: "Jazz", y: 2016, d: 305, tags: "smooth,late,intimate", env: "lounge,night", inst: "piano,sax", emb: true }, + { t: "Static on the Line", a: "Cassette Ghosts", al: "Static Bloom", g: "Shoegaze", y: 2020, d: 262, tags: "dense,nostalgic,fuzzy", env: "rainy,bedroom", inst: "guitar,drums", emb: false }, + { t: "Gold Leaf", a: "Marrow Sun", al: "Greenhouse", g: "Indie", y: 2022, d: 215, tags: "warm,sunny,gentle", env: "morning,park", inst: "guitar,vocals", emb: true }, + { t: "Concrete Garden", a: "Vela Mono", al: "Citylight", g: "Electronic", y: 2019, d: 344, tags: "pulsing,nocturnal,driving", env: "city,club", inst: "synth,bass", emb: true }, + { t: "Featherweight", a: "Aoife Lin", al: "Hush", g: "Jazz", y: 2016, d: 278, tags: "soft,reflective,warm", env: "rainy,evening", inst: "piano,upright bass", emb: true }, + { t: "Carousel", a: "The Lowfields", al: "Ember Roads", g: "Folk", y: 2017, d: 252, tags: "bittersweet,acoustic,storytelling", env: "porch,autumn", inst: "guitar,fiddle", emb: false }, + { t: "Velvet Static", a: "Nora Vex", al: "Afterglow", g: "Synthpop", y: 2023, d: 226, tags: "shimmering,danceable,romantic", env: "night drive,city", inst: "synth,drum machine", emb: true }, + { t: "Tin Roof Rhythm", a: "The Pocket Kings", al: "Daybreak Soul", g: "Funk", y: 2018, d: 247, tags: "groovy,joyful,loose", env: "summer,backyard", inst: "guitar,bass,horns", emb: true }, + { t: "Low Tide Lullaby", a: "Halcyon Drift", al: "Slow Tide", g: "Indie", y: 2021, d: 289, tags: "sleepy,tender,oceanic", env: "beach,night", inst: "guitar,synth", emb: true }, + { t: "Afterglow", a: "Nora Vex", al: "Afterglow", g: "Synthpop", y: 2023, d: 211, tags: "euphoric,bright,danceable", env: "club,sunset", inst: "synth,vocals", emb: true }, + { t: "Graphite Skies", a: "Marrow Sun", al: "Greenhouse", g: "Indie", y: 2022, d: 234, tags: "moody,overcast,reflective", env: "rainy,city", inst: "piano,guitar", emb: false }, + { t: "Slow Burn", a: "Aoife Lin", al: "Hush", g: "Jazz", y: 2016, d: 331, tags: "sultry,late,smooth", env: "lounge,midnight", inst: "sax,piano", emb: true }, + { t: "Pulse Width", a: "Vela Mono", al: "Citylight", g: "Electronic", y: 2019, d: 298, tags: "hypnotic,minimal,focus", env: "studio,late night", inst: "synth,arp", emb: true }, + { t: "Wildflower Static", a: "Cassette Ghosts", al: "Static Bloom", g: "Shoegaze", y: 2020, d: 271, tags: "dreamy,fuzzy,warm", env: "summer,field", inst: "guitar,bass", emb: true }, + { t: "Brass & Embers", a: "The Pocket Kings", al: "Daybreak Soul", g: "Funk", y: 2018, d: 219, tags: "warm,celebratory,groovy", env: "party,evening", inst: "horns,bass", emb: true }, + { t: "Northern Line", a: "Nora Vex", al: "Afterglow", g: "Synthpop", y: 2023, d: 243, tags: "propulsive,nocturnal,bright", env: "train,city", inst: "synth,drum machine", emb: false }, +]; + +// ---- recent / saved playlists ----------------------------------- +const PLAYLISTS = [ + { id: 1, name: "Rainy Day Melancholy", mood: "rainy day melancholy", count: 28, dur: 6840, when: "2026-05-28 19:42", seeds: ["Slow Tide", "Hush", "Static Bloom", "Greenhouse"] }, + { id: 2, name: "Warehouse Warmup", mood: "high energy dance floor", count: 42, dur: 11520, when: "2026-05-27 22:10", seeds: ["Citylight", "Afterglow", "Daybreak Soul", "Slow Tide"] }, + { id: 3, name: "Sunday Coffee", mood: "sunday morning coffee", count: 22, dur: 5280, when: "2026-05-26 09:15", seeds: ["Greenhouse", "Hush", "Ember Roads", "Slow Tide"] }, + { id: 4, name: "Late Night Coding", mood: "late night coding focus", count: 35, dur: 9300, when: "2026-05-24 01:33", seeds: ["Citylight", "Static Bloom", "Afterglow", "Hush"] }, + { id: 5, name: "Golden Hour Drive", mood: "golden hour drive", count: 31, dur: 7920, when: "2026-05-21 18:05", seeds: ["Afterglow", "Daybreak Soul", "Slow Tide", "Citylight"] }, + { id: 6, name: "90s Nostalgia", mood: "90s nostalgia road trip", count: 26, dur: 6480, when: "2026-05-19 14:48", seeds: ["Ember Roads", "Static Bloom", "Greenhouse", "Hush"] }, +]; + +const GENRES = ["Indie", "Electronic", "Folk", "Shoegaze", "Funk", "Jazz", "Synthpop", "Ambient", "Hip-Hop", "Soul"]; + +const AI_PROVIDERS = ["Google Gemini", "OpenAI", "Anthropic Claude", "Cohere"]; +const AI_MODELS = { + "Google Gemini": ["gemini-2.0-flash", "gemini-2.0-pro", "gemini-1.5-flash"], + "OpenAI": ["gpt-4o", "gpt-4o-mini", "gpt-4-turbo"], + "Anthropic Claude": ["claude-3.7-sonnet", "claude-3.5-haiku"], + "Cohere": ["command-r-plus", "command-r"], +}; +const EMB_PROVIDERS = ["Google Gemini", "OpenAI", "Cohere", "Local (sentence-transformers)"]; +const EMB_MODELS = { + "Google Gemini": ["gemini-embedding-001 · 3072d"], + "OpenAI": ["text-embedding-3-large · 3072d", "text-embedding-3-small · 1536d"], + "Cohere": ["embed-english-v3.0 · 1024d"], + "Local (sentence-transformers)": ["all-MiniLM-L6-v2 · 384d"], +}; + +// library-wide figures used across pages +const LIB = { + totalTracks: 12480, + embedded: 12136, + tagged: 11792, + artists: 1247, + albums: 2038, + playlists: 18, + lastSync: "2026-05-29 08:14", + dbSize: "184 MB", + indexSize: "146 MB", +}; + +Object.assign(window, { + fmtDur, fmtTotal, artColors, Art, + VIBES, TRACKS, PLAYLISTS, GENRES, LIB, + AI_PROVIDERS, AI_MODELS, EMB_PROVIDERS, EMB_MODELS, +}); diff --git a/docs/design/plexmix-webui/project/src/doctor.jsx b/docs/design/plexmix-webui/project/src/doctor.jsx new file mode 100644 index 0000000..954e13c --- /dev/null +++ b/docs/design/plexmix-webui/project/src/doctor.jsx @@ -0,0 +1,81 @@ +// PlexMix WebUI — Doctor +const { useState } = React; +function Doctor({ onToast }) { + const CHECKS = [ + { id: "plex", name: "Plex connection", icon: "server", status: "pass", detail: "Connected to plex.local:32400 · library “Music”" }, + { id: "ai", name: "AI provider", icon: "brain", status: "pass", detail: "Google Gemini · gemini-2.0-flash · key valid" }, + { id: "emb", name: "Embedding provider", icon: "layers", status: "pass", detail: "gemini-embedding-001 · 3072d" }, + { id: "db", name: "SQLite database", icon: "database", status: "pass", detail: "184 MB · 12,480 tracks · schema v7" }, + { id: "faiss", name: "FAISS index", icon: "cpu", status: "warn", detail: "344 tracks missing embeddings — run embed to backfill" }, + { id: "dim", name: "Embedding dimensions", icon: "ruler", status: "pass", detail: "Index 3072d matches provider 3072d" }, + { id: "tags", name: "Tag coverage", icon: "tags", status: "warn", detail: "688 tracks untagged — generation quality may drop" }, + { id: "audio", name: "Audio analysis (Essentia)", icon: "audio-waveform", status: "idle", detail: "Optional · not installed" }, + ]; + const [results, setResults] = useState(CHECKS); + const [running, setRunning] = useState(false); + + const STAT = { + pass: { ic: "circle-check", col: "var(--pm-success)", bg: "var(--success-bg)", badge: "badge-green", word: "Pass" }, + warn: { ic: "triangle-alert", col: "var(--pm-warning)", bg: "var(--warning-bg)", badge: "badge-yellow", word: "Warn" }, + fail: { ic: "circle-x", col: "var(--pm-error)", bg: "var(--error-bg)", badge: "badge-red", word: "Fail" }, + idle: { ic: "minus", col: "var(--fg-3)", bg: "var(--surface-sunken)", badge: "badge-gray", word: "Skipped" }, + }; + const passed = results.filter((r) => r.status === "pass").length; + const warned = results.filter((r) => r.status === "warn").length; + + async function runAll() { + setRunning(true); + setResults((rs) => rs.map((r) => ({ ...r, _checking: true }))); + for (let i = 0; i < CHECKS.length; i++) { + await new Promise((r) => setTimeout(r, 240)); + setResults((rs) => rs.map((r, j) => j === i ? { ...r, _checking: false } : r)); + } + setRunning(false); + onToast(`Diagnostics complete · ${passed} passed, ${warned} warnings`, "info"); + } + + return ( +
+
+
+ +
+
+
{warned ? "System healthy, with notes" : "All systems healthy"}
+
{passed} passed · {warned} warnings · 1 skipped
+
+ + +
+ + {(warned > 0) && ( +
+ +
2 checks need attention
+
Backfill embeddings and tag the remaining tracks for best generation results. Run plexmix embed then plexmix tag --all.
+
+ )} + +
+ {results.map((r) => { + const s = STAT[r.status]; + return ( +
+
+ {r._checking ? : } +
+
+
{r.name}
+
{r._checking ? "checking…" : $1") }} />}
+
+ {!r._checking && {s.word}} +
+ ); + })} +
+
+ ); +} +Object.assign(window, { Doctor }); diff --git a/docs/design/plexmix-webui/project/src/generator.jsx b/docs/design/plexmix-webui/project/src/generator.jsx new file mode 100644 index 0000000..3c4a855 --- /dev/null +++ b/docs/design/plexmix-webui/project/src/generator.jsx @@ -0,0 +1,338 @@ +// PlexMix WebUI — Generator (the showpiece) +const { useState, useEffect, useRef } = React; +const GEN_PHASES = [ + { key: "embed", label: "Embed vibe", icon: "brain" }, + { key: "search", label: "Vector search", icon: "search" }, + { key: "filter", label: "Diversity", icon: "layers" }, + { key: "order", label: "Order set", icon: "audio-waveform" }, +]; + +// ---- particle vector-field visualisation ------------------------ +function ThinkViz({ phase, theme }) { + const ref = useRef(null); + const stateRef = useRef({ parts: [], raf: 0, phase: 0, w: 0, h: 0 }); + + useEffect(() => { stateRef.current.phase = phase; assignTargets(); }, [phase]); + + function rand(a, b) { return a + Math.random() * (b - a); } + function assignTargets() { + const S = stateRef.current; const { w, h, parts } = S; + if (!w) return; + const cx = w / 2, cy = h / 2; + parts.forEach((p, i) => { + const ph = S.phase; + if (ph === 0) { // converge into a tight cluster (the query embedding) + const a = rand(0, Math.PI * 2), r = rand(0, 46); + p.tx = cx + Math.cos(a) * r; p.ty = cy + Math.sin(a) * r; + p.hl = i < 26; p.dim = 0.5; + } else if (ph === 1) { // scatter to a field; near ones become candidates + p.tx = rand(w * 0.08, w * 0.92); p.ty = rand(h * 0.14, h * 0.86); + const d = Math.hypot(p.tx - cx, p.ty - cy); + p.hl = d < Math.min(w, h) * 0.34; p.dim = p.hl ? 1 : 0.28; + } else if (ph === 2) { // keep ~48 candidates bright, fade rest + p.hl = i % 6 === 0; p.dim = p.hl ? 1 : 0.08; + } else { // order onto an energy curve + if (p.hl) { + const idx = Math.floor(i / 6); + const tx = w * 0.1 + (idx / 7) * w * 0.8; + const ty = cy - Math.sin((idx / 7) * Math.PI * 1.6) * h * 0.26; + p.tx = tx; p.ty = ty; p.dim = 1; + } else { p.dim = 0.05; } + } + }); + } + + useEffect(() => { + const cv = ref.current; if (!cv) return; + const ctx = cv.getContext("2d"); + const reduce = window.matchMedia("(prefers-reduced-motion: reduce)").matches; + function size() { + const r = cv.getBoundingClientRect(); + const dpr = Math.min(window.devicePixelRatio || 1, 2); + cv.width = r.width * dpr; cv.height = r.height * dpr; + ctx.setTransform(dpr, 0, 0, dpr, 0, 0); + const S = stateRef.current; S.w = r.width; S.h = r.height; + if (!S.parts.length) { + S.parts = Array.from({ length: 300 }, () => ({ + x: rand(0, r.width), y: rand(0, r.height), tx: rand(0, r.width), ty: rand(0, r.height), + hl: false, dim: 0.4, size: rand(1.1, 2.4), + })); + } + assignTargets(); + } + size(); + window.addEventListener("resize", size); + const orange = "#F97316"; + const base = theme === "dark" ? "120,120,135" : "150,150,160"; + function frame() { + const S = stateRef.current; const { w, h, parts } = S; + ctx.clearRect(0, 0, w, h); + // links between bright nodes + ctx.lineWidth = 1; + for (let i = 0; i < parts.length; i++) { + const p = parts[i]; + const k = reduce ? 1 : 0.08; + p.x += (p.tx - p.x) * k; p.y += (p.ty - p.y) * k; + if (p.hl) { + for (let j = i + 1; j < parts.length; j++) { + const q = parts[j]; + if (!q.hl) continue; + const d = Math.hypot(p.x - q.x, p.y - q.y); + if (d < 74) { ctx.strokeStyle = `rgba(249,115,22,${0.12 * (1 - d / 74)})`; ctx.beginPath(); ctx.moveTo(p.x, p.y); ctx.lineTo(q.x, q.y); ctx.stroke(); } + } + } + } + for (const p of parts) { + ctx.beginPath(); + ctx.arc(p.x, p.y, p.hl ? p.size + 0.7 : p.size, 0, Math.PI * 2); + ctx.fillStyle = p.hl ? `rgba(249,115,22,${p.dim})` : `rgba(${base},${p.dim})`; + ctx.fill(); + } + stateRef.current.raf = requestAnimationFrame(frame); + } + frame(); + return () => { cancelAnimationFrame(stateRef.current.raf); window.removeEventListener("resize", size); }; + }, [theme]); + + return ; +} + +// ---- main generator --------------------------------------------- +function Generator({ onToast, seed, clearSeed }) { + const [mode, setMode] = useState("idle"); // idle | thinking | results + const [query, setQuery] = useState(""); + const [focus, setFocus] = useState(false); + const [showAdv, setShowAdv] = useState(false); + const [maxTracks, setMaxTracks] = useState(30); + const [ordering, setOrdering] = useState("energy"); + const [genre, setGenre] = useState("Any genre"); + const [phase, setPhase] = useState(0); + const [progress, setProgress] = useState(0); + const [log, setLog] = useState([]); + const [tracks, setTracks] = useState([]); + const cancelRef = useRef(false); + const logRef = useRef(null); + + useEffect(() => { + if (seed) { setQuery(seed); clearSeed && clearSeed(); setTimeout(() => run(seed), 120); } + }, [seed]); + + useEffect(() => { if (logRef.current) logRef.current.scrollTop = logRef.current.scrollHeight; }, [log]); + + const wait = (ms) => new Promise((r) => setTimeout(r, ms)); + function pushLog(line) { setLog((l) => [...l, line]); } + + async function run(qOverride) { + const q = (qOverride || query).trim(); + if (!q) { onToast("Describe a vibe first", "error"); return; } + cancelRef.current = false; + setMode("thinking"); setPhase(0); setProgress(0); setLog([]); setTracks([]); + const ORD = { similarity: "similarity", random: "random", alternating: "alternating-artists", energy: "energy-curve" }[ordering]; + + pushLog({ p: "$", t: `plexmix create "${q}"`, c: "pmt" }); + await wait(420); if (cancelRef.current) return; + // phase 0 — embed + pushLog({ t: "Embedding query · gemini-embedding-001 · 3072d", c: "dim" }); + await stepProgress(0, 24); if (cancelRef.current) return; + pushLog({ t: "✓ query vector ready", c: "ok" }); + + // phase 1 — search + setPhase(1); + pushLog({ t: `FAISS search · scanning ${LIB.totalTracks.toLocaleString()} embedded tracks`, c: "dim" }); + await stepProgress(24, 56); if (cancelRef.current) return; + pushLog({ t: "✓ 312 candidate tracks within similarity threshold", c: "ok" }); + + // phase 2 — diversity + setPhase(2); + pushLog({ t: `Diversity selection · max ${maxTracks} · de-clustering artists & albums`, c: "dim" }); + await stepProgress(56, 80); if (cancelRef.current) return; + pushLog({ t: `✓ ${maxTracks} tracks selected · 14 artists`, c: "ok" }); + + // phase 3 — order + setPhase(3); + pushLog({ t: `Ordering · strategy = ${ORD}`, c: "dim" }); + await stepProgress(80, 100); if (cancelRef.current) return; + pushLog({ t: "✓ playlist ready", c: "ok" }); + await wait(380); if (cancelRef.current) return; + + setTracks(buildPlaylist(maxTracks, genre)); + setMode("results"); + } + + async function stepProgress(from, to) { + const steps = 14; + for (let i = 1; i <= steps; i++) { + if (cancelRef.current) return; + setProgress(Math.round(from + (to - from) * (i / steps))); + await wait(38 + Math.random() * 34); + } + } + + function buildPlaylist(n, g) { + let pool = TRACKS.filter((t) => g === "Any genre" || t.g === g); + if (pool.length < 4) pool = TRACKS; + const out = []; + for (let i = 0; i < n; i++) { out.push({ ...pool[i % pool.length], _id: i }); } + return out; + } + + function cancel() { cancelRef.current = true; setMode("idle"); } + function regenerate() { run(); } + function removeTrack(id) { setTracks((ts) => ts.filter((t) => t._id !== id)); } + + const totalDur = tracks.reduce((s, t) => s + t.d, 0); + + // ---------- IDLE ---------- + if (mode === "idle") { + return ( +
+
+
+
+
AI Playlist Generator
+

What should your
library sound like?

+

Describe a mood, a moment, or a memory. PlexMix searches every track you own and curates a playlist that fits — no streaming catalog, just your music.

+ +
+