/* 자동 생성 — .tools/landing/src/zipmania/appcss.php (앱 1.0.2 css 그대로, 범위만 좁힘). 직접 고치지 말 것 */
.zm-win {
  --font-family: "Segoe UI", system-ui, -apple-system, sans-serif;
  --font-size: 12px;
  --bg: #ffffff;
  --surface: #f5f5f7;
  --border: #e0e0e0;
  --text: #1a1a1a;
  --text-muted: #888888;
  --btn-bg: #ffffff;
  --accent: #3b82f6;
  --accent-contrast: #ffffff;
  --icon-archive: #3b82f6;
  --icon-glyph: #ffffff;
  --scroll-thumb: #dcdcdc;
  --scroll-thumb-hover: #b4b4b4;
  --window-border-active: #3d84dd;
  --window-border-inactive: #6d6d6d;
  --overlay-bg: rgb(0 0 0 / 45%);
  --dialog-shadow: 0 8px 30px rgb(0 0 0 / 30%);
  --toast-shadow: 0 10px 34px rgb(0 0 0 / 28%);
  --preview-bg: #000000;
  --tree-bg: #ffffff;
  --progress-success: #2e7d32;
  --ok-bg: #e6f4ea;
  --ok-text: #1e6b34;
  --warn-bg: #fdf3e0;
  --warn-text: #8a5a12;
  --alert-bg: #fde8e8;
  --alert-text: #9b1c1c;
  --neutral-bg: #f2f2f2;
  --neutral-text: #666666;
  --nav-on-bg: #ddeefc;
  --nav-on-border: #a8cce6;
  
  --toolbar-deep: #2563eb;
  --toolbar-mid: var(--accent);
  --toolbar-shallow: #60a5fa;
  --toolbar-foam: #bfdbfe;
  --toolbar-ink: #1e3a5f;
  --toolbar-wave: url(icons/toolbar-wave.svg);
  --toolbar-bg: var(--toolbar-mid);
  --toolbar-layers: 
    var(--toolbar-wave),
    radial-gradient(ellipse at 12% -30%, rgb(255 255 255 / 45%) 0%, rgb(255 255 255 / 0%) 60%),
    linear-gradient(180deg, var(--toolbar-deep) 0%, var(--toolbar-mid) 48%, var(--toolbar-shallow) 100%);
  --toolbar-edge: var(--toolbar-foam);
  --toolbar-inset: none;
  --toolbar-padding: 8px 10px 10px;
  --toolbar-btn-text: #ffffff;
  --toolbar-btn-shadow: 0 1px 2px rgb(15 23 42 / 45%);
  --toolbar-btn-icon: #ffffff;
  --toolbar-btn-icon-filter: drop-shadow(0 1px 1.5px rgb(15 23 42 / 40%));
  --toolbar-btn-hover-bg: rgb(255 255 255 / 22%);
  --toolbar-btn-hover-border: rgb(255 255 255 / 55%);
  --toolbar-btn-on-bg: rgb(255 255 255 / 92%);
  --toolbar-btn-on-border: #ffffff;
  --toolbar-btn-on-text: var(--toolbar-ink);
  --toolbar-btn-on-icon: var(--toolbar-deep);
  --toolbar-btn-on-shift: translateY(1px);
  --toolbar-btn-ink: var(--toolbar-ink);
  --toolbar-divider: rgb(255 255 255 / 40%);
  
  --skin-app-background: none;
  --skin-toolbar-background: none;
  --skin-sidebar-background: none;
  --skin-content-background: none;
  --skin-empty-background: none;
  --skin-dialog-background: none;
  --skin-background-size: cover;
  --skin-background-position: center;
}
/* style.css */
.zm-win * {box-sizing: border-box; margin: 0; padding: 0;}
.zm-win .zm-app {height: 100%;}
.zm-win {font-family: var(--font-family); font-size: var(--font-size); color: var(--text); background: var(--bg); line-height: 1.4;}
.zm-win button, .zm-win input, .zm-win select, .zm-win textarea {font-family: inherit; font-size: inherit; color: inherit;}
.zm-win .zm-app {display: flex; flex-direction: column; background: var(--bg);}
.zm-win .hidden {display: none;}
.zm-win h2, .zm-win h3 {font-size: inherit; font-weight: 600;}
.zm-win hr {border: none; border-top: 1px solid var(--border);}
.zm-win .muted {color: var(--text-muted);}
.zm-win .btn {padding: 7px 14px; text-align: center; border: 1px solid var(--border); border-radius: 8px; background: var(--btn-bg); color: var(--text); cursor: default; transition: background 120ms ease, border-color 120ms ease;}
.zm-win .btn:hover:not(:disabled) {border-color: var(--text-muted);}
.zm-win .btn.primary {background: var(--accent); border-color: var(--accent); color: var(--accent-contrast); font-weight: 600;}
.zm-win .btn.primary:hover:not(:disabled) {border-color: var(--accent); filter: brightness(1.08);}
.zm-win .btn:disabled {opacity: 0.5;}
.zm-win input[type=text], .zm-win input[type=password], .zm-win input[type=number], .zm-win textarea, .zm-win select {padding: 6px 10px; border: 1px solid var(--border); border-radius: 8px; background: var(--btn-bg); color: var(--text); transition: border-color 120ms ease;}
.zm-win input:hover:not(:disabled), .zm-win select:hover:not(:disabled), .zm-win textarea:hover:not(:disabled) {border-color: var(--text-muted);}
.zm-win input:focus, .zm-win select:focus, .zm-win textarea:focus {border-color: var(--accent); outline: none;}
.zm-win input:disabled, .zm-win select:disabled, .zm-win textarea:disabled {opacity: 0.5;}
.zm-win select {height: 32px; cursor: default;}
.zm-win[dir="rtl"] select {padding-right: 30px;}
.zm-win .check {display: flex; align-items: center; gap: 8px; color: var(--text); cursor: default; line-height: 1.4;}
.zm-win input[type=checkbox], .zm-win input[type=radio] {width: 16px; height: 16px; flex-shrink: 0; margin: 0; padding: 0; border: 1px solid var(--text-muted); border-radius: 4px; background: var(--btn-bg); color: var(--accent-contrast); transition: background 120ms ease, border-color 120ms ease;}
.zm-win input[type=radio] {border-radius: 8px; color: var(--btn-bg);}
.zm-win input[type=checkbox]:checked, .zm-win input[type=radio]:checked {background: var(--accent); border-color: var(--accent);}
.zm-win input[type=checkbox]:disabled, .zm-win input[type=radio]:disabled {opacity: 0.5;}
.zm-win .error {color: var(--alert-text); background: var(--alert-bg); padding: 8px 12px; border-radius: 6px;}
/* job.css */
.zm-win .job-view {flex: 1; min-height: 0; display: flex; flex-direction: column; align-items: stretch; gap: 10px; padding: 16px 18px; overflow: hidden;}
.zm-win .job-view .batch-of {margin-inline-start: auto; padding-inline-start: 10px; font-size: 12px; color: var(--text-muted); white-space: nowrap;}
.zm-win .job-view .bar {height: 8px; border-radius: 999px; background: var(--border); overflow: hidden;}
.zm-win .job-view .fill {height: 100%; width: 0; border-radius: inherit; background: var(--accent); transition: width 0.2s ease;}
.zm-win .job-view .fill.warn {background: color-mix(in srgb, var(--warn-text) 55%, var(--warn-bg));}
.zm-win .job-view .fill.cancel {background: var(--text-muted);}
.zm-win .job-view .fill.err {background: color-mix(in srgb, var(--alert-text) 55%, var(--alert-bg));}
.zm-win .job-view .job-meta {display: flex; align-items: baseline; flex-wrap: wrap; gap: 4px 10px; font-size: 12px; color: var(--text-muted);}
.zm-win .job-view .job-meta .bytes {margin-inline-end: auto;}
.zm-win .job-view .job-meta .pct {font-size: 13px; font-weight: 600; color: var(--text);}
.zm-win .job-view .job-meta .failed {color: var(--alert-text);}
.zm-win .job-view .job-log {flex: 1 1 auto; min-height: 90px; overflow-y: auto; overflow-x: hidden; padding: 8px 10px; border: 1px solid var(--border); border-radius: 6px; background: var(--surface); color: var(--text-muted); font-size: 12px; line-height: 1.6;}
.zm-win .job-view .log-line {white-space: pre-wrap; word-break: break-all;}
.zm-win .job-view .log-line.now {overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--text);}
.zm-win .job-view .result {display: flex; align-items: center; gap: 9px; padding: 11px 14px; border-radius: 8px; min-height: 42px;}
.zm-win .job-view .result .r-ic {flex: none; width: 16px; text-align: center; font-size: 14px; line-height: 1;}
.zm-win .job-view .result .r-msg {min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
.zm-win .job-view .r-ic.spin {width: 14px; height: 14px; border-radius: 50%; border: 2px solid var(--border); border-top-color: var(--accent); animation: job-spin 800ms steps(24) infinite;}
@keyframes job-spin {
  to { transform: rotate(360deg); }
}
.zm-win .job-view .result.busy {background: var(--surface); color: var(--text);}
.zm-win .job-view .result.ok {background: var(--ok-bg); color: var(--ok-text);}
.zm-win .job-view .result.warn {background: var(--warn-bg); color: var(--warn-text);}
.zm-win .job-view .result.cancel {background: var(--surface); color: var(--text-muted);}
.zm-win .job-view .result.err {background: var(--alert-bg); color: var(--alert-text);}
.zm-win .job-view .opts {display: flex; gap: 14px;}
.zm-win .job-view .opts.hidden {display: none;}
.zm-win .job-view .check.sm {color: var(--text-muted);}
.zm-win .job-view .job-actions {display: flex; justify-content: flex-end; gap: 8px;}
.zm-win .job-view .start-error {padding: 8px 12px; border-radius: 6px; background: var(--alert-bg); color: var(--alert-text);}
.zm-win .job-view .start-error.hidden {display: none;}
/* main.css */
.zm-main .zm-app {position: relative; height: 100%; overflow: hidden;}
.zm-main .main {flex: 1; display: flex; flex-direction: column; overflow: hidden; min-height: 0;}
.zm-main .toolbar {display: flex; align-items: stretch; gap: 2px; padding: var(--toolbar-padding); border-bottom: 1px solid var(--toolbar-edge); background-color: var(--toolbar-bg); background-image: var(--toolbar-layers); background-size: auto 14px, auto, auto; background-repeat: repeat-x, no-repeat, no-repeat; background-position: left bottom, center, center; box-shadow: var(--toolbar-inset);}
.zm-main .toolbar .group {display: flex; align-items: stretch; gap: 2px;}
.zm-main .toolbar .spacer {flex: 1;}
.zm-main .toolbar .divider {width: 1px; align-self: stretch; margin: 4px 6px; background: var(--toolbar-divider);}
.zm-main .tbtn {display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; min-width: 58px; padding: 6px 10px; border: 1px solid transparent; border-radius: 6px; background: transparent; color: var(--toolbar-btn-text); text-shadow: var(--toolbar-btn-shadow); cursor: default; line-height: 1; font-size: 12px; white-space: nowrap; transition: background 120ms ease, border-color 120ms ease;}
.zm-main .tbtn .ic {display: block; width: 26px; height: 26px; color: var(--toolbar-btn-icon); filter: var(--toolbar-btn-icon-filter);}
.zm-main .tbtn:hover:not(:disabled) {background: var(--toolbar-btn-hover-bg); border-color: var(--toolbar-btn-hover-border);}
.zm-main .tbtn:active:not(:disabled), .zm-main .tbtn.active {background: var(--toolbar-btn-on-bg); border-color: var(--toolbar-btn-on-border); color: var(--toolbar-btn-on-text); text-shadow: none; transform: var(--toolbar-btn-on-shift);}
.zm-main .tbtn:active:not(:disabled) .ic, .zm-main .tbtn.active .ic {color: var(--toolbar-btn-on-icon); filter: none;}
.zm-main .tbtn:disabled {opacity: 0.4;}
.zm-main .alert {display: flex; align-items: center; gap: 8px; padding: 8px 12px; background: var(--alert-bg); color: var(--alert-text); border-bottom: 1px solid var(--border);}
.zm-main .alert.hidden {display: none;}
.zm-main .alert-msg {flex: 1;}
.zm-main .alert-close, .zm-main .r-close, .zm-main .assoc-banner .close, .zm-main .rep-card .x {border: none; background: transparent; color: inherit; cursor: default; padding: 2px 6px; line-height: 1;}
.zm-main .assoc-banner {display: flex; align-items: center; gap: 8px; padding: 6px 12px; background: var(--warn-bg); color: var(--warn-text); border-bottom: 1px solid var(--border);}
.zm-main .assoc-banner.hidden {display: none;}
.zm-main .assoc-banner .msg {flex: 1; text-align: start; border: none; background: transparent; color: inherit; padding: 2px 0; cursor: default;}
.zm-main .assoc-banner .msg:hover:not(:disabled) {text-decoration: underline;}
.zm-main .assoc-banner .msg:disabled {opacity: 0.7;}
.zm-main .workspace {flex: 1; display: flex; flex-direction: row; overflow: hidden; min-height: 0;}
.zm-main .workspace.hidden {display: none;}
.zm-main .left-pane {display: flex; flex-direction: column; flex-shrink: 0; width: 240px; overflow: hidden;}
.zm-main .folder-tree {flex: 1; min-height: 0; overflow: auto; background: var(--tree-bg);}
.zm-main .node {display: flex; align-items: center; gap: 4px; padding: 4px 8px 4px 6px; color: var(--text); cursor: default; white-space: nowrap; user-select: none;}
.zm-main .node:hover {background: var(--btn-bg);}
.zm-main .node.active {background: var(--accent); color: var(--accent-contrast);}
.zm-main .node .chev, .zm-main .node .chev-space {width: 18px; height: 18px; flex-shrink: 0; color: var(--text-muted);}
.zm-main .node.active .chev {color: var(--accent-contrast);}
.zm-main[dir="rtl"] .node .chev {transform: scaleX(-1);}
.zm-main .node .name {overflow: hidden; text-overflow: ellipsis;}
.zm-main .fi {width: 16px; height: 16px; flex-shrink: 0; object-fit: contain;}
.zm-main .preview {height: 180px; flex-shrink: 0; border-top: 1px solid var(--border); background: var(--preview-bg); display: flex; align-items: center; justify-content: center; overflow: hidden; padding: 6px;}
.zm-main .preview.hidden {display: none;}
.zm-main .preview img {max-width: 100%; max-height: 100%; object-fit: contain;}
.zm-main .preview img.hidden, .zm-main .preview .msg.hidden {display: none;}
.zm-main .preview .msg {font-size: 12px; color: var(--text-muted); text-align: center; padding: 0 8px;}
.zm-main .preview .msg.err {color: var(--alert-text);}
.zm-main .gutter {flex: 0 0 5px; cursor: col-resize; border-inline-start: 1px solid var(--border);}
.zm-main .gutter:hover, .zm-main .workspace.dragging .gutter {border-inline-start: 3px solid var(--accent);}
.zm-main .workspace.dragging {cursor: col-resize; user-select: none;}
.zm-main .file-table {flex: 1; display: flex; flex-direction: column; min-width: 0; min-height: 0; overflow: hidden;}
.zm-main .thead {flex-shrink: 0; overflow: hidden; padding-top: 2px; border-bottom: 1px solid var(--border); background: var(--surface);}
.zm-main .tbody {flex: 1; min-height: 0; overflow: auto; position: relative;}
.zm-main .file-table .row {display: grid; grid-template-columns: 280px 94px 110px 90px minmax(168px, 1fr); align-items: center; min-width: 742px;}
.zm-main .file-table .row.data {position: relative; border-bottom: 1px solid var(--border); cursor: default; user-select: none;}
.zm-main .file-table .row.data:hover {background: var(--btn-bg);}
.zm-main .file-table .row.data.selected {background: color-mix(in srgb, var(--accent) 22%, transparent);}
.zm-main .file-table .cell {padding: 0 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; line-height: 28px;}
.zm-main .file-table .cell.name {display: flex; align-items: center; gap: 6px;}
.zm-main .file-table .cell.name .fname {overflow: hidden; text-overflow: ellipsis;}
.zm-main .file-table .cell.num {text-align: end; font-variant-numeric: tabular-nums;}
.zm-main .file-table .row.data .cell.num, .zm-main .file-table .row.data .cell.kind, .zm-main .file-table .row.data .cell.date {color: var(--text-muted);}
.zm-main .file-table .cell.num, .zm-main .file-table .row.data .cell.date, .zm-main .status-bar .num, .zm-main .rrow .c-v {direction: ltr;}
.zm-main[dir="rtl"] .file-table .cell.num, .zm-main[dir="rtl"] .rrow .c-v {text-align: left;}
.zm-main[dir="rtl"] .file-table .row.data .cell.date {text-align: right;}
.zm-main .file-table .row.head .cell {position: relative; color: var(--text); overflow: visible;}
.zm-main .file-table .row.head .sortable:hover {color: var(--accent);}
.zm-main .sort-ind {position: absolute; top: 0; left: 50%; width: 5px; height: 5px; border: solid var(--text-muted); border-width: 0 1.2px 1.2px 0;}
.zm-main .sort-ind.hidden {display: none;}
.zm-main .sort-ind.up {transform: translateX(-50%) rotate(-135deg);}
.zm-main .sort-ind.down {transform: translateX(-50%) rotate(45deg);}
.zm-main .col-resizer {display: block; position: absolute; top: 0; bottom: 0; inset-inline-end: 0; width: 7px; cursor: col-resize; z-index: 3; border-inline-end: 1px solid var(--border);}
.zm-main .col-resizer:hover {border-inline-end: 3px solid var(--accent);}
.zm-main .vspacer {position: relative; min-width: 742px;}
.zm-main .vspacer.hidden {display: none;}
.zm-main .vrows {position: absolute; left: 0; right: 0; top: 0;}
.zm-main .marquee {position: absolute; z-index: 2; border: 1px solid var(--accent); background: color-mix(in srgb, var(--accent) 15%, transparent);}
.zm-main .marquee.hidden {display: none;}
.zm-main .empty-folder {padding: 24px; text-align: center; color: var(--text-muted);}
.zm-main .empty-folder.hidden {display: none;}
.zm-main .empty-state {flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; color: var(--text-muted); user-select: none;}
.zm-main .empty-state.hidden {display: none;}
.zm-main .empty-state .icon {width: 64px; height: 64px; color: var(--text-muted); opacity: 0.7;}
.zm-main .empty-state .title {font-size: 16px; color: var(--text); text-align: center;}
.zm-main .empty-state .hint {text-align: center;}
.zm-main .empty-state .actions {margin-top: 10px; display: flex; justify-content: center; gap: 12px;}
.zm-main .action {display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; width: 116px; padding: 16px 12px; border: 1px solid var(--border); border-radius: 8px; background: var(--btn-bg); color: var(--text); font-weight: 500; cursor: default;}
.zm-main .action .ic {display: block; width: 34px; height: 34px; color: var(--icon-archive);}
.zm-main .action:hover:not(:disabled) {border-color: var(--text-muted);}
.zm-main .action:disabled {opacity: 0.5;}
.zm-main .action:disabled .ic {color: var(--text-muted);}
.zm-main .progress-panel {padding: 8px 12px; border-top: 1px solid var(--border); background: var(--surface);}
.zm-main .progress-panel.hidden {display: none;}
.zm-main .progress-panel .top {display: flex; align-items: center; gap: 12px; margin-bottom: 6px;}
.zm-main .progress-panel .kind {font-size: 12px; font-weight: 600; color: var(--accent); min-width: 44px;}
.zm-main .progress-panel .pct {font-variant-numeric: tabular-nums; font-weight: 600; min-width: 42px;}
.zm-main .progress-panel .filename {flex: 1; color: var(--text-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
.zm-main .progress-panel .elapsed {font-variant-numeric: tabular-nums; font-size: 12px; color: var(--text-muted);}
.zm-main .bar {height: 8px; border-radius: 4px; background: var(--border); overflow: hidden;}
.zm-main .bar .fill {height: 100%; width: 0; background: var(--accent); transition: width 200ms ease;}
.zm-main .btn.small {padding: 5px 12px; font-size: 12px;}
.zm-main .result {display: flex; align-items: center; gap: 8px; padding: 8px 12px; border-top: 1px solid var(--border);}
.zm-main .result.hidden {display: none;}
.zm-main .result.err {background: var(--alert-bg); color: var(--alert-text);}
.zm-main .r-icon {font-size: 15px;}
.zm-main .r-msg {flex: 1;}
.zm-main .r-close {opacity: 0.75;}
.zm-main .r-close:hover {opacity: 1;}
.zm-main .toast-layer {position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; z-index: 50; pointer-events: none;}
.zm-main .toast-layer.hidden {display: none;}
.zm-main .toast {display: flex; align-items: center; gap: 10px; padding: 12px 16px; border-radius: 10px; font-size: 14px; max-width: 80%; box-shadow: var(--toast-shadow); pointer-events: auto;}
.zm-main .toast.ok {background: var(--ok-bg); color: var(--ok-text);}
.zm-main .toast.warn {background: var(--warn-bg); color: var(--warn-text);}
.zm-main .toast.cancel {background: var(--surface); color: var(--text-muted);}
.zm-main .toast.err {background: var(--alert-bg); color: var(--alert-text);}
.zm-main .status-bar {display: flex; justify-content: space-between; align-items: center; padding: 4px 12px; min-height: 26px; border-top: 1px solid var(--border); background: var(--surface); font-size: 12px; color: var(--text-muted);}
.zm-main .status-bar .left, .zm-main .status-bar .right {display: flex; align-items: center; gap: 6px;}
.zm-main .status-bar .dot {opacity: 0.5;}
.zm-main .status-bar .sel {color: var(--accent);}
.zm-main .overlay {position: absolute; inset: 0; z-index: 100; background: var(--overlay-bg); display: flex; align-items: center; justify-content: center;}
.zm-main .overlay.hidden {display: none;}
.zm-main .card {background: var(--bg); border: 1px solid var(--border); border-radius: 10px; box-shadow: var(--dialog-shadow); display: flex; flex-direction: column; min-height: 0;}
.zm-main .pw-card {width: 320px; padding: 20px;}
.zm-main .pw-card h2 {font-size: 16px; margin-bottom: 6px;}
.zm-main .pw-card .desc {margin-bottom: 12px; color: var(--text-muted);}
.zm-main .pw-card input {width: 100%; font-size: 14px;}
.zm-main .error-text {margin-top: 8px; font-size: 12px; color: var(--alert-text);}
.zm-main .error-text.hidden {display: none;}
.zm-main .card .actions {display: flex; justify-content: flex-end; gap: 8px; margin-top: 16px;}
.zm-main .rep-card {width: 720px; max-width: 96%; height: 78%; padding: 16px 18px;}
.zm-main .rep-card .head {display: flex; align-items: center; gap: 8px;}
.zm-main .rep-card h2 {flex: 1; font-size: 15px;}
.zm-main .rep-card .suffix {color: var(--ok-text); font-weight: 600;}
.zm-main .rep-card .suffix.err {color: var(--alert-text);}
.zm-main .rep-card .suffix.warn {color: var(--warn-text);}
.zm-main .rep-card .x {color: var(--text-muted); font-size: 14px;}
.zm-main .rep-card .msg {margin: 10px 0 8px;}
.zm-main .rep-card .bar {height: 16px; flex-shrink: 0;}
.zm-main .rep-card .bar .fill {background: var(--progress-success);}
.zm-main .rep-card .bar .fill.err {background: var(--alert-text);}
.zm-main .rep-card .bar .fill.warn {background: var(--warn-text);}
.zm-main .rep-card .cur {margin-top: 8px; font-size: 12px; color: var(--text-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-height: 40px;}
.zm-main .rep-card .cur.hidden {display: none;}
.zm-main .rep-card .hint {margin-top: 8px; font-size: 11.5px; color: var(--text-muted);}
.zm-main .rep-card .hint.hidden {display: none;}
.zm-main .table-wrap {margin-top: 8px; flex: 1; min-height: 0; display: flex; flex-direction: column; border: 1px solid var(--border); border-radius: 6px; overflow: hidden;}
.zm-main .table-wrap.hidden {display: none;}
.zm-main .rrow {display: grid; grid-template-columns: 64px minmax(120px, 1fr) 100px 100px; align-items: center; font-size: 12.5px; border-bottom: 1px solid var(--border);}
.zm-main .table-wrap.three .rrow {grid-template-columns: 64px minmax(120px, 1fr) 100px;}
.zm-main .table-wrap.three .rrow .c-v:last-child {display: none;}
.zm-main .rrow.rhead {background: var(--surface); font-weight: 600; color: var(--text-muted);}
.zm-main .rrow.rhead .c-st, .zm-main .rrow.rhead .c-name, .zm-main .rrow.rhead .c-v {padding: 6px 10px; text-align: start;}
.zm-main .rrow .c-st, .zm-main .rrow .c-name, .zm-main .rrow .c-v {padding: 4px 10px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
.zm-main .rrow .c-st {font-weight: 600;}
.zm-main .rrow .c-st.ok {color: var(--ok-text);}
.zm-main .rrow .c-st.err {color: var(--alert-text);}
.zm-main .rrow .c-st.warn {color: var(--warn-text);}
.zm-main .rrow .c-st.dim {color: var(--text-muted); font-weight: 400;}
.zm-main .rrow .c-v {text-align: end; font-variant-numeric: tabular-nums; color: var(--text-muted);}
.zm-main .rrow.bad {background: color-mix(in srgb, var(--alert-text) 10%, transparent);}
.zm-main .rbody {flex: 1; min-height: 0; overflow: auto; position: relative;}
.zm-main .rbody .vspacer {min-width: 0;}
.zm-main .rep-card .foot {display: flex; align-items: center; gap: 10px; margin-top: 12px;}
.zm-main .rep-card .foot .spacer {flex: 1;}
.zm-main .summary {display: flex; gap: 8px;}
.zm-main .chip {font-size: 12px; padding: 3px 8px; border: 1px solid var(--border); border-radius: 5px; color: var(--text-muted);}
.zm-main .chip.ok {color: var(--ok-text);}
.zm-main .chip.err {color: var(--alert-text);}
.zm-main .chip.warn {color: var(--warn-text);}
/* compress.css */
.zm-compress .zm-app {flex: 1; min-height: 0; display: flex; flex-direction: column; overflow: hidden; user-select: none;}
.zm-compress .zm-app input, .zm-compress .zm-app select {user-select: text;}
.zm-compress .form, .zm-compress .job {flex: 1; min-height: 0; display: flex; flex-direction: column;}
.zm-compress .form.hidden, .zm-compress .job.hidden {display: none;}
.zm-compress .pad {padding: 16px 18px;}
.zm-compress .body {flex: 1; min-height: 0; display: flex; flex-direction: column; gap: 12px; overflow: hidden;}
.zm-compress .block {display: flex; flex-direction: column; gap: 8px;}
.zm-compress .list-block {flex: 1 1 auto; min-height: 0;}
.zm-compress .block-title {font-weight: 600;}
.zm-compress .sep {margin: 4px 0;}
.zm-compress .list-wrap {flex: 1 1 auto; min-height: 140px; display: flex; flex-direction: column; border: 1px solid var(--border); border-radius: 6px; overflow: hidden; background: var(--tree-bg);}
.zm-compress .lhead {display: flex; flex: 0 0 auto; padding: 6px 10px; border-bottom: 1px solid var(--border); background: var(--surface); color: var(--text-muted); font-weight: 600; white-space: nowrap;}
.zm-compress .lbody {flex: 1 1 auto; min-height: 0; overflow: auto;}
.zm-compress .item {display: flex; align-items: center; padding: 5px 10px; border-bottom: 1px solid var(--border); color: var(--text); white-space: nowrap;}
.zm-compress .item:hover {background: var(--btn-bg);}
.zm-compress .item.sel {background: color-mix(in srgb, var(--accent) 22%, transparent);}
.zm-compress .c-name {flex: 1 1 40%; min-width: 0; display: flex; align-items: center; gap: 6px; overflow: hidden;}
.zm-compress .c-name .txt {overflow: hidden; text-overflow: ellipsis;}
.zm-compress .c-name .ic {width: 16px; height: 16px; flex: 0 0 16px; object-fit: contain;}
.zm-compress .c-size {flex: 0 0 84px; text-align: end; padding-inline-end: 12px; white-space: nowrap;}
.zm-compress .c-path {flex: 1 1 40%; min-width: 0; overflow: hidden; text-overflow: ellipsis; color: var(--text-muted);}
.zm-compress .empty-row {flex: 1 1 auto; display: flex; align-items: center; justify-content: center; padding: 24px 10px; color: var(--text-muted); text-align: center;}
.zm-compress .empty-row.hidden {display: none;}
.zm-compress .list-actions {display: flex; gap: 8px; justify-content: flex-end;}
.zm-compress .btn.small {padding: 5px 10px;}
.zm-compress .row {display: flex; align-items: center; gap: 10px;}
.zm-compress .lb {flex: 0 0 76px; color: var(--text-muted);}
.zm-compress .grow {flex: 1 1 auto; min-width: 0;}
.zm-compress .inline {display: flex; gap: 8px; align-items: center;}
.zm-compress .inline select, .zm-compress .inline .btn {height: 32px; padding-top: 0; padding-bottom: 0;}
.zm-compress .path-row {display: flex; gap: 8px;}
.zm-compress .path-row input {flex: 1 1 auto; min-width: 0;}
.zm-compress select.full {width: 100%;}
.zm-compress .inline input.pw-in {flex: 0 0 200px; width: 200px; min-width: 0;}
.zm-compress .inline input.pw-in.hidden {display: none;}
.zm-compress .inline input.invalid {border-color: var(--warn-text);}
.zm-compress .pw-check {flex: 0 0 auto; color: var(--text-muted); white-space: nowrap;}
.zm-compress .pw-check.hidden {display: none;}
.zm-compress .btn.has-pw {border-color: var(--accent); color: var(--accent);}
.zm-compress .p2-checks {display: flex; flex-direction: column; gap: 6px; margin-top: 2px;}
.zm-compress .warn-text {margin: 0; color: var(--warn-text);}
.zm-compress .warn-text.hidden {display: none;}
.zm-compress .each-note {margin: 2px 0 0; color: var(--text-muted); font-size: 12px;}
.zm-compress .each-note.hidden {display: none;}
.zm-compress .start-error {padding: 8px 18px; border-top: 1px solid var(--border); background: var(--alert-bg); color: var(--alert-text);}
.zm-compress .start-error.hidden {display: none;}
.zm-compress .actions {display: flex; align-items: center; gap: 8px; padding: 12px 18px; border-top: 1px solid var(--border);}
.zm-compress .hint {color: var(--text-muted);}
.zm-compress .hint.hidden {display: none;}
.zm-compress .spacer {flex: 1 1 auto;}
/* extract.css */
.zm-extract .zm-app {flex: 1; min-height: 0; display: flex; flex-direction: column; position: relative; overflow: hidden;}
.zm-extract .form, .zm-extract .job {flex: 1; min-height: 0; display: flex; flex-direction: column;}
.zm-extract .form.hidden, .zm-extract .job.hidden {display: none;}
.zm-extract .pad {padding: 16px 18px;}
.zm-extract .body {flex: 1; min-height: 0; overflow: hidden; display: flex; flex-direction: column; gap: 10px;}
.zm-extract h2 {margin: 0 0 12px;}
.zm-extract .desc {margin: 0 0 12px; color: var(--text-muted);}
.zm-extract .row {display: flex; align-items: center; gap: 10px;}
.zm-extract .row.rad {flex-wrap: wrap;}
.zm-extract .lb {flex: 0 0 76px; color: var(--text-muted);}
.zm-extract .check.disabled {opacity: 0.5;}
.zm-extract .check.sm {color: var(--text-muted);}
.zm-extract .start-error {padding: 8px 18px; border-top: 1px solid var(--border); background: var(--alert-bg); color: var(--alert-text);}
.zm-extract .start-error.hidden {display: none;}
.zm-extract .actions {display: flex; align-items: center; gap: 8px; padding: 12px 18px; border-top: 1px solid var(--border);}
.zm-extract .spacer {flex: 1 1 auto;}
.zm-extract .picker {display: flex; flex-direction: column; gap: 8px; min-height: 0; flex: 1;}
.zm-extract .address {display: flex; align-items: center; gap: 10px;}
.zm-extract .address .lb {flex: 0 0 auto; font-size: 12px;}
.zm-extract .address input {flex: 1 1 auto; min-width: 0;}
.zm-extract .browser {position: relative; flex: 1; min-height: 0; display: flex; border: 1px solid var(--border); border-radius: 6px; overflow: hidden; background: var(--tree-bg);}
.zm-extract .quick {flex: 0 0 auto; width: 160px; min-width: 0; overflow: auto; padding: 4px 0; background: var(--tree-bg);}
.zm-extract .qitem {display: flex; align-items: center; gap: 4px; padding: 4px 12px; line-height: 18px; color: var(--text); white-space: nowrap; user-select: none;}
.zm-extract .qitem:hover {background: var(--btn-bg);}
.zm-extract .qitem.active {background: var(--accent); color: var(--accent-contrast);}
.zm-extract .qsep {height: 1px; margin: 4px 12px; background: var(--border);}
.zm-extract .qicon, .zm-extract .dicon {width: 16px; height: 16px; flex: 0 0 16px; object-fit: contain;}
.zm-extract .qname, .zm-extract .dname {overflow: hidden; text-overflow: ellipsis;}
.zm-extract .gutter {flex: 0 0 5px; cursor: col-resize; background: color-mix(in srgb, var(--border) 40%, transparent);}
.zm-extract .gutter:hover, .zm-extract .browser.dragging .gutter {background: var(--accent);}
.zm-extract .browser.dragging {cursor: col-resize; user-select: none;}
.zm-extract .tree {flex: 1 1 auto; min-width: 0; overflow: auto; padding: 4px 0; background: var(--tree-bg);}
.zm-extract .dnode {display: flex; align-items: center; gap: 4px; padding: 4px 8px 4px 6px; color: var(--text); white-space: nowrap; user-select: none;}
.zm-extract .dnode:hover {background: var(--btn-bg);}
.zm-extract .dnode.active {background: var(--accent); color: var(--accent-contrast);}
.zm-extract .chev {width: 18px; min-width: 18px; height: 18px; display: inline-flex; align-items: center; justify-content: center; color: var(--text-muted);}
.zm-extract .chev img {width: 16px; height: 16px; transition: transform 120ms ease;}
.zm-extract .chev.open img {transform: rotate(90deg);}
.zm-extract[dir="rtl"] .chev img {transform: scaleX(-1);}
.zm-extract[dir="rtl"] .chev.open img {transform: rotate(90deg);}
.zm-extract .chev.none img {display: none;}
.zm-extract .dnode.active .chev {color: var(--accent-contrast);}
.zm-extract .menu {position: absolute; z-index: 10; display: flex; flex-direction: column; gap: 4px; padding: 4px; border: 1px solid var(--border); border-radius: 6px; background: var(--bg); box-shadow: var(--dialog-shadow);}
.zm-extract .menu.hidden {display: none;}
.zm-extract .menu-item {padding: 6px 14px 6px 10px; border: none; border-radius: 4px; background: transparent; color: var(--text); text-align: start; white-space: nowrap;}
.zm-extract .menu-item:hover {background: var(--btn-bg);}
.zm-extract .menu-item.hidden {display: none;}
.zm-extract .menu-name {display: flex; align-items: center; gap: 4px;}
.zm-extract .menu-name.hidden {display: none;}
.zm-extract .menu-name input {width: 160px; padding: 5px 8px;}
.zm-extract .mbtn {padding: 5px 10px; border: 1px solid var(--border); border-radius: 6px; background: var(--btn-bg); color: var(--text);}
.zm-extract .mbtn:disabled {opacity: 0.5;}
.zm-extract .menu-error {max-width: 220px; padding: 0 4px; color: var(--alert-text); font-size: 12px;}
.zm-extract .menu-error.hidden {display: none;}
.zm-extract .overlay {position: absolute; inset: 0; z-index: 20; background: var(--bg); display: flex; flex-direction: column;}
.zm-extract .overlay.hidden {display: none;}
.zm-extract .overlay .dialog {flex: 1; min-height: 0; display: flex; flex-direction: column;}
.zm-extract .overlay .actions {padding-left: 0; padding-right: 0;}
.zm-extract .conflict-file {margin: 0 0 6px; font-weight: 600; word-break: break-all;}
.zm-extract .choices {display: flex; flex-direction: column; gap: 8px; margin: 4px 0 16px;}
.zm-extract .conflict-foot {margin-top: auto; padding-top: 10px; border-top: 1px solid var(--border);}
.zm-extract .pw-panel {display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 10px; border: 1px solid var(--border); border-radius: 6px; background: var(--surface);}
.zm-extract .pw-panel input {flex: 1 1 auto; min-width: 0;}
.zm-extract .warn-text {margin: 0; width: 100%; color: var(--alert-text);}
.zm-extract .warn-text.hidden {display: none;}
/* settings.css */
.zm-settings .settings {height: 100%;}
.zm-settings .settings .main {flex: 1; display: flex; min-height: 0;}
.zm-settings .settings .sidebar {width: 120px; flex-shrink: 0; display: flex; flex-direction: column; background: var(--bg); border-inline-end: 1px solid var(--border);}
.zm-settings .settings .cats {flex: 1; display: flex; flex-direction: column; gap: 12px; padding: 8px 7px 8px 8px; overflow-y: auto;}
.zm-settings .settings .cat {height: 32px; flex-shrink: 0; text-align: center; border: 1px solid transparent; border-radius: 5px; background: transparent; color: var(--text); cursor: default;}
.zm-settings .settings .cat:hover, .zm-settings .settings .cat.on {background: var(--nav-on-bg); border-color: var(--nav-on-border);}
.zm-settings .settings .side-actions {display: flex; flex-direction: column; padding: 8px 7px 12px 8px;}
.zm-settings .settings .content {flex: 1; min-width: 0; display: flex; flex-direction: column;}
.zm-settings .settings .pane-head {height: 56px; flex-shrink: 0; padding: 18px 24px 0; border-bottom: 1px solid var(--border);}
.zm-settings .settings .pane-head .pane-title {font-size: 19px; font-weight: 700; line-height: 25px;}
.zm-settings .settings .panes {flex: 1; min-height: 0; overflow-y: auto; padding: 16px 24px; display: flex; flex-direction: column; gap: 12px;}
.zm-settings .settings .pane {display: flex; flex-direction: column; gap: 12px;}
.zm-settings .settings .pane.assoc {gap: 14px;}
.zm-settings .settings .pane.hidden {display: none;}
.zm-settings .settings .pane .row, .zm-settings .settings .pane > .check {height: 28px;}
.zm-settings .settings .item {display: flex; flex-direction: column; gap: 2px;}
.zm-settings .settings .row {display: flex; align-items: center; justify-content: space-between; gap: 12px;}
.zm-settings .settings select {width: 140px;}
.zm-settings .settings .desc {line-height: 1.5;}
.zm-settings .settings .check.all {padding-bottom: 10px; border-bottom: 1px solid var(--border); font-weight: 600;}
.zm-settings .settings .ext-grid {display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px 12px;}
.zm-settings .settings .ext-row {display: flex; align-items: center; gap: 6px; min-width: 0;}
.zm-settings .settings .ext-row .name {min-width: 3.4em;}
.zm-settings .settings .tag {padding: 0 6px; border: 1px solid transparent; border-radius: 3px; background: var(--alert-bg); color: var(--alert-text); font-size: 11px; line-height: 1.6; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: default;}
.zm-settings .settings .tag:hover:not(:disabled) {border-color: currentColor;}
.zm-settings .settings .tag:disabled {opacity: 0.6;}
.zm-settings .settings .pane.about {flex: 1; min-height: 0;}
.zm-settings .settings .app-id {display: flex; align-items: center; gap: 14px;}
.zm-settings .settings .app-icon {width: 48px; height: 48px;}
.zm-settings .settings .app-name {font-size: 19px; font-weight: 700;}
.zm-settings .settings .link {color: var(--accent); cursor: pointer;}
.zm-settings .settings .link:hover {text-decoration: underline;}
.zm-settings .settings .notices {flex: 1; min-height: 120px; margin: 0; padding: 8px 10px; overflow: auto; border: 1px solid var(--border); border-radius: 4px; white-space: pre-wrap; font-size: 12px; line-height: 1.4; color: var(--text-muted);}
.zm-settings .settings .note {padding: 8px 10px; border-inline-start: 2px solid var(--border); color: var(--text-muted); font-size: 12px; line-height: 1.5;}
.zm-settings .settings .note.warn {border-inline-start-color: var(--warn-text); color: var(--warn-text);}
