/**
 * Image Editor — app styles.
 * Design tokens only (see main.css :root). Prefix: `ie-`.
 * Permitted literals: 44px touch-target minimum, icon SVG sizes,
 * 12px checkerboard cell + 24px handle hit zone (texture/geometry constants),
 * 1/2/3px borders, 16px touch handles, #ffffff picker default,
 * color-mix percentages.
 */

/* Container (mandatory: margin: 0 auto) */
.ie-container {
    width: 100%;
    max-width: var(--app-container-max);
    margin: 0 auto;
    padding: var(--space-4);
}

/* Sections share the site's vertical rhythm */
.ie-container .use-cases,
.ie-container .faq-section {
    margin-top: var(--space-8);
}

/* Hide optional surfaces that CSS display rules would otherwise override the
   [hidden] attribute (display rules beat the UA [hidden] rule). */
.ie-cropbar[hidden],
.ie-resize[hidden],
.ie-toast[hidden],
.ie-dims[hidden],
.ie-bgc[hidden],
.ie-crop[hidden],
.ie-export-preview[hidden],
.ie-preview__empty[hidden],
.ie-preview__loading[hidden],
.ie-preview__processing[hidden],
.ie-preview__error[hidden],
.ie-preview__dragover[hidden],
.ie-preview__img[hidden],
.ie-confirm[hidden] {
    display: none;
}

/* Visually hidden (live regions, off-screen labels) */
.ie-vh {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* ========================================
   Editor card
   ======================================== */
.ie-editor {
    padding: var(--space-4);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-lg);
    background: var(--color-bg-card);
    box-shadow: var(--shadow-sm);
}

/* ========================================
   Preview / drop zone
   ======================================== */
.ie-preview {
    margin-bottom: var(--space-3);
}

.ie-preview__well {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 220px;
    padding: var(--space-4);
    border: 2px dashed var(--color-border);
    border-radius: var(--radius-lg);
    background-color: var(--color-bg-alt);
    /* 12px transparency checkerboard (texture constant). */
    background-image: repeating-conic-gradient(
        var(--color-border) 0% 25%,
        var(--color-bg-alt) 0% 50%
    );
    background-size: 12px 12px;
    color: var(--color-text);
    cursor: pointer;
    transition: border-color var(--transition-base), background-color var(--transition-base);
}

.ie-preview__well:hover {
    border-color: var(--color-border-dark);
}

.ie-preview__well.is-dragover {
    border-color: var(--color-primary);
    background-color: color-mix(in srgb, var(--color-primary) 8%, var(--color-bg-alt));
}

/* In crop mode the overlay owns pointer interaction — don't hint at picking. */
.ie-preview__well.is-cropping {
    cursor: default;
}

.ie-preview__well:focus-visible {
    outline: none;
    box-shadow: var(--focus-ring);
}

.ie-preview__empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--space-2);
    max-width: 32ch;
    text-align: center;
    background: var(--color-bg-card);
    padding: var(--space-4);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-sm);
}

.ie-preview__icon {
    color: var(--color-text-muted);
}

.ie-preview__hint {
    font-size: var(--font-size-base);
    font-weight: 600;
    color: var(--color-text);
}

.ie-preview__methods {
    font-size: var(--font-size-xs);
    color: var(--color-text-muted);
    line-height: var(--line-height-normal);
}

.ie-preview__browse {
    margin-top: var(--space-2);
}

.ie-preview__loading {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--space-3);
    background: var(--color-bg-card);
    padding: var(--space-4);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-sm);
    font-size: var(--font-size-sm);
    color: var(--color-text-muted);
}

.ie-preview__spinner {
    width: 24px;
    height: 24px;
    border: 2px solid var(--color-border);
    border-top-color: var(--color-primary);
    border-radius: 50%;
    animation: ie-spin 0.9s linear infinite;
}

.ie-preview__img {
    display: block;
    max-width: 100%;
    max-height: 420px;
    border-radius: var(--radius-sm);
    box-shadow: var(--shadow-md);
}

.ie-preview__processing {
    position: absolute;
    inset: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--space-3);
    background: var(--color-overlay);
    border-radius: var(--radius-lg);
    color: var(--color-text-inverse);
    font-size: var(--font-size-sm);
}

.ie-preview__processing .ie-preview__spinner {
    border-color: rgba(255, 255, 255, 0.4);
    border-top-color: var(--color-text-inverse);
}

