diff --git a/web/routes/uix/uix.css b/web/routes/uix/uix.css index fc087efd6..c38e46ee7 100644 --- a/web/routes/uix/uix.css +++ b/web/routes/uix/uix.css @@ -962,8 +962,14 @@ font-weight: var(--uix-weight-regular); font-size: 10px; } -[data-uix-control] input[type="text"], -[data-uix-control] input[type="number"], +/* Generic chrome for every text-like input + select + textarea inside a + demo control. The selector explicitly excludes the input types that + have their own bespoke affordances (checkbox + radio → custom toggle + chrome; range → native track + accent-color). Anything else — text, + number, email, search, date, time, datetime-local, month, week, tel, + url, password, etc. — gets the same neutral chrome so the controls + panel reads as one consistent thing across all demos. */ +[data-uix-control] input:not([type='checkbox']):not([type='radio']):not([type='range']), [data-uix-control] select, [data-uix-control] textarea { padding: 6px var(--uix-space-3); @@ -973,21 +979,59 @@ color: var(--uix-text); font: inherit; font-size: var(--uix-text-sm); + line-height: var(--uix-leading-ui, 1.4); min-inline-size: 0; + min-block-size: 32px; + box-sizing: border-box; } -[data-uix-control] input[type="text"]:focus, -[data-uix-control] input[type="number"]:focus, + +[data-uix-control] input:not([type='checkbox']):not([type='radio']):not([type='range']):focus, [data-uix-control] select:focus, [data-uix-control] textarea:focus { outline: none; border-color: var(--uix-accent-line); box-shadow: var(--uix-ring); } + +[data-uix-control] input:not([type='checkbox']):not([type='radio']):not([type='range']):disabled, +[data-uix-control] select:disabled, +[data-uix-control] textarea:disabled { + opacity: 0.55; + cursor: not-allowed; +} + [data-uix-control] input[type="range"] { inline-size: 100%; accent-color: var(--uix-accent); } +/* Native date/time pickers ship a calendar/clock indicator icon that + shows in browser-default tone. Force inherit so it matches our chrome. */ +[data-uix-control] input[type='date']::-webkit-calendar-picker-indicator, +[data-uix-control] input[type='datetime-local']::-webkit-calendar-picker-indicator, +[data-uix-control] input[type='month']::-webkit-calendar-picker-indicator, +[data-uix-control] input[type='time']::-webkit-calendar-picker-indicator, +[data-uix-control] input[type='week']::-webkit-calendar-picker-indicator { + filter: invert(0.7); + cursor: pointer; + opacity: 0.7; + transition: opacity var(--uix-duration-fast, 120ms) ease; +} + +[data-uix-control] input[type='date']::-webkit-calendar-picker-indicator:hover, +[data-uix-control] input[type='datetime-local']::-webkit-calendar-picker-indicator:hover, +[data-uix-control] input[type='month']::-webkit-calendar-picker-indicator:hover, +[data-uix-control] input[type='time']::-webkit-calendar-picker-indicator:hover, +[data-uix-control] input[type='week']::-webkit-calendar-picker-indicator:hover { + opacity: 1; +} + +/* Search has a browser-default cancel button that may not match the theme. */ +[data-uix-control] input[type='search']::-webkit-search-cancel-button { + filter: invert(0.7); + cursor: pointer; +} + /* Switch (boolean) */ [data-uix-switch] { display: inline-flex;