{
  "id": "gum-tui",
  "name": "Gum",
  "version": "1.0",
  "medium": "tui",
  "tagline": "A tool for glamorous shell scripts.",
  "description": "A tool for glamorous shell scripts.",
  "inspired_by": {
    "name": "Gum",
    "url": "https://github.com/charmbracelet/gum"
  },
  "vibe_tags": [
    "charm",
    "pink",
    "scripts",
    "prompts"
  ],
  "domain_hint": "",
  "identity": {
    "logomark": {
      "shape": "ascii-banner",
      "description": "ASCII art banner from Gum README / startup screen"
    },
    "ascii_logo": "  ____ _   _ __  __ \n / ___| | | |  \\/  |\n| |  _| | | | |\\/| |\n| |_| | |_| | |  | |\n \\____|\\__,_|_|  |_|",
    "wordmark": {
      "text": "Gum",
      "case": "title",
      "weight": 700
    }
  },
  "voice": {
    "principles": [
      "Keyboard-first \u2014 every action has a binding.",
      "Dense information, zero chrome waste.",
      "Status at a glance \u2014 color encodes state."
    ],
    "avoid": [
      "Mouse-only workflows",
      "Decorative UI that steals columns",
      "Ambiguous state without color cues"
    ],
    "sample_headlines": [
      "A tool for glamorous shell scripts.",
      "Choose. Confirm. Filter. Charm."
    ],
    "sample_lead": "A tool for glamorous shell scripts.",
    "sample_metrics": [],
    "sample_code_lang": "shell",
    "sample_code": "# launch gum\n$ gum",
    "sample_terminal_session": "",
    "sample_terminal_prompt": ">"
  },
  "design_principles": [
    "Monospace grid \u2014 align to character cells, not pixels.",
    "ANSI palette is the design system \u2014 reuse semantic colors consistently.",
    "Box-drawing borders define panes; never float widgets.",
    "Key hints belong in a persistent footer or status line."
  ],
  "color": {
    "primary": {
      "name": "Gum",
      "hex": "#ff87d7",
      "scale": {
        "100": "#ff87d7",
        "300": "#ff87d7",
        "500": "#ff87d7",
        "700": "#ff87d7"
      },
      "default_step": "500",
      "notes": "Signature accent for Gum."
    },
    "neutrals": {
      "canvas": "#171717",
      "navy": "#131313",
      "elevated": "#2a2a2a",
      "border": "#323232",
      "input_border": "#404040",
      "text_tertiary": "#6e7681",
      "text_secondary": "#8e8e8e",
      "text_primary": "#f0f0f0",
      "white": "#f0f0f0"
    },
    "semantic": {
      "success": "#3fb950",
      "warning": "#d29922",
      "danger": "#ff7b72",
      "info": "#58a6ff",
      "running": "#ff87d7"
    },
    "category_accents": {
      "added": "#3fb950",
      "modified": "#d29922",
      "deleted": "#ff7b72",
      "branch": "#39c5cf",
      "tag": "#ff87d7"
    },
    "page_bg_token": "neutrals.canvas",
    "card_bg_token": "neutrals.navy",
    "section_bg_token": "neutrals.elevated",
    "body_text_token": "neutrals.text_primary",
    "muted_text_token": "neutrals.text_secondary"
  },
  "terminal": {
    "bg": "#171717",
    "fg": "#f0f0f0",
    "cursor": "#f0f0f0",
    "selection": "#2a2a2a",
    "accent": "#ff87d7",
    "scheme_origin": "Charm lipgloss gum styles",
    "ansi": {
      "black": "#484f58",
      "red": "#ff7b72",
      "green": "#3fb950",
      "yellow": "#d29922",
      "blue": "#58a6ff",
      "magenta": "#ff87d7",
      "cyan": "#39c5cf",
      "white": "#c9d1d9",
      "bright_black": "#6e7681",
      "bright_red": "#ffa198",
      "bright_green": "#56d364",
      "bright_yellow": "#e3b341",
      "bright_blue": "#79c0ff",
      "bright_magenta": "#d2a8ff",
      "bright_cyan": "#56d4dd",
      "bright_white": "#ffffff"
    }
  },
  "typography": {
    "fonts": {
      "sans": {
        "family": "JetBrains Mono",
        "fallback": "ui-monospace, monospace",
        "google": true,
        "weights": [
          400,
          700
        ],
        "notes": "TUI apps render entirely in monospace; sans maps to mono for preview."
      },
      "mono": {
        "family": "JetBrains Mono",
        "fallback": "Fira Code, Cascadia Code, ui-monospace, monospace",
        "google": true,
        "notes": "Recommended terminal font for Gum."
      }
    },
    "scale": {
      "display": {
        "size_px": 16,
        "line": 1.2,
        "tracking": "0",
        "weight": 700,
        "font": "mono"
      },
      "h1": {
        "size_px": 14,
        "line": 1.2,
        "tracking": "0",
        "weight": 700,
        "font": "mono"
      },
      "h2": {
        "size_px": 13,
        "line": 1.3,
        "tracking": "0",
        "weight": 700,
        "font": "mono"
      },
      "h3": {
        "size_px": 13,
        "line": 1.3,
        "tracking": "0",
        "weight": 500,
        "font": "mono"
      },
      "body": {
        "size_px": 13,
        "line": 1.4,
        "tracking": "0",
        "weight": 400,
        "font": "mono"
      },
      "caption": {
        "size_px": 12,
        "line": 1.3,
        "tracking": "0",
        "weight": 400,
        "font": "mono"
      },
      "mono": {
        "size_px": 13,
        "line": 1.4,
        "tracking": "0",
        "weight": 400,
        "font": "mono"
      }
    }
  },
  "tokens": {
    "spacing_px": [
      0,
      1,
      2,
      4,
      8
    ],
    "radius_px": {
      "sm": 0,
      "md": 0,
      "lg": 0,
      "xl": 0,
      "card": 0,
      "pill": 0
    },
    "shadow": {
      "glow_accent": "0 0 12px #ff87d755"
    },
    "motion": {
      "duration_ms": {
        "fast": 0,
        "base": 0,
        "slow": 0
      },
      "easing": "step-end",
      "notes": "TUIs update on keypress; motion is instant frame refresh."
    }
  },
  "components": {
    "button": {
      "variants": {
        "primary": {
          "bg": "primary.500",
          "fg": "white",
          "radius": "sm"
        },
        "secondary": {
          "bg": "transparent",
          "fg": "text_primary",
          "border": "border"
        }
      }
    }
  },
  "tui_components": {
    "border_style": "rounded",
    "status_bar": {
      "bg_token": "neutrals.elevated",
      "fg_token": "neutrals.text_primary",
      "accent": "#ff87d7"
    },
    "command_bar": {
      "bg_token": "neutrals.canvas",
      "fg_token": "neutrals.text_secondary",
      "prompt": ":"
    },
    "list_selected": {
      "bg_token": "primary.500",
      "fg": "#ffffff",
      "marker": "\u25b8"
    },
    "tree": {
      "branch": "\u251c\u2500",
      "last_branch": "\u2514\u2500",
      "expanded": "\u25bc",
      "collapsed": "\u25b6"
    },
    "table": {
      "header_weight": 700,
      "divider": "\u2500",
      "column_sep": "\u2502"
    },
    "tabs": {
      "active_token": "primary.500",
      "inactive_token": "neutrals.text_tertiary"
    },
    "gauge": {
      "fill_token": "primary.500",
      "empty_token": "neutrals.border",
      "chars": "\u2588\u2593\u2592\u2591"
    },
    "sparkline": {
      "up_token": "semantic.success",
      "down_token": "semantic.danger",
      "chars": "\u2581\u2582\u2583\u2584\u2585\u2586\u2587\u2588"
    },
    "scrollbar": {
      "thumb_token": "neutrals.text_tertiary",
      "track_token": "neutrals.border"
    },
    "modal": {
      "bg_token": "neutrals.elevated",
      "border_token": "primary.500",
      "title_weight": 700
    },
    "keyhints": {
      "separator": "\u2502",
      "key_style": "bold",
      "desc_style": "muted"
    }
  },
  "do": [
    "Use #ff87d7 for selection and primary focus states.",
    "Reserve bright red/green for destructive/success git or status states.",
    "Keep status bar one line; overflow truncates with ellipsis."
  ],
  "dont": [
    "Don't use proportional fonts inside panes.",
    "Don't rely on color alone \u2014 pair with icons or glyphs.",
    "Don't break the 80-column grid without explicit wide mode."
  ],
  "provenance": {
    "scanned_from": [
      "https://github.com/charmbracelet/gum"
    ],
    "scanned_at": "2026-06-06",
    "confidence": "scanned",
    "notes": "Palette extracted from default theme/skin in upstream repository."
  }
}
