opaline 0.4.1

A token-based theme engine for Rust applications
Documentation
# SilkCircuit Soft — Muted elegance
# A softer, more relaxed variant with desaturated colors

[meta]
name = "SilkCircuit Soft"
author = "hyperb1iss"
variant = "dark"
version = "1.0"
description = "Muted purples and soft cyans with a warmer dark base"

# ═══════════════════════════════════════════════════════════════════════════════
# Palette — Raw color primitives
# ═══════════════════════════════════════════════════════════════════════════════

[palette]
# Core brand colors (softer)
purple_500 = "#e892ff"
cyan_400 = "#99ffee"
coral_400 = "#ff99dd"
yellow_400 = "#ffe699"
green_400 = "#66ff99"
red_400 = "#ff6677"

# Extended palette
purple_400 = "#b199ff"
purple_600 = "#9366cc"
cyan_500 = "#66ccbb"
magenta_400 = "#ff99ff"
purple_300 = "#c4b3ff"
pink_400 = "#ff99ff"
pink_300 = "#ffbbff"

# Backgrounds (warmer)
gray_950 = "#1a1626"
gray_900 = "#201c2a"
gray_850 = "#2a2636"
gray_800 = "#44475a"
gray_750 = "#3e3456"
gray_700 = "#4a3d5f"
gray_600 = "#524766"

# Text colors
gray_50 = "#f8f8f2"
gray_200 = "#d4d0e0"
gray_400 = "#9e96b2"
gray_500 = "#b199ff"

# ═══════════════════════════════════════════════════════════════════════════════
# Tokens — Semantic color assignments
# ═══════════════════════════════════════════════════════════════════════════════

[tokens]
# Text hierarchy
"text.primary" = "gray_50"
"text.secondary" = "gray_200"
"text.muted" = "gray_400"
"text.dim" = "gray_500"

# Backgrounds
"bg.base" = "gray_950"
"bg.panel" = "gray_900"
"bg.code" = "gray_850"
"bg.highlight" = "gray_800"
"bg.elevated" = "gray_750"
"bg.active" = "gray_700"
"bg.selection" = "gray_600"

# Accent colors
"accent.primary" = "purple_500"
"accent.secondary" = "cyan_400"
"accent.tertiary" = "coral_400"
"accent.deep" = "purple_400"

# Semantic colors
success = "green_400"
error = "red_400"
warning = "yellow_400"
info = "cyan_400"

# UI elements
"border.focused" = "cyan_400"
"border.unfocused" = "gray_400"

# Code elements
"code.keyword" = "purple_500"
"code.function" = "cyan_400"
"code.string" = "pink_300"
"code.number" = "coral_400"
"code.comment" = "gray_500"
"code.type" = "yellow_400"
"code.line_number" = "gray_500"

# ═══════════════════════════════════════════════════════════════════════════════
# Styles — Composed styles with modifiers
# ═══════════════════════════════════════════════════════════════════════════════

[styles]
# Keywords and importance
keyword = { fg = "accent.primary", bold = true }

# Line numbers
line_number = { fg = "code.line_number" }

# Cursor line
cursor_line = { bg = "bg.highlight" }

# Selection states
selected = { fg = "accent.secondary", bg = "bg.highlight" }
active_selected = { fg = "accent.primary", bg = "bg.active", bold = true }

# Borders
focused_border = { fg = "border.focused" }
unfocused_border = { fg = "border.unfocused" }

# Status messages
success_style = { fg = "success" }
error_style = { fg = "error" }
warning_style = { fg = "warning" }
info_style = { fg = "info" }

# Text styles
dimmed = { fg = "text.dim" }
muted = { fg = "text.muted" }

# Inline code
inline_code = { fg = "success", bg = "bg.code" }

# ═══════════════════════════════════════════════════════════════════════════════
# Gradients — Color transitions
# ═══════════════════════════════════════════════════════════════════════════════

[gradients]
# Primary brand gradient: Soft Purple -> Soft Cyan
primary = ["purple_500", "cyan_400"]

# Warm accent gradient: Soft Coral -> Soft Yellow
warm = ["coral_400", "yellow_400"]

# Success gradient: Soft Green -> Soft Cyan
success_gradient = ["green_400", "cyan_400"]

# Error gradient: Soft Red -> Soft Coral
error_gradient = ["red_400", "coral_400"]

# Aurora gradient (5-stop): Soft Purple -> Pink -> Cyan
aurora = ["purple_500", "#ff99cc", "#ff99ff", "#cc99ff", "cyan_400"]