Agent skill

Lunco Theme

by LunCoSim in LunCoSim/lunco-sim

LunCoSim's centralised theming system. An agent skill from LunCoSim/lunco-sim.

Apache-2.0Auto-check passedFrontend & Design

Install Lunco Theme

skills CLI
$ npx skills add LunCoSim/lunco-sim --skill lunco-theme -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install LunCoSim/lunco-sim lunco-theme --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/LunCoSim/lunco-sim.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/lunco-theme .claude/skills/lunco-theme && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
lunco-theme
GitHub stars
107
Token cost
~3.6k tokens
SKILL.md length
1,146 words
Files
1
Skills in repo
40
Repo updated
First seen
Licence
Apache-2.0

At a glance

LunCoSim's centralised theming system. An agent skill from LunCoSim/lunco-sim.

  • Works in 8 steps: **No Color32::from_rgb(...), hex… → **Palette reads (theme.colors.*) only… → Four tiers, pick the right one. See §… → …
  • You are about to write
  • SKILL.md covers Hard rules, Tier guide, How to read Theme and Picking the right token, plus 5 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Lunco Theme is an agent skill from LunCoSim/lunco-sim. LunCoSim's centralised theming system. Use this skill whenever you are about to write, touch, or review UI code that involves a color, spacing value, rounding, or egui visual style — in any panel, overlay, widget, gizmo label, or diagram. Trigger on any Color32::fromrgb, hex color, ui.stylemut(), visuals., ctx.setvisuals, "dark mode", "light mode", "accent color", "highlight", palette tweak, mention of Catppuccin, or work on a typed block-diagram editor (wire colours, class-kind badges). Also trigger when adding…

Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Frontend & Design, covering Theming and dark mode. The repository describes itself as: Collaborative Multiphysics Cosimulator For Space Missions 🌎🚀🌚. The licence is Apache-2.0.

When your agent uses it

  • You are about to write
  • Review UI code that involves a color
  • Egui visual style — in any panel
  • Any Color32::fromrgb

Example prompts

  • “dark mode”
  • “light mode”
  • “accent color”
  • “/lunco-theme”

Workflow steps

8 steps, taken from the first numbered list in SKILL.md.

  1. **No Color32::from_rgb(...), hex literals, or RGBA tuples outside
  2. **Palette reads (theme.colors.*) only inside from_palette
  3. Four tiers, pick the right one. See § Tier guide.
  4. Never call ctx.set_visuals(...) from a panel.
  5. **Dark/light is theme.toggle_mode(), not a branch on
  6. **Spacing and rounding come from theme.spacing and
  7. Translucent workbench surfaces use theme.tokens.overlay_backdrop.
  8. Typography is role-based and theme-owned. ThemePlugin maps egui's

What it can do on your machine

Read from SKILL.md and the folder at commit 43f1301. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are rust and bash).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Lunco Theme loads about 3.6k tokens when it runs. Until then it costs about 196 tokens; SKILL.md has 1,146 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~196
When it runs · the whole SKILL.md, loaded when a task matches
~3.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from LunCoSim/lunco-sim at commit 43f1301, republished under its Apache-2.0 licence (© LunCoSim). 1,146 words, ~3,621 tokens.

