/* Edit behaves exactly like the other Text presets: one compact item in the
   preset rail, with the same selected-button treatment and no extra labels. */
#page-text-presets #presetGrid > .qx-layer-edit-card {
  order: -2147483647 !important;
  flex: 0 0 44px !important;
  cursor: pointer !important;
}
#page-text-presets #presetGrid > .qx-layer-edit-card .preset-thumb,
#page-text-presets #presetGrid > .qx-layer-edit-card .preset-icon,
#page-text-presets #presetGrid > .qx-layer-edit-card .icon-tile {
  width: 100% !important;
  height: 100% !important;
  display: grid !important;
  place-items: center !important;
}
#page-text-presets #presetGrid > .qx-layer-edit-card .icon-mini-text {
  font-size: 10px !important;
  letter-spacing: -.025em !important;
}

.qx-layer-edit-flyout {
  position: fixed;
  z-index: 2147483000;
  display: none;
  max-height: min(320px, calc(100vh - 12px));
  overflow: auto;
  padding: 4px;
  border: 1px solid color-mix(in srgb, var(--qwix-accent, #ff8a55) 38%, var(--aptk-border, #6f655d));
  border-radius: 9px;
  background: color-mix(in srgb, var(--aptk-surface, #272422) 96%, black);
  box-shadow: 0 12px 34px rgba(0, 0, 0, .38);
}
.qx-layer-edit-flyout.is-open { display: block; }
.qx-layer-edit-option {
  width: 100%;
  min-height: 28px;
  display: grid;
  grid-template-columns: 7px minmax(0, 1fr);
  gap: 8px;
  align-items: center;
  padding: 5px 7px;
  border: 0;
  border-radius: 7px;
  background: transparent;
  color: var(--aptk-text, #f4efe9);
  font: 600 10px/1.25 var(--aptk-font, Inter, sans-serif);
  text-align: left;
  cursor: pointer;
}
.qx-layer-edit-option.is-text-option {
  grid-template-columns: minmax(0, 1fr);
  padding-left: 9px;
  padding-right: 9px;
}
.qx-layer-edit-option > span:last-child {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.qx-layer-edit-option:hover,
.qx-layer-edit-option:focus-visible {
  outline: 0;
  background: color-mix(in srgb, var(--qwix-accent, #ff8a55) 18%, transparent);
  color: var(--aptk-text-strong, #fff);
}
.qx-layer-edit-option-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--qwix-accent, #ff8a55);
}
.qx-layer-edit-state {
  padding: 9px 10px;
  color: var(--aptk-muted, #a9a19a);
  font: 500 9px/1.35 var(--aptk-font, Inter, sans-serif);
}

#page-text-presets .qx-generic-animator-row {
  display: grid;
  grid-template-columns: minmax(70px, .8fr) minmax(0, 1.2fr);
  gap: 8px;
  align-items: center;
  margin: 6px 0;
}
#page-text-presets .qx-generic-animator-row > label {
  color: var(--aptk-muted-strong, #c3bbb4);
  font-size: 9px;
  line-height: 1.2;
}
#page-text-presets .qx-generic-animator-fields {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(0, 1fr);
  gap: 4px;
}
#page-text-presets .qx-generic-animator-fields input {
  width: 100%;
  min-width: 0;
  height: 25px;
  box-sizing: border-box;
  border: 1px solid var(--aptk-border, #6f655d);
  border-radius: 7px;
  background: var(--aptk-control, #262321);
  color: var(--aptk-text, #f4efe9);
  padding: 0 6px;
  font-size: 9px;
}
#page-text-presets .qx-generic-animator-row.is-readonly { opacity: .58; }
#page-text-presets .qx-generic-animator-update { width: 100%; min-height: 31px; margin-top: 8px; }
#page-text-presets .qx-generic-animator-empty {
  padding: 10px;
  color: var(--aptk-muted, #a9a19a);
  font-size: 9px;
  line-height: 1.35;
}

html[data-qwix-tone="light"] .qx-layer-edit-flyout {
  background: #fffaf5;
  box-shadow: 0 12px 30px rgba(69, 49, 32, .18);
}

/* ===== Expressions Edit: exact Text Edit parity (2026-07-15) ===== */
html body #page-expressions #expressionPresetSwitch > .qx-expression-edit-card{
  order:-10000!important;
  flex:0 0 42px!important;
}
html body #page-expressions #expressionPresetSwitch > .qx-expression-edit-card b{
  color:inherit!important;
  font:inherit!important;
  font-weight:700!important;
  -webkit-text-fill-color:currentColor!important;
}

/* The selected-layer selector is the same collapsed handle used in Text. */
html body #page-expressions #expressionEditPresetPicker.text-edit-preset-picker{
  order:0!important;
  display:none;
  width:100%!important;
  min-width:0!important;
  margin:0!important;
  padding:0!important;
  box-sizing:border-box!important;
}
html body #page-expressions.expression-edit-loaded #expressionEditPresetPicker.text-edit-preset-picker{
  display:block;
}
html body #page-expressions #expressionEditPresetTabs.text-edit-preset-tabs{
  --text-edit-option-count:1;
  position:relative!important;
  display:grid!important;
  grid-template-columns:repeat(var(--text-edit-option-count),minmax(0,1fr))!important;
  gap:5px!important;
  width:100%!important;
  height:auto!important;
  max-height:10px!important;
  min-height:10px!important;
  margin:0!important;
  padding:0!important;
  overflow:hidden!important;
  border:1px solid var(--qwix-border-subtle,rgba(255,255,255,.08))!important;
  border-radius:999px!important;
  background:var(--qwix-surface-soft,rgba(255,255,255,.035))!important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.03)!important;
  transition:max-height .52s cubic-bezier(.2,.78,.22,1),min-height .52s cubic-bezier(.2,.78,.22,1),padding .52s cubic-bezier(.2,.78,.22,1),border-radius .52s cubic-bezier(.2,.78,.22,1),background .38s ease,border-color .38s ease!important;
}
html body #page-expressions #expressionEditPresetTabs.text-edit-preset-tabs::before{
  content:""!important;
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  width:34px!important;
  height:4px!important;
  border-radius:999px!important;
  transform:translate(-50%,-50%)!important;
  background:linear-gradient(180deg,rgba(255,255,255,.28),rgba(255,255,255,.12))!important;
  box-shadow:0 1px 3px rgba(0,0,0,.18)!important;
  opacity:.95!important;
  pointer-events:none!important;
  transition:opacity .28s ease,transform .52s cubic-bezier(.2,.78,.22,1)!important;
}
html body #page-expressions #expressionEditPresetTabs.text-edit-preset-tabs:hover{
  max-height:40px!important;
  min-height:40px!important;
  padding:3px!important;
  border-radius:11px!important;
  background:var(--qwix-surface-soft,rgba(0,0,0,.14))!important;
  border-color:var(--qwix-border,var(--aptk-edge))!important;
  box-shadow:none!important;
}
html body #page-expressions #expressionEditPresetTabs.text-edit-preset-tabs:hover::before{
  opacity:0!important;
  transform:translate(-50%,-95%)!important;
}
html body #page-expressions #expressionEditPresetTabs .text-edit-preset-option{
  width:100%!important;
  min-width:0!important;
  height:32px!important;
  min-height:32px!important;
  margin:0!important;
  padding:0 10px!important;
  border:0!important;
  border-radius:8px!important;
  background:transparent!important;
  background-image:none!important;
  box-shadow:none!important;
  color:var(--qwix-ink-tertiary,var(--aptk-muted))!important;
  font:750 10px/32px Inter,Arial,sans-serif!important;
  text-align:center!important;
  white-space:nowrap!important;
  opacity:0!important;
  transform:translateY(-7px)!important;
  pointer-events:none!important;
  outline:0!important;
  transition:opacity .30s ease .10s,transform .52s cubic-bezier(.2,.78,.22,1),background-color .22s ease,color .22s ease,box-shadow .22s ease!important;
}
html body #page-expressions #expressionEditPresetTabs:hover .text-edit-preset-option{
  opacity:1!important;
  transform:translateY(0)!important;
  pointer-events:auto!important;
}
html body #page-expressions #expressionEditPresetTabs .text-edit-preset-option:hover{
  background:var(--qwix-surface-hover,rgba(255,255,255,.07))!important;
  color:var(--qwix-ink,var(--aptk-text))!important;
}
html body #page-expressions #expressionEditPresetTabs .text-edit-preset-option.is-active{
  background:var(--aptk-primary,var(--aptk-detail))!important;
  color:var(--qwix-accent-ink,#241C16)!important;
  box-shadow:0 0 0 1px rgba(255,255,255,.06),0 5px 14px rgba(0,0,0,.13)!important;
}
html body #page-expressions #expressionEditPresetTabs.text-edit-preset-tabs:focus-within:not(:hover){
  max-height:10px!important;
  min-height:10px!important;
  padding:0!important;
  border-radius:999px!important;
  background:var(--qwix-surface-soft,rgba(255,255,255,.035))!important;
}
html body #page-expressions #expressionEditPresetTabs.text-edit-preset-tabs:focus-within:not(:hover)::before{
  opacity:.95!important;
  transform:translate(-50%,-50%)!important;
}
html body #page-expressions #expressionEditPresetTabs.text-edit-preset-tabs:focus-within:not(:hover) .text-edit-preset-option{
  opacity:0!important;
  transform:translateY(-7px)!important;
  pointer-events:none!important;
}
html[data-qwix-tone="light"] body #page-expressions #expressionEditPresetTabs.text-edit-preset-tabs::before,
html[data-aptk-mode="suede"] body #page-expressions #expressionEditPresetTabs.text-edit-preset-tabs::before{
  background:linear-gradient(180deg,rgba(76,58,37,.28),rgba(76,58,37,.12))!important;
}

