:root{
  --bar-h:26px;
  --dock-bg:rgba(255,255,255,.28);
  --win-bg:rgba(246,246,248,.92);
  --txt:#1d1d1f;
  --accent:#0a84ff;
  --shadow:0 24px 60px rgba(0,0,0,.34),0 4px 14px rgba(0,0,0,.22);
  font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",Helvetica,Arial,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0;-webkit-user-select:none;user-select:none}
html,body{height:100%;overflow:hidden}
body{
  background:#111;color:var(--txt);
  background-image:
    radial-gradient(120% 90% at 20% 10%, #5b8cff 0%, rgba(91,140,255,0) 45%),
    radial-gradient(120% 90% at 85% 20%, #ff7ac4 0%, rgba(255,122,196,0) 40%),
    radial-gradient(140% 120% at 50% 110%, #2a1b6b 0%, #0c0b1f 70%);
  background-size:cover;background-attachment:fixed;
}
#wallpaper{position:fixed;inset:0;z-index:0}

/* ---------- top menu bar ---------- */
#menubar{
  position:fixed;top:0;left:0;right:0;height:var(--bar-h);z-index:10000;
  display:flex;align-items:center;gap:18px;padding:0 12px;
  background:rgba(255,255,255,.18);backdrop-filter:saturate(180%) blur(22px);
  -webkit-backdrop-filter:saturate(180%) blur(22px);
  color:#fff;font-size:13px;font-weight:500;
  box-shadow:inset 0 -.5px 0 rgba(255,255,255,.18);
}
#menubar .logo{font-size:15px;line-height:1}
#menubar .appname{font-weight:700}
#menubar .mi{opacity:.92;cursor:default;padding:1px 6px;border-radius:5px}
#menubar .mi:hover{background:rgba(255,255,255,.22)}
#menubar .spacer{flex:1}
#menubar .status{display:flex;align-items:center;gap:14px;font-size:12.5px}
#menubar .status .ic{opacity:.95;cursor:default}
#clock{font-variant-numeric:tabular-nums;cursor:default}

/* ---------- desktop ---------- */
#desktop{position:fixed;inset:var(--bar-h) 0 0 0;z-index:1}

/* ---------- windows ---------- */
.win{
  position:absolute;min-width:320px;min-height:200px;
  background:var(--win-bg);backdrop-filter:blur(30px) saturate(180%);
  -webkit-backdrop-filter:blur(30px) saturate(180%);
  border-radius:12px;box-shadow:var(--shadow);
  display:flex;flex-direction:column;overflow:hidden;
  border:.5px solid rgba(255,255,255,.4);
  opacity:0;transform:scale(.96);transition:opacity .14s,transform .14s;
}
.win.show{opacity:1;transform:scale(1)}
.win.min{opacity:0;transform:scale(.2);pointer-events:none}
.win .titlebar{
  height:38px;flex:0 0 38px;display:flex;align-items:center;gap:8px;padding:0 12px;
  background:rgba(255,255,255,.22);cursor:default;position:relative;
  border-bottom:.5px solid rgba(0,0,0,.08);
}
.win .lights{display:flex;gap:8px;align-items:center}
.win .light{width:12px;height:12px;border-radius:50%;cursor:pointer;border:.5px solid rgba(0,0,0,.12)}
.win .light.r{background:#ff5f57}.win .light.y{background:#febc2e}.win .light.g{background:#28c840}
.win .lights:hover .light{filter:brightness(.92)}
.win .wtitle{position:absolute;left:0;right:0;text-align:center;font-size:13px;font-weight:600;color:#3a3a3c;pointer-events:none}
.win .body{flex:1;overflow:auto;position:relative;background:#fff}
.win .resize{position:absolute;right:0;bottom:0;width:16px;height:16px;cursor:nwse-resize;z-index:5}
.win.focused{box-shadow:var(--shadow)}
.win:not(.focused){box-shadow:0 18px 40px rgba(0,0,0,.22)}
.win:not(.focused) .titlebar{background:rgba(255,255,255,.14)}

/* ---------- dock ---------- */
#dock{
  position:fixed;bottom:8px;left:50%;transform:translateX(-50%);z-index:9000;
  display:flex;align-items:flex-end;gap:8px;padding:8px 10px;height:64px;
  background:var(--dock-bg);backdrop-filter:blur(26px) saturate(180%);
  -webkit-backdrop-filter:blur(26px) saturate(180%);
  border-radius:20px;border:.5px solid rgba(255,255,255,.45);
  box-shadow:0 12px 34px rgba(0,0,0,.34);
}
#dock .sep{width:1px;align-self:stretch;margin:6px 2px;background:rgba(0,0,0,.16)}
.dockicon{
  width:48px;height:48px;border-radius:12px;cursor:pointer;position:relative;
  display:flex;align-items:center;justify-content:center;font-size:30px;
  transition:transform .12s cubic-bezier(.2,.8,.2,1),margin .12s;
  background:linear-gradient(160deg,#fff,#e7e7 ee);box-shadow:0 4px 10px rgba(0,0,0,.22);
  transform-origin:bottom center;
}
.dockicon img{width:40px;height:40px;pointer-events:none}
.dockicon:hover{transform:translateY(-10px) scale(1.32)}
.dockicon:hover+.dockicon,.dockicon:has(+ :hover){transform:translateY(-4px) scale(1.12)}
.dockicon .tip{
  position:absolute;bottom:62px;left:50%;transform:translateX(-50%) scale(.9);
  background:rgba(40,40,42,.92);color:#fff;font-size:12px;padding:3px 9px;border-radius:7px;
  white-space:nowrap;opacity:0;transition:opacity .1s;pointer-events:none;
}
.dockicon:hover .tip{opacity:1}
.dockicon .run{position:absolute;bottom:-5px;left:50%;transform:translateX(-50%);width:4px;height:4px;border-radius:50%;background:rgba(0,0,0,.55);opacity:0}
.dockicon.running .run{opacity:1}
@keyframes bounce{0%,100%{transform:translateY(0)}40%{transform:translateY(-22px)}}
.dockicon.bounce{animation:bounce .5s ease 2}

/* ---------- browser app ---------- */
.browser{display:flex;flex-direction:column;height:100%;background:#f4f4f6}
.browser .toolbar{display:flex;align-items:center;gap:8px;padding:8px 10px;background:#ececef;border-bottom:.5px solid rgba(0,0,0,.1)}
.browser .nav{display:flex;gap:4px}
.browser .nav button{width:28px;height:28px;border:none;border-radius:7px;background:rgba(0,0,0,.05);cursor:pointer;font-size:14px;color:#444}
.browser .nav button:hover{background:rgba(0,0,0,.1)}
.browser .urlbar{flex:1;display:flex;align-items:center;background:#fff;border-radius:9px;padding:0 10px;height:30px;box-shadow:inset 0 0 0 .5px rgba(0,0,0,.12)}
.browser .urlbar input{flex:1;border:none;outline:none;font-size:13px;background:transparent;color:#222}
.browser .serverpick{height:30px;border:none;border-radius:9px;background:rgba(0,0,0,.05);padding:0 8px;font-size:12px;color:#333;cursor:pointer}
.browser .frameholder{flex:1;position:relative;background:#fff}
.browser iframe{position:absolute;inset:0;width:100%;height:100%;border:none;background:#fff}
.browser .blank{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#888;gap:14px}
.browser .blank .big{font-size:46px}
.browser .quick{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;max-width:420px}
.browser .quick a{font-size:13px;color:var(--accent);text-decoration:none;background:rgba(10,132,255,.1);padding:6px 12px;border-radius:20px;cursor:pointer}

/* ---------- calculator ---------- */
.calc{display:flex;flex-direction:column;height:100%;background:#1c1c1e}
.calc .out{flex:0 0 auto;color:#fff;text-align:right;font-size:46px;font-weight:300;padding:18px 18px 8px;min-height:90px;word-break:break-all}
.calc .grid{flex:1;display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:#1c1c1e}
.calc button{border:none;font-size:22px;color:#fff;background:#333;cursor:pointer}
.calc button:active{filter:brightness(1.3)}
.calc button.op{background:#ff9f0a}
.calc button.fn{background:#a5a5a5;color:#000}
.calc button.zero{grid-column:span 2}

/* ---------- generic app body ---------- */
.pad{padding:20px;color:#222;font-size:14px;line-height:1.5;-webkit-user-select:text;user-select:text}
.pad h2{font-size:18px;margin-bottom:10px}
.settings .srv{display:flex;align-items:center;gap:10px;padding:10px;border:.5px solid rgba(0,0,0,.1);border-radius:10px;margin-bottom:8px;background:#fff}
.settings .srv .dot{width:9px;height:9px;border-radius:50%;background:#28c840}
.settings input{font-size:13px;padding:6px 8px;border:.5px solid rgba(0,0,0,.2);border-radius:7px;outline:none}
.settings button{font-size:13px;padding:6px 12px;border:none;border-radius:7px;background:var(--accent);color:#fff;cursor:pointer}