.ie-preview__error {
    position: absolute;
    bottom: var(--space-2);
    left: var(--space-2);
    right: var(--space-2);
    margin: 0;
    padding: var(--space-2) var(--space-3);
    background: var(--color-bg-card);
    border: 1px solid var(--color-error);
    border-radius: var(--radius-md);
    color: var(--color-error-text);
    font-size: var(--font-size-sm);
    box-shadow: var(--shadow-md);
    white-space: normal;
    overflow-wrap: break-word;
}

.ie-preview__basename {
    position: absolute;
    bottom: var(--space-2);
    left: var(--space-2);
    padding: var(--space-1) var(--space-2);
    background: var(--color-bg-card);
    border-radius: var(--radius-full);
    font-family: var(--font-mono);
    font-size: var(--font-size-xs);
    color: var(--color-text-muted);
    box-shadow: var(--shadow-sm);
    max-width: calc(100% - 2 * var(--space-2));
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Drag-over status chip (active state; the visible non-color cue while a
   file is dragged over the well) */
.ie-preview__dragover {
    position: absolute;
    top: var(--space-2);
    left: var(--space-2);
    display: inline-flex;
    align-items: center;
    padding: var(--space-1) var(--space-3);
    background: var(--color-bg-card);
    border: 1px solid var(--color-primary);
    border-radius: var(--radius-full);
    font-size: var(--font-size-xs);
    font-weight: 600;
    color: var(--color-primary-text);
    box-shadow: var(--shadow-sm);
}

/* Dimensions readout (docked top-right) */
.ie-dims {
    position: absolute;
    top: var(--space-2);
    right: var(--space-2);
    display: inline-flex;
    align-items: center;
    gap: var(--space-1);
    padding: var(--space-1) var(--space-2);
    background: var(--color-bg-card);
    border-radius: var(--radius-full);
    font-family: var(--font-mono);
    font-size: var(--font-size-xs);
    color: var(--color-text);
    box-shadow: var(--shadow-sm);
}

.ie-dims__mark {
    color: var(--color-warning-text);
    font-size: var(--font-size-sm);
}

/* ========================================
   Crop overlay
   ======================================== */
.ie-crop {
    position: absolute;
    inset: 0;
    border-radius: var(--radius-lg);
    /* Dim everything; the frame carves a clear hole. */
    background: var(--color-overlay);
    -webkit-mask: none;
}

/* Rule-of-thirds grid inside the frame */
.ie-crop__grid {
    position: absolute;
    inset: 0;
    background-image:
        linear-gradient(to right, var(--color-border) 1px, transparent 1px),
        linear-gradient(to bottom, var(--color-border) 1px, transparent 1px);
    background-size: 33.333% 33.333%;
    opacity: 0.5;
    pointer-events: none;
}

.ie-crop__frame {
    position: absolute;
    box-sizing: border-box;
    border: 2px solid var(--color-primary);
    outline: 1px solid var(--color-bg-card);
    cursor: move;
    touch-action: none;
}

.ie-crop__frame:focus-visible {
    outline: 2px solid var(--color-primary-light);
    box-shadow: var(--focus-ring);
}

.ie-crop__chip {
    position: absolute;
    top: -26px;
    left: 0;
    padding: var(--space-1) var(--space-2);
    background: var(--color-primary);
    color: var(--color-text-inverse);
    border-radius: var(--radius-full);
    font-family: var(--font-mono);
    font-size: var(--font-size-xs);
    white-space: nowrap;
}

.ie-crop__handle {
    position: absolute;
    width: 12px;
    height: 12px;
    background: var(--color-bg-card);
    border: 2px solid var(--color-primary);
    border-radius: var(--radius-sm);
}

/* 24px invisible hit zone (geometry constant). */
.ie-crop__handle::after {
    content: '';
    position: absolute;
    top: -6px;
    left: -6px;
    width: 24px;
    height: 24px;
}

.ie-crop__handle[data-dir='nw'] { top: -7px; left: -7px; cursor: nwse-resize; }
.ie-crop__handle[data-dir='n'] { top: -7px; left: 50%; transform: translateX(-50%); cursor: ns-resize; }
.ie-crop__handle[data-dir='ne'] { top: -7px; right: -7px; cursor: nesw-resize; }
.ie-crop__handle[data-dir='e'] { top: 50%; right: -7px; transform: translateY(-50%); cursor: ew-resize; }
.ie-crop__handle[data-dir='se'] { bottom: -7px; right: -7px; cursor: nwse-resize; }
.ie-crop__handle[data-dir='s'] { bottom: -7px; left: 50%; transform: translateX(-50%); cursor: ns-resize; }
.ie-crop__handle[data-dir='sw'] { bottom: -7px; left: -7px; cursor: nesw-resize; }
.ie-crop__handle[data-dir='w'] { top: 50%; left: -7px; transform: translateY(-50%); cursor: ew-resize; }

/* ========================================
   Crop bar
   ======================================== */
.ie-cropbar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--space-3);
    margin-top: var(--space-3);
    padding: var(--space-3);
    background: var(--color-bg-card);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-sm);
}