html body #page-expressions.expression-edit-active #exprJumpMode:disabled,
html body #page-expressions.expression-edit-active #exprPopUpMode:disabled,
html body #page-expressions.expression-edit-active #exprSpinMode:disabled,
html body #page-expressions.expression-edit-active #exprBlurMode:disabled,
html body #page-expressions.expression-edit-active #exprJumpMode:disabled + .aptk-custom-select-trigger,
html body #page-expressions.expression-edit-active #exprPopUpMode:disabled + .aptk-custom-select-trigger,
html body #page-expressions.expression-edit-active #exprSpinMode:disabled + .aptk-custom-select-trigger,
html body #page-expressions.expression-edit-active #exprBlurMode:disabled + .aptk-custom-select-trigger{
  opacity:1!important;
  color:inherit!important;
  cursor:default!important;
  -webkit-text-fill-color:currentColor!important;
}

/* Empty state is centered only inside the main/right area, exactly like Text. */
html body #page-expressions .expr-v151-main{
  min-width:0!important;
}
html body #page-expressions #expressionEditMessage.text-edit-message{
  order:0!important;
  display:none;
  width:100%!important;
  height:128px!important;
  min-height:128px!important;
  max-height:128px!important;
  margin:0!important;
  padding:0!important;
  box-sizing:border-box!important;
  align-items:center!important;
  justify-content:center!important;
  text-align:center!important;
  border:0!important;
  border-radius:0!important;
  background:transparent!important;
  color:var(--qwix-ink-tertiary,var(--aptk-muted))!important;
  font-size:11px!important;
  font-weight:750!important;
  line-height:1.35!important;
  box-shadow:none!important;
  pointer-events:none!important;
}
html body #page-expressions.expression-edit-empty .expr-v151-main{
  display:flex!important;
  flex-direction:column!important;
  min-height:0!important;
}
html body #page-expressions.expression-edit-empty .expression-preview-card,
html body #page-expressions.expression-edit-empty .expression-controls-card{
  display:none!important;
}
html body #page-expressions.expression-edit-pending .expression-preview-card,
html body #page-expressions.expression-edit-pending .expression-controls-card{
  display:none!important;
}
html body #page-expressions.expression-edit-pending #expressionEditMessage.text-edit-message{
  display:none!important;
}
html body #page-expressions.expression-edit-empty #expressionEditMessage.text-edit-message{
  display:flex!important;
  flex:1 1 auto!important;
  align-self:stretch!important;
  width:100%!important;
  height:auto!important;
  min-height:0!important;
  max-height:none!important;
  margin:0!important;
}
html body #page-expressions.expression-edit-loaded #expressionEditMessage.text-edit-message{
  display:none!important;
}
html body #page-expressions.expression-edit-loaded .expression-preview-card,
html body #page-expressions.expression-edit-loaded .expression-controls-card{
  display:flex;
  visibility:visible!important;
}

/* Save stays below the rail in every Expressions state, including Edit. */
html body #v120App #v120Content #page-expressions #saveExpressionPresetBtn{
  display:inline-flex!important;
  flex:0 0 38px!important;
  align-items:center!important;
  justify-content:center!important;
  margin-top:8px!important;
}
html body #v120App #v120Content #page-expressions .expr-v153-left-column{
  gap:0!important;
}
html body #v120App #v120Content #page-expressions .expr-v151-presets-card{
  height:auto!important;
  max-height:none!important;
  flex:1 1 auto!important;
}

/* One smooth transition per real Edit state change; no brightness/filter flash. */
@keyframes qwix-expression-edit-enter{
  /* Keep the real theme colours from the very first frame. The old opacity
     fade made orange slider fills/buttons look brown or grey for ~300 ms,
     which read as a broken value before the editor settled. */
  0%{opacity:1;transform:translate3d(0,10px,0) scale(.995)}
  72%{opacity:1;transform:translate3d(0,-.45px,0) scale(1.00035)}
  100%{opacity:1;transform:translate3d(0,0,0) scale(1)}
}
@keyframes qwix-expression-edit-leave{
  0%{opacity:1;transform:translate3d(0,0,0) scale(1)}
  100%{opacity:0;transform:translate3d(0,-4px,0) scale(.998)}
}
html.qwix-motion-enabled body #page-expressions .qwix-expression-edit-enter-item{
  animation:qwix-expression-edit-enter 360ms cubic-bezier(.2,.78,.22,1) both!important;
  animation-delay:calc(var(--qwix-expression-edit-order,0) * 17ms)!important;
  will-change:opacity,transform;
}
html.qwix-motion-enabled body #page-expressions .qwix-expression-edit-leave-item{
  animation:qwix-expression-edit-leave 105ms ease-in both!important;
  pointer-events:none!important;
  will-change:opacity,transform;
}



/* Expressions Edit restores controls from the selected AE layer in one
   synchronous hydration pass. Disable only slider/toggle colour interpolation
   during that pass, then let the normal Edit entrance animation run. This
   prevents a stale grey/orange frame without removing page motion. */
html body #page-expressions.expression-edit-hydrating .qwix-slider-visual-fill,
html body #page-expressions.expression-edit-hydrating .qwix-slider-visual-thumb,
html body #page-expressions.expression-edit-hydrating .qwix-slider-visual-preview,
html body #page-expressions.expression-edit-hydrating .qwix-slider-visual-track,
html body #page-expressions.expression-edit-hydrating .qwix-slider-shell,
html body #page-expressions.expression-edit-hydrating input[type="range"],
html body #page-expressions.expression-edit-hydrating .expression-toggle-row,
html body #page-expressions.expression-edit-hydrating .expression-toggle-badge,
html body #page-expressions.expression-edit-hydrating .toggle-switch,
html body #page-expressions.expression-edit-hydrating .toggle-switch::before{
  transition:none!important;
}
html body #page-expressions.expression-edit-hydrating .qwix-slider-visual-fill,
html body #page-expressions.expression-edit-hydrating .qwix-slider-visual-thumb,
html body #page-expressions.expression-edit-hydrating .qwix-slider-visual-preview{
  animation:none!important;
}

/* Normal Expressions presets are prepared before their first visible frame.
   This removes the old Custom/Wiggle flash while preserving the soft reveal. */
@keyframes qwix-expression-preset-enter{
  0%{opacity:0;transform:translate3d(0,8px,0) scale(.997)}
  100%{opacity:1;transform:translate3d(0,0,0) scale(1)}
}
html.qwix-motion-enabled body #page-expressions .qwix-expression-entry-prepared{
  opacity:0!important;
  transform:translate3d(0,8px,0) scale(.997)!important;
}
html.qwix-motion-enabled body #page-expressions .qwix-expression-entry-item{
  animation:qwix-expression-preset-enter 340ms cubic-bezier(.2,.78,.22,1) both!important;
  animation-delay:calc(var(--qwix-expression-entry-order,0) * 16ms)!important;
  will-change:opacity,transform;
}

@media (prefers-reduced-motion:reduce){
  html.qwix-motion-enabled body #page-expressions .qwix-expression-edit-enter-item,
  html.qwix-motion-enabled body #page-expressions .qwix-expression-edit-leave-item,
  html.qwix-motion-enabled body #page-expressions .qwix-expression-entry-item{
    animation:none!important;
  }
  html.qwix-motion-enabled body #page-expressions .qwix-expression-entry-prepared{
    opacity:1!important;
    transform:none!important;
  }
}


/* The base editor remains logically active so quick controls, Clear and Save
   keep using the correct kind. In Edit it is painted exactly like an inactive
   rail item; only Edit receives the selected appearance. */
html body #v120App #v120Content #page-expressions.expression-edit-active #expressionPresetSwitch > .expression-preset-tab.is-active:not(.qx-expression-edit-card){
  color:var(--aptk-text,var(--v152-text,#F4F4F5))!important;
  opacity:.42!important;
  background:transparent!important;
  background-color:transparent!important;
  background-image:none!important;
  border-color:transparent!important;
  box-shadow:none!important;
  transform:none!important;
}
html body #v120App #v120Content #page-expressions.expression-edit-active #expressionPresetSwitch > .expression-preset-tab.is-active:not(.qx-expression-edit-card) b{
  color:inherit!important;
  opacity:1!important;
  font-weight:700!important;
  -webkit-text-fill-color:currentColor!important;
}

