/* Morris UI primitives. Appearance belongs here; feature files own layout. */
:root { --control-radius: 5px; --control-height: 44px; --control-border: #97998e; --control-error: #a54b3e; }
.ui-button, .primary-button, .secondary-button, .text-button {
    display: inline-flex; align-items: center; justify-content: center; gap: 8px;
    min-height: var(--control-height); padding: 10px 18px; border: 1px solid var(--action);
    border-radius: var(--control-radius); font: inherit; font-size: 14px; line-height: 1.4;
    background: var(--surface); color: var(--action); cursor: pointer; text-decoration: none;
}
.primary-button { background: var(--action); color: var(--surface); }
.text-button { border-color: transparent; background: transparent; padding: 5px 10px; font-size: 13px; }
:is(.ui-button, .primary-button, .secondary-button, .text-button):hover:not(:disabled) { filter: brightness(.96); }
:is(.ui-button, .primary-button, .secondary-button, .text-button):focus-visible,
.ui-input:focus-visible { outline: 3px solid var(--focus); outline-offset: 3px; }
:is(.ui-button, .primary-button, .secondary-button, .text-button):disabled,
.ui-input:disabled { opacity: .5; cursor: default; }
button:disabled { opacity: .5; cursor: default; }
.ui-button[aria-busy="true"] { cursor: progress; }
.ui-input {
    box-sizing: border-box; width: 100%; min-width: 0; min-height: var(--control-height);
    border: 1px solid var(--control-border); border-radius: var(--control-radius);
    background: var(--surface); color: var(--text); padding: 11px 12px;
    font: inherit; line-height: 1.4;
}
input.ui-input[aria-invalid="true"] { border-color: var(--control-error); }
.ui-input[aria-invalid="true"]:focus-visible { outline-color: var(--control-error); }
.number-unit:has(input:focus-visible) { outline: 3px solid var(--focus); outline-offset: 3px; }
.number-unit input:focus-visible { outline: none; }
.number-unit:has(input:disabled) { opacity: .5; color: var(--muted); cursor: default; }
.number-unit input:disabled { color: var(--muted); cursor: default; }
/* Native checkbox semantics with Morris's ink, linen and focus treatment. */
.morris-checkbox { display: flex; align-items: center; min-height: 44px; cursor: pointer; gap: 10px; line-height: 1.5; }
.morris-checkbox input {
    appearance: none; -webkit-appearance: none; display: grid; place-content: center;
    box-sizing: border-box; width: 20px; height: 20px; min-height: 20px; flex: 0 0 auto; margin: 0; padding: 0;
    border: 1.5px solid var(--muted); border-radius: 5px; background: var(--surface);
    cursor: inherit; transition: background-color 120ms, border-color 120ms;
}
.morris-checkbox input::before {
    content: ""; width: 10px; height: 6px; border: solid var(--surface); border-width: 0 0 2px 2px;
    transform: translateY(-1px) rotate(-45deg) scale(0);
}
.morris-checkbox input:checked { background: var(--action); border-color: var(--action); }
.morris-checkbox input:checked::before { transform: translateY(-1px) rotate(-45deg) scale(1); }
.morris-checkbox input:focus-visible { outline: 2px solid var(--action); outline-offset: 3px; }
.morris-checkbox:hover input:not(:disabled) { border-color: var(--action); }
.morris-checkbox:has(input:disabled) { cursor: default; color: var(--muted); }
.morris-checkbox input:disabled { opacity: .45; }
@media (forced-colors: active) {
    .morris-checkbox input { appearance: auto; }
    .morris-checkbox input::before { content: none; }
}

.morris-checkbox[hidden], .ui-button[hidden], .ui-input[hidden] { display: none; }
@media (prefers-reduced-motion: reduce) { .morris-checkbox input { transition: none; } }

/* Labels and controls share one spacing contract, including inside dialogs. */
.ui-field { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.ui-field > .ui-field-label { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 8px; margin: 0; font: inherit; font-size: 14px; line-height: 1.4; }
.ui-field-unit { color: var(--muted); font-size: 11px; }
.ui-field > .ui-input { margin: 0; height: 44px; min-height: 44px; padding: 10px 12px; font-size: 14px; }

.ui-help { position: relative; display: flex; align-items: center; gap: 8px; }
.ui-help-button { display: inline-grid; place-items: center; flex: 0 0 32px; width: 32px; height: 32px; border: 0; border-radius: 50%; background: none; color: var(--action); padding: 0; cursor: pointer; }
.ui-help-button > span { display: grid; place-items: center; width: 18px; height: 18px; border: 1px solid currentColor; border-radius: 50%; font: 600 12px/1 var(--font-body); }
.ui-help-button:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
.ui-tooltip { position: absolute; z-index: 60; left: 0; bottom: calc(100% + 6px); width: min(320px, 100%); box-sizing: border-box; padding: 12px; border: 1px solid var(--line); border-radius: 6px; box-shadow: 0 4px 12px #0001; background: var(--surface); color: var(--text); font-size: 12px; line-height: 1.6; opacity: 0; visibility: hidden; transition: opacity 120ms ease; }
.ui-help[data-open="true"] .ui-tooltip { opacity: 1; visibility: visible; }
@media (prefers-reduced-motion: reduce) { .ui-tooltip { transition: none; } }

/* Square icon actions share the same hover, focus and touch targets. */
.ui-icon-button {
    width: var(--control-height); height: var(--control-height); flex: 0 0 var(--control-height);
    padding: 0; border-color: transparent; background: transparent; color: var(--muted);
    font-size: 28px; line-height: 1;
    transition: background-color 120ms ease, color 120ms ease, border-color 120ms ease;
}
:is(.ui-icon-button, .text-button):hover:not(:disabled), :is(.ui-icon-button, .text-button):focus-visible {
    background: var(--surface-soft); color: var(--action); border-color: var(--line);
}
:is(.ui-icon-button, .text-button):active:not(:disabled) { background: var(--sage-tint); }
@media (prefers-reduced-motion: reduce) { .ui-icon-button { transition: none; } }

.ui-spinner { display: inline-block; width: 32px; height: 32px; border: 3px solid var(--line); border-top-color: var(--action); border-radius: 50%; animation: ui-spin 1s linear infinite; }
@keyframes ui-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .ui-spinner { animation: none; border-style: dotted; } }

/* Reserve the shared 3px outline plus 3px offset inside clipped scroll areas. */
.ui-scroll-region { padding: 7px; margin-inline: -7px; scroll-padding-block: 7px; }

.ui-segmented { display: flex; border: 1px solid var(--muted); border-radius: 6px; }
.ui-segmented label { display:flex; flex:1; min-width:0; margin:0; position:relative; cursor:pointer; }
.ui-segmented input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.ui-segmented label > span { flex:1; min-width:0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; min-height: 58px; padding: 7px; border-radius: 4px; }
.ui-segmented-compact label > span { min-height:44px; }
.ui-segmented strong { font-weight: 500; }
.ui-segmented small { font-size: 11px; }
.ui-segmented :checked + span { color: var(--surface); background: var(--action); }
.ui-segmented :focus-visible + span { outline: 3px solid var(--focus); outline-offset: 3px; }
.ui-segmented label:hover > span { box-shadow: inset 0 0 0 2px var(--action); }
.ui-segmented :disabled + span { opacity: .5; cursor: default; }

.ui-textarea { resize: none; overflow-y: auto; line-height: 1.5; }

.ui-character-count { display: block; text-align: right; font-size: 11px; color: var(--muted); margin-top: -6px; }

/* Destructive text/icon actions retain their red cue on hover and focus. */
:is(.text-button, .ui-icon-button).is-destructive { --action: var(--control-error); color: var(--control-error); }

:is(.text-button, .ui-icon-button).is-destructive:is(:hover, :focus-visible):not(:disabled) {
    background: color-mix(in srgb, var(--control-error) 10%, var(--surface));
    border-color: color-mix(in srgb, var(--control-error) 35%, var(--surface));
}
:is(.text-button, .ui-icon-button).is-destructive:active:not(:disabled) {
    background: color-mix(in srgb, var(--control-error) 18%, var(--surface));
}

/* Shared dialog shell; legacy class names retained for existing consumers. */
.asset-dialog{width:min(900px,calc(100vw - 32px));max-width:none;max-height:calc(100dvh - 32px);padding:0;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--text);box-shadow:0 14px 50px var(--shadow)}.asset-dialog::backdrop{background:#17151055}.asset-dialog[open]{display:flex;flex-direction:column}.asset-dialog-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 24px;border-bottom:1px solid var(--line);flex-shrink:0}.asset-dialog-header h2{margin:0;font-size:20px;font-weight:500}.asset-dialog-content{padding:8px 24px 24px;overflow:auto;min-height:0;min-width:0;margin-inline:0}
@media(max-width:650px){.asset-dialog{width:calc(100vw - 16px);max-height:calc(100dvh - 16px)}.asset-dialog-header{padding:12px 16px}.asset-dialog-content{padding:8px 16px 16px}}
.ui-choice-list { display:grid; gap:8px; }
.ui-choice-list label { position:relative; cursor:pointer; }
.ui-choice-list input { position:absolute; width:1px; height:1px; opacity:0; }
.ui-choice-list label > span { display:grid; gap:6px; text-align:left; padding:12px; border:1px solid var(--line); border-radius:5px; }
.ui-choice-list :checked + span { background:var(--surface-soft); border-color:var(--action); box-shadow:inset 3px 0 var(--action); }
.ui-choice-list :focus-visible + span { outline:3px solid var(--focus); outline-offset:3px; }
.ui-choice-list strong { font-weight:500; }
.ui-choice-list small { font-size:11px; color:var(--muted); }

.ui-radio-group { border:0; padding:0; margin:20px 0; min-width:0; }
.ui-radio-group legend { display:block; font-size:13px; margin-bottom:8px; }

.ui-stepper { display:flex; gap:12px; margin:8px 0 60px; }
.ui-stepper .ui-step { position:relative; flex:1; width:auto; margin:0; display:flex; text-align:left; align-items:center; gap:14px; padding:8px 4px; border:1px solid transparent; border-radius:6px; min-width:0; background:transparent; font-size:15px; }
.ui-stepper .ui-step:last-child { flex:0 1 auto; }
.ui-stepper .ui-step:not(:last-child)::after { content:''; flex:1; min-width:20px; height:1px; margin-left:2px; background:var(--line); pointer-events:none; }
.ui-stepper .ui-step:not(:disabled) { cursor:pointer; color:var(--action); }
.ui-stepper .ui-step[data-current=true] { color:var(--text); font-weight:600; }
.ui-stepper .ui-step:disabled { color:var(--muted); opacity:.65; }
.ui-stepper .ui-step:not(:disabled):hover { background:var(--surface-subtle); border-color:var(--line); text-decoration:none; }
.ui-step small { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap; }
.ui-step-marker { width:44px; box-sizing:border-box; height:44px; border:1px solid var(--line); border-radius:50%; display:grid; place-items:center; font-size:17px; font-weight:500; }
.ui-step[data-complete=true] .ui-step-marker { background:var(--action); color:var(--surface); border-color:transparent; }
.ui-step[data-current=true] .ui-step-marker,.ui-step[data-processing=true] .ui-step-marker { background:var(--gold); color:var(--surface); border-color:transparent; }
@media(max-width:800px) { .ui-stepper { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; margin-bottom:36px; } .ui-stepper .ui-step:nth-child(2)::after { display:none; } }

.ui-radio-list { display:grid; gap:12px; }
.ui-radio-list label { display:flex; align-items:center; gap:18px; min-height:44px; cursor:pointer; }
.ui-radio-list input { appearance:auto; accent-color:var(--action); width:26px; height:26px; min-height:26px; margin:0; flex:none; }
.ui-radio-list input:focus-visible { outline:2px solid var(--focus); outline-offset:4px; }
.ui-radio-list label:has(:disabled) { opacity:.55; cursor:default; }
.ui-status-badge { display:inline-flex; align-items:center; border:1px solid var(--status-border); border-radius:4px; padding:6px 14px; color:var(--status-text); background:var(--surface); font-size:13px; line-height:1.35; }
.ui-status-badge[data-tone=warning] { border-color:var(--warning-text); color:var(--warning-text); }
.ui-status-symbol { display:inline-grid; place-items:center; flex:0 0 28px; width:28px; height:28px; border-radius:50%; background:var(--success-text); color:var(--surface); font-size:18px; }
.ui-status-symbol[data-tone=warning] { background:var(--warning-text); }
.ui-library-card { display:grid; gap:10px; text-align:left; padding:12px; border:1px solid var(--line); border-radius:8px; background:var(--surface-subtle); color:var(--text); text-decoration:none; cursor:pointer; }
.ui-library-card:hover:not(:disabled),.ui-library-card[aria-pressed=true] { border-color:var(--action); }
.ui-library-card:focus-visible { outline:2px solid var(--focus); outline-offset:2px; }

.ui-step-indicator { position:relative; flex:0 0 56px; height:56px; display:grid; place-items:center; }
.ui-step-indicator::after { content:''; position:absolute; inset:0; border:2px solid transparent; border-top-color:var(--gold); border-right-color:var(--gold); border-radius:50%; visibility:hidden; pointer-events:none; }
.ui-step[data-processing=true] .ui-step-indicator::after { visibility:visible; animation:ui-step-rotate 1s linear infinite; }
.ui-step-text { display:grid; min-width:0; }
.ui-step-text>span { grid-area:1/1; }
.ui-step-reserve { visibility:hidden; font-weight:600; pointer-events:none; }
.ui-step[data-error=true] .ui-step-marker { background:var(--surface); color:var(--danger); border-color:var(--danger); }
.ui-stepper .ui-step[data-processing=true] { opacity:1; color:var(--text); }
@keyframes ui-step-rotate { to { transform:rotate(360deg); } }
@media(prefers-reduced-motion:reduce) { .ui-step[data-processing=true] .ui-step-indicator::after { animation:none; } }
