/* R14: local variable type, restrained projection light, continuous touch feedback.
   This overlay deliberately leaves the R11 business UI and deletion rules intact. */
.luoyin-r14 {
  --ink: #20332e;
  --muted: #536960;
  --touch-ease: cubic-bezier(.22, .72, .24, 1);
  font-family: "Noto Sans SC", "PingFang SC", "Microsoft YaHei", "Segoe UI", sans-serif;
  font-size: 16px;
  font-weight: 400;
  font-synthesis: none;
  color: var(--ink);
  line-height: 1.65;
  position: relative;
  isolation: isolate;
  background: #f3f7f5;
}
.luoyin-r14 button, .luoyin-r14 input, .luoyin-r14 select,
.luoyin-r14 .brand-copy strong, .luoyin-r14 .task-title { font-family: inherit; }
.luoyin-r14 .brand-copy strong, .luoyin-r14 .auth-brand-name { font-weight: 650; letter-spacing: .015em; }
.luoyin-r14 .auth-headline { font-weight: 650; letter-spacing: -.025em; line-height: 1.5; }
.luoyin-r14 .auth-description { font-size: 16px; font-weight: 400; line-height: 1.95; color: #daeae3; }
.luoyin-r14 .auth-footnote { font-size: 14px; line-height: 1.8; color: #c9e1d7; }
.luoyin-r14 .auth-brand-descriptor { color: #c9e1d7; font-weight: 500; }
.luoyin-r14 .auth-panel-head h2 { font-weight: 650; letter-spacing: -.02em; }
.luoyin-r14 .auth-panel > label, .luoyin-r14 .email-verification legend { font-weight: 500; font-size: 14px; }
.luoyin-r14 .auth-panel input { color: #20332e; font-weight: 450; }
.luoyin-r14 .auth-submit { font-weight: 600; letter-spacing: .02em; }
.luoyin-r14 .customer-workspace .section-heading h1,
.luoyin-r14 .customer-workspace .section-heading h2 { font-weight: 650; letter-spacing: -.025em; }
.luoyin-r14 .segments span { font-weight: 500; color: #4c6359; }
.luoyin-r14 .segments input:checked + span { font-weight: 650; }
.luoyin-r14 #choose-folder, .luoyin-r14 #upload-button { font-weight: 600; }
.luoyin-r14 .task-title { font-weight: 600; letter-spacing: -.012em; line-height: 1.65; }
.luoyin-r14 .task-context { color: #526d60; font-weight: 400; }
.luoyin-r14 .task-time { color: #61746b; font-weight: 400; }
.luoyin-r14 .status-text, .luoyin-r14 .result-download-button { font-weight: 600; }
.luoyin-r14 .task-record-delete, .luoyin-r14 .danger-outline { font-weight: 500; }

/* A low-cost moving projection outside the opaque reading surfaces. No video,
   WebGL, animated blur, mouse tracking, timers, or per-frame application work. */
.luoyin-r14.login-mode main { background: transparent; min-height: calc(100vh - 64px); padding-bottom: 36px; }
.luoyin-r14.login-mode main::before { content: none; animation: none; }
.luoyin-r14.workspace-mode { background: #f3f7f5; padding-bottom: 4px; }
.luoyin-r14 .cinema-light { position: fixed; inset: 0; z-index: -1; overflow: hidden; pointer-events: none; }
.luoyin-r14 .cinema-light::before, .luoyin-r14 .cinema-light::after {
  content: ""; position: absolute; width: min(80vw, 1000px); height: min(130vh, 1100px);
  pointer-events: none; animation: luoyin-projection-r14 16s ease-in-out infinite alternate;
  animation-play-state: paused; opacity: .7;
}
.luoyin-r14 .cinema-light::before {
  left: -20%; bottom: -35%;
  background: linear-gradient(118deg, transparent 22%, rgba(73,151,124,.035) 31%, rgba(84,163,133,.22) 43%, rgba(179,215,199,.08) 55%, transparent 64%);
}
.luoyin-r14 .cinema-light::after {
  right: -23%; top: -32%; animation-duration: 20s; animation-delay: -7s; animation-direction: alternate-reverse;
  background: linear-gradient(118deg, transparent 27%, rgba(190,216,207,.08) 38%, rgba(144,182,172,.19) 46%, rgba(232,211,173,.1) 53%, transparent 64%);
}
.luoyin-r14.workspace-mode .cinema-light { opacity: .44; }
.luoyin-r14 .auth-shell { position: relative; background: #fff; box-shadow: 0 24px 72px rgba(18,65,49,.085), 0 2px 8px rgba(18,65,49,.025); }
.luoyin-r14 .auth-brand-panel { background: #124c3e; }
.luoyin-r14 .auth-brand-panel::before {
  content: ""; display: block; position: absolute; pointer-events: none;
  width: 460px; height: 880px; right: -260px; bottom: -250px;
  background: linear-gradient(118deg, transparent 18%, rgba(159,220,191,.015) 28%, rgba(159,220,191,.12) 41%, rgba(159,220,191,.035) 51%, transparent 60%);
  animation: luoyin-panel-light-r14 18s ease-in-out infinite alternate;
  animation-play-state: paused;
}
.luoyin-r14 .auth-stage, .luoyin-r14 .folder-upload-band, .luoyin-r14 .task-list { background: #fff; }
.luoyin-r14[data-background-motion="on"] .cinema-light::before,
.luoyin-r14[data-background-motion="on"] .cinema-light::after,
.luoyin-r14[data-background-motion="on"] .auth-brand-panel::before { animation-play-state: running; }
.luoyin-r14[data-motion-paused="true"] .cinema-light::before,
.luoyin-r14[data-motion-paused="true"] .cinema-light::after,
.luoyin-r14[data-motion-paused="true"] .auth-brand-panel::before { animation-play-state: paused; }
@keyframes luoyin-projection-r14 {
  from { transform: translate3d(-34px, 22px, 0) rotate(-2deg); opacity: .55; }
  to { transform: translate3d(38px, -28px, 0) rotate(2deg); opacity: 1; }
}
@keyframes luoyin-panel-light-r14 {
  from { transform: translate3d(-30px, 18px, 0); opacity: .35; }
  to { transform: translate3d(24px, -20px, 0); opacity: .85; }
}

/* Match the specificity of R10's :not(:disabled) rule, so transform actually
   transitions. Short press / longer release; controls never bounce or drift. */
.luoyin-r14 button:not(:disabled), .luoyin-r14 a.button, .luoyin-r14 .segments label span {
  transition: transform 180ms var(--touch-ease), background-color 180ms ease,
    border-color 180ms ease, box-shadow 180ms ease, color 180ms ease;
}
.luoyin-r14 button:not(:disabled):active, .luoyin-r14 a.button:active,
.luoyin-r14 .segments label:active span { transform: translateY(1px) scale(.99); transition-duration: 85ms; }
.luoyin-r14 button:disabled { transform: none; }
.luoyin-r14 input, .luoyin-r14 select, .luoyin-r14 .folder-drop {
  transition: background-color 180ms ease, border-color 180ms ease, box-shadow 180ms ease;
}
.luoyin-r14 .folder-drop.dragging { border-color: #16715c; background: #eef8f3; box-shadow: inset 0 0 0 1px #16715c, 0 0 0 4px rgba(22,113,92,.07); }
.luoyin-r14 .task-enter, .luoyin-r14 .result-enter { animation: luoyin-state-enter-r14 180ms ease-out; }
@keyframes luoyin-state-enter-r14 { from { opacity: .45; } to { opacity: 1; } }
.luoyin-r14 .background-motion-toggle {
  position: relative; display: block; margin: 12px 20px max(16px, env(safe-area-inset-bottom)) auto;
  min-height: 36px; padding: 7px 12px; border: 1px solid #d6e2da; border-radius: 8px;
  background: #f8fbf9; color: #4c6659; font-size: 12px; line-height: 1.5; font-weight: 500;
  box-shadow: 0 2px 8px rgba(30,64,46,.035); cursor: pointer;
}
.luoyin-r14 .background-motion-toggle[hidden] { display: none; }
.luoyin-r14 .background-motion-toggle:hover { background: #fff; border-color: #a7c3b4; }
.luoyin-r14 .background-motion-toggle:disabled { color: #566c60; cursor: default; }
@media (max-width: 1050px) {
  .luoyin-r14 .auth-description { font-size: 15px; }
  .luoyin-r14 .auth-footnote { font-size: 13px; }
}
@media (max-width: 760px) {
  .luoyin-r14.login-mode main { padding-bottom: 20px; }
  .luoyin-r14 .auth-headline { font-size: 28px; line-height: 1.5; }
  .luoyin-r14 .auth-description { font-size: 14px; }
  .luoyin-r14 .auth-brand-panel::before { width: 360px; height: 500px; right: -180px; bottom: -240px; }
  .luoyin-r14 .cinema-light { opacity: .55; }
  .luoyin-r14 .background-motion-toggle { margin-right: 16px; min-height: 40px; }
}
@media (prefers-reduced-motion: reduce) {
  .luoyin-r14 *, .luoyin-r14 *::before, .luoyin-r14 *::after { animation: none !important; transition: none !important; }
}
@media print {
  .luoyin-r14 .cinema-light, .luoyin-r14 .background-motion-toggle { display: none !important; }
  .luoyin-r14 .auth-brand-panel::before { display: none; }
}