/* ===== Expressions Edit: silent empty state, real picker handle and page motion (2026-07-16 v7) ===== */
html body #page-expressions #expressionEditPresetPicker.text-edit-preset-picker{
  position:relative!important;
  width:100%!important;
  min-width:0!important;
  height:12px!important;
  min-height:12px!important;
  max-height:12px!important;
  margin:0!important;
  padding:0!important;
  overflow:visible!important;
  border:0!important;
  border-radius:999px!important;
  background:transparent!important;
  box-shadow:none!important;
  box-sizing:border-box!important;
  transition:height .46s cubic-bezier(.2,.78,.22,1),min-height .46s cubic-bezier(.2,.78,.22,1),max-height .46s cubic-bezier(.2,.78,.22,1)!important;
}
html body #page-expressions #expressionEditPresetPicker:hover,
html body #page-expressions #expressionEditPresetPicker:focus-within{
  height:40px!important;
  min-height:40px!important;
  max-height:40px!important;
}
html body #page-expressions #expressionEditPresetPicker .text-edit-picker-handle{
  position:absolute!important;
  z-index:2!important;
  left:0!important;
  right:0!important;
  top:0!important;
  height:12px!important;
  min-height:12px!important;
  display:block!important;
  overflow:hidden!important;
  border:0!important;
  border-radius:999px!important;
  background:var(--qwix-surface-soft,rgba(255,255,255,.035))!important;
  box-shadow:inset 0 0 0 1px var(--qwix-border-subtle,rgba(255,255,255,.08)),inset 0 1px 0 rgba(255,255,255,.03)!important;
  opacity:1!important;
  transform:translate3d(0,0,0)!important;
  transform-origin:center top!important;
  pointer-events:none!important;
  transition:opacity .18s ease,transform .34s cubic-bezier(.2,.78,.22,1)!important;
}
html body #page-expressions #expressionEditPresetPicker .text-edit-picker-handle > span{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  width:34px!important;
  height:4px!important;
  border-radius:999px!important;
  background:linear-gradient(180deg,rgba(255,255,255,.28),rgba(255,255,255,.12))!important;
  box-shadow:0 1px 3px rgba(0,0,0,.18)!important;
  transform:translate(-50%,-50%)!important;
}
html body #page-expressions #expressionEditPresetPicker:hover .text-edit-picker-handle,
html body #page-expressions #expressionEditPresetPicker:focus-within .text-edit-picker-handle{
  opacity:0!important;
  transform:translate3d(0,-2px,0) scaleY(.78)!important;
}
html body #page-expressions #expressionEditPresetTabs.text-edit-preset-tabs{
  position:absolute!important;
  z-index:1!important;
  inset:0!important;
  display:grid!important;
  grid-template-columns:repeat(var(--text-edit-option-count),minmax(0,1fr))!important;
  gap:5px!important;
  width:100%!important;
  min-width:0!important;
  max-width:100%!important;
  height:40px!important;
  min-height:40px!important;
  max-height:40px!important;
  margin:0!important;
  padding:3px!important;
  overflow:hidden!important;
  border:1px solid var(--qwix-border,var(--aptk-edge))!important;
  border-radius:12px!important;
  background:var(--qwix-surface-soft,rgba(0,0,0,.14))!important;
  box-shadow:none!important;
  box-sizing:border-box!important;
  opacity:0!important;
  transform:translate3d(0,-4px,0) scaleY(.84)!important;
  transform-origin:center top!important;
  pointer-events:none!important;
  transition:opacity .20s ease,transform .46s cubic-bezier(.2,.78,.22,1)!important;
  -webkit-clip-path:none!important;
  clip-path:none!important;
}
html body #page-expressions #expressionEditPresetTabs.text-edit-preset-tabs::before,
html body #page-expressions #expressionEditPresetTabs.text-edit-preset-tabs::after{
  content:none!important;
  display:none!important;
}
html body #page-expressions #expressionEditPresetPicker:hover #expressionEditPresetTabs,
html body #page-expressions #expressionEditPresetPicker:focus-within #expressionEditPresetTabs{
  opacity:1!important;
  transform:translate3d(0,0,0) scaleY(1)!important;
  pointer-events:auto!important;
}
html body #page-expressions #expressionEditPresetTabs .text-edit-preset-option{
  opacity:1!important;
  transform:none!important;
  pointer-events:auto!important;
  transition:background-color .18s ease,color .18s ease,box-shadow .18s ease!important;
}

@keyframes qwix-expression-edit-enter{
  0%{opacity:0;transform:translate3d(0,14px,0) scale(.994)}
  72%{opacity:1;transform:translate3d(0,-.6px,0) scale(1.0005)}
  100%{opacity:1;transform:translate3d(0,0,0) scale(1)}
}
html.qwix-motion-enabled body #page-expressions .qwix-expression-edit-enter-item{
  animation:qwix-expression-edit-enter var(--qwix-motion-page) var(--qwix-motion-out) both!important;
  animation-delay:calc(var(--qwix-expression-edit-order,0) * var(--qwix-motion-stagger))!important;
}
@keyframes qwix-expression-preset-enter{
  0%{opacity:0;transform:translate3d(0,14px,0) scale(.994)}
  72%{opacity:1;transform:translate3d(0,-.6px,0) scale(1.0005)}
  100%{opacity:1;transform:translate3d(0,0,0) scale(1)}
}
html.qwix-motion-enabled body #page-expressions .qwix-expression-entry-prepared{
  opacity:0!important;
  transform:translate3d(0,14px,0) scale(.994)!important;
}
html.qwix-motion-enabled body #page-expressions .qwix-expression-entry-item{
  animation:qwix-expression-preset-enter var(--qwix-motion-page) var(--qwix-motion-out) both!important;
  animation-delay:calc(var(--qwix-expression-entry-order,0) * var(--qwix-motion-stagger))!important;
}

/* v8: Expressions normal/Edit switches use the canonical main-page entrance,
   not a visually similar copy. */
html.qwix-motion-enabled body #page-expressions .qwix-expression-edit-enter-item,
html.qwix-motion-enabled body #page-expressions .qwix-expression-entry-item{
  animation-name:qwix-page-reveal-up!important;
}

/* Empty/pending Edit always owns the whole content area. Match and exceed the
   high-specificity Custom layout rules from qwix-core.css so Apply/Clear can
   never leak back in when the user enters Edit from Custom. */
html body #v120App #v120Content #page-expressions.expression-edit-empty .expression-apply-row,
html body #v120App #v120Content #page-expressions.expression-edit-pending .expression-apply-row,
html body #v120App #v120Content #page-expressions.expression-edit-empty .expr-custom-panel-actions-row,
html body #v120App #v120Content #page-expressions.expression-edit-pending .expr-custom-panel-actions-row,
html body #v120App #v120Content #page-expressions.expression-edit-empty .expression-page-pro.is-custom-code-mode .expr-custom-panel-actions-row,
html body #v120App #v120Content #page-expressions.expression-edit-pending .expression-page-pro.is-custom-code-mode .expr-custom-panel-actions-row{
  display:none!important;
}


/* ===== Text Edit picker root fix (2026-07-16 v2) =====
   The picker must not live inside Text's overflow:hidden preview-card. It is a
   separate row in the page grid, so no parent radius can clip its ends. */
html body #page-text-presets .text-page-compact.qx-text-edit-picker-visible{
  grid-template-rows:auto minmax(0,1fr)!important;
  row-gap:var(--qwix-major-gap,8px)!important;
}
html body #page-text-presets .text-page-compact.qx-text-edit-picker-visible > .v121-text-left-stack{
  grid-column:1!important;
  grid-row:1 / span 2!important;
  min-height:0!important;
  height:100%!important;
}
html body #page-text-presets .text-page-compact.qx-text-edit-picker-visible > #qxTextLayerEditPicker{
  grid-column:2!important;
  grid-row:1!important;
  align-self:start!important;
}
html body #page-text-presets .text-page-compact.qx-text-edit-picker-visible > .preview-card{
  grid-column:2!important;
  grid-row:2!important;
  min-height:0!important;
  height:100%!important;
}
html body #page-text-presets .text-page-compact:not(.qx-text-edit-picker-visible) > .preview-card{
  grid-column:2!important;
  grid-row:1!important;
}