.ie-cropbar__presets {
    display: flex;
    gap: var(--space-1);
}

.ie-cropbar__size {
    font-family: var(--font-mono);
    font-size: var(--font-size-sm);
    color: var(--color-text);
}

.ie-cropbar__hint {
    flex: 1 1 auto;
    min-width: 0;
    font-size: var(--font-size-xs);
    color: var(--color-text-muted);
    white-space: normal;
    overflow-wrap: break-word;
}

.ie-cropbar__actions {
    display: flex;
    gap: var(--space-2);
}

/* ========================================
   Model status strip (fixed height, no layout shift)
   ======================================== */
.ie-model-strip {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: var(--space-3);
    min-height: 44px;
    margin-top: var(--space-4);
    padding: var(--space-3);
    border-radius: var(--radius-md);
    background: var(--color-bg-alt);
    font-size: var(--font-size-sm);
}

.ie-model-strip__message {
    flex: 1 1 auto;
    min-width: 0;
    white-space: normal;
    overflow-wrap: break-word;
}

.ie-model-strip__spinner {
    flex: 0 0 auto;
    width: 18px;
    height: 18px;
    border: 2px solid var(--color-border);
    border-top-color: var(--color-primary);
    border-radius: 50%;
    animation: ie-spin 0.9s linear infinite;
    display: none;
}

.ie-model-strip[data-state='loading'] .ie-model-strip__spinner,
.ie-model-strip[data-state='processing'] .ie-model-strip__spinner {
    display: inline-block;
}

.ie-model-strip[data-state='ready'] {
    background: color-mix(in srgb, var(--color-success) 14%, var(--color-bg-alt));
    color: var(--color-success-text);
}

.ie-model-strip[data-state='error'] {
    background: color-mix(in srgb, var(--color-error) 14%, var(--color-bg-alt));
    color: var(--color-error-text);
}

.ie-model-strip__progress {
    flex: 1 1 auto;
    height: 8px;
    background: var(--color-border);
    border-radius: var(--radius-full);
    overflow: hidden;
}

.ie-model-strip__progress-bar {
    height: 100%;
    width: 0%;
    background: var(--color-primary);
    border-radius: var(--radius-full);
    transition: width var(--transition-fast);
}

.ie-model-strip__progress-bar--indeterminate {
    width: 40%;
    animation: ie-slide 1.2s ease-in-out infinite;
}

.ie-model-strip__percent {
    flex: 0 0 auto;
    font-family: var(--font-mono);
    font-size: var(--font-size-xs);
    color: var(--color-text-muted);
    min-width: 4ch;
    text-align: right;
}

.ie-model-strip__retry {
    flex: 0 0 auto;
    background: none;
    border: 1px solid var(--color-border-dark);
    border-radius: var(--radius-full);
    padding: var(--space-1) var(--space-3);
    font-family: var(--font-sans);
    font-size: var(--font-size-xs);
    color: var(--color-error-text);
    cursor: pointer;
    transition: border-color var(--transition-fast);
}

.ie-model-strip__retry:hover {
    border-color: var(--color-error);
}

.ie-model-strip__retry:focus-visible {
    outline: none;
    box-shadow: var(--focus-ring);
}

/* ========================================
   Toolbar (grouped instrument panel)
   ======================================== */
.ie-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--space-3);
    margin-top: var(--space-4);
    padding: var(--space-3);
    background: var(--color-bg-alt);
    border-radius: var(--radius-lg);
}

.ie-toolbar__group {
    display: flex;
    align-items: center;
    gap: var(--space-2);
}

