  /* Controls — shared base for native form controls (text fields, buttons)
     so each reads as the same kind of control everywhere instead of every
     view rolling its own padding/radius/border/focus treatment. This
     centralizes what was previously copy-pasted near-identically across a
     dozen view files (modals, settings, notes, status, work items, goals,
     files, gallery, workspace, knowledge, ...) — those files now only add
     layout deltas (width, flex, margin) on top of this, not re-declare
     shape/color. select's dropdown look and the app's existing toolbar
     ghost-button convention (transparent, var(--border), var(--text-dim))
     are the reference points used below.
     Loaded right after base.css so every other view file can still
     override on top of it, and holo-theme.css (loaded last) continues to
     layer the shimmer/gradient/typography accents over whichever specific
     buttons opt into them — this file only owns shape + the plain-color
     fallback, never the animated holo treatment. */

  /* Text-like inputs + textarea — one shared "dark well" look, matching
     the existing convention used by modal/settings/notes/status forms.
     `input:not([type])` matters as much as the explicit types below — a
     plain `<input>` with no type attribute (several ship this way across
     the app) defaults to text behavior in the browser but does NOT match
     `input[type="text"]` in CSS, so it must be listed separately or it
     silently falls back to unstyled browser chrome. */
  input:not([type]),
  input[type="text"],
  input[type="search"],
  input[type="password"],
  input[type="email"],
  input[type="url"],
  input[type="tel"],
  input[type="number"],
  input[type="date"],
  input[type="datetime-local"],
  textarea {
    appearance: none; -webkit-appearance: none;
    font-family: inherit;
    color: var(--text);
    background: var(--bg);
    border: 1px solid var(--border);
    border-radius: 8px;
    padding: 9px 12px;
    font-size: 13px;
    outline: none;
    transition: border-color 0.2s ease, box-shadow 0.2s ease;
  }
  textarea { resize: vertical; line-height: 1.5; }
  input:not([type]):hover, input[type="text"]:hover, input[type="search"]:hover, input[type="password"]:hover,
  input[type="email"]:hover, input[type="url"]:hover, input[type="tel"]:hover,
  input[type="number"]:hover, input[type="date"]:hover, input[type="datetime-local"]:hover,
  textarea:hover {
    border-color: var(--accent-2);
  }
  input:not([type]):focus, input[type="text"]:focus, input[type="search"]:focus, input[type="password"]:focus,
  input[type="email"]:focus, input[type="url"]:focus, input[type="tel"]:focus,
  input[type="number"]:focus, input[type="date"]:focus, input[type="datetime-local"]:focus,
  textarea:focus {
    border-color: var(--accent-2);
    box-shadow: 0 0 0 3px rgba(62,90,76,0.18);
  }
  input:disabled, textarea:disabled { opacity: 0.5; cursor: not-allowed; }
  input::placeholder, textarea::placeholder { color: var(--text-dim); }

  /* Number spinners — the native up/down widget can't be recolored (only
     hidden) in any browser and would render as a stark default-light
     control glued to a themed dark field. No type=number input ships yet,
     but drop this in now so the first one doesn't land half-themed. */
  input[type="number"]::-webkit-inner-spin-button,
  input[type="number"]::-webkit-outer-spin-button {
    -webkit-appearance: none;
    margin: 0;
  }
  input[type="number"] { -moz-appearance: textfield; }

  /* Buttons — transparent "ghost" floor matching the toolbar/cancel-button
     look already used throughout the app. Primary/danger/toolbar variants
     layer their own background/color on top per-file (unchanged); this is
     just the shape + fallback color every <button> gets for free instead
     of raw browser chrome. */
  button {
    appearance: none; -webkit-appearance: none;
    font-family: inherit;
    color: var(--text-dim);
    background: transparent;
    border: 1px solid var(--border);
    border-radius: 7px;
    padding: 7px 12px;
    font-size: 12px;
    cursor: pointer;
    transition: border-color 0.2s ease, color 0.2s ease, box-shadow 0.2s ease, background 0.2s ease;
  }
  button:hover:not(:disabled) { color: var(--text); border-color: var(--accent-2); }
  button:disabled { opacity: 0.5; cursor: not-allowed; }
  button:focus-visible, input:focus-visible, textarea:focus-visible, select:focus-visible {
    outline: none;
    box-shadow: 0 0 0 3px rgba(62,90,76,0.25);
  }

  /* Primary — the one generic fallback for any `.primary` button anywhere,
     so a new one always reads as "the main action" even before (or without
     ever) being added to holo-theme.css's shimmer selector lists — see
     that file's primary-button section and workbench.css's header comment
     for the exact class of bug this closes (a button silently left looking
     like plain unstyled chrome because a list was missed). */
  button.primary {
    background: var(--accent);
    border: none;
    color: #070605;
    font-weight: 700;
  }
  button.primary:hover:not(:disabled) { filter: brightness(1.08); }
  button.primary:disabled { opacity: 0.5; cursor: not-allowed; filter: none; }

  /* Danger — destructive actions (delete/revoke/remove) */
  button.danger, button.danger-btn {
    background: transparent;
    border: 1px solid rgba(255,107,107,0.4);
    color: var(--red);
  }
  button.danger:hover:not(:disabled), button.danger-btn:hover:not(:disabled) {
    background: rgba(255,107,107,0.1);
    border-color: var(--red);
  }

  /* Modal/dialog action buttons (save/cancel/confirm rows) — a deliberately
     bigger tier than the ghost floor above, for the less-frequent, more
     consequential actions inside a centered modal/warn card. Was previously
     copy-pasted identically across modals.css, settings.css and system.css. */
  .modal-card .actions button,
  .warn-card .actions button,
  .settings-form .actions button {
    border-radius: 8px;
    padding: 10px 16px;
    font-size: 13px;
  }