html body #page-text-presets #qxTextLayerEditPicker.qx-text-layer-edit-picker[hidden]{
  display:none!important;
  width:0!important;
  height:0!important;
  min-height:0!important;
  max-height:0!important;
  margin:0!important;
  padding:0!important;
}
html body #page-text-presets #qxTextLayerEditPicker.qx-text-layer-edit-picker{
  position:relative!important;
  display:block!important;
  width:100%!important;
  min-width:0!important;
  height:12px!important;
  min-height:12px!important;
  max-height:12px!important;
  margin:0!important;
  padding:0!important;
  overflow:visible!important;
  border:0!important;
  border-radius:6px!important;
  background:transparent!important;
  box-shadow:none!important;
  box-sizing:border-box!important;
  isolation:isolate!important;
  transition:height .46s cubic-bezier(.2,.78,.22,1),min-height .46s cubic-bezier(.2,.78,.22,1),max-height .46s cubic-bezier(.2,.78,.22,1)!important;
}
html body #page-text-presets #qxTextLayerEditPicker.qx-text-layer-edit-picker.is-open{
  height:40px!important;
  min-height:40px!important;
  max-height:40px!important;
}

html body #page-text-presets #qxTextLayerEditPicker .qx-text-layer-edit-handle{
  position:absolute!important;
  z-index:3!important;
  inset:0 0 auto 0!important;
  width:100%!important;
  height:12px!important;
  min-height:12px!important;
  margin:0!important;
  padding:0!important;
  overflow:hidden!important;
  border:1px solid var(--qwix-border-subtle,rgba(255,255,255,.08))!important;
  border-radius:6px!important;
  background:var(--qwix-surface-soft,rgba(255,255,255,.035))!important;
  background-image:none!important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.03)!important;
  box-sizing:border-box!important;
  opacity:1!important;
  transform:none!important;
  pointer-events:none!important;
  -webkit-clip-path:none!important;
  clip-path:none!important;
  transition:opacity .18s ease!important;
}
html body #page-text-presets #qxTextLayerEditPicker .qx-text-layer-edit-handle::before,
html body #page-text-presets #qxTextLayerEditPicker .qx-text-layer-edit-handle::after{
  content:none!important;
  display:none!important;
}
html body #page-text-presets #qxTextLayerEditPicker .qx-text-layer-edit-handle > span{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  width:34px!important;
  height:4px!important;
  margin:0!important;
  border-radius:2px!important;
  background:linear-gradient(180deg,rgba(255,255,255,.28),rgba(255,255,255,.12))!important;
  box-shadow:0 1px 3px rgba(0,0,0,.18)!important;
  transform:translate(-50%,-50%)!important;
}
html body #page-text-presets #qxTextLayerEditPicker.is-open .qx-text-layer-edit-handle{
  opacity:0!important;
}

html body #page-text-presets #qxTextLayerEditTabs.qx-text-layer-edit-tabs{
  --text-edit-option-count:1;
  position:absolute!important;
  z-index:2!important;
  inset:0!important;
  display:grid!important;
  grid-template-columns:repeat(var(--text-edit-option-count),minmax(0,1fr))!important;
  gap:5px!important;
  width:100%!important;
  min-width:0!important;
  max-width:100%!important;
  height:40px!important;
  min-height:40px!important;
  max-height:40px!important;
  margin:0!important;
  padding:3px!important;
  overflow:hidden!important;
  border:1px solid var(--qwix-border,var(--aptk-edge))!important;
  border-radius:12px!important;
  background:var(--qwix-surface-soft,rgba(0,0,0,.14))!important;
  background-image:none!important;
  box-shadow:none!important;
  box-sizing:border-box!important;
  opacity:0!important;
  transform:translate3d(0,-4px,0) scaleY(.84)!important;
  transform-origin:center top!important;
  pointer-events:none!important;
  -webkit-clip-path:none!important;
  clip-path:none!important;
  transition:opacity .20s ease,transform .46s cubic-bezier(.2,.78,.22,1)!important;
}
html body #page-text-presets #qxTextLayerEditTabs::before,
html body #page-text-presets #qxTextLayerEditTabs::after{
  content:none!important;
  display:none!important;
}
html body #page-text-presets #qxTextLayerEditPicker.is-open #qxTextLayerEditTabs{
  opacity:1!important;
  transform:translate3d(0,0,0) scaleY(1)!important;
  pointer-events:auto!important;
}

html body #page-text-presets #qxTextLayerEditTabs .qx-text-layer-edit-selection{
  position:absolute!important;
  z-index:1!important;
  left:0!important;
  top:0!important;
  width:0;
  height:32px;
  margin:0!important;
  border:1px solid rgba(255,255,255,.07)!important;
  border-radius:8px!important;
  background:var(--aptk-primary,var(--aptk-detail))!important;
  box-shadow:0 5px 14px rgba(0,0,0,.13),inset 0 1px 0 rgba(255,255,255,.14)!important;
  opacity:0;
  transform:translate3d(3px,3px,0);
  pointer-events:none!important;
  transition:transform 320ms cubic-bezier(.2,.68,.24,1),width 320ms cubic-bezier(.2,.68,.24,1),height 320ms cubic-bezier(.2,.68,.24,1),border-radius 180ms ease,opacity 120ms ease!important;
}
html body #page-text-presets #qxTextLayerEditTabs .qx-text-layer-edit-option{
  position:relative!important;
  z-index:2!important;
  width:100%!important;
  min-width:0!important;
  height:32px!important;
  min-height:32px!important;
  margin:0!important;
  padding:0 10px!important;
  border:0!important;
  border-radius:8px!important;
  background:transparent!important;
  background-image:none!important;
  box-shadow:none!important;
  color:var(--qwix-ink-tertiary,var(--aptk-muted))!important;
  font:750 10px/32px Inter,Arial,sans-serif!important;
  text-align:center!important;
  white-space:nowrap!important;
  opacity:1!important;
  transform:none!important;
  pointer-events:auto!important;
  outline:0!important;
  transition:color .18s ease,opacity .18s ease!important;
}
html body #page-text-presets #qxTextLayerEditTabs .qx-text-layer-edit-option:hover:not(.is-active){
  color:var(--qwix-ink,var(--aptk-text))!important;
}
html body #page-text-presets #qxTextLayerEditTabs .qx-text-layer-edit-option.is-active{
  background:transparent!important;
  background-image:none!important;
  border-color:transparent!important;
  box-shadow:none!important;
  color:var(--qwix-accent-ink,#241C16)!important;
}
html[data-qwix-tone="light"] body #page-text-presets #qxTextLayerEditPicker .qx-text-layer-edit-handle > span,
html[data-aptk-mode="suede"] body #page-text-presets #qxTextLayerEditPicker .qx-text-layer-edit-handle > span{
  background:linear-gradient(180deg,rgba(76,58,37,.28),rgba(76,58,37,.12))!important;
}


/* ===== Text preset rail selection slide restore (2026-07-16) =====
   Only the independent orange capsule moves; the preset buttons and their
   labels keep their existing size and position. */
html.qwix-motion-enabled body #page-text-presets #presetGrid.qwix-side-dock-root > .qwix-side-selection{
  transition:
    transform 320ms cubic-bezier(.20,.68,.24,1),
    width 320ms cubic-bezier(.20,.68,.24,1),
    height 320ms cubic-bezier(.20,.68,.24,1),
    border-radius 180ms ease,
    opacity 120ms ease!important;
}

/* ===== Expressions Edit picker layout stability (2026-07-16) =====
   The selector grows from 12px to 40px inside the right column. Without an
   explicit minmax(0,1fr) row, CSS Grid briefly follows that intrinsic height
   before the controls card yields space, enlarging the entire page row and
   moving the left preset rail and Save button for a few frames. Keep the page
   row fixed; only the two cards inside the right column redistribute space. */
html body #v120App #v120Content #page-expressions.expression-edit-loaded .expr-v151-layout{
  grid-template-rows:minmax(0,1fr)!important;
  min-height:0!important;
  max-height:100%!important;
}
html body #v120App #v120Content #page-expressions.expression-edit-loaded .expr-v153-left-column,
html body #v120App #v120Content #page-expressions.expression-edit-loaded .expr-v151-main{
  min-height:0!important;
  max-height:100%!important;
}


/* ===== Expressions Edit picker / controls flow fix (2026-07-16) =====
   The picker is a separate row above the preview. Its 12 -> 40px expansion
   moves the preview/actions down while the controls row gives up the same
   amount of height. The outer page row and the left rail remain fixed. */
html body #v120App #v120Content #page-expressions.expression-edit-loaded .expr-v151-main{
  display:grid!important;
  grid-template-rows:auto auto minmax(0,1fr)!important;
  grid-template-columns:minmax(0,1fr)!important;
  align-content:stretch!important;
  align-items:stretch!important;
  height:100%!important;
  min-height:0!important;
  max-height:100%!important;
  overflow:hidden!important;
  gap:var(--qwix-major-gap,8px)!important;
}
html body #v120App #v120Content #page-expressions.expression-edit-loaded #expressionEditPresetPicker{
  grid-column:1!important;
  grid-row:1!important;
  align-self:start!important;
  min-width:0!important;
}
html body #v120App #v120Content #page-expressions.expression-edit-loaded .expression-preview-card{
  grid-column:1!important;
  grid-row:2!important;
  align-self:start!important;
  width:100%!important;
  min-width:0!important;
  height:auto!important;
  min-height:0!important;
  max-height:none!important;
  flex:none!important;
  overflow:visible!important;
}
html body #v120App #v120Content #page-expressions.expression-edit-loaded .expression-controls-card{
  grid-column:1!important;
  grid-row:3!important;
  align-self:stretch!important;
  width:100%!important;
  min-width:0!important;
  height:auto!important;
  min-height:0!important;
  max-height:none!important;
  overflow:auto!important;
}

