/* hamy-widgets — shared styles for interactive post widgets.
   Loaded once site-wide (see layout.rs). Everything is scoped under
   .hamy-widget and internal classes are hw-* prefixed so nothing
   collides with Tailwind/DaisyUI (e.g. their .card, .badge). */

.hamy-widget{
  --hw-canvas:#0d0d0d; --hw-panel:#141414; --hw-panel2:#1a1a1a;
  --hw-primary:#e5e3de; --hw-secondary:#9ca3af; --hw-rule:#2a2a2a;
  --hw-good:#10b981; --hw-warn:#e0b341; --hw-bad:#f0726b; --hw-cost:#3a3a3a;
  --hw-sans:"IBM Plex Sans",system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  --hw-mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
  font-family:var(--hw-sans);color:var(--hw-primary);line-height:1.5;
  margin:1.6em 0;-webkit-font-smoothing:antialiased;
}
.hamy-widget *{box-sizing:border-box}

/* Placeholder while the widget module lazy-loads — reserves height so the
   page doesn't jump when the widget mounts. Removed once mount() runs. */
.hamy-widget[data-hamy-loading]{min-height:560px;display:flex;align-items:center;justify-content:center;
  border:1px solid var(--hw-rule);border-radius:14px;background:var(--hw-panel)}
.hamy-widget .hw-loading-label{font-family:var(--hw-mono);font-size:12px;color:var(--hw-secondary)}

.hamy-widget .hw-card{background:var(--hw-panel);border:1px solid var(--hw-rule);border-radius:14px;padding:22px}
.hamy-widget .hw-controls{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:18px}
.hamy-widget .hw-name{color:var(--hw-secondary);text-transform:uppercase;letter-spacing:.08em;font-size:11px;
  font-family:var(--hw-mono);display:block;margin:0 0 8px}
.hamy-widget .hw-entry{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.hamy-widget .hw-num{width:100%;min-width:0;background:var(--hw-panel2);border:1px solid var(--hw-rule);border-radius:7px;
  color:var(--hw-primary);font-family:var(--hw-mono);font-weight:600;font-size:16px;padding:9px 10px;outline:none}
.hamy-widget .hw-num:focus{border-color:var(--hw-good)}
.hamy-widget .hw-unit{font-family:var(--hw-mono);color:var(--hw-secondary);font-size:13px;flex:none}
.hamy-widget input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:4px;border-radius:3px;
  background:var(--hw-rule);outline:none;margin:0;padding:0}
.hamy-widget input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:18px;height:18px;
  border-radius:50%;background:var(--hw-good);cursor:pointer;border:2px solid #04150e}
.hamy-widget input[type=range]::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:var(--hw-good);
  cursor:pointer;border:2px solid #04150e}

.hamy-widget .hw-summary{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;
  border-top:1px solid var(--hw-rule);margin-top:22px;padding-top:20px}
.hamy-widget .hw-lead{font-family:var(--hw-mono);font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--hw-secondary)}
.hamy-widget .hw-big{font-family:var(--hw-sans);font-weight:600;font-size:32px;letter-spacing:-.01em;line-height:1}
.hamy-widget .hw-big.pos{color:var(--hw-good)} .hamy-widget .hw-big.neg{color:var(--hw-warn)}
.hamy-widget .hw-chip{font-family:var(--hw-mono);font-size:11px;text-transform:uppercase;letter-spacing:.08em;padding:4px 10px;border-radius:5px}
.hamy-widget .hw-chip.good{color:var(--hw-good);background:#0f211a;border:1px solid #12362a}
.hamy-widget .hw-chip.warn{color:var(--hw-warn);background:#241f10;border:1px solid #3a3016}

.hamy-widget .hw-section{margin-top:26px}
.hamy-widget .hw-slab{font-family:var(--hw-mono);font-size:11px;text-transform:uppercase;letter-spacing:.08em;
  color:var(--hw-secondary);display:flex;justify-content:space-between;margin-bottom:8px}
.hamy-widget .hw-bar{height:44px;border-radius:9px;overflow:hidden;display:flex;border:1px solid var(--hw-rule);background:#111}
.hamy-widget .hw-seg{height:100%;display:flex;align-items:center;justify-content:center;font-family:var(--hw-mono);
  font-size:12px;font-weight:600;white-space:nowrap;overflow:hidden;min-width:0;transition:width .12s ease}
.hamy-widget .hw-seg.cost{background:var(--hw-cost);color:#cfcfca}
.hamy-widget .hw-seg.tok{background:#4a3d12;color:#f2d98a}
.hamy-widget .hw-seg.gain{background:#124a35;color:#7ff0c4}
.hamy-widget .hw-seg.loss{background:#2a1614;color:var(--hw-bad);box-shadow:inset 0 0 0 1px #4a1f1c}
.hamy-widget .hw-legend{display:flex;gap:16px;flex-wrap:wrap;margin-top:14px;font-size:12px;color:var(--hw-secondary)}
.hamy-widget .hw-legend span{display:flex;align-items:center;gap:7px}
.hamy-widget .hw-sw{width:11px;height:11px;border-radius:3px;display:inline-block;flex:none}
.hamy-widget .hw-sw.cost{background:var(--hw-cost)} .hamy-widget .hw-sw.tok{background:#4a3d12}
.hamy-widget .hw-sw.gain{background:#124a35} .hamy-widget .hw-sw.loss{background:#2a1614;border:1px solid #4a1f1c}
.hamy-widget .hw-eq{font-family:var(--hw-mono);font-size:12px;color:var(--hw-secondary);margin-top:14px}
.hamy-widget .hw-eq b.pos{color:var(--hw-good)} .hamy-widget .hw-eq b.neg{color:var(--hw-warn)}

.hamy-widget .hw-mapwrap{position:relative}
.hamy-widget .hw-mapwrap svg{width:100%;height:auto;display:block;cursor:crosshair}
.hamy-widget .hw-tip{position:absolute;pointer-events:none;background:#000;border:1px solid var(--hw-rule);
  border-radius:7px;padding:8px 10px;font-family:var(--hw-mono);font-size:11px;line-height:1.5;
  transform:translate(-50%,-115%);white-space:nowrap;opacity:0;transition:opacity .08s;z-index:5}
.hamy-widget .hw-tip.on{opacity:1}
.hamy-widget .hw-tip .k{color:var(--hw-secondary)} .hamy-widget .hw-tip .v{color:var(--hw-primary);font-weight:600}
.hamy-widget .hw-tip .nv.pos{color:var(--hw-good)} .hamy-widget .hw-tip .nv.neg{color:var(--hw-warn)}
.hamy-widget .hw-hint{font-family:var(--hw-mono);font-size:11px;color:var(--hw-secondary);margin-top:12px;display:flex;
  align-items:center;gap:8px;flex-wrap:wrap}
.hamy-widget .hw-dotk{width:10px;height:10px;border-radius:50%;background:var(--hw-good);display:inline-block;border:2px solid #04150e}
.hamy-widget .hw-foot{font-size:12.5px;color:var(--hw-secondary);margin-top:16px}
.hamy-widget .hw-foot b{color:var(--hw-primary)}
