.image-open {
    position: relative;
    display: block;
    max-width: 100%;
    margin: 1.5rem auto;
    padding: 0;
    border: 0;
    background: transparent;
    cursor: zoom-in;
}
.image-open img {
    display: block;
    border-radius: 8px;
}
.image-hint {
    position: absolute;
    right: .5rem;
    bottom: .5rem;
    padding: .2rem .5rem;
    border-radius: 4px;
    color: white;
    background: #000b;
    font-size: .75rem;
}
.image-dialog {
    width: min(72rem, calc(100% - 2rem));
    max-width: none;
    max-height: 92dvh;
    padding: 1rem;
    border: 1px solid var(--border);
    border-radius: 12px;
    color: var(--text);
    background: var(--surface);
}
.image-dialog[open] {
    display: flex;
    flex-direction: column;
}
.image-dialog::backdrop {
    background: #000b;
}
.image-toolbar, .image-actions {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: .5rem 1rem;
    flex-shrink: 0;
}
.image-toolbar {
    justify-content: space-between;
    margin-bottom: .6rem;
}
.image-toolbar h2 {
    margin: 0;
    font-size: 1.1rem;
}
.image-actions {
    margin-bottom: .75rem;
    font-size: .85rem;
}
.image-dialog button {
    min-height: 44px;
}
.image-viewport {
    min-height: 3rem;
    overflow: auto;
    overscroll-behavior: contain;
    background: var(--bg);
    border-radius: 6px;
}
.image-viewport:focus-visible {
    outline: 2px solid var(--accent);
    outline-offset: -2px;
}
.image-viewport img {
    display: block;
    width: auto;
    max-width: 100%;
    max-height: 65dvh;
    object-fit: contain;
    margin: auto;
}
.image-dialog[data-zoomed="true"] img {
    max-width: none;
    max-height: none;
}
.image-caption, .image-status {
    color: var(--muted);
    font-size: .85rem;
    flex-shrink: 0;
    margin: .6rem 0 0;
}
.image-status:empty {
    display: none;
}
.image-caption {
    max-height: 5rem;
    overflow: auto;
}
@media (prefers-reduced-motion: no-preference) {
    .image-dialog[open] {
        animation: rf-disclose .18s ease-out;
    }
    .image-dialog[open]::backdrop {
        animation: rf-fade-in .18s ease-out;
    }
    .image-dialog[open].is-closing {
        animation: rf-image-close .16s ease-in forwards;
    }
    .image-dialog[open].is-closing::backdrop {
        animation: rf-fade-out .16s ease-in forwards;
    }
}
@keyframes rf-image-close {
    from { opacity: 1; transform: translateY(0); }
    to { opacity: 0; transform: translateY(-4px); }
}