/* ===== Expressions Edit multi-effect transition stability (2026-07-16) =====
   Hydration changes native selects, their detached visual triggers, and quick
   row placement before the incoming Edit animation. None of those internal
   state restorations should run their own transition. */
html body #page-expressions.expression-edit-hydrating .smart-select-row,
html body #page-expressions.expression-edit-hydrating .smart-select-wrap,
html body #page-expressions.expression-edit-hydrating .aptk-custom-select,
html body #page-expressions.expression-edit-hydrating .aptk-custom-select-trigger,
html body #page-expressions.expression-edit-hydrating .aptk-custom-select-trigger > span,
html body #page-expressions.expression-edit-hydrating .qwix-select-arrow,
html body #page-expressions.expression-edit-hydrating select{
  transition:none!important;
  animation:none!important;
}
html.qwix-motion-enabled body #page-expressions.expression-edit-active .expression-preview-card > .expression-apply-row.qwix-expression-edit-enter-item,
html.qwix-motion-enabled body #page-expressions.expression-edit-active .expression-preview-card > .expression-apply-row.qwix-expression-edit-leave-item{
  will-change:opacity,transform!important;
}
/* Three independent effects fit in one row at the narrow CEP width. Keep the
   labels clipped inside their own cells rather than letting the last one fall
   outside the hidden selector panel. */
html body #page-expressions #expressionEditPresetTabs .qx-expression-edit-preset-option{
  min-width:0!important;
  overflow:hidden!important;
  text-overflow:ellipsis!important;
  white-space:nowrap!important;
}



/* ===== Expressions Custom / Edit — deterministic layout and motion (2026-07-16 v4) =====
   One DOM structure is shared by normal Custom and Edit Custom. Normal Custom
   keeps a fixed 8px field/actions gap. Edit Custom uses a bottom-anchored stage
   so switching from a short standard panel cannot feed back into card height.
   The normal-page adaptive height module is disabled by JS while Edit is active. */

html.qwix-motion-enabled body #page-expressions .qwix-expression-edit-enter-prepared{
  opacity:0!important;
  transform:translate3d(0,14px,0) scale(.994)!important;
  pointer-events:none!important;
}

/* Programmatic value restoration is never its own animation. */
html body #page-expressions.expression-edit-hydrating .expression-preview-card,
html body #page-expressions.expression-edit-hydrating .expression-controls-card,
html body #page-expressions.expression-edit-hydrating .smart-select-row,
html body #page-expressions.expression-edit-hydrating .smart-select-wrap,
html body #page-expressions.expression-edit-hydrating .aptk-custom-select,
html body #page-expressions.expression-edit-hydrating .aptk-custom-select-trigger,
html body #page-expressions.expression-edit-hydrating .expr-custom-textarea,
html body #page-expressions.expression-edit-hydrating .expr-custom-panel-actions-row,
html body #page-expressions.expression-edit-hydrating .expr-custom-panel-actions-row > button,
html body #page-expressions.expression-edit-hydrating select{
  transition:none!important;
  animation:none!important;
}

/* Ordinary Expressions > Custom: code field, 8px gap, action row. */
html body #v120App #v120Content #page-expressions:not(.expression-edit-active) .expression-page-pro.is-custom-code-mode .expr-custom-panel-actions-row{
  margin-top:8px!important;
}

/* Edit Custom: one stable stage below the picker. */
html body #v120App #v120Content #page-expressions.expression-edit-loaded .expression-page-pro.is-custom-code-mode .expr-v151-main{
  position:relative!important;
  display:block!important;
  width:100%!important;
  height:100%!important;
  min-height:0!important;
  max-height:100%!important;
  overflow:hidden!important;
}
html body #v120App #v120Content #page-expressions.expression-edit-loaded .expression-page-pro.is-custom-code-mode #expressionEditPresetPicker{
  position:absolute!important;
  z-index:3!important;
  top:0!important;
  left:0!important;
  right:0!important;
  width:auto!important;
}
html body #v120App #v120Content #page-expressions.expression-edit-loaded .expression-page-pro.is-custom-code-mode .expression-preview-card{
  display:none!important;
}
html body #v120App #v120Content #page-expressions.expression-edit-loaded .expression-page-pro.is-custom-code-mode .expression-controls-card{
  position:absolute!important;
  z-index:1!important;
  top:20px!important;
  right:0!important;
  bottom:8px!important;
  left:0!important;
  display:grid!important;
  grid-template-columns:minmax(0,1fr)!important;
  grid-template-rows:minmax(0,1fr) 38px!important;
  align-items:stretch!important;
  align-content:stretch!important;
  row-gap:8px!important;
  width:auto!important;
  height:auto!important;
  min-height:0!important;
  max-height:none!important;
  padding:10px!important;
  overflow:hidden!important;
  transition:top .46s cubic-bezier(.2,.78,.22,1)!important;
}
html body #v120App #v120Content #page-expressions.expression-edit-loaded .expression-page-pro.is-custom-code-mode #expressionEditPresetPicker:hover ~ .expression-controls-card,
html body #v120App #v120Content #page-expressions.expression-edit-loaded .expression-page-pro.is-custom-code-mode #expressionEditPresetPicker:focus-within ~ .expression-controls-card{
  top:48px!important;
}
html body #v120App #v120Content #page-expressions.expression-edit-loaded .expression-page-pro.is-custom-code-mode #expressionCustomPanel{
  grid-column:1!important;
  grid-row:1!important;
  display:flex!important;
  flex-direction:column!important;
  width:100%!important;
  height:auto!important;
  min-width:0!important;
  min-height:0!important;
  margin:0!important;
  padding:0!important;
  overflow:hidden!important;
}
html body #v120App #v120Content #page-expressions.expression-edit-loaded .expression-page-pro.is-custom-code-mode #expressionCustomPanel .expr-custom-input-wrap{
  display:flex!important;
  flex:1 1 auto!important;
  width:100%!important;
  min-width:0!important;
  min-height:0!important;
  overflow:visible!important;
}
html body #v120App #v120Content #page-expressions.expression-edit-loaded .expression-page-pro.is-custom-code-mode #expressionCustomPanel #exprCustomCodeInput.expr-custom-textarea{
  display:block!important;
  flex:1 1 auto!important;
  width:100%!important;
  height:100%!important;
  min-width:0!important;
  min-height:96px!important;
  max-height:none!important;
  resize:none!important;
}
html body #v120App #v120Content #page-expressions.expression-edit-loaded .expression-page-pro.is-custom-code-mode .expression-controls-card > #exprCustomPanelActionsRow{
  grid-column:1!important;
  grid-row:2!important;
  align-self:stretch!important;
  display:grid!important;
  width:100%!important;
  height:38px!important;
  min-width:0!important;
  min-height:38px!important;
  max-height:38px!important;
  margin:0!important;
}

/* Never leak the Custom action row into a standard effect. */
html body #v120App #v120Content #page-expressions:not(.expression-edit-pending):not(.expression-edit-empty) .expression-page-pro:not(.is-custom-code-mode) .expression-controls-card > #exprCustomPanelActionsRow{
  display:none!important;
}

/* During a real Edit switch, layout/state changes settle invisibly first. */
html body #page-expressions.expression-edit-transitioning .expr-v151-main,
html body #page-expressions.expression-edit-transitioning .expression-preview-card,
html body #page-expressions.expression-edit-transitioning .expression-controls-card,
html body #page-expressions.expression-edit-transitioning .expression-controls-panel,
html body #page-expressions.expression-edit-transitioning .expr-custom-input-wrap,
html body #page-expressions.expression-edit-transitioning .expr-custom-textarea,
html body #page-expressions.expression-edit-transitioning .expr-custom-panel-actions-row,
html body #page-expressions.expression-edit-transitioning .expr-custom-panel-actions-row > button{
  transition:none!important;
}

/* ===== Final Expressions clipping pass (2026-07-16) ===== */
/* Rail labels had a line box exactly equal to the glyph box and several late
   overflow:hidden rules. CEP's rasterizer can therefore shave the final row
   of pixels from descenders. Give the label a real centered line box and let
   the glyph paint outside its own inline box without changing the 42px tab. */