.ie-toolbar__divider {
    width: 1px;
    height: var(--space-6);
    background: var(--color-border);
}

.ie-toolbar__aibtn {
    display: inline-flex;
    align-items: center;
    gap: var(--space-2);
}

.ie-angle {
    display: inline-flex;
    align-items: center;
    gap: var(--space-1);
}

.ie-angle__input {
    width: 4ch;
    padding: var(--space-1) var(--space-2);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    background: var(--color-bg-card);
    color: var(--color-text);
    font-family: var(--font-mono);
    font-size: var(--font-size-sm);
    text-align: center;
}

.ie-angle__input:focus-visible {
    outline: none;
    box-shadow: var(--focus-ring);
}

.ie-angle__suffix {
    font-family: var(--font-mono);
    font-size: var(--font-size-sm);
    color: var(--color-text-muted);
}

/* ========================================
   Buttons
   ======================================== */
.ie-btn-primary,
.ie-btn-secondary {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-2);
    min-height: 44px;
    padding: var(--space-2) var(--space-4);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    font-family: var(--font-sans);
    font-size: var(--font-size-sm);
    font-weight: 600;
    cursor: pointer;
    transition: background var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast);
}

.ie-btn-primary {
    background: var(--color-primary);
    border-color: var(--color-primary);
    color: var(--color-text-inverse);
}

.ie-btn-primary:hover {
    background: var(--color-primary-hover);
    border-color: var(--color-primary-hover);
}

.ie-btn-secondary {
    background: var(--color-bg-card);
    color: var(--color-text);
}

.ie-btn-secondary:hover {
    border-color: var(--color-border-dark);
    background: var(--color-bg-alt);
}

.ie-btn-icon {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    inline-size: 44px;
    block-size: 44px;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    background: var(--color-bg-card);
    color: var(--color-text-muted);
    cursor: pointer;
    transition: border-color var(--transition-fast), color var(--transition-fast), background var(--transition-fast);
}

.ie-btn-icon:hover {
    border-color: var(--color-border-dark);
    color: var(--color-primary-text);
    background: var(--color-bg-alt);
}

.ie-btn-primary:focus-visible,
.ie-btn-secondary:focus-visible,
.ie-btn-icon:focus-visible {
    outline: none;
    box-shadow: var(--focus-ring);
}

.ie-btn-primary:disabled,
.ie-btn-secondary:disabled,
.ie-btn-icon:disabled,
.ie-chip:disabled {
    opacity: 0.5;
    cursor: not-allowed;
}

.ie-crop-toggle.is-active,
.ie-crop-toggle[aria-pressed='true'] {
    background: var(--color-primary);
    border-color: var(--color-primary);
    color: var(--color-text-inverse);
}

/* Per-app help-panel icon button (portal-level gap: copy of the base .btn-icon) */
.ie-container .help-close {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    inline-size: 44px;
    block-size: 44px;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    background: var(--color-bg-card);
    color: var(--color-text-muted);
    font-size: var(--font-size-xl);
    cursor: pointer;
    transition: border-color var(--transition-fast), color var(--transition-fast), background var(--transition-fast);
}

.ie-container .help-close:hover {
    border-color: var(--color-border-dark);
    color: var(--color-error-text);
    background: var(--color-bg-alt);
}

.ie-container .help-close:focus-visible {
    outline: none;
    box-shadow: var(--focus-ring);
}

/* ========================================
   Segmented control (radios)
   ======================================== */
.ie-seg {
    position: relative;
    display: inline-flex;
    cursor: pointer;
}

.ie-seg input {
    position: absolute;
    opacity: 0;
    width: 1px;
    height: 1px;
    margin: 0;
}

.ie-seg span {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 44px;
    padding: var(--space-2) var(--space-4);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-full);
    background: var(--color-bg-card);
    color: var(--color-text);
    font-family: var(--font-sans);
    font-size: var(--font-size-sm);
    transition: background var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast);
}

.ie-seg:hover span {
    border-color: var(--color-border-dark);
}

.ie-seg input:checked + span {
    background: var(--color-primary);
    border-color: var(--color-primary);
    color: var(--color-text-inverse);
}

.ie-seg input:focus-visible + span {
    box-shadow: var(--focus-ring);
}

.ie-seg input:disabled + span {
    opacity: 0.5;
    cursor: not-allowed;
}

