/* ===== window chrome ===== */
#window-layer { position:absolute; inset:0; z-index:300; pointer-events:none; }
.win { position:absolute; display:flex; flex-direction:column; background:var(--bg-surface);
  border-radius:var(--win-radius); box-shadow:var(--shadow-1); pointer-events:auto;
  border:1px solid rgba(0,0,0,.14); overflow:visible; }
body.dark .win { border-color:rgba(255,255,255,.12); }
.win.focused { box-shadow:var(--shadow-2); }
.win.opening { animation:winopen .24s cubic-bezier(.25,1.3,.4,1); }
@keyframes winopen { from { opacity:0; transform:scale(.88) translateY(14px); } }
.win.closing { animation:winclose .17s ease-in forwards; }
@keyframes winclose { to { opacity:0; transform:scale(.92) translateY(6px); } }
.win.min-fade { transition:opacity .18s,transform .18s; opacity:0; transform:scale(.9); }
.win.unmin { animation:winopen .2s cubic-bezier(.25,1.2,.4,1); }
.win.in-ov { border-radius:8px; }
.win-body { flex:1; overflow:hidden; border-radius:0 0 var(--win-radius) var(--win-radius); background:var(--bg); position:relative; }
.win.maximized { border-radius:0; }
.win.maximized .win-body { border-radius:0; }
.win.maximized .win-titlebar { border-radius:0; }

/* titlebar / headerbar */
.win-titlebar { flex:none; height:44px; display:flex; align-items:center; gap:6px; padding:0 8px 0 14px;
  background:var(--bg-header-unf); border-bottom:1px solid var(--border);
  border-radius:var(--win-radius) var(--win-radius) 0 0; position:relative; }
.win.focused .win-titlebar { background:var(--bg-header); }
.win-title { position:absolute; left:50%; transform:translateX(-50%); display:flex; align-items:center; gap:8px;
  font-size:13.5px; font-weight:600; color:var(--fg-dim); pointer-events:none; max-width:50%; white-space:nowrap; overflow:hidden; }
.win.focused .win-title { color:var(--fg); }
.win-icon svg { width:17px; height:17px; display:block; }
.win-name { overflow:hidden; text-overflow:ellipsis; }
.win-btns { margin-left:auto; display:flex; gap:7px; align-items:center; }
.wbtn { width:24px; height:24px; border-radius:50%; display:grid; place-items:center; color:transparent;
  background:rgba(127,120,115,.22); transition:background .12s,color .12s; }
body.dark .wbtn { background:rgba(255,255,255,.13); }
.wbtn svg { width:13px; height:13px; }
.win-titlebar:hover .wbtn, .win.focused .wbtn:hover, .wbtn:focus { color:#2b2b2b; }
.wbtn:hover { background:rgba(127,120,115,.38); color:#2b2b2b; }
body.dark .wbtn:hover { color:#fff; }
.wclose:hover { background:#E95420 !important; color:#fff !important; }
.wbtn:active { transform:scale(.92); }

/* headerbar extras (app controls injected into titlebar) */
.win-titlebar.hb .win-title { display:none; }
.hb-left, .hb-right { display:flex; align-items:center; gap:4px; }
.hb-mid { position:absolute; left:50%; transform:translateX(-50%); display:flex; align-items:center; max-width:52%; }
.hb-btn { width:32px; height:32px; border-radius:7px; display:grid; place-items:center; color:var(--fg-dim); }
.hb-btn svg { width:16px; height:16px; }
.hb-btn:hover:not(.disabled) { background:var(--hover); color:var(--fg); }
.hb-btn.disabled { opacity:.35; }
.hb-right .btn { height:30px; font-size:12.5px; }
.hb-right .btn svg { width:14px; height:14px; }
.hb-right { position:absolute; right:104px; }
.win-titlebar.hb { justify-content:flex-start; }
.f-search { width:170px; padding:5px 10px; border-radius:7px; border:1px solid var(--border);
  background:var(--bg-input); color:var(--fg); font-size:12.5px; outline:none; margin-right:4px; }
.f-search:focus { border-color:var(--accent); }

/* resize handles */
.rs { position:absolute; z-index:20; }
.rs.n { top:-5px; left:8px; right:8px; height:9px; cursor:ns-resize; }
.rs.s { bottom:-5px; left:8px; right:8px; height:9px; cursor:ns-resize; }
.rs.e { right:-5px; top:8px; bottom:8px; width:9px; cursor:ew-resize; }
.rs.w { left:-5px; top:8px; bottom:8px; width:9px; cursor:ew-resize; }
.rs.ne { right:-6px; top:-6px; width:14px; height:14px; cursor:nesw-resize; }
.rs.nw { left:-6px; top:-6px; width:14px; height:14px; cursor:nwse-resize; }
.rs.se { right:-6px; bottom:-6px; width:14px; height:14px; cursor:nwse-resize; }
.rs.sw { left:-6px; bottom:-6px; width:14px; height:14px; cursor:nesw-resize; }
.win.maximized .rs, .win.tiled .rs { display:none; }
.win.tiled { }
body.dragging { cursor:grabbing; }

/* snap preview */
#snap-preview { position:absolute; z-index:250; border-radius:12px; pointer-events:none;
  background:var(--accent-soft); border:2px solid var(--accent); opacity:0; transition:opacity .15s,all .15s; }
#snap-preview.show { opacity:1; }
#snap-preview { transition:left .16s,top .16s,width .16s,height .16s,opacity .15s; }

/* app default body */
.app-fail { display:grid; place-items:center; height:100%; color:var(--fg-faint); }