html body #v120App #v120Content #page-expressions #expressionPresetSwitch > .expression-preset-tab,
html body #v120App #v120Content #page-expressions #expressionPresetSwitch > .expr-v151-custom-btn{
  overflow:visible!important;
}
html body #v120App #v120Content #page-expressions #expressionPresetSwitch > .expression-preset-tab > b,
html body #v120App #v120Content #page-expressions #expressionPresetSwitch > .expr-v151-custom-btn > b{
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  width:100%!important;
  min-width:0!important;
  min-height:12px!important;
  height:12px!important;
  max-width:none!important;
  padding:0 0 1px!important;
  margin:0!important;
  line-height:12px!important;
  overflow:visible!important;
  text-overflow:clip!important;
  white-space:nowrap!important;
  box-sizing:content-box!important;
}

/* ON/OFF badges sit at the top-right edge of clipped labels. Stop clipping the
   badge itself and reserve two safe pixels around the glyph. The row geometry
   and checkbox positions remain unchanged. */
html body #v120App #v120Content #page-expressions .expression-check{
  overflow:visible!important;
  padding-right:2px!important;
  text-overflow:clip!important;
}
html body #v120App #v120Content #page-expressions .expression-toggle-badge{
  display:inline-flex!important;
  align-items:center!important;
  justify-content:flex-end!important;
  flex:0 0 auto!important;
  min-width:22px!important;
  max-width:none!important;
  height:18px!important;
  padding:1px 1px 0 2px!important;
  line-height:1!important;
  overflow:visible!important;
  text-overflow:clip!important;
  box-sizing:border-box!important;
}

/* Expressions normal/Edit switches: stronger travel only. The stable outer
   cards, preparation classes and timing remain untouched to avoid flashes. */
@keyframes qwix-expression-internal-enter-strong{
  0%{opacity:0;transform:translate3d(0,16px,0) scale(.993);}
  70%{opacity:1;transform:translate3d(0,-.9px,0) scale(1.0007);}
  100%{opacity:1;transform:translate3d(0,0,0) scale(1);}
}
html.qwix-motion-enabled body #page-expressions .qwix-expression-entry-item,
html.qwix-motion-enabled body #page-expressions .qwix-expression-edit-enter-item{
  animation-name:qwix-expression-internal-enter-strong!important;
}

/* ===== Final geometry-stable page/preset reveals (2026-07-18) =====
   CEP rounds transformed card borders to device pixels. Scaling a whole
   scroll/card container and then removing the animation made its lower edge
   gain or lose 1-3 px. Keep the same vertical travel and settle, but never
   scale containers whose height is adaptive or whose children use aspect-ratio. */
@keyframes qwix-geometry-stable-reveal{
  0%{opacity:0;transform:translate3d(0,14px,0)}
  72%{opacity:1;transform:translate3d(0,-1px,0)}
  100%{opacity:1;transform:translate3d(0,0,0)}
}
@keyframes qwix-geometry-stable-preset-reveal{
  0%{opacity:0;transform:translate3d(0,16px,0)}
  70%{opacity:1;transform:translate3d(0,-1px,0)}
  100%{opacity:1;transform:translate3d(0,0,0)}
}

/* Text: main page entrance and internal preset switches. */
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-page-entering #v124SliderCard.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-page-entering #v124CustomSliderCard.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-page-entering #textGraphDrawer.qwix-page-reveal-item{
  animation-name:qwix-geometry-stable-reveal!important;
}
html.qwix-motion-enabled body #page-text-presets #v124SliderCard.qwix-preset-page-reveal-item,
html.qwix-motion-enabled body #page-text-presets #v124CustomSliderCard.qwix-preset-page-reveal-item,
html.qwix-motion-enabled body #page-text-presets #textGraphDrawer.qwix-preset-page-reveal-item{
  animation-name:qwix-geometry-stable-preset-reveal!important;
}
html body #page-text-presets #v124SliderCard,
html body #page-text-presets #v124CustomSliderCard,
html body #page-text-presets #textGraphDrawer{
  transform:translate3d(0,0,0);
  transform-origin:top center;
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
}

/* Expressions: only the adaptive slider card needs geometry-safe motion.
   Preview motion remains unchanged. */
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entering .expression-controls-card.qwix-page-reveal-item{
  animation-name:qwix-geometry-stable-reveal!important;
}
html.qwix-motion-enabled body #page-expressions .expression-controls-card.qwix-expression-entry-item,
html.qwix-motion-enabled body #page-expressions .expression-controls-card.qwix-expression-edit-enter-item{
  animation-name:qwix-geometry-stable-preset-reveal!important;
}
html body #page-expressions .expression-controls-card{
  transform:translate3d(0,0,0);
  transform-origin:top center;
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
}

/* Tools: keep the lower square row on one compositor layer and use integer
   translation values. Fractional -0.6px settling was enough for Chromium/CEP
   to repaint the bottom border one device pixel lower when animation ended. */
html.qwix-motion-enabled body #v120Content > #page-toolkit.qwix-page-entering .tools-bottom-buttons-row-v146.qwix-page-reveal-item{
  animation-name:qwix-geometry-stable-reveal!important;
}
html body #v120App #v120Content #page-toolkit .tools-bottom-buttons-row-v146{
  transform:translate3d(0,0,0);
  transform-origin:top center!important;
  backface-visibility:hidden!important;
  -webkit-backface-visibility:hidden!important;
  will-change:transform,opacity;
}

/* 2026-07-18: Expressions and geometry-sensitive blocks — double motion
   amplitude. Adaptive cards remain translation-only to prevent CEP from
   changing their lower edge when the animation class is removed. */
@keyframes qwix-expression-internal-enter-strong{
  0%{opacity:0;transform:translate3d(0,32px,0) scale(.986);}
  70%{opacity:1;transform:translate3d(0,-2px,0) scale(1.0014);}
  100%{opacity:1;transform:translate3d(0,0,0) scale(1);}
}
@keyframes qwix-geometry-stable-reveal{
  0%{opacity:0;transform:translate3d(0,28px,0)}
  72%{opacity:1;transform:translate3d(0,-2px,0)}
  100%{opacity:1;transform:translate3d(0,0,0)}
}
@keyframes qwix-geometry-stable-preset-reveal{
  0%{opacity:0;transform:translate3d(0,32px,0)}
  70%{opacity:1;transform:translate3d(0,-2px,0)}
  100%{opacity:1;transform:translate3d(0,0,0)}
}
html.qwix-motion-enabled body #page-expressions .qwix-expression-entry-prepared,
html.qwix-motion-enabled body #page-expressions .qwix-expression-edit-enter-prepared{
  opacity:0 !important;
  transform:translate3d(0,32px,0) scale(.986) !important;
}
/* Prepared adaptive controls must match their translation-only animation. */
html.qwix-motion-enabled body #page-expressions .expression-controls-card.qwix-expression-entry-prepared,
html.qwix-motion-enabled body #page-expressions .expression-controls-card.qwix-expression-edit-enter-prepared{
  transform:translate3d(0,32px,0) !important;
}
html.qwix-motion-enabled body #page-expressions .qwix-expression-entry-item,
html.qwix-motion-enabled body #page-expressions .qwix-expression-edit-enter-item,
html.qwix-motion-enabled body #page-text-presets .qwix-text-edit-enter-item,
html.qwix-motion-enabled body #v120Content > .page.qwix-page-entering .qwix-page-reveal-item{
  backface-visibility:hidden !important;
  -webkit-backface-visibility:hidden !important;
}
@keyframes qwix-expression-edit-leave{
  0%{opacity:1;transform:translate3d(0,0,0) scale(1)}
  100%{opacity:0;transform:translate3d(0,-8px,0) scale(.996)}
}

/* ===== 2026-07-18: softer landing for all page / section / preset motion =====
   Keep the stronger 2x travel, but remove the late overshoot that made cards
   look as though they snapped into their final pixel. Every animation now
   decelerates monotonically into the exact resting transform. */