/* Adjacent segs share borders into a pill group */
.ie-seg + .ie-seg span {
    border-left-width: 0;
}

/* ========================================
   Resize cluster
   ======================================== */
.ie-resize {
    margin-top: var(--space-4);
    padding: var(--space-3);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    background: var(--color-bg-alt);
}

.ie-resize__fields {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: var(--space-3);
}

.ie-field {
    display: inline-flex;
    flex-direction: column;
    gap: var(--space-1);
}

.ie-field__label {
    font-size: var(--font-size-xs);
    color: var(--color-text-muted);
}

.ie-field__wrap {
    display: inline-flex;
    align-items: center;
    gap: var(--space-1);
}

.ie-field__input {
    width: 6ch;
    padding: var(--space-1) var(--space-2);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    background: var(--color-bg-card);
    color: var(--color-text);
    font-family: var(--font-mono);
    font-size: var(--font-size-sm);
    text-align: right;
}

.ie-field__input:focus-visible {
    outline: none;
    box-shadow: var(--focus-ring);
}

.ie-field__suffix {
    font-family: var(--font-mono);
    font-size: var(--font-size-xs);
    color: var(--color-text-muted);
}

.ie-switch {
    display: inline-flex;
    align-items: center;
    gap: var(--space-2);
    cursor: pointer;
    min-height: 44px;
}

.ie-switch__input {
    position: absolute;
    opacity: 0;
    width: 1px;
    height: 1px;
}

.ie-switch__track {
    position: relative;
    width: 40px;
    height: 22px;
    border-radius: var(--radius-full);
    background: var(--color-border-dark);
    transition: background var(--transition-fast);
}

.ie-switch__track::after {
    content: '';
    position: absolute;
    top: 2px;
    left: 2px;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background: var(--color-bg-card);
    transition: transform var(--transition-fast);
}

.ie-switch__input:checked + .ie-switch__track {
    background: var(--color-primary);
}

.ie-switch__input:checked + .ie-switch__track::after {
    transform: translateX(18px);
}

.ie-switch__input:focus-visible + .ie-switch__track {
    box-shadow: var(--focus-ring);
}

.ie-switch__label {
    font-size: var(--font-size-sm);
    color: var(--color-text);
}

.ie-chip {
    min-height: 44px;
    padding: var(--space-2) var(--space-4);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-full);
    background: var(--color-bg-card);
    color: var(--color-text);
    font-family: var(--font-sans);
    font-size: var(--font-size-sm);
    cursor: pointer;
    transition: border-color var(--transition-fast), background var(--transition-fast);
}

.ie-chip:hover {
    border-color: var(--color-border-dark);
    background: var(--color-bg-alt);
}

.ie-chip:focus-visible {
    outline: none;
    box-shadow: var(--focus-ring);
}

/* Named one-click preset row (Original / 50% / 25% / Web / Print). */
.ie-resize__presets {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2);
    margin-top: var(--space-2);
}

.ie-resize__presets .ie-chip {
    min-height: 40px;
    padding: var(--space-1) var(--space-3);
    font-size: var(--font-size-sm);
}

.ie-resize__apply {
    margin-left: auto;
}

.ie-resize__error {
    margin: var(--space-2) 0 0;
    font-size: var(--font-size-sm);
    color: var(--color-error-text);
}

/* ========================================
   Export panel (the print room)
   ======================================== */
.ie-export {
    margin-top: var(--space-4);
    padding: var(--space-4);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-lg);
    background: var(--color-bg-card);
    box-shadow: var(--shadow-md);
}

.ie-export__head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: var(--space-2);
    margin-bottom: var(--space-4);
}

.ie-export__head h2 {
    margin: 0;
    font-size: var(--font-size-xl);
    font-weight: 600;
    color: var(--color-text);
}

.ie-export__hint {
    font-size: var(--font-size-xs);
    color: var(--color-text-muted);
}

.ie-export__row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--space-4);
}

.ie-format {
    display: inline-flex;
}

.ie-quality {
    display: flex;
    align-items: center;
    gap: var(--space-2);
    flex: 1 1 auto;
    min-width: 180px;
}

.ie-quality__label {
    font-size: var(--font-size-sm);
    color: var(--color-text);
    white-space: nowrap;
}

.ie-quality__input {
    flex: 1 1 auto;
    min-width: 80px;
    accent-color: var(--color-primary);
    cursor: pointer;
}

