All outline text draws with Slug curves on every platform (SDF/MSDF stays selectable per size); a frame never presents a blank glyph and retained draw lists keep theirs. One coverage model for vector feathering, widget families split out of the core crate, fewer steady-state allocations, video keeps its aspect (Contain/Cover), render and SSAO pass unification. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
198 lines
8.3 KiB
Text
198 lines
8.3 KiB
Text
mod.theme = mod.themes.light
|
|
|
|
// Minimal instrument hardware: a pale matte case, square keycaps with a
|
|
// short skirt, one black well, one signal orange. Colour is rationed: the
|
|
// keys are neutral, orange marks the one main action, the chosen answer and
|
|
// the lit lamp. Every state of a family is spelled out, because the base
|
|
// derived its states once, from its own colours.
|
|
|
|
// The case: a pale warm grey, the plates a step darker.
|
|
mod.theme.color_bg_app = #efedea
|
|
mod.theme.color_fg_app = #efedea
|
|
mod.theme.color_bg_container = #e4e1dc
|
|
mod.theme.color_surface_container_lowest = #e4e1dc
|
|
|
|
// Raised faces: white keycaps, lit from above.
|
|
mod.theme.color_outset = #f0f0f0
|
|
mod.theme.color_outset_1 = #f5f5f5
|
|
mod.theme.color_outset_2 = #ebebeb
|
|
mod.theme.color_outset_hover = #f4f4f4
|
|
mod.theme.color_outset_1_hover = #f8f8f8
|
|
mod.theme.color_outset_2_hover = #efefef
|
|
mod.theme.color_outset_down = #e4e3e3
|
|
mod.theme.color_outset_1_down = #dedddd
|
|
mod.theme.color_outset_2_down = #eaeaea
|
|
mod.theme.color_outset_focus = #f0f0f0
|
|
mod.theme.color_outset_1_focus = #f5f5f5
|
|
mod.theme.color_outset_2_focus = #ebebeb
|
|
mod.theme.color_outset_active = #e4e3e3
|
|
mod.theme.color_outset_1_active = #dedddd
|
|
mod.theme.color_outset_2_active = #eaeaea
|
|
mod.theme.color_outset_disabled = #ecebe8
|
|
mod.theme.color_outset_1_disabled = #ecebe8
|
|
mod.theme.color_outset_2_disabled = #ecebe8
|
|
|
|
// Wells: white fields, recessed into the case.
|
|
mod.theme.color_inset = #fbfaf8
|
|
mod.theme.color_inset_1 = #fbfaf8
|
|
mod.theme.color_inset_2 = #fbfaf8
|
|
mod.theme.color_inset_hover = #ffffff
|
|
mod.theme.color_inset_1_hover = #ffffff
|
|
mod.theme.color_inset_2_hover = #ffffff
|
|
mod.theme.color_inset_focus = #ffffff
|
|
mod.theme.color_inset_1_focus = #ffffff
|
|
mod.theme.color_inset_2_focus = #ffffff
|
|
mod.theme.color_inset_active = #ffffff
|
|
mod.theme.color_inset_1_active = #ffffff
|
|
mod.theme.color_inset_2_active = #ffffff
|
|
mod.theme.color_inset_down = #f4f3f1
|
|
mod.theme.color_inset_1_down = #f4f3f1
|
|
mod.theme.color_inset_2_down = #f4f3f1
|
|
mod.theme.color_inset_drag = #f4f3f1
|
|
mod.theme.color_inset_1_drag = #f4f3f1
|
|
mod.theme.color_inset_2_drag = #f4f3f1
|
|
mod.theme.color_inset_empty = #fbfaf8
|
|
mod.theme.color_inset_1_empty = #fbfaf8
|
|
mod.theme.color_inset_2_empty = #fbfaf8
|
|
mod.theme.color_inset_disabled = #ecebe8
|
|
mod.theme.color_inset_1_disabled = #ecebe8
|
|
mod.theme.color_inset_2_disabled = #ecebe8
|
|
|
|
// One grey hairline on every face and well: the lamp-off grey, 3.7 to 1 on
|
|
// the case.
|
|
mod.theme.color_bevel = #7a7977
|
|
mod.theme.color_bevel_hover = #7a7977
|
|
mod.theme.color_bevel_focus = #c2410c
|
|
mod.theme.color_bevel_down = #7a7977
|
|
mod.theme.color_bevel_active = #7a7977
|
|
mod.theme.color_bevel_empty = #7a7977
|
|
mod.theme.color_bevel_disabled = #b4b2af
|
|
mod.theme.color_bevel_inset_1 = #7a7977
|
|
mod.theme.color_bevel_inset_2 = #7a7977
|
|
mod.theme.color_bevel_outset_1 = #7a7977
|
|
mod.theme.color_bevel_outset_2 = #7a7977
|
|
mod.theme.beveling = 0.5
|
|
|
|
// Print ink: near black on the case and the keys.
|
|
mod.theme.color_text = #1d1d1d
|
|
mod.theme.color_text_hover = #1d1d1d
|
|
mod.theme.color_text_focus = #1d1d1d
|
|
mod.theme.color_text_active = #1d1d1d
|
|
mod.theme.color_text_down = #1d1d1d
|
|
mod.theme.color_text_disabled = #a9a7a4
|
|
mod.theme.color_text_placeholder = #72716f
|
|
mod.theme.color_text_placeholder_hover = #6a6967
|
|
mod.theme.color_text_meta = #5c5b59
|
|
mod.theme.color_text_val = #1d1d1d
|
|
mod.theme.color_text_cursor = #ee5a24
|
|
mod.theme.color_cursor = #ee5a24
|
|
mod.theme.color_label = #1d1d1d
|
|
mod.theme.color_label_hover = #1d1d1d
|
|
mod.theme.color_label_focus = #1d1d1d
|
|
mod.theme.color_label_active = #1d1d1d
|
|
mod.theme.color_label_down = #1d1d1d
|
|
mod.theme.color_label_disabled = #a9a7a4
|
|
mod.theme.color_label_inner = #1d1d1d
|
|
mod.theme.color_label_inner_hover = #111111
|
|
mod.theme.color_label_inner_focus = #1d1d1d
|
|
mod.theme.color_label_inner_active = #1d1d1d
|
|
mod.theme.color_label_inner_down = #1d1d1d
|
|
mod.theme.color_label_inner_disabled = #a9a7a4
|
|
mod.theme.color_label_outer = #1d1d1d
|
|
mod.theme.color_label_outer_hover = #111111
|
|
mod.theme.color_label_outer_focus = #1d1d1d
|
|
mod.theme.color_label_outer_active = #1d1d1d
|
|
mod.theme.color_label_outer_down = #1d1d1d
|
|
mod.theme.color_label_outer_disabled = #a9a7a4
|
|
mod.theme.color_icon = #1d1d1d
|
|
mod.theme.color_icon_hover = #111111
|
|
mod.theme.color_icon_focus = #1d1d1d
|
|
mod.theme.color_icon_active = #1d1d1d
|
|
mod.theme.color_icon_down = #1d1d1d
|
|
mod.theme.color_icon_disabled = #a9a7a4
|
|
|
|
// The accent seed: the primary, secondary and tertiary families are grown
|
|
// from `color_ctrl_selected`. A deep signal orange, so the grown roles keep
|
|
// their ink; the bright signal orange of keys, fills and lamps is drawn by
|
|
// the faces themselves.
|
|
mod.theme.color_ctrl_selected = #c2410c
|
|
mod.theme.color_focus = #ee5a24
|
|
mod.theme.color_ctrl_active = #c2410c
|
|
mod.theme.color_val = #ee5a24
|
|
mod.theme.color_selection_focus = #ee5a2438
|
|
mod.theme.color_bg_highlight_inline = #ee5a2438
|
|
|
|
mod.theme.color_terminal_bg = #1a1a1a
|
|
mod.theme.color_terminal_text = #f0f0f0
|
|
|
|
// The display's ink is the liquid's black, for the figures and the
|
|
// captions on a display alike; and a liquid display shows no unlit
|
|
// segment unless a page asks for the film the liquid leaves.
|
|
mod.theme.color_screen_ink = #07070b
|
|
mod.theme.screen_ghost = 0.0
|
|
|
|
// Slim metrics: rows of 26 (24 of face and a 2 point skirt), gaps of 8
|
|
// between controls, 12 between groups, hairline edges.
|
|
mod.theme.space_factor = 6.0
|
|
mod.theme.space_1 = 4.0
|
|
mod.theme.space_2 = 8.0
|
|
mod.theme.space_3 = 12.0
|
|
mod.theme.space_4 = 16.0
|
|
mod.theme.space_5 = 20.0
|
|
mod.theme.space_6 = 24.0
|
|
mod.theme.mspace_1 = mod.turtle.Inset{top: 4.0 right: 4.0 bottom: 4.0 left: 4.0}
|
|
mod.theme.mspace_h_1 = mod.turtle.Inset{top: 0.0 right: 4.0 bottom: 0.0 left: 4.0}
|
|
mod.theme.mspace_v_1 = mod.turtle.Inset{top: 4.0 right: 0.0 bottom: 4.0 left: 0.0}
|
|
mod.theme.mspace_2 = mod.turtle.Inset{top: 8.0 right: 8.0 bottom: 8.0 left: 8.0}
|
|
mod.theme.mspace_h_2 = mod.turtle.Inset{top: 0.0 right: 8.0 bottom: 0.0 left: 8.0}
|
|
mod.theme.mspace_v_2 = mod.turtle.Inset{top: 8.0 right: 0.0 bottom: 8.0 left: 0.0}
|
|
mod.theme.mspace_3 = mod.turtle.Inset{top: 12.0 right: 12.0 bottom: 12.0 left: 12.0}
|
|
mod.theme.mspace_h_3 = mod.turtle.Inset{top: 0.0 right: 12.0 bottom: 0.0 left: 12.0}
|
|
mod.theme.mspace_v_3 = mod.turtle.Inset{top: 12.0 right: 0.0 bottom: 12.0 left: 0.0}
|
|
// The rungs the base froze at its own space factor, restated at ours.
|
|
mod.theme.size_control_s = 22.0
|
|
mod.theme.size_control_m = 26.0
|
|
mod.theme.size_control_l = 32.0
|
|
mod.theme.tab_height = 24.0
|
|
mod.theme.tab_flat_height = 24.0
|
|
mod.theme.data_item_height = 22.0
|
|
mod.theme.corner_radius = 2.5
|
|
mod.theme.container_corner_radius = 6.0
|
|
mod.theme.textselection_corner_radius = 1.0
|
|
mod.theme.radius_xs = 1.0
|
|
mod.theme.radius_s = 2.0
|
|
mod.theme.radius_m = 2.5
|
|
mod.theme.radius_l = 6.0
|
|
|
|
// The base's neutral grotesque, kept whole, at legend sizes: a font size
|
|
// draws 1.333 layout points per unit, so 8 is a cap of about 7.4 points,
|
|
// 0.29 of a 26 point key (the brief's 0.26 to the handbook's 0.30).
|
|
mod.theme.font_size_base = 8.0
|
|
// The small heading (a card's title): a cap of about 12 device pixels, a
|
|
// step over the 11 of a legend, never the heaviest ink on a panel.
|
|
mod.theme.font_size_4 = 8.75
|
|
mod.theme.font_size_p = 8.0
|
|
mod.theme.type_title_l_size = 11.25
|
|
mod.theme.type_title_m_size = 9.75
|
|
mod.theme.type_title_s_size = 8.75
|
|
mod.theme.type_body_l_size = 8.75
|
|
mod.theme.type_body_m_size = 8.0
|
|
mod.theme.type_body_s_size = 7.25
|
|
mod.theme.type_label_l_size = 8.0
|
|
mod.theme.type_label_m_size = 7.25
|
|
mod.theme.type_label_s_size = 6.5
|
|
mod.theme.font_regular = mod.theme.font_regular{font_size: 8.0}
|
|
mod.theme.font_label = mod.theme.font_label{font_size: 8.0}
|
|
mod.theme.font_bold = mod.theme.font_bold{font_size: 8.0}
|
|
mod.theme.font_italic = mod.theme.font_italic{font_size: 8.0}
|
|
mod.theme.font_bold_italic = mod.theme.font_bold_italic{font_size: 8.0}
|
|
mod.theme.font_title_l = mod.theme.font_bold{font_size: 11.25 line_spacing: 1.2}
|
|
mod.theme.font_title_m = mod.theme.font_bold{font_size: 9.75 line_spacing: 1.2}
|
|
mod.theme.font_title_s = mod.theme.font_bold{font_size: 8.75 line_spacing: 1.2}
|
|
mod.theme.font_body_l = mod.theme.font_regular{font_size: 8.75 line_spacing: 1.35}
|
|
mod.theme.font_body_m = mod.theme.font_regular{font_size: 8.0 line_spacing: 1.35}
|
|
mod.theme.font_body_s = mod.theme.font_regular{font_size: 7.25 line_spacing: 1.35}
|
|
mod.theme.font_label_l = mod.theme.font_bold{font_size: 8.0 line_spacing: 1.2}
|
|
mod.theme.font_label_m = mod.theme.font_bold{font_size: 7.25 line_spacing: 1.2}
|
|
mod.theme.font_label_s = mod.theme.font_bold{font_size: 6.5 line_spacing: 1.2}
|
|
true
|