html.qwix-motion-enabled{
  --qwix-motion-page:430ms;
  --qwix-motion-stagger:24ms;
  --qwix-motion-out:cubic-bezier(.16,.86,.22,1);
}
@keyframes qwix-page-reveal-up{
  0%{opacity:0;transform:translate3d(0,28px,0) scale(.988)}
  100%{opacity:1;transform:translate3d(0,0,0) scale(1)}
}
@keyframes qwix-preset-reveal-strong{
  0%{opacity:0;transform:translate3d(0,32px,0) scale(.986)}
  100%{opacity:1;transform:translate3d(0,0,0) scale(1)}
}
@keyframes qwix-expression-internal-enter-strong{
  0%{opacity:0;transform:translate3d(0,32px,0) scale(.986)}
  100%{opacity:1;transform:translate3d(0,0,0) scale(1)}
}
@keyframes qwix-text-edit-enter-strong{
  0%{opacity:0;transform:translate3d(0,32px,0) scale(.986)}
  100%{opacity:1;transform:translate3d(0,0,0) scale(1)}
}
@keyframes qwix-geometry-stable-reveal{
  0%{opacity:0;transform:translate3d(0,28px,0)}
  100%{opacity:1;transform:translate3d(0,0,0)}
}
@keyframes qwix-geometry-stable-preset-reveal{
  0%{opacity:0;transform:translate3d(0,32px,0)}
  100%{opacity:1;transform:translate3d(0,0,0)}
}
@keyframes qwix-ci-mode-reveal{
  0%{opacity:0;transform:translate3d(0,28px,0) scale(.988)}
  100%{opacity:1;transform:translate3d(0,0,0) scale(1)}
}
@keyframes qwix-local-reveal-soft{
  0%{transform:translate3d(0,6px,0)}
  100%{transform:translate3d(0,0,0)}
}
@keyframes qwix-saved-reveal-soft{
  0%{opacity:.56;transform:translate3d(0,4px,0)}
  100%{opacity:1;transform:translate3d(0,0,0)}
}
html.qwix-motion-enabled .qwix-local-reveal-item{
  animation-duration:320ms!important;
  animation-timing-function:cubic-bezier(.16,.82,.22,1)!important;
  animation-delay:calc(var(--qwix-local-order,0) * 10ms)!important;
}
html.qwix-motion-enabled .qwix-saved-reveal-fallback{
  animation-duration:330ms!important;
  animation-timing-function:cubic-bezier(.16,.82,.22,1)!important;
}
html.qwix-motion-enabled body #page-text-presets .qwix-text-edit-enter-item,
html.qwix-motion-enabled body #page-expressions .qwix-expression-entry-item,
html.qwix-motion-enabled body #page-expressions .qwix-expression-edit-enter-item{
  animation-duration:430ms!important;
  animation-timing-function:cubic-bezier(.16,.86,.22,1)!important;
}
html.qwix-motion-enabled body #page-expressions .qwix-expression-entry-item{
  animation-delay:calc(var(--qwix-expression-entry-order,0) * 24ms)!important;
}

/* Expressions controls: the card keeps its geometry-safe translation, while
   every visible caption and slider enters on its own layer like Text. */
@keyframes qwix-expression-control-piece-enter{
  0%{opacity:0;transform:translate3d(0,14px,0)}
  100%{opacity:var(--qwix-expression-rest-opacity,1);transform:translate3d(0,0,0)}
}
html.qwix-motion-enabled body #page-expressions .qwix-expression-control-piece.qwix-expression-entry-prepared{
  opacity:0!important;
  transform:translate3d(0,14px,0)!important;
}
html.qwix-motion-enabled body #page-expressions .qwix-expression-control-piece.qwix-expression-entry-item{
  animation-name:qwix-expression-control-piece-enter!important;
  animation-duration:430ms!important;
  animation-timing-function:cubic-bezier(.16,.86,.22,1)!important;
  animation-delay:calc(var(--qwix-expression-entry-order,0) * 24ms)!important;
  will-change:opacity,transform;
}
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entering .expression-controls-panel.is-active .expression-section-head.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entering .expression-controls-panel.is-active .expression-warning-note.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entering .expression-controls-panel.is-active .expression-check.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entering .expression-controls-panel.is-active .smart-select-row > .aptk-custom-select-trigger.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entering .expression-controls-panel.is-active .smart-select-row > select.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entering .expression-controls-panel.is-active .smart-control-row > label.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entering .expression-controls-panel.is-active .smart-control-row > .qwix-slider-shell.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entering .expression-controls-panel.is-active .smart-control-row > input[type="range"].qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entering .expression-controls-panel.is-active .expression-scale-mode.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entering .expression-controls-panel.is-active .expr-custom-input-wrap.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entering .expression-controls-panel.is-active .expr-custom-var-row > .qwix-page-reveal-item{
  animation-name:qwix-expression-control-piece-enter!important;
  animation-duration:430ms!important;
  animation-timing-function:cubic-bezier(.16,.86,.22,1)!important;
}
@media (prefers-reduced-motion:reduce){
  html.qwix-motion-enabled body #page-expressions .qwix-expression-control-piece.qwix-expression-entry-item{
    animation:none!important;
  }
  html.qwix-motion-enabled body #page-expressions .qwix-expression-control-piece.qwix-expression-entry-prepared{
    opacity:var(--qwix-expression-rest-opacity,1)!important;
    transform:none!important;
  }
}

/* ===== Preset switch pre-paint guard =====
   Added before preset handlers mutate the DOM. New controls stay hidden until
   their real entrance class is attached, eliminating intermittent instant
   appearances. Expressions deliberately exclude the preview card. */
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing #v121SmartTopControls:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing #v121CustomTopControls:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing #v120TextApplyRow:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing #v121TextApplyRow:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing #v124SliderCard:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing #v124CustomSliderCard:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing .smart-preview-input:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing .text-edit-message:not(.qwix-preset-page-reveal-item){
  opacity:0!important;
  transform:translate3d(0,32px,0) scale(.986)!important;
}
html.qwix-motion-enabled body #page-expressions.qwix-expression-preset-switch-preparing .expression-controls-card:not(.qwix-expression-entry-prepared):not(.qwix-expression-entry-item),
html.qwix-motion-enabled body #page-expressions.qwix-expression-preset-switch-preparing #exprQuickControls.is-visible > .smart-select-row > .aptk-custom-select-trigger:not(.qwix-expression-entry-prepared):not(.qwix-expression-entry-item),
html.qwix-motion-enabled body #page-expressions.qwix-expression-preset-switch-preparing #exprQuickControls.is-visible > .smart-select-row > select:not(.qwix-expression-entry-prepared):not(.qwix-expression-entry-item),
html.qwix-motion-enabled body #page-expressions.qwix-expression-preset-switch-preparing .expression-preview-card .expression-apply-row .expression-apply-action:not(.qwix-expression-entry-prepared):not(.qwix-expression-entry-item),
html.qwix-motion-enabled body #page-expressions.qwix-expression-preset-switch-preparing .expression-preview-card .expression-apply-row #clearExpressionPresetBtn:not(.qwix-expression-entry-prepared):not(.qwix-expression-entry-item),
html.qwix-motion-enabled body #page-expressions.qwix-expression-preset-switch-preparing .expr-custom-panel-actions-row > button:not(.qwix-expression-entry-prepared):not(.qwix-expression-entry-item){
  opacity:0!important;
  transform:translate3d(0,32px,0)!important;
}


/* First authenticated startup: hide the complete Text page, not only the
   controls already discovered by the first layout pass. The class is removed
   only after the final candidate set has its animation first frame attached. */
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-startup-page-gate{
  opacity:0!important;
  pointer-events:none!important;
  transition:none!important;
}

/* ===== 2026-07-18: startup/page pre-paint gate =====
   The active page is measured and marked before the loader or previous page
   can uncover it. This prevents the first Text page from rendering for one
   frame at full opacity and then restarting its entrance animation. */
html.qwix-motion-enabled body #v120Content > .page.qwix-page-entry-prepared .qwix-page-reveal-item{
  opacity:0!important;
  transform:translate3d(0,28px,0) scale(.988)!important;
  animation:none!important;
}
/* Adaptive cards use translation-only motion, matching their real keyframes. */
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-page-entry-prepared #v124SliderCard.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-page-entry-prepared #v124CustomSliderCard.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-page-entry-prepared #textGraphDrawer.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entry-prepared .expression-controls-card.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-toolkit.qwix-page-entry-prepared .tools-bottom-buttons-row-v146.qwix-page-reveal-item{
  transform:translate3d(0,28px,0)!important;
}
/* Expressions child controls have a shorter independent travel. */
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entry-prepared .expression-controls-panel.is-active .expression-section-head.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entry-prepared .expression-controls-panel.is-active .expression-warning-note.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entry-prepared .expression-controls-panel.is-active .expression-check.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entry-prepared .expression-controls-panel.is-active .smart-select-row > .aptk-custom-select-trigger.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entry-prepared .expression-controls-panel.is-active .smart-select-row > select.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entry-prepared .expression-controls-panel.is-active .smart-control-row > label.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entry-prepared .expression-controls-panel.is-active .smart-control-row > .qwix-slider-shell.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entry-prepared .expression-controls-panel.is-active .smart-control-row > input[type="range"].qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entry-prepared .expression-controls-panel.is-active .expression-scale-mode.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entry-prepared .expression-controls-panel.is-active .expr-custom-input-wrap.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-expressions.qwix-page-entry-prepared .expression-controls-panel.is-active .expr-custom-var-row > .qwix-page-reveal-item{
  opacity:0!important;
  transform:translate3d(0,14px,0)!important;
}

/* ===== 2026-07-20: scale-free interface reveals =====
   Keep the existing opacity, vertical travel, duration and stagger, but do not
   scale whole UI containers. This gives Graph preset tiles their resting width
   from the first frame and prevents centered scale rounding from shifting text
   horizontally when reveal classes are removed. */
