/* ============================================================
   juwel-os-liquid.css — FACET retired the liquid-candy layer,
   EXCEPT the entity. (2026-07-09: candy is retired for all UI —
   see docs/brand/BRAND_SYSTEM.md — but the OWNER ruled the same
   day that the living entity is CANON: "SHE is perfect how she
   is." Her appearance and motion below are restored VERBATIM
   from the shipped build, with her original colors and easing
   pinned as literals so token re-aliasing can never restyle her.
   Do not "FACET" her. The amber rule governs the UI, not her.)

   Removed forever: bouncy window open/close/minimize, gooey dock
   jelly, melting menu/command-bar pop-opens, translucent window
   glass with purple-tinted shadows, the ambient liquid-bg canvas.
   Windows are near-opaque panes; chrome glass is menubar/dock/
   palette only; the background is STILL. This file loads last.
   ============================================================ */

/* ── the entity — CANON, restored verbatim (owner, 2026-07-09) ── */
juwel-entity{display:inline-block;position:relative;width:var(--je,120px);height:var(--je,120px);
  cursor:pointer;-webkit-tap-highlight-color:transparent;}
juwel-entity .je-tilt{position:absolute;inset:0;will-change:transform;}
juwel-entity .je-wrap{position:absolute;inset:0;will-change:transform;}
juwel-entity .je-float{position:absolute;inset:0;animation:jeFloat 7s ease-in-out infinite;}
/* static = truly still: no float, no glow pulse, no blob churn (the calm hero/lab mascots) */
juwel-entity[static] .je-float{animation:none;}
juwel-entity[static] .je-glow{animation:none;opacity:.82;}
juwel-entity[static] .je-blob{animation:none;}
@keyframes jeFloat{0%,100%{transform:translateY(0) rotate(-1.4deg);}50%{transform:translateY(calc(var(--je,120px)*-.06)) rotate(1.4deg);}}
juwel-entity img{position:absolute;inset:0;width:100%;height:100%;opacity:0;transition:opacity .22s cubic-bezier(.22,1,.36,1);
  filter:drop-shadow(0 calc(var(--je,120px)*.12) calc(var(--je,120px)*.22) rgba(25,14,36,.35));user-select:none;-webkit-user-drag:none;}