.ie-quality__input:focus-visible {
    outline: none;
    box-shadow: var(--focus-ring);
}

.ie-quality__input:disabled {
    opacity: 0.5;
    cursor: not-allowed;
}

.ie-quality__value {
    min-width: 5ch;
    text-align: right;
    font-family: var(--font-mono);
    font-size: var(--font-size-sm);
    color: var(--color-text);
}

.ie-bgc {
    display: flex;
    align-items: center;
    gap: var(--space-2);
    margin-top: var(--space-3);
}

.ie-bgc__label {
    font-size: var(--font-size-sm);
    color: var(--color-text);
}

.ie-bgc__input {
    inline-size: 40px;
    block-size: 40px;
    padding: 2px;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    background: var(--color-bg-card);
    cursor: pointer;
}

.ie-bgc__input:focus-visible {
    outline: none;
    box-shadow: var(--focus-ring);
}

/* Live output preview (the real encoded blob on a checkerboard). */
.ie-export-preview {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--space-2);
    margin: var(--space-4) 0 0;
}

.ie-export-preview__img {
    display: block;
    max-height: 160px;
    max-width: 100%;
    padding: var(--space-1);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    /* Checkerboard so transparency in the output is visible (12px cells, */
    /* same texture constant as the preview well). */
    background-image: repeating-conic-gradient(
        var(--color-border) 0% 25%,
        var(--color-bg-alt) 0% 50%
    );
    background-size: 12px 12px;
}

.ie-export-preview__caption {
    font-size: var(--font-size-xs);
    color: var(--color-text-muted);
}

/* Live size estimate (the hero) */
.ie-estimate {
    display: inline-flex;
    align-items: center;
    margin-top: var(--space-4);
    padding: var(--space-4) var(--space-6);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-lg);
    background: var(--color-bg-alt);
    font-family: var(--font-mono);
    font-size: var(--font-size-2xl);
    font-weight: 600;
    color: var(--color-primary-text);
    min-width: 12ch;
    text-align: center;
}

.ie-export__actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-3);
    margin-top: var(--space-4);
}

.ie-export__actions .ie-btn-primary {
    flex: 1 1 auto;
}

/* ========================================
   Notes (license + privacy)
   ======================================== */
.ie-notes__license,
.ie-notes__privacy {
    display: flex;
    align-items: flex-start;
    gap: var(--space-2);
    margin-top: var(--space-4);
    font-size: var(--font-size-xs);
    color: var(--color-text-muted);
    line-height: var(--line-height-normal);
}

.ie-notes__privacy svg {
    flex: 0 0 auto;
    margin-top: 2px;
}

/* ========================================
   FAQ (shared shell in main.css; summary/answer typography here)
   ======================================== */
.ie-container .ie-faq-question {
    font-size: var(--font-size-base);
    font-weight: 600;
    color: var(--color-text);
    cursor: pointer;
    transition: color var(--transition-fast);
}

.ie-container .ie-faq-question:hover {
    color: var(--color-primary-text);
}

.ie-container .ie-faq-question:focus-visible {
    outline: none;
    box-shadow: var(--focus-ring);
    border-radius: var(--radius-sm);
}

.ie-container .ie-faq-answer {
    font-size: var(--font-size-sm);
    color: var(--color-text-muted);
    line-height: var(--line-height-normal);
    margin: var(--space-3) 0 0;
}

/* ========================================
   Toast
   ======================================== */
.ie-toast {
    position: fixed;
    bottom: var(--space-6);
    left: 50%;
    transform: translateX(-50%);
    z-index: 100;
    display: flex;
    align-items: center;
    gap: var(--space-2);
    max-width: min(90vw, 420px);
    padding: var(--space-3) var(--space-4);
    border-radius: var(--radius-md);
    background: var(--color-bg-card);
    color: var(--color-text);
    box-shadow: var(--shadow-lg);
    font-size: var(--font-size-sm);
    transition: opacity var(--transition-base);
    white-space: normal;
    overflow-wrap: break-word;
}

.ie-toast--success {
    color: var(--color-success-text);
}

.ie-toast--error {
    color: var(--color-error-text);
}

/* ========================================
   Confirm dialog (replace image / start over)
   ======================================== */
.ie-confirm {
    position: fixed;
    inset: 0;
    z-index: 100;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: var(--space-4);
    background: var(--color-overlay);
}