@keyframes qwix-page-reveal-up{
  0%{opacity:0;transform:translate3d(0,28px,0)}
  100%{opacity:1;transform:translate3d(0,0,0)}
}
@keyframes qwix-preset-reveal-strong{
  0%{opacity:0;transform:translate3d(0,32px,0)}
  100%{opacity:1;transform:translate3d(0,0,0)}
}
@keyframes qwix-expression-internal-enter-strong{
  0%{opacity:0;transform:translate3d(0,32px,0)}
  100%{opacity:1;transform:translate3d(0,0,0)}
}
@keyframes qwix-text-edit-enter-strong{
  0%{opacity:0;transform:translate3d(0,32px,0)}
  100%{opacity:1;transform:translate3d(0,0,0)}
}
@keyframes qwix-ci-mode-reveal{
  0%{opacity:0;transform:translate3d(0,28px,0)}
  100%{opacity:1;transform:translate3d(0,0,0)}
}

/* Match every pre-paint state to the first scale-free animation frame. */
html.qwix-motion-enabled body #v120Content > .page.qwix-page-entry-prepared .qwix-page-reveal-item{
  transform:translate3d(0,28px,0)!important;
}
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing #v121SmartTopControls:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing #v121CustomTopControls:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing #v120TextApplyRow:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing #v121TextApplyRow:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing #v124SliderCard:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing #v124CustomSliderCard:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing .smart-preview-input:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing .text-edit-message:not(.qwix-preset-page-reveal-item){
  transform:translate3d(0,32px,0)!important;
}
html.qwix-motion-enabled body #page-text-presets .qwix-text-edit-enter-prepared{
  transform:translate3d(0,32px,0)!important;
}
html.qwix-motion-enabled body #page-expressions .qwix-expression-entry-prepared,
html.qwix-motion-enabled body #page-expressions .qwix-expression-edit-enter-prepared{
  transform:translate3d(0,32px,0)!important;
}
html.qwix-motion-enabled body #page-colors .qwix-ci-mode-reveal-prepared{
  transform:translate3d(0,28px,0)!important;
}

/* ===== 2026-07-21: reveal states must snap, not glide =====
   Several controls (Save/Import, Apply, dropdown triggers) carry their own
   hover/press transitions that include opacity and transform. CSS transitions
   outrank keyframe animations in the cascade, so the one-frame
   entry-prepared state used to GLIDE from the resting position instead of
   snapping to it — the buttons painted one frame at their final position
   before the entrance animation took over. While any reveal state owns an
   element, its own transitions are suspended. */
html.qwix-motion-enabled body #v120Content > .page.qwix-page-entry-prepared .qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > .page.qwix-page-entering .qwix-page-reveal-item,
html.qwix-motion-enabled body .qwix-preset-page-reveal-item,
html.qwix-motion-enabled body .qwix-local-reveal-item,
html.qwix-motion-enabled body #page-expressions .qwix-expression-entry-prepared,
html.qwix-motion-enabled body #page-expressions .qwix-expression-entry-item,
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing #v121SmartTopControls:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing #v121CustomTopControls:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing #v120TextApplyRow:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing #v121TextApplyRow:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing #v124SliderCard:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing #v124CustomSliderCard:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing .smart-preview-input:not(.qwix-preset-page-reveal-item),
html.qwix-motion-enabled body #page-text-presets.qwix-text-preset-switch-preparing .text-edit-message:not(.qwix-preset-page-reveal-item){
  transition:none!important;
}

/* ===== 2026-07-21: soft label recolor when the selection capsule moves =====
   The side-dock selection capsule slides in 300ms, but the previously
   selected label snapped from accent-ink to muted in a single frame. Give
   the label color the same gentle timing (transform/opacity transitions are
   kept identical to the motion layer defaults). */
html.qwix-motion-enabled body #presetGrid .preset-card .icon-mini-text,
html.qwix-motion-enabled body #expressionPresetSwitch .expression-preset-tab b,
html.qwix-motion-enabled body #expressionPresetSwitch .expression-preset-tab .eyebrow,
html.qwix-motion-enabled body #expressionPresetSwitch .expr-v151-custom-btn b,
html.qwix-motion-enabled body #expressionPresetSwitch .expr-v151-custom-btn span,
html.qwix-motion-enabled body #expressionCustomPresetList .expr-v151-custom-btn b,
html.qwix-motion-enabled body #expressionCustomPresetList .expr-v151-custom-btn span{
  transition:
    transform 170ms var(--qwix-motion-out, cubic-bezier(.16,.86,.22,1)),
    opacity 130ms ease,
    color 260ms ease!important;
}

/* ===== 2026-07-21: inline slider value editing =====
   Double-clicking a value badge turns the number itself into a text field.
   The field inherits the badge typography completely — no backdrop, no
   borders, no popups — and the unit suffix stays as plain, uneditable text. */
input[type="text"].qwix-value-inline-input{
  -webkit-appearance:none!important;
  appearance:none!important;
  display:inline-block!important;
  box-sizing:content-box!important;
  width:3.5ch;
  margin:0!important;
  padding:0!important;
  border:0!important;
  border-radius:0!important;
  outline:none!important;
  background:transparent!important;
  box-shadow:none!important;
  color:inherit!important;
  -webkit-text-fill-color:inherit!important;
  font:inherit!important;
  letter-spacing:inherit!important;
  text-align:right!important;
  caret-color:currentColor!important;
  min-height:0!important;
  height:auto!important;
  line-height:inherit!important;
  vertical-align:baseline!important;
}
input[type="text"].qwix-value-inline-input::selection{
  background:rgba(255,255,255,.22);
}
b.aptk-editable-range-value.qwix-value-editing{
  cursor:text!important;
}
/* Theme overrides (suede/light, etc.) reassert a filled, rounded background
   on all native inputs with higher specificity than a plain class selector —
   without this, the inline value field would show that pill/oval fill behind
   the digits in those themes. Re-flatten it explicitly, matching their specificity. */
html[data-aptk-mode] body input[type="text"].qwix-value-inline-input,
html[data-qwix-tone] body input[type="text"].qwix-value-inline-input{
  background:transparent!important;
  border-color:transparent!important;
  border-radius:0!important;
  box-shadow:none!important;
}



/* ===== Text slider internals: Expressions-parity reveal =====
   The slider card itself keeps the exact proven Qwix 12 Text motion.
   Captions and slider controls use the same independent stagger as Expressions. */
@keyframes qwix-text-control-piece-enter{
  0%{opacity:0;transform:translate3d(0,14px,0)}
  100%{opacity:var(--qwix-text-control-rest-opacity,1);transform:translate3d(0,0,0)}
}
html.qwix-motion-enabled body #page-text-presets .qwix-text-control-piece.qwix-text-control-piece-prepared{
  opacity:0!important;
  transform:translate3d(0,14px,0)!important;
}
html.qwix-motion-enabled body #page-text-presets .qwix-text-control-piece.qwix-text-control-piece-item{
  animation-name:qwix-text-control-piece-enter!important;
  animation-duration:430ms!important;
  animation-timing-function:cubic-bezier(.16,.86,.22,1)!important;
  animation-delay:calc(var(--qwix-text-control-order,0) * 24ms)!important;
  will-change:opacity,transform;
}
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-page-entering .smart-control-row > label.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-page-entering .smart-control-row > .qwix-slider-shell.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-page-entering .smart-control-row > input[type="range"].qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-page-entering .custom-ffx-row > label.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-page-entering .custom-ffx-row > .qwix-slider-shell.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-page-entering .custom-ffx-row > input[type="range"].qwix-page-reveal-item{
  animation-name:qwix-text-control-piece-enter!important;
  animation-duration:430ms!important;
  animation-timing-function:cubic-bezier(.16,.86,.22,1)!important;
}
@media (prefers-reduced-motion:reduce){
  html.qwix-motion-enabled body #page-text-presets .qwix-text-control-piece.qwix-text-control-piece-item{animation:none!important;}
  html.qwix-motion-enabled body #page-text-presets .qwix-text-control-piece.qwix-text-control-piece-prepared{
    opacity:var(--qwix-text-control-rest-opacity,1)!important;
    transform:none!important;
  }
}

/* Text page-entry preparation mirrors Expressions child controls exactly. */
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-page-entry-prepared .smart-control-row > label.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-page-entry-prepared .smart-control-row > .qwix-slider-shell.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-page-entry-prepared .smart-control-row > input[type="range"].qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-page-entry-prepared .custom-ffx-row > label.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-page-entry-prepared .custom-ffx-row > .qwix-slider-shell.qwix-page-reveal-item,
html.qwix-motion-enabled body #v120Content > #page-text-presets.qwix-page-entry-prepared .custom-ffx-row > input[type="range"].qwix-page-reveal-item{
  opacity:0!important;
  transform:translate3d(0,14px,0)!important;
}
html.qwix-motion-enabled body #page-text-presets .qwix-text-control-piece.qwix-text-control-piece-item{
  animation-fill-mode:both!important;
}
