/* ============================================================================
   Varelyno v10 — how things arrive. (Behaviour: v10-motion.js.)

   Pick something in the left menu and that view's items step up into place,
   one after another, row by row, left to right. Nothing scales, nothing else
   arrives, and nothing moves again until the next pick in the menu.

     Gentle       a short step: 10px, a third of a second, 32ms apart.
     Expressive   a longer step: 26px, about half a second, 45ms apart --
                  plus the few extras that only Expressive has: the soft pulse
                  on busy projects, the halo on a focused project, flowing
                  lines, numbers that count up, the sheen on the opening line,
                  and the gentle breathing of waiting badges.
     Still        nothing moves.
   ========================================================================== */

@media(prefers-reduced-motion:no-preference){
  html{--v10-lift:10px;--v10-t:.34s}
  html[data-motion=full]{--v10-lift:26px;--v10-t:.48s}

  #mainContent .v10-step{
    animation:v10-step var(--v10-t) cubic-bezier(.2,.7,.2,1) both;
    animation-delay:var(--v10-d, 0ms);
  }
  @keyframes v10-step{from{opacity:0;translate:0 var(--v10-lift)}to{opacity:1;translate:0 0}}

  /* Dialogs: a small rise, no zoom. */
  html.v-universe .modal-backdrop.show .modal.modal{animation-name:v10-modal-in}
  @keyframes v10-modal-in{from{opacity:0;translate:0 10px}to{opacity:1;translate:0 0}}
}

/* ----------------------------------------------------------------------------
   One owner. The older layers each had their own entrance, and together they
   were the "too much": the whole content faded on EVERY render (app.js adds
   .view-enter each time), the heading rose (universe.js), every card rose on
   its own (universe.css, v9.js), and every tag and chip popped in (polish.css).
   All of those are off inside the page; .v10-step above is the only arrival.
   Menus, pop-ups and hover feedback outside the page are untouched.
   ---------------------------------------------------------------------------- */
#mainContent.view-enter,
#mainContent > .page-head,
#mainContent .universe-card:not(.v10-step),
#mainContent .v9-enter:not(.v10-step),
#mainContent .tag,
#mainContent .rel-chip,
#mainContent .decision-card,
#mainContent .activity-entry,
#mainContent .project-accent-bar,
#mainContent .task-done td,
#mainContent .task-check:checked,
#mainContent .empty,
#mainContent .v10-announce{animation:none}

/* The extras are Expressive's alone: in Gentle these stay still. */
html:not([data-motion=full]) .graph-node.project-node::after,
html:not([data-motion=full]) .graph-node.project-node::before,
html:not([data-motion=full]) .waiting-badge,
html:not([data-motion=full]) .waiting-card .wait-icon,
html:not([data-motion=full]) .v10-announce::after{animation:none}

html[data-motion=off] #mainContent .v10-step{animation:none}

/* ============================================================================
   No text selection on the canvas.

   Dragging the background to pan also swept up whatever text the pointer
   crossed — a zone label like NOW or NEXT — and once a selection existed the
   drag stopped working entirely: you had to click elsewhere to clear it before
   the map would move again. Nothing on the map is text you would ever want to
   copy, so none of it is selectable.

   Inputs are exempt: the filter bar lives inside this card and you must be able
   to select what you typed.
   ========================================================================== */
.network-card,
.graph-viewport,
.graph-world,
.graph-node,
.v10-orbit,
.network-minimap,
.hub-map-panel .zone-label{
  -webkit-user-select:none;
  user-select:none;
  -webkit-touch-callout:none;
}
.network-card input,
.network-card textarea,
.network-card select,
.network-card [contenteditable]{
  -webkit-user-select:auto;
  user-select:auto;
}
/* While a drag is in progress the cursor must not flicker into a text caret. */
.graph-viewport,
.graph-world{cursor:grab}
.graph-viewport:active,
.graph-world:active{cursor:grabbing}
.graph-node{cursor:pointer}