.ie-confirm__card {
    display: grid;
    gap: var(--space-4);
    justify-items: center;
    width: 100%;
    max-width: 420px;
    padding: var(--space-6);
    text-align: center;
    background: var(--color-bg-card);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-xl);
}

.ie-confirm__title {
    margin: 0;
    font-size: var(--font-size-2xl);
    font-weight: 600;
    color: var(--color-text);
}

.ie-confirm__desc {
    margin: 0;
    font-size: var(--font-size-base);
    color: var(--color-text-muted);
}

.ie-confirm__row {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--space-3);
    width: 100%;
}

.ie-confirm__row .ie-btn-secondary,
.ie-confirm__row .ie-btn-primary {
    flex: 1 1 auto;
    min-width: 120px;
}

/* ========================================
   Pressed (active) states
   ======================================== */
.ie-preview__well:active,
.ie-btn-primary:active:not(:disabled),
.ie-btn-secondary:active:not(:disabled),
.ie-btn-icon:active,
.ie-chip:active,
.ie-model-strip__retry:active {
    transform: scale(0.98);
}

/* ========================================
   Keyframes
   ======================================== */
@keyframes ie-spin {
    to {
        transform: rotate(360deg);
    }
}

@keyframes ie-slide {
    0% {
        margin-left: -40%;
    }
    100% {
        margin-left: 100%;
    }
}

/* ========================================
   Reduced motion
   ======================================== */
@media (prefers-reduced-motion: reduce) {
    .ie-preview__well,
    .ie-editor,
    .ie-btn-primary,
    .ie-btn-secondary,
    .ie-btn-icon,
    .ie-chip,
    .ie-model-strip__progress-bar,
    .ie-toast,
    .ie-seg span {
        transition: none;
    }

    .ie-preview__well:active,
    .ie-btn-primary:active:not(:disabled),
    .ie-btn-secondary:active:not(:disabled),
    .ie-btn-icon:active,
    .ie-chip:active,
    .ie-model-strip__retry:active {
        transform: none;
    }

    .ie-preview__spinner,
    .ie-model-strip__spinner {
        animation: none;
    }

    .ie-model-strip__progress-bar--indeterminate {
        animation: none;
        width: 30%;
    }
}

/* ========================================
   Mobile
   ======================================== */
@media (max-width: 767px) {
    .ie-container {
        padding: var(--space-3);
    }

    .ie-editor {
        padding: var(--space-3);
    }

    .ie-preview__well {
        min-height: 180px;
    }

    .ie-toolbar {
        display: grid;
        grid-template-columns: 1fr 1fr;
        row-gap: var(--space-2);
    }

    /* Groups wrap inside their grid cell so long (pl/es) labels never push
       the toolbar past the viewport (i18n-safe layout). */
    .ie-toolbar__group {
        min-width: 0;
        flex-wrap: wrap;
    }

    .ie-toolbar__divider {
        display: none;
    }

    .ie-angle {
        justify-self: start;
    }

    .ie-cropbar {
        flex-direction: column;
        align-items: stretch;
    }

    .ie-cropbar__actions {
        justify-content: stretch;
    }

    .ie-cropbar__actions .ie-btn-primary,
    .ie-cropbar__actions .ie-btn-secondary {
        flex: 1 1 auto;
    }

    .ie-export {
        padding: var(--space-3);
    }

    .ie-export__row {
        flex-direction: column;
        align-items: stretch;
    }

    .ie-export__actions .ie-btn-primary,
    .ie-export__actions .ie-btn-secondary {
        flex: 1 1 100%;
    }

    /* 16px touch handles (geometry constant) */
    .ie-crop__handle {
        width: 16px;
        height: 16px;
    }

    .ie-crop__handle[data-dir='nw'] { top: -9px; left: -9px; }
    .ie-crop__handle[data-dir='n'] { top: -9px; }
    .ie-crop__handle[data-dir='ne'] { top: -9px; right: -9px; }
    .ie-crop__handle[data-dir='e'] { right: -9px; }
    .ie-crop__handle[data-dir='se'] { bottom: -9px; right: -9px; }
    .ie-crop__handle[data-dir='s'] { bottom: -9px; }
    .ie-crop__handle[data-dir='sw'] { bottom: -9px; left: -9px; }
    .ie-crop__handle[data-dir='w'] { left: -9px; }
}
