diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f216769 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +dist/ +.venv/ +__pycache__/ +*.pyc diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..e4fba21 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/ApexAeonPalette.png b/ApexAeonPalette.png new file mode 100644 index 0000000..75548b0 Binary files /dev/null and b/ApexAeonPalette.png differ diff --git a/ApexNeonPalette.png b/ApexNeonPalette.png new file mode 100644 index 0000000..6b1ff69 Binary files /dev/null and b/ApexNeonPalette.png differ diff --git a/GEMINI.md b/GEMINI.md new file mode 100644 index 0000000..df4a9f9 --- /dev/null +++ b/GEMINI.md @@ -0,0 +1,79 @@ +# Apex Theme System: GEMINI Context + +This file serves as the persistent brain and Source of Truth for the Apex Theme System (Neon & Aeon). It defines the philosophy, DNA, and rules that must be adhered to in all generated code and configurations. + +## 1. Project Philosophy +**"State over Decoration."** +Apex is not about pretty colors; it is about signal clarity. +- **Neon** is a high-contrast dark theme for low-light focus. +- **Aeon** is a clinical, high-clarity light theme for daylight precision. +- Both share a unified semantic discipline: color exists only to communicate state. + +## 2. The Color DNA (Source of Truth) + +### Core & Semantics + +| Role | Apex Neon (Dark) | Apex Aeon (Light) | Note | +|---|---|---|---| +| **Background** | `#050505` (Void Black) | `#f5f5f5` (Void White) | The Canvas | +| **Foreground** | `#ededed` (Stark White) | `#0a0a0a` (Near Black) | Primary Text | +| **Primary/Error**| `#ff0044` (Razor Red) | `#ff0044` (Razor Red) | Aggressor/Focus | +| **Info/Accent** | `#00eaff` (Electric Cyan)| `#007a88` (Deep Cyan) | Technical/Info | +| **Success** | `#00ff99` | `#00b377` | OK/Pass | +| **Warning** | `#ffb700` | `#d18f00` | Alert/Load | +| **Special** | `#9d00ff` | `#7a3cff` | Root/Admin | +| **Azure** | `#0088cc` | `#005577` | Structural/Functions | + +### UI Surfaces + +| Role | Apex Neon (Dark) | Apex Aeon (Light) | +|---|---|---| +| **Main BG** | `#050505` | `#f5f5f5` | +| **Panel/Soft** | `#141414` | `#e8e8e8` | +| **Border/Muted**| `#262626` | `#737373` | +| **High Surface**| N/A | `#ffffff` | +| **Muted Text** | `#737373` | `#737373` | +| **Stealth** | `#404040` | `#a0a0a0` | + +### ANSI Tables (16-Color) + +| Slot | Role | Neon Hex | Aeon Hex | +|---|---|---|---| +| 0 | Black/Bg | `#050505` | `#0a0a0a` | +| 1 | Red | `#ff0044` | `#ff0044` | +| 2 | Green | `#00ff99` | `#00b377` | +| 3 | Yellow | `#ffb700` | `#d18f00` | +| 4 | Blue | `#00eaff` | `#007a88` | +| 5 | Magenta | `#9d00ff` | `#7a3cff` | +| 6 | Cyan | `#00eaff` | `#007a88` | +| 7 | White/Fg | `#ededed` | `#f5f5f5` | +| 8 | BrBlack | `#262626` | `#737373` | +| 9 | BrRed | `#ff8899` | `#ff4d6d` | +| 10 | BrGreen | `#2bffb2` | `#33d6a6` | +| 11 | BrYellow | `#ffd24d` | `#ffbf40` | +| 12 | BrBlue | `#5af3ff` | `#33bccc` | +| 13 | BrMagenta| `#c84dff` | `#a680ff` | +| 14 | BrCyan | `#5af3ff` | `#33bccc` | +| 15 | BrWhite | `#ffffff` | `#ffffff` | + +## 3. The Axioms (Immutable Rules) + +1. **If it's not important, it does not glow.** Reserve high brightness/saturation for active states. +2. **Red is the Predator.** Red (`#ff0044`) is the color of **Active Intent**. It marks the Hunter (Cursor), the Territory (Current Directory), the Target (Selection), and the Threat (Critical Error). It signals "Live Fire." If it's Red, it is either you or a problem you need to kill. +3. **Text turns Black on Red.** When the background is `#ff0044`, the text must be `#050505` (Neon) or `#0a0a0a` (Aeon) for contrast. This is non-negotiable. +4. **Cyan is Informational.** Never use Cyan for errors or destruction. +5. **Purple is Sacred.** Reserved for special modes, root access, or exceptional states. +6. **Bright = Escalation.** Use bright ANSI variants (8-15) only when a state is elevated or active. Use **Bright Red** (`color9`) for errors to distinguish them from the cursor/path. +7. **No Random Accents.** If a color has no semantic reason to be there, remove it. + +## 4. Repository Map +/ +├── GEMINI.md # This file. Source of Truth. +├── src/ # Raw DNA +│ ├── neon.yaml # Apex Neon definitions +│ └── aeon.yaml # Apex Aeon definitions +├── templates/ # Jinja2 templates for build targets +│ ├── nvim/ +│ ├── zed/ +│ └── alacritty/ +└── dist/ # Compiled theme files (gitignore this) diff --git a/apex-aeon.md b/apex-aeon.md new file mode 100644 index 0000000..ac72dde --- /dev/null +++ b/apex-aeon.md @@ -0,0 +1,98 @@ +# Apex Aeon — Light Theme Specification + +Apex Aeon is the daylight translation of Apex Neon: the same semantic discipline, but on a bright canvas. Color still signals **state**, not decoration. The theme is clinical, high-clarity, and intentionally restrained. + +--- + +## 1. Core Colors (DNA) + +| Hex | Name | Role | +|---|---|---| +| `#f5f5f5` | Void White | Primary background. The canvas. | +| `#0a0a0a` | Near Black | Primary readable text. Default signal. | +| `#ff0044` | Razor Red | Primary aggressor. Errors, focus, cursor, active borders. | +| `#007a88` | Deep Cyan | Technical accent. Info, links, highlights. | + +**Rule:** if an element is not important, it does not glow. + +--- + +## 2. UI Surfaces & Depth + +| Hex | Name | Usage | +|---|---|---| +| `#f5f5f5` | Void White | Main window backgrounds. | +| `#ffffff` | High Surface | Cards/inputs where needed (use sparingly). | +| `#e8e8e8` | Soft Surface | Sub-panels, inactive tabs, grouped regions. | +| `#737373` | Border / Muted | Borders, dividers, secondary labels. | + +**Rule:** depth comes from subtle surface stepping, not shadows everywhere. + +--- + +## 3. Interaction States + +| Hex | Role | Notes | +|---|---|---| +| `#ff0044` | Cursor | Caret in terminals and inputs. | +| `#ff0044` | Selection BG | “Target locked” selection state. | +| `#0a0a0a` | Selection FG | **Hard rule:** text turns Near Black on red. | +| `#ff0044` | Active Border | Focused window/element edge. | + +--- + +## 4. Functional Semantics + +| Meaning | Hex | +|---|---| +| Success / OK | `#00b377` | +| Warning / Load | `#d18f00` | +| Error / Critical | `#ff0044` | +| Special / Root | `#7a3cff` | +| Info / Link | `#007a88` | + +--- + +## 5. Terminal ANSI Table (16-Color Engine) + +Bright colors represent **escalation**, not decoration, even on a light background. + +### Normal Bank (0–7) + +| Slot | Name | Hex | Meaning | +|---|---|---|---| +| color0 | Black | `#0a0a0a` | Primary text | +| color1 | Red | `#ff0044` | **The Predator** (Cursor/Path) | +| color2 | Green | `#00b377` | Success | +| color3 | Yellow | `#d18f00` | Warning | +| color4 | Blue | `#007a88` | Info / links | +| color5 | Magenta | `#7a3cff` | Special / root | +| color6 | Cyan | `#007a88` | Info (mapped) | +| color7 | White | `#f5f5f5` | Background | + +### Bright Bank (8–15) + +| Slot | Name | Hex | Meaning | +|---|---|---|---| +| color8 | BrBlack | `#737373` | Borders / separators / muted | +| color9 | BrRed | `#ff4d6d` | **Alerts** (Distinguishable from Cursor) | +| color10 | BrGreen | `#33d6a6` | Active success / completion | +| color11 | BrYellow | `#ffbf40` | Urgent warning | +| color12 | BrBlue | `#33bccc` | Active info / focus highlight | +| color13 | BrMagenta | `#a680ff` | Elevated special state | +| color14 | BrCyan | `#33bccc` | Active tech signal | +| color15 | BrWhite | `#ffffff` | Maximum highlight (rare) | + +--- + +## 6. Usage Guidelines + +- **Red is the Agent**. It marks where the user *is* (Prompt/Path) and what the user *controls* (Cursor/Selection). +- **Distinguish the Thread.** Since the Prompt is now Red, actual Errors must use **Bright Red** (`#ff4d6d`) or explicit symbols. +- **Deep Cyan is informational.** Never use it for errors or destructive actions. +- **Purple is sacred.** Only for special modes, root, or exceptional states. +- **Bright = escalation.** If nothing changed, don’t use a bright variant. +- **Surfaces stay simple.** Let state and typography carry hierarchy. +- **No random accents.** If a color has no semantic reason, it’s wrong. + +Apex Aeon is not “light mode.” It’s the same system under harsher lighting. diff --git a/apex-neon.md b/apex-neon.md new file mode 100644 index 0000000..8a8a93c --- /dev/null +++ b/apex-neon.md @@ -0,0 +1,98 @@ +# Apex Neon — Dark Theme Specification + +Apex Neon is a high-contrast dark theme built for terminals, editors, and system UI. Color exists to signal **state**, not to decorate space. + +--- + +## 1. Core Colors (DNA) + +| Hex | Name | Role | +|---|---|---| +| `#050505` | Void Black | Absolute background. The canvas. | +| `#ff0044` | Razor Red | Primary aggressor. Errors, focus, cursor, active borders. | +| `#00eaff` | Electric Cyan | Technical accent. Info, links, highlights. | +| `#ededed` | Stark White | Default readable text. | + +**Rule:** if a UI element is not important, it does not glow. + +--- + +## 2. UI Surfaces & Depth + +| Hex | Name | Usage | +|---|---|---| +| `#050505` | Void Deep | Main window backgrounds, terminal background. | +| `#141414` | Dark Surface | Inputs, inactive tabs, widget backgrounds. | +| `#262626` | Light Surface | Separators, scroll tracks, inactive borders. | +| `#737373` | Muted Text | Comments, subtitles, inactive labels. | + +**Rule:** depth comes from contrast, not brightness. + +--- + +## 3. Interaction States + +| Hex | Role | Notes | +|---|---|---| +| `#ff0044` | Cursor | Caret in terminals and inputs (Beam shape). | +| `#ff0044` | Selection BG | “Target locked” selection state. | +| `#050505` | Selection FG | **Hard rule:** text turns black on red. | +| `#ff0044` | Active Border | Focused window/element edge. | + +--- + +## 4. Functional Semantics + +| Meaning | Hex | +|---|---| +| Success / OK | `#00ff99` | +| Warning / Load | `#ffb700` | +| Error / Critical | `#ff0044` | +| Special / Root | `#9d00ff` | +| Info / Link | `#00eaff` | + +--- + +## 5. Terminal ANSI Table (16-Color Engine) + +Bright colors represent **escalation**, not decoration. + +### Normal Bank (0–7) + +| Slot | Name | Hex | Meaning | +|---|---|---|---| +| color0 | Black | `#050505` | Background | +| color1 | Red | `#ff0044` | **The Predator** (Cursor/Path/Self) | +| color2 | Green | `#00ff99` | Success | +| color3 | Yellow | `#ffb700` | Warning | +| color4 | Blue | `#00eaff` | Info / links | +| color5 | Magenta | `#9d00ff` | Special / root | +| color6 | Cyan | `#00eaff` | Info (mapped) | +| color7 | White | `#ededed` | Default text | + +### Bright Bank (8–15) + +| Slot | Name | Hex | Meaning | +|---|---|---|---| +| color8 | BrBlack | `#262626` | UI borders / separators | +| color9 | BrRed | `#ff8899` | **Alerts** (Distinguishable from Cursor) | +| color10 | BrGreen | `#2bffb2` | Active success / completion | +| color11 | BrYellow | `#ffd24d` | Urgent warning | +| color12 | BrBlue | `#5af3ff` | Active info / focus highlight | +| color13 | BrMagenta | `#c84dff` | Elevated special state | +| color14 | BrCyan | `#5af3ff` | Active tech signal | +| color15 | BrWhite | `#ffffff` | Extreme highlight only | + +--- + +## 6. Usage Guidelines + +- **Red is the Agent**. It marks where the user *is* (Prompt/Path) and what the user *controls* (Cursor/Selection). +- **Distinguish the Threat.** Since the Prompt is now Red, actual Errors must use **Bright Red** (`#ff8899`) or explicit symbols to distinguish them from the environment. +- **Cyan is informational.** Never use it for errors or destructive actions. +- **Purple is sacred.** Only for special modes, root, or exceptional states. +- **Bright = escalation.** If nothing changed, don’t use a bright variant. +- **Backgrounds stay dark.** Text and state carry the signal. +- **No random accents.** If a color has no semantic reason, it’s wrong. + +Apex Neon is not a palette. It’s a rule system with teeth. diff --git a/build.py b/build.py new file mode 100644 index 0000000..4ee08a1 --- /dev/null +++ b/build.py @@ -0,0 +1,64 @@ +import yaml +import os +from jinja2 import Environment, FileSystemLoader + +# Configuration +SRC_DIR = 'src' +TEMPLATES_DIR = 'templates' +DIST_DIR = 'dist' +SCHEMES = ['neon.yaml', 'aeon.yaml'] + +def load_scheme(filename): + with open(os.path.join(SRC_DIR, filename), 'r') as f: + return yaml.safe_load(f) + +def render_template(template_path, context): + env = Environment(loader=FileSystemLoader(TEMPLATES_DIR)) + template = env.get_template(template_path) + return template.render(context) + +def build(): + # Ensure dist directory exists + if not os.path.exists(DIST_DIR): + os.makedirs(DIST_DIR) + + for scheme_file in SCHEMES: + scheme_data = load_scheme(scheme_file) + scheme_name_slug = scheme_data['scheme'].lower().replace(' ', '-') + print(f"Building {scheme_data['scheme']}...") + + # Find all templates + for root, dirs, files in os.walk(TEMPLATES_DIR): + for file in files: + if file.endswith('.j2'): + # Calculate relative path to mirror structure in dist + rel_path = os.path.relpath(root, TEMPLATES_DIR) + template_rel_path = os.path.join(rel_path, file) + + # Prepare output path + output_filename = file.replace('.j2', '') + # If the template is generic (apex.lua), rename it to the scheme name (apex-neon.lua) + if 'apex' in output_filename: + output_filename = output_filename.replace('apex', scheme_name_slug) + + output_dir = os.path.join(DIST_DIR, scheme_name_slug, rel_path) + if not os.path.exists(output_dir): + os.makedirs(output_dir) + + output_path = os.path.join(output_dir, output_filename) + + # Render and write + # We pass template_rel_path because jinja loader is rooted at TEMPLATES_DIR + # But os.walk returns paths relative to CWD usually, but we constructed it. + # Actually Environment loader is correct. We just need the path relative to templates dir. + template_name_for_jinja = template_rel_path + + rendered_content = render_template(template_name_for_jinja, scheme_data) + + with open(output_path, 'w') as f: + f.write(rendered_content) + + print(f" -> {output_path}") + +if __name__ == '__main__': + build() diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..f264c94 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,10 @@ +[project] +name = "apex" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +requires-python = ">=3.12" +dependencies = [ + "jinja2>=3.1.6", + "pyyaml>=6.0.3", +] diff --git a/src/aeon.yaml b/src/aeon.yaml new file mode 100644 index 0000000..7a405fb --- /dev/null +++ b/src/aeon.yaml @@ -0,0 +1,49 @@ +scheme: "Apex Aeon" +author: "S0wlz (Owlibou)" +type: "light" + +# Core Semantics (The DNA) +palette: + background: "#f5f5f5" # Void White + foreground: "#0a0a0a" # Near Black + cursor: "#ff0044" # Razor Red (Still the aggressor) + selection: "#ff0044" + selection_fg: "#0a0a0a" # HARD RULE: Near Black on Red + + # Functional Roles + error: "#ff0044" + success: "#00b377" # Darker for contrast on light bg + warning: "#d18f00" # Darker for contrast + info: "#007a88" # Deep Cyan (Readable against white) + special: "#7a3cff" + azure: "#005577" + +# UI Surfaces (Depth) +ui: + panel: "#e8e8e8" # Soft Surface + border: "#737373" # Muted/Borders + high: "#ffffff" # High Surface (Cards) + dim: "#737373" + stealth: "#a0a0a0" + +# ANSI Table (Terminal) +ansi: + normal: + black: "#0a0a0a" + red: "#ff0044" + green: "#00b377" + yellow: "#d18f00" + blue: "#007a88" + magenta: "#7a3cff" + cyan: "#007a88" + white: "#f5f5f5" + + bright: # Escalation only + black: "#737373" + red: "#ff4d6d" + green: "#33d6a6" + yellow: "#ffbf40" + blue: "#33bccc" + magenta: "#a680ff" + cyan: "#33bccc" + white: "#ffffff" diff --git a/src/neon.yaml b/src/neon.yaml new file mode 100644 index 0000000..22bcca6 --- /dev/null +++ b/src/neon.yaml @@ -0,0 +1,48 @@ +scheme: "Apex Neon" +author: "S0wlz (Owlibou)" +type: "dark" + +# Core Semantics (The DNA) +palette: + background: "#050505" # Void Black + foreground: "#ededed" # Stark White + cursor: "#ff0044" # Razor Red (Primary Aggressor) + selection: "#ff0044" # Target Locked + selection_fg: "#050505" # HARD RULE: Black text on Red + + # Functional Roles + error: "#ff0044" + success: "#00ff99" + warning: "#ffb700" + info: "#00eaff" # Electric Cyan + special: "#9d00ff" # Sacred Purple + azure: "#0088cc" # Structural Blue + +# UI Surfaces (Depth) +ui: + panel: "#141414" # Inputs/Inactive Tabs + border: "#262626" # Separators + dim: "#737373" # Muted Text + stealth: "#404040" # Comments/Ignored + +# ANSI Table (Terminal) +ansi: + normal: + black: "#050505" + red: "#ff0044" + green: "#00ff99" + yellow: "#ffb700" + blue: "#00eaff" + magenta: "#9d00ff" + cyan: "#00eaff" # Mapped to Blue/Info + white: "#ededed" + + bright: # Escalation only + black: "#262626" + red: "#ff8899" + green: "#2bffb2" + yellow: "#ffd24d" + blue: "#5af3ff" + magenta: "#c84dff" + cyan: "#5af3ff" + white: "#ffffff" diff --git a/templates/nvim/colors/apex.lua.j2 b/templates/nvim/colors/apex.lua.j2 new file mode 100644 index 0000000..3b65466 --- /dev/null +++ b/templates/nvim/colors/apex.lua.j2 @@ -0,0 +1,164 @@ +-- {{ scheme }}: Standalone Theme Engine +-- Philosophy: State over Decoration. Red is Presence. Cyan is Data. + +local M = {} + +M.palette = { + -- The Void + void = "{{ palette.background }}", -- Background + panel = "{{ ui.panel }}", -- Dark Surface (Statusline/Gutter) + border = "{{ ui.border }}", -- Muted Border + stealth = "{{ ui.stealth }}", -- Comments / Ignored + + -- The Signal + text = "{{ palette.foreground }}", -- Stark White + dim = "{{ ui.dim }}", -- Muted Text + + -- The Hunter (Presence) + razor = "{{ palette.cursor }}", -- PRIMARY: Cursor, Current Match, Active Border + alert = "{{ ansi.bright.red }}", -- ERROR: Readable text on Red + + -- The HUD (Data) + tech = "{{ palette.info }}", -- INFO: Selection, Search Match, Constants + toxic = "{{ palette.success }}", -- SUCCESS: Strings + amber = "{{ palette.warning }}", -- WARNING: Types, Search + azure = "{{ palette.azure }}", -- STRUCT: Functions (Deep Blue) + sacred = "{{ palette.special }}", -- SPECIAL: Keywords, Root +} + +function M.load() + vim.cmd "hi clear" + if vim.fn.exists "syntax_on" then vim.cmd "syntax reset" end + vim.o.background = "{{ type }}" + vim.g.colors_name = "{{ scheme | lower | replace(' ', '-') }}" + + local p = M.palette + local groups = { + -- CANVAS & UI ----------------------------------------------------------- + Normal = { fg = p.text, bg = p.void }, + NormalNC = { fg = p.dim, bg = p.void }, -- Non-focused windows + SignColumn = { bg = p.void }, + FoldColumn = { fg = p.stealth, bg = p.void }, + VertSplit = { fg = p.razor }, -- Deprecated in nvim 0.10, but good fallback + WinSeparator = { fg = p.razor }, -- The Cage (Red Borders) + EndOfBuffer = { fg = p.void }, -- Hide tildes + + -- CURSOR & NAVIGATION ("The Hunter") ------------------------------------ + Cursor = { fg = p.void, bg = p.razor }, -- Red Beam + TermCursor = { fg = p.void, bg = p.razor }, + CursorLine = { bg = p.panel }, + CursorLineNr = { fg = p.razor, bold = true }, -- Red Line Number (You are here) + LineNr = { fg = p.stealth }, -- Other lines fade out + + -- SELECTION & SEARCH ("Terminator Vision") ------------------------------ + Visual = { fg = p.void, bg = p.tech, bold = true }, -- Cyan (Data Lock) + VisualNOS = { fg = p.void, bg = p.border }, + + Search = { fg = p.void, bg = p.tech }, -- Cyan (Potential Targets) + IncSearch = { fg = p.void, bg = p.razor }, -- Red (Acquiring...) + CurSearch = { fg = p.void, bg = p.razor, bold = true }, -- Red (Target Locked) + + -- STATUS & MESSAGES ----------------------------------------------------- + StatusLine = { fg = p.text, bg = p.panel }, + StatusLineNC = { fg = p.dim, bg = p.void }, + WildMenu = { fg = p.void, bg = p.tech }, + Pmenu = { fg = p.text, bg = p.panel }, + PmenuSel = { fg = p.void, bg = p.razor, bold = true }, -- Red Menu Selection + PmenuSbar = { bg = p.panel }, + PmenuThumb = { bg = p.stealth }, + + -- SYNTAX HIGHLIGHTING --------------------------------------------------- + Comment = { fg = p.stealth, italic = true }, + Constant = { fg = p.tech }, -- Cyan (Digital values) + String = { fg = p.toxic }, -- Green (Organic strings) + Character = { fg = p.toxic }, + Number = { fg = p.tech }, + Boolean = { fg = p.tech }, + Float = { fg = p.tech }, + + Identifier = { fg = p.text }, -- Variables (White) + Function = { fg = p.azure }, -- Deep Blue (Structure) + + Statement = { fg = p.sacred }, -- Purple (Keywords) + Conditional = { fg = p.sacred }, + Repeat = { fg = p.sacred }, + Label = { fg = p.sacred }, + Operator = { fg = p.tech }, -- Cyan (Tech) + Keyword = { fg = p.sacred }, + Exception = { fg = p.razor }, -- Red (Errors) + + PreProc = { fg = p.sacred }, + Include = { fg = p.sacred }, + Define = { fg = p.sacred }, + Macro = { fg = p.sacred }, + PreCondit = { fg = p.sacred }, + + Type = { fg = p.amber }, -- Yellow (Types/Classes) + StorageClass = { fg = p.amber }, + Structure = { fg = p.amber }, + Typedef = { fg = p.amber }, + + Special = { fg = p.tech }, + SpecialChar = { fg = p.tech }, + Tag = { fg = p.tech }, + Delimiter = { fg = p.dim }, -- Subtle delimiters + Debug = { fg = p.razor }, + + Underlined = { underline = true }, + Ignore = { fg = p.stealth }, + Error = { fg = p.razor }, + Todo = { fg = p.void, bg = p.amber, bold = true }, + + -- DIAGNOSTICS ----------------------------------------------------------- + DiagnosticError = { fg = p.razor }, + DiagnosticWarn = { fg = p.amber }, + DiagnosticInfo = { fg = p.tech }, + DiagnosticHint = { fg = p.dim }, + + DiagnosticUnderlineError = { sp = p.razor, underline = true }, + DiagnosticUnderlineWarn = { sp = p.amber, underline = true }, + + -- PLUGINS: TELESCOPE ("The HUD") ---------------------------------------- + TelescopeNormal = { bg = p.void }, + TelescopeBorder = { fg = p.razor, bg = p.void }, -- Red Border + TelescopePromptNormal = { fg = p.text, bg = p.void }, + TelescopePromptBorder = { fg = p.tech, bg = p.void }, -- Cyan Input Border + TelescopePromptTitle = { fg = p.void, bg = p.tech }, -- Cyan Label + TelescopePreviewTitle = { fg = p.void, bg = p.razor }, -- Red Label + TelescopeResultsTitle = { fg = p.void, bg = p.panel }, + TelescopeSelection = { fg = p.void, bg = p.razor }, -- Red Selection + + -- PLUGINS: NEO-TREE ("Stealth") ----------------------------------------- + NeoTreeNormal = { bg = p.void }, + NeoTreeNormalNC = { bg = p.void }, + NeoTreeVertSplit = { fg = p.panel, bg = p.void }, + NeoTreeWinSeparator = { fg = p.panel, bg = p.void }, -- Fade out tree border + NeoTreeRootName = { fg = p.razor, bold = true }, -- Root is Red + NeoTreeGitAdded = { fg = p.toxic }, + NeoTreeGitConflict = { fg = p.amber }, + NeoTreeGitDeleted = { fg = p.razor }, + NeoTreeGitModified = { fg = p.tech }, + + -- PLUGINS: GITSIGNS ----------------------------------------------------- + GitSignsAdd = { fg = p.toxic, bg = p.void }, + GitSignsChange = { fg = p.tech, bg = p.void }, + GitSignsDelete = { fg = p.razor, bg = p.void }, + + -- PLUGINS: CMP (Completion) --------------------------------------------- + CmpItemAbbrDeprecated = { fg = p.dim, strikethrough = true }, + CmpItemAbbrMatch = { fg = p.tech, bold = true }, + CmpItemAbbrMatchFuzzy = { fg = p.tech, bold = true }, + CmpItemKindFunction = { fg = p.azure }, + CmpItemKindMethod = { fg = p.azure }, + CmpItemKindKeyword = { fg = p.sacred }, + CmpItemKindVariable = { fg = p.text }, + } + + for group, highlight in pairs(groups) do + vim.api.nvim_set_hl(0, group, highlight) + end +end + +M.load() + +return M diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..df91d5f --- /dev/null +++ b/uv.lock @@ -0,0 +1,139 @@ +version = 1 +revision = 3 +requires-python = ">=3.12" + +[[package]] +name = "apex" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "jinja2" }, + { name = "pyyaml" }, +] + +[package.metadata] +requires-dist = [ + { name = "jinja2", specifier = ">=3.1.6" }, + { name = "pyyaml", specifier = ">=6.0.3" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +]