/* Local SVG icons; currentColor follows the shared theme. */
[data-icon="search"], [data-action-icon="search"] { --lw-icon: url("../icons/search.svg"); }
[data-icon="plus"], [data-action-icon="plus"] { --lw-icon: url("../icons/plus.svg"); }
[data-icon="file-plus"], [data-action-icon="file-plus"] { --lw-icon: url("../icons/file-plus.svg"); }
[data-icon="upload"], [data-action-icon="upload"] { --lw-icon: url("../icons/upload.svg"); }
[data-icon="download"], [data-action-icon="download"] { --lw-icon: url("../icons/download.svg"); }
[data-icon="copy"], [data-action-icon="copy"] { --lw-icon: url("../icons/copy.svg"); }
[data-icon="edit"], [data-action-icon="edit"] { --lw-icon: url("../icons/edit.svg"); }
[data-icon="refresh"], [data-action-icon="refresh"] { --lw-icon: url("../icons/refresh.svg"); }
[data-icon="replace"], [data-action-icon="replace"] { --lw-icon: url("../icons/replace.svg"); }
[data-icon="star"], [data-action-icon="star"] { --lw-icon: url("../icons/star.svg"); }
[data-icon="more"], [data-action-icon="more"] { --lw-icon: url("../icons/more.svg"); }
[data-icon="restore"], [data-action-icon="restore"] { --lw-icon: url("../icons/restore.svg"); }
[data-icon="trash"], [data-action-icon="trash"] { --lw-icon: url("../icons/trash.svg"); }
[data-icon="close"], [data-action-icon="close"] { --lw-icon: url("../icons/close.svg"); }
[data-icon="arrow-right"], [data-action-icon="arrow-right"] { --lw-icon: url("../icons/arrow-right.svg"); }
[data-icon="arrow-up-right"], [data-action-icon="arrow-up-right"] { --lw-icon: url("../icons/arrow-up-right.svg"); }
[data-icon="file"], [data-action-icon="file"] { --lw-icon: url("../icons/file.svg"); }
[data-icon="folder"], [data-action-icon="folder"] { --lw-icon: url("../icons/folder.svg"); }
[data-icon="image"], [data-action-icon="image"] { --lw-icon: url("../icons/image.svg"); }
[data-icon="chart"], [data-action-icon="chart"] { --lw-icon: url("../icons/chart.svg"); }
[data-icon="grid"], [data-action-icon="grid"] { --lw-icon: url("../icons/grid.svg"); }
[data-icon="globe"], [data-action-icon="globe"] { --lw-icon: url("../icons/globe.svg"); }
[data-icon="settings"], [data-action-icon="settings"] { --lw-icon: url("../icons/settings.svg"); }
[data-icon="save"], [data-action-icon="save"] { --lw-icon: url("../icons/save.svg"); }
[data-icon="lock"], [data-action-icon="lock"] { --lw-icon: url("../icons/lock.svg"); }
[data-icon="mail"], [data-action-icon="mail"] { --lw-icon: url("../icons/mail.svg"); }
[data-icon="sparkles"], [data-action-icon="sparkles"] { --lw-icon: url("../icons/sparkles.svg"); }
[data-icon="check"], [data-action-icon="check"] { --lw-icon: url("../icons/check.svg"); }
[data-icon="warning"], [data-action-icon="warning"] { --lw-icon: url("../icons/warning.svg"); }
[data-icon="link"], [data-action-icon="link"] { --lw-icon: url("../icons/link.svg"); }
[data-icon="sun"], [data-action-icon="sun"] { --lw-icon: url("../icons/sun.svg"); }
[data-icon="moon"], [data-action-icon="moon"] { --lw-icon: url("../icons/moon.svg"); }
[data-icon="compress"], [data-action-icon="compress"] { --lw-icon: url("../icons/compress.svg"); }
[data-icon="scissors"], [data-action-icon="scissors"] { --lw-icon: url("../icons/scissors.svg"); }
[data-icon="book"], [data-action-icon="book"] { --lw-icon: url("../icons/book.svg"); }
[data-icon="info"], [data-action-icon="info"] { --lw-icon: url("../icons/info.svg"); }
[data-icon="news"], [data-action-icon="news"] { --lw-icon: url("../icons/news.svg"); }
.lw-ui .lw-icon { display: inline-block; width: 18px; height: 18px; flex: 0 0 18px; vertical-align: -3px; background-color: currentColor; -webkit-mask: var(--lw-icon) center / contain no-repeat; mask: var(--lw-icon) center / contain no-repeat; pointer-events: none; line-height: 0; }
.lw-ui [data-action-icon] { display: inline-flex; align-items: center; justify-content: center; gap: 7px; }
.lw-ui [data-action-icon]::before { content: ''; display: inline-block; width: 17px; height: 17px; flex: 0 0 17px; background-color: currentColor; -webkit-mask: var(--lw-icon) center / contain no-repeat; mask: var(--lw-icon) center / contain no-repeat; pointer-events: none; }
.lw-ui [data-action-icon][aria-busy="true"]::before { --lw-icon: url('../icons/refresh.svg'); animation: lw-icon-spin 1s linear infinite; }
.lw-ui [data-action-icon][aria-busy="true"] { cursor: progress; }
.lw-ui :is(h1,h2,h3,label,button,a) > .lw-icon { margin-inline-end: 4px; }
.lw-ui :is(.button,.tool-arrow,.tool-icon-wrap,.panel-icon,.icon-button) > .lw-icon { margin: 0; }
.lw-ui .search > .lw-icon { position: absolute; top: 50%; left: 14px; transform: translateY(-50%); width: 18px; height: 18px; color: var(--ws-muted); margin: 0; }
.lw-ui .search input { padding-left: 42px; padding-right: 12px; min-height: 46px; }
.lw-ui .search:focus-within > .lw-icon { color: var(--ws-accent); }
.lw-ui input[type="search"]::-webkit-search-cancel-button { -webkit-appearance: none; width: 16px; height: 16px; background-color: var(--ws-muted); -webkit-mask: url('../icons/close.svg') center / contain no-repeat; cursor: pointer; }
.lw-ui .panel-icon { width: 38px; height: 38px; }
.lw-ui .panel-icon > .lw-icon { width: 20px; height: 20px; }
.lw-ui .dropzone > .lw-icon:first-child { width: 30px; height: 30px; flex-basis: 30px; margin: 0 0 6px; color: var(--ws-accent); }
.lw-ui .upload-icon { display: inline-grid; place-items: center; font-size: 0; line-height: 1; }
.lw-ui .upload-icon > .lw-icon { width: 40px; height: 40px; margin: 0; color: var(--ws-accent); }
.lw-ui .tool-icon-wrap > .lw-icon { width: 21px; height: 21px; }
.lw-ui .config-icon > .lw-icon { width: 22px; height: 22px; }
.lw-ui .rename-shortcut { min-height: 36px; gap: 4px; text-decoration: none; padding: 3px 6px; }
.lw-ui .rename-shortcut::before { width: 13px; height: 13px; flex-basis: 13px; }
.lw-ui .rename-shortcut:hover { text-decoration: underline; text-underline-offset: 3px; }
.lw-ui .config-title-row { align-items: center; }
.lw-ui .favorite-button { display: inline-grid; place-items: center; width: 40px; min-height: 40px; padding: 8px; border-radius: 8px; }
.lw-ui .favorite-button:hover { background: var(--ws-raised); }
.lw-ui .favorite-button[aria-pressed="true"] { background: var(--ws-raised); color: var(--ws-accent); }
.lw-ui .favorite-button > .lw-icon { width: 20px; height: 20px; margin: 0; }
.lw-ui .filter-chip { min-height: 34px; }
.lw-ui .filter-chip::before { width: 14px; height: 14px; flex-basis: 14px; }
.lw-ui .more-menu summary { min-width: 40px; min-height: 40px; padding: 8px; display: grid; place-items: center; }
.lw-ui .more-menu summary::-webkit-details-marker { display: none; }
.lw-ui .more-menu summary::marker { content: ''; }
.lw-ui .menu-items [data-action-icon] { justify-content: flex-start; gap: 10px; min-height: 42px; }
.lw-ui .icon-button { min-width: 40px; min-height: 40px; }
.lw-ui .lw-header .lw-theme-button::before { content: ''; display: block; width: 19px; height: 19px; background: currentColor; -webkit-mask: url('../icons/sun.svg') center / contain no-repeat; mask: url('../icons/sun.svg') center / contain no-repeat; }
[data-theme="light"] .lw-ui .lw-header .lw-theme-button::before { -webkit-mask-image: url('../icons/moon.svg'); mask-image: url('../icons/moon.svg'); }
/* Dynamic file/results icons remain consistent when pages replace their text. */
.lw-ui :is(.file-icon,.stat-icon,.watch-icon,.login-hint-icon) { display: inline-grid; place-items: center; font-size: 0 !important; background: var(--ws-raised) !important; color: var(--ws-accent); flex-shrink: 0; }
.lw-ui :is(.file-icon,.stat-icon,.watch-icon,.login-hint-icon) > .lw-icon { display: none; }
.lw-ui :is(.file-icon,.stat-icon,.watch-icon,.login-hint-icon)::before { content: ''; width: 22px; height: 22px; background-color: currentColor; -webkit-mask: url('../icons/file.svg') center / contain no-repeat; mask: url('../icons/file.svg') center / contain no-repeat; }
.lw-ui .stat-icon::before, .lw-ui .watch-icon::before { -webkit-mask-image: url('../icons/chart.svg'); mask-image: url('../icons/chart.svg'); }
.lw-ui .login-hint-icon::before { width: 16px; height: 16px; -webkit-mask-image: url('../icons/lock.svg'); mask-image: url('../icons/lock.svg'); }
.lw-ui .file-remove { font-size: 0; display: inline-grid; place-items: center; min-width: 36px; min-height: 36px; padding: 8px; }
.lw-ui .file-remove > .lw-icon { display: none; }
.lw-ui .file-remove::before { content: ''; width: 16px; height: 16px; background: currentColor; -webkit-mask: url('../icons/close.svg') center / contain no-repeat; mask: url('../icons/close.svg') center / contain no-repeat; }
.lw-ui :is(#refreshIcon,#modelRefreshIcon) { font-size: 0; display: inline-grid !important; place-items: center; width: 17px; height: 17px; flex: 0 0 17px; vertical-align: -3px; }
.lw-ui :is(#refreshIcon,#modelRefreshIcon) > .lw-icon { display: none; }
.lw-ui :is(#refreshIcon,#modelRefreshIcon)::before { content: ''; display: block; width: 17px; height: 17px; background: currentColor; -webkit-mask: url('../icons/refresh.svg') center / contain no-repeat; mask: url('../icons/refresh.svg') center / contain no-repeat; }
@keyframes lw-icon-spin { to { transform: rotate(360deg); } }
@media (max-width: 760px) {
    .lw-ui .card-bottom { display: grid; grid-template-columns: minmax(0,1fr) 36px; gap: 8px; }
    .lw-ui .card-actions { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 5px; }
    .lw-ui .card-actions .button { padding: 8px 4px; font-size: 11px; gap: 4px; min-height: 42px; }
    .lw-ui .card-actions [data-action-icon]::before { width: 14px; height: 14px; flex-basis: 14px; }
    .lw-ui .more-menu summary { min-width: 36px; min-height: 42px; }
    .lw-ui .new-config-button, .lw-ui #uploadButton { min-height: 46px; }
    .lw-ui .card-info h3 { line-height: 1.6; }
}
@media (prefers-reduced-motion: reduce) { .lw-ui [aria-busy="true"]::before { animation: none; } }
@media (max-width: 360px) {
    .lw-ui .card-actions { grid-template-columns: repeat(2,minmax(0,1fr)); }
    .lw-ui .card-actions > .button:first-child { grid-column: 1 / -1; }
    .lw-ui .card-bottom { align-items: start; }
}
.lw-ui .favorite-button[aria-pressed="true"] .lw-icon,
.lw-ui .filter-chip[aria-pressed="true"]::before { --lw-icon: url('../icons/star-filled.svg'); }
.lw-ui .news-grid { grid-template-columns: repeat(auto-fit,minmax(min(100%,300px),1fr)); }
.lw-ui .alert-header { gap: 12px; }
.lw-ui .alert-header .toggle-switch { flex-shrink: 0; }