Download SKILL.mdSave it as .claude/skills/lunco-theme/SKILL.md (or your agent's skills folder).
name
lunco-theme
description
LunCoSim's centralised theming system. Use this skill whenever you are about to write, touch, or review UI code that involves a color, spacing value, rounding, or egui visual style — in any panel, overlay, widget, gizmo label, or diagram. Trigger on any `Color32::from_rgb`, hex color, `ui.style_mut()`, `visuals.*`, `ctx.set_visuals`, "dark mode", "light mode", "accent color", "highlight", palette tweak, mention of Catppuccin, or work on a typed block-diagram editor (wire colours, class-kind badges). Also trigger when adding a new panel that needs colors, or when the user asks to "restyle", "retheme", or "make it match". The rules here are project-specific — defaults from egui or Bevy alone will lead you to hard-code colors, which violates the Tunability Mandate.

LunCoSim Theming (lunco-theme)

Full API reference: crates/lunco-theme/README.md. This skill is the decision guide for where colors/spacing come from in this repo.

Hard rules

  1. No Color32::from_rgb(...), hex literals, or RGBA tuples outside crates/lunco-theme/. Every color in a panel, overlay, widget, or gizmo routes through the Theme resource. If the color you want doesn't exist yet, add a typed field at the right tier — don't inline the value.
  2. Palette reads (theme.colors.*) only inside from_palette builders. Anywhere else — including inside extension traits that provide defaults via get_token — is a smell. If the default you want is a palette entry, that's a sign you should be adding a field to SchematicTokens or DesignTokens first.
  3. Four tiers, pick the right one. See § Tier guide. Consumer code reads fields; get_token is reserved for resolving pinned user overrides.
  4. Never call ctx.set_visuals(...) from a panel. lunco-workbench applies theme.to_visuals() when its theme changes; ThemePlugin applies shared typography styles in ThemeApplySet. Systems that render directly before the workbench should run after that set; the workbench orders its panels and overlays around it. The shell owns chrome styling.
  5. Dark/light is theme.toggle_mode(), not a branch on ThemeMode. Overrides survive the toggle automatically.
  6. Spacing and rounding come from theme.spacing and theme.rounding, not ad-hoc 4.0 / 6.0 / Margin::same(8.0) literals. The merged workbench title bar uses theme.spacing.titlebar_height and theme.spacing.titlebar_control_size for one shared alignment contract.
  7. Translucent workbench surfaces use theme.tokens.overlay_backdrop. Let lunco-workbench own the body fill and keep standard PanelCtx content frames transparent over it; do not introduce panel-local alpha values or duplicate backdrop tokens.
  8. Typography is role-based and theme-owned. ThemePlugin maps egui's built-in text styles and LunCoSim named roles from theme.typography across the primary egui context. Use egui's normal widget styles for ordinary body, button, heading, caption, and monospace text. Use TypographyRole::text_style() for semantic RichText, and TypographyRole::font_id(ui.style()) for custom painter text. Help, status messages, and ordinary guidance use Body. Caption is for secondary metadata and compact status-bar summaries; reserve DenseData and DenseCode for genuinely compact information such as chart labels, timestamps, and log rows. Keep authored model text and spatial label sizing under their content/spatial owner.
Runtime-authored HTML/CSS surfaces

Runtime surfaces under assets/ui/ are the explicit exception to the egui consumer rules above: their authored presentation belongs in Flair CSS. Put surface colors, spacing, and rounding in CSS custom-property defaults and use --ui-<property> bindings for engine-driven state. Do not add a Rust system that copies Theme fields into the HTML tree every frame. Theme remains the semantic source for egui/workbench consumers; the runtime HTML contract keeps its own reloadable CSS presentation boundary.

Tier guide

Four tiers. Always work at the highest (most specific) tier that fits. If you're tempted to hardcode a palette entry at a lower tier, you're at the wrong tier — go up a level and add a field.

Tier 1 — DesignTokens (generic semantic, universal to any UI)

Fields on DesignTokens, populated by DesignTokens::from_palette. Colours every UI uses regardless of domain.

rust
theme.tokens.accent
theme.tokens.success
theme.tokens.warning
theme.tokens.error
theme.tokens.text
theme.tokens.text_subdued
theme.tokens.success_subdued

Add a field here when the token is cross-cutting (e.g. a new "destructive-action red" colour).

Tier 2 — SchematicTokens (typed block-diagram editors)

Fields on SchematicTokens, populated by SchematicTokens::from_palette. Colours that any schematic editor uses — Modelica, SysML, electrical CAD, flow charts. Shared vocabulary, one palette→intent mapping.

rust
// Wire colours by connector domain
theme.schematic.wire_electrical   // Pin, Plug
theme.schematic.wire_mechanical   // Flange
theme.schematic.wire_thermal      // HeatPort
theme.schematic.wire_fluid
theme.schematic.wire_signal       // RealInput/Output
theme.schematic.wire_boolean
theme.schematic.wire_integer
theme.schematic.wire_multibody    // Frame
theme.schematic.wire_unknown

// Class/component-kind badges
theme.schematic.class_model_badge
theme.schematic.class_block_badge
theme.schematic.class_class_badge
theme.schematic.class_connector_badge
theme.schematic.class_record_badge
theme.schematic.class_type_badge
theme.schematic.class_package_badge
theme.schematic.class_function_badge
theme.schematic.class_operator_badge
theme.schematic.class_badge_fg

// Schematic-panel typography
theme.schematic.text_muted
theme.schematic.text_heading

Add a field here when you need a new schematic concept (e.g. a "selected wire" colour, a new connector domain).

Tier 3 — Domain translation (extension trait)

A trait on Theme inside the domain crate. Maps domain-specific names (Modelica Pin, parsed ClassType::Model, SysML stereotype) to tier 2 fields. Zero palette reads in the trait body — if the intent isn't in tier 2 yet, go add it there first.

rust
// crates/lunco-modelica-ui/src/ui/theme.rs
pub trait ModelicaThemeExt {
    fn wire_color(&self, connector_type: &str) -> Color32;
    fn class_badge_bg(&self, kind: &ClassType) -> Color32;
}

impl ModelicaThemeExt for Theme {
    fn wire_color(&self, connector_type: &str) -> Color32 {
        let leaf = connector_type.rsplit('.').next().unwrap_or(connector_type);
        let s = &self.schematic;
        match leaf {
            "Pin" | "Plug" => s.wire_electrical,
            "Flange_a" | "Flange_b" => s.wire_mechanical,
            "RealInput" | "RealOutput" => s.wire_signal,
            _ => s.wire_unknown,
        }
    }
    fn class_badge_bg(&self, kind: &ClassType) -> Color32 {
        match kind {
            ClassType::Model => self.schematic.class_model_badge,
            ClassType::Package => self.schematic.class_package_badge,
            // ...
        }
    }
}
Tier 4 — User override (pin a value)

theme.register_override(domain, token, colour) + theme.get_token(domain, token, fallback). Use only when:

  • A theme author or end-user needs to pin a specific colour that should not track the palette on dark/light toggle, or
  • You're resolving a token whose default is itself a tier 2 field (e.g. theme.get_token("modelica", "port_input", theme.schematic.wire_signal)).

get_token is not the pattern for introducing new defaults. If you're writing self.colors.blue as the fallback, stop — the right fix is a new field in tier 2.

How to read Theme

From a Bevy system
rust
fn my_system(
    mut contexts: EguiContexts,
    theme: Res<lunco_theme::Theme>,
) {
    let ctx = contexts.ctx_mut().unwrap();
    egui::Area::new("x".into()).show(ctx, |ui| {
        ui.colored_label(theme.tokens.success, "ok");
        ui.colored_label(theme.schematic.wire_electrical, "bus");
    });
}
Show full SKILL.md (462 more words)Show less
From a &mut World widget / WorkbenchPanel::ui_world

Clone the whole Theme out of World before touching ui — you can't hold Res<Theme> and &mut World at the same time:

rust
let theme = world.resource::<lunco_theme::Theme>().clone();
// now render freely with `theme.tokens.*`, `theme.schematic.*`,
// or (for Modelica) `theme.wire_color("Pin")` via the extension trait.
Imports
rust
use lunco_ui::prelude::{Theme, ThemeMode, ThemePlugin}; // re-exported
// or directly:
use lunco_theme::{Theme, ThemeMode, ThemePlugin, DesignTokens, SchematicTokens, ColorPalette};
// Domain extension (if any):
use crate::ui::theme::ModelicaThemeExt;

Picking the right token

NeedUse
Primary/brand actiontheme.tokens.accent
Success / ok / onlinetheme.tokens.success
Warning / cautiontheme.tokens.warning
Error / offline / destructivetheme.tokens.error
Body texttheme.tokens.text
Secondary / muted texttheme.tokens.text_subdued
Panel backgroundtheme.colors.mantle
Widget surfacetheme.colors.surface0..surface2
Electrical wiretheme.schematic.wire_electrical
Mechanical flangetheme.schematic.wire_mechanical
Signal (Real)theme.schematic.wire_signal
Class-kind badgetheme.schematic.class_<kind>_badge
Schematic diagram muted texttheme.schematic.text_muted
Domain type → schematic colourextension trait (theme.wire_color(…))
User-pinned overridetheme.get_token(...) with prior register_override

If the answer is "none of these fit" — add a field in the right tier. Tier 1 if the colour is cross-UI; tier 2 if schematic-specific. Don't default tier 3 with palette picks.

Plugin wiring

  • lunco-workbench::WorkbenchPlugin auto-adds ThemePlugin — full app shells get it for free.
  • Headless UI tests or standalone panel harnesses: add it yourself, app.add_plugins(lunco_theme::ThemePlugin). Without it, Res<Theme> will not be present and systems will panic on access.
  • WorkbenchPlugin's layout/render loop is what pushes Theme into the egui context (ctx.set_visuals(theme.to_visuals())). A standalone panel harness without the workbench must apply theme.to_visuals() itself (e.g. ui.style_mut().visuals = theme.to_visuals();).

Dark / light toggle

rust
world.resource_mut::<lunco_theme::Theme>().toggle_mode();
  • Preserves all registered overrides.
  • The workbench status bar 🌙/☀ button already wires this — don't duplicate it in other panels.
  • Don't branch on theme.mode in panel code to pick colors; pick the token and trust Theme::dark() / Theme::light() to have remapped it correctly.

What NOT to do

❌ Don't✅ Do
Color32::from_rgb(46, 194, 126)theme.tokens.success
theme.colors.blue in a panelAdd a field to SchematicTokens or DesignTokens
self.colors.blue as a default in an extension traitself.schematic.wire_electrical field (add if missing)
ui.visuals_mut().override_text_color = Some(...)Let lunco-workbench apply theme.to_visuals()
if mode == Dark { red } else { dark_red }One token; palette handles the swap
wire_color_for(connector) local function per crateDomain extension trait returning theme.schematic.wire_*
Margin::same(8.0)theme.spacing.window_padding
Add a new catppuccin-egui dep in a domain crateConsume colors via Theme; bridging lives in lunco-theme only

Review checklist

Before merging any UI change, scan the diff for:

  • No new Color32::from_rgb, hex, or RGBA tuples outside lunco-theme.
  • No theme.colors.* reads outside from_palette builders or tier-4 get_token fallbacks.
  • Every new colour goes through theme.tokens.*, theme.schematic.*, or a domain extension trait mapping domain types → those fields.
  • New domain-specific colours modelled as extension-trait methods returning theme.schematic.* fields, not inlined at call sites.
  • User-specific overrides registered via register_override in the domain plugin's build.
  • No new ctx.set_visuals calls in panel code.
  • Spacing/rounding pulled from theme.spacing / theme.rounding where a token exists.
  • UI text resolves through Theme.typography roles; no ad-hoc font sizes remain in ordinary widget or painter text.
  • Guidance and status use Body; DenseData/DenseCode are limited to compact data such as charts, timestamps, and log rows.
  • No theme.mode == Dark branches picking colors.

Quick sanity check on an existing file

bash
# Colors that should be routed through theme (ignore lunco-theme itself):
grep -rn "Color32::from_rgb\|Color32::from_rgba" crates/ \
  | grep -v "crates/lunco-theme/"

# Palette reads outside lunco-theme and from_palette builders:
grep -rn "theme\.colors\." crates/ \
  | grep -v "crates/lunco-theme/" \
  | grep -v "from_palette"

# ctx.set_visuals calls (should only be in the workbench theme refresh):
grep -rn "set_visuals" crates/

Findings from any command are candidates to refactor into theme tokens at the appropriate tier.

© LunCoSim, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/lunco-theme of LunCoSim/lunco-sim.

Open the folder on GitHubat commit 43f1301

Compare with similar skills

Lunco Theme next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Lunco Theme compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Lunco Theme this skillLunCoSim/lunco-sim107—~3.6kAutomated safety check: PassApache-2.0
Impeccablebestofjs/bestofjs3.1k26 repos~2.6kAutomated safety check: PassMIT
Figma Design System Builderwarpdotdev/warp65k2 repos~4.4kAutomated safety check: PassAGPL-3.0
Tailwindcss Developmentanonaddy/anonaddy4.9k10 repos~865Automated safety check: PassMIT
UI StylingOhh-889/skyroc79513 repos~2.5kAutomated safety check: PassMIT
MCP Developmentcoollabsio/coolify63k1 repos~949Automated safety check: PassMIT

Similar skills

  • Impeccable

    bestofjs/bestofjs

    A skill your agent uses when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a…

    3.1k GitHub starsUsed in 26 repos~2.6k tokens
    Frontend & DesignAuto-check passed
  • Builds or updates a design system in Figma from a codebase in ordered phases: discovery, variables and tokens, components, theming and documentation, with checkpoints.

    65k GitHub starsUsed in 2 repos~4.4k tokens
    Frontend & DesignAuto-check passed
  • Tailwindcss Development

    anonaddy/anonaddy

    Always invoke when the user's message includes 'tailwind' in any form.

    4.9k GitHub starsUsed in 10 repos~865 tokens
    Frontend & DesignAuto-check passed
  • UI Styling

    Ohh-889/skyroc

    Create beautiful, accessible user interfaces with shadcn/ui components (built on Radix UI + Tailwind), Tailwind CSS utility-first styling, and canvas-based visual designs.

    795 GitHub starsUsed in 13 repos~2.5k tokens
    Frontend & DesignAuto-check passed
  • MCP Development

    coollabsio/coolify

    A skill your agent uses for Laravel MCP development. An agent skill from coollabsio/coolify.

    63k GitHub starsUsed in 1 repo~949 tokens
    Frontend & DesignAuto-check passed
  • UI UX Pro Max

    saoudi-h/solar-icons

    UI/UX design intelligence for web and mobile. An agent skill from saoudi-h/solar-icons.

    190 GitHub starsUsed in 18 repos~11k tokens
    Frontend & DesignAuto-check: notes

More from LunCoSim/lunco-sim

All 40 skills in this repo
  • Nightly Changelog

    LunCoSim/lunco-sim

    Generate concise LunCoSim nightly GitHub release notes with platform downloads, installation guidance, an AI-agent mission prompt, and a changelog link.

    107 GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Build or repair a reusable scene component through a live LunCoSim Editor session.

    107 GitHub stars~4.4k tokensUpdated today
    Auto-check passed
  • Assembly Quality

    LunCoSim/lunco-sim

    Build or review a componentized LunCoSim USD assembly with a realistic, dimensionally checkable presentation.

    107 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Author Rhai Tests

    LunCoSim/lunco-sim

    Author and review LunCoSim behavioral, asset-backed, component, mission, visual, and requirements-verification tests.

    107 GitHub stars~3.5k tokensUpdated today
    Auto-check passed
  • Author Rhai Tool

    LunCoSim/lunco-sim

    Create, extend, register, or debug a reusable LunCoSim Rhai tool library for live USD authoring, component linting, inspection, or test support.

    107 GitHub stars~5.2k tokensUpdated today
    Auto-check passed
  • Author Tutorial

    LunCoSim/lunco-sim

    Author an interactive tutorial, guided lesson, onboarding flow, coach-mark tour, or objectives checklist in LunCoSim.

    107 GitHub stars~1.4k tokensUpdated today
    Auto-check passed

Questions about Lunco Theme

What does Lunco Theme do?

LunCoSim's centralised theming system. An agent skill from LunCoSim/lunco-sim. Lunco Theme is an agent skill from LunCoSim/lunco-sim. LunCoSim's centralised theming system.

When should I use Lunco Theme?

Lunco Theme fits situations like: you are about to write; review UI code that involves a color; egui visual style — in any panel; any Color32::fromrgb.

How do I install Lunco Theme in Claude Code?

Run `npx skills add LunCoSim/lunco-sim --skill lunco-theme -a claude-code`. Or copy the skill folder (skills/lunco-theme in LunCoSim/lunco-sim) into .claude/skills/lunco-theme in your project. Claude Code loads it when a task matches its description.

How do I install Lunco Theme in Codex?

Run `npx skills add LunCoSim/lunco-sim --skill lunco-theme -a codex`. Or copy the skill folder (skills/lunco-theme in LunCoSim/lunco-sim) into .agents/skills/lunco-theme in your project. Codex loads it when a task matches its description.

Can I use Lunco Theme in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add LunCoSim/lunco-sim --skill lunco-theme -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/lunco-theme, .gemini/skills/lunco-theme, .github/skills/lunco-theme and .opencode/skills/lunco-theme in your project.

What does Lunco Theme need to run?

SKILL.md names no scripts, command-line tools or credentials: Lunco Theme is instructions for the agent only.

Does Lunco Theme access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Lunco Theme safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Lunco Theme use?

Lunco Theme is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Lunco Theme use?

About 3.6k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Lunco Theme?

Skills that share tags, products or a category with Lunco Theme: Impeccable (bestofjs/bestofjs, 3.1k stars), Figma Design System Builder (warpdotdev/warp, 65k stars), Tailwindcss Development (anonaddy/anonaddy, 4.9k stars) and UI Styling (Ohh-889/skyroc, 795 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Lunco Theme?

LunCoSim (a GitHub organization) maintains it in LunCoSim/lunco-sim, which has 107 GitHub stars. The repository holds 40 skills in this directory. The repository was last updated on October 10, 2026.

Source: LunCoSim/lunco-sim on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.