juwel-entity img.on{opacity:1;}
juwel-entity .je-glow{position:absolute;inset:-34%;border-radius:50%;z-index:-1;pointer-events:none;
  background:radial-gradient(circle,color-mix(in srgb,#D4431B 34%,transparent),transparent 66%);
  filter:blur(10px);animation:jePulse 5.5s cubic-bezier(.22,1,.36,1) infinite;}
@keyframes jePulse{0%,100%{opacity:.75;transform:scale(1);}50%{opacity:1;transform:scale(1.1);}}
juwel-entity .je-blob{position:absolute;inset:6%;z-index:2;opacity:0;pointer-events:none;
  background:linear-gradient(140deg,#FF6F43,#FF5D7E 40%,#FF9F68 80%);
  filter:blur(3px) saturate(1.3);box-shadow:inset 0 3px 8px rgba(255,255,255,.55),0 14px 34px -12px rgba(255,106,0,.45);
  animation:jeBlob 3.2s ease-in-out infinite;}
@keyframes jeBlob{0%,100%{border-radius:52% 48% 60% 40%/48% 62% 38% 52%;}33%{border-radius:40% 60% 46% 54%/58% 42% 58% 42%;}66%{border-radius:58% 42% 52% 48%/42% 56% 44% 58%;}}
juwel-entity.forming .je-blob{opacity:1;}
juwel-entity.forming img{opacity:0!important;}
juwel-entity .je-pop{animation:jePop calc(.6s*var(--mx,1)) cubic-bezier(.34,1.62,.64,1);}
@keyframes jePop{0%{transform:scale(.55);}60%{transform:scale(1.12);}100%{transform:scale(1);}}
juwel-entity.squish .je-wrap{animation:jeSquish calc(.5s*var(--mx,1)) cubic-bezier(.34,1.62,.64,1);}
@keyframes jeSquish{0%{transform:scale(1);}35%{transform:scale(1.14,.82);}70%{transform:scale(.92,1.08);}100%{transform:scale(1);}}
/* the front-door gem breathes a little deeper — hers, kept */
.fd-gem{animation-duration:5.6s;}

@media (prefers-reduced-motion:reduce){
  juwel-entity .je-float,juwel-entity .je-glow,juwel-entity .je-blob,
  juwel-entity .je-pop,juwel-entity.squish .je-wrap{animation:none;}
}
/* Humanist Meadow OS: still surface — no candy convection/satellites (2026-07-15) */
html[data-surface="os"] juwel-entity .je-convection,
html[data-bg="still"] juwel-entity .je-convection,
html[data-surface="os"] juwel-entity .je-sat,
html[data-bg="still"] juwel-entity .je-sat,
html[data-surface="os"] juwel-entity .je-blob,
html[data-bg="still"] juwel-entity .je-blob{
  display:none!important;animation:none!important;opacity:0!important;
}
html[data-surface="os"] juwel-entity[static] .je-float,
html[data-bg="still"] juwel-entity[static] .je-float,
html[data-surface="os"] juwel-entity[noglow] .je-glow,
html[data-bg="still"] juwel-entity[noglow] .je-glow{
  animation:none!important;
}
html[data-surface="os"] juwel-entity[noglow] .je-glow,
html[data-bg="still"] juwel-entity[noglow] .je-glow{opacity:.55;}

/* ══════════════════════════════════════════════════════════
   LUXLIQ — candy convection + satellite blobs (2026-07-13)
   Canonical spec: docs/brand/LUXLIQ_BRAND_SYSTEM.md §3A/§5 —
   "entity is the heat source of the lamp." Strictly ADDITIVE:
   every rule above (jeFloat/jeGlow/jeBlob/jePop/jeSquish, her
   pinned form/colors) is untouched. This layers an inner
   drifting candy-fluid convection + 2-3 orbiting satellite
   blobs on top, driven by juwel-entity.js (.je-convection /
   .je-sat / .je-hot). Uses luxliq.css tokens with literal
   fallbacks so she still degrades gracefully if that sheet
   is absent. Never fully opaque — she stays recognizable as
   the same gem, just alive with heat, never monochrome.
   ============================================================ */
juwel-entity{overflow:visible;}
juwel-entity .je-convection{position:absolute;inset:10%;z-index:1;border-radius:50%;pointer-events:none;
  opacity:.42;mix-blend-mode:soft-light;filter:blur(3px);
  background:conic-gradient(from 0deg,#FF9A1A,#FF6B8A 30%,#3ECF8E 55%,#5BB7FF 75%,#FF9A1A 100%);
  background-size:220% 220%;}
@media (prefers-reduced-motion:no-preference){
  juwel-entity .je-convection{animation:je-convect var(--visc-blob,9s) var(--ease-buoyant,ease-in-out) infinite alternate;}
  juwel-entity.je-hot .je-convection{animation-duration:calc(var(--visc-blob,9s) * .42);opacity:.6;}
}
@keyframes je-convect{
  0%{background-position:15% 25%;transform:rotate(0deg) scale(1);}
  100%{background-position:82% 72%;transform:rotate(9deg) scale(1.05);}
}
/* satellite blobs — capped at 3, low opacity, blurred: they orbit her glow
   radius without ever fighting her face or reading as clutter (§6.2 cap) */
juwel-entity .je-sat{position:absolute;top:50%;left:50%;z-index:-1;width:24%;height:24%;border-radius:50%;
  pointer-events:none;opacity:.36;filter:blur(7px);will-change:transform;
  background:radial-gradient(circle at 32% 28%,#fff8,var(--je-sat-c,#FF9A1A) 55%,transparent 78%);}
juwel-entity .je-sat.s2{--je-sat-c:#3ECF8E;width:19%;height:19%;}
juwel-entity .je-sat.s3{--je-sat-c:#5BB7FF;width:15%;height:15%;}
@media (prefers-reduced-motion:no-preference){
  juwel-entity .je-sat{animation:je-orbit var(--sd,10s) var(--ease-buoyant,ease-in-out) infinite alternate;}
  juwel-entity.je-hot .je-sat{animation-duration:calc(var(--sd,10s) * .55);}
}
@keyframes je-orbit{
  from{transform:translate(-50%,-50%) translate(0,10%) scale(.9);}
  to  {transform:translate(-50%,-50%) translate(var(--sx,8%),-55%) scale(1.08);}
}
juwel-entity[static] .je-convection,juwel-entity[static] .je-sat{display:none;}
@media (prefers-reduced-motion:reduce){
  juwel-entity .je-convection,juwel-entity .je-sat{animation:none!important;}
}
