/* License: MIT (see ../license.txt); alternatively GPL v3.0. (c) 2026 ISSP Software und Service GmbH */
/* cloccojs TreeView (tree.js) and the gallery's tree view. Reads the framework tokens (--ink, --muted, --line, --blue, --surface, --soft, --hover-bg, --focus). */
.clo-tree{overflow:auto;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink);font-size:14px}
.clo-tree ul{list-style:none;margin:0;padding:0}
.clo-tree ul[hidden]{display:none}
.clo-tree-item{outline:0}
.clo-tree-row{display:flex;align-items:center;gap:6px;min-height:28px;padding:2px 10px 2px calc(8px + var(--lvl,0) * 18px);cursor:default;border-radius:6px;margin:0 4px}
.clo-tree-item:hover>.clo-tree-row{background:var(--hover-bg)}
.clo-tree-item[aria-selected=true]>.clo-tree-row{background:color-mix(in srgb,var(--blue) 16%,transparent);box-shadow:inset 3px 0 0 var(--blue)}
.clo-tree-item:focus-visible>.clo-tree-row{outline:3px solid var(--focus);outline-offset:-2px}
.clo-tree-twisty{flex:none;width:16px;height:16px;position:relative;cursor:pointer}
.clo-tree-twisty::before{content:"";position:absolute;left:4px;top:3px;border:5px solid transparent;border-left:6px solid var(--muted);border-right:0;transition:transform .12s}
.clo-tree-item[aria-expanded=true]>.clo-tree-row .clo-tree-twisty::before{transform:rotate(90deg) translate(1px,-1px)}
.clo-tree-twisty.is-leaf{cursor:default}.clo-tree-twisty.is-leaf::before{display:none}
.clo-tree-icon{flex:none;width:18px;height:18px;display:inline-grid;place-items:center}
.clo-tree-icon svg,.clo-tree-icon img{width:18px;height:18px;display:block}
.clo-tree-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.clo-tree-meta{flex:none;margin-left:12px;color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums}
.clo-tree-endicon{flex:none;width:14px;height:14px;display:inline-grid;place-items:center;opacity:.65}.clo-tree-endicon img{width:14px;height:14px}.clo-tree-endicon.scanned{filter:brightness(0) saturate(100%) invert(54%) sepia(84%) saturate(388%) hue-rotate(82deg)}.clo-tree-endicon.quarantined{filter:brightness(0) saturate(100%) invert(25%) sepia(92%) saturate(2900%) hue-rotate(350deg)}
.clo-tree-more,.clo-tree-status{padding:3px 10px 3px calc(30px + var(--lvl,0) * 18px);font-size:13px;color:var(--muted)}
.clo-tree-morebtn,.clo-tree-retry{border:1px dashed var(--line);border-radius:8px;background:none;color:var(--blue);font:inherit;padding:4px 12px;cursor:pointer}
.clo-tree-morebtn:hover,.clo-tree-retry:hover{background:var(--hover-bg)}
.clo-tree-status.is-error{color:#d93025}

/* gallery view */
.tv-layout{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(260px,1fr);gap:18px;align-items:start}
.tv-bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:10px}
.tv-bar select,.tv-bar input{padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--input-bg,var(--surface));color:var(--ink);font:inherit}
.tv-bar .tv-grow{flex:1;min-width:140px}
.tv-stats{font-size:12.5px;color:var(--muted);margin:8px 0 0}
.tv-tree{height:520px}
.tv-details dl{display:grid;grid-template-columns:auto 1fr;gap:6px 14px;margin:12px 0 0;font-size:14px}
.tv-details dt{color:var(--muted)}.tv-details dd{margin:0;word-break:break-all}
.tv-details .tv-big{display:flex;align-items:center;gap:12px;font-weight:700;font-size:16px;word-break:break-all}
.tv-details .tv-big svg{width:40px;height:40px;flex:none}
.tv-types{margin-top:18px}
@media (max-width:900px){.tv-layout{grid-template-columns:1fr}.tv-tree{height:420px}}
.tv-bar button{padding:8px 14px;border:1px solid var(--line);border-radius:8px;background:var(--soft);color:var(--ink);font:inherit;font-weight:600;cursor:pointer}.tv-bar button:hover{background:var(--hover-bg)}
