/* Opening / startup-error card of the DIGIT host (www/digit.html). Solid surfaces, no blur, DIGIT palette. */
.digit-entry{min-height:100svh;box-sizing:border-box;display:grid;place-items:center;padding:24px;background:#f4f3ee;color:#0b1f17;font-family:"IBM Plex Sans Arabic","IBM Plex Sans",system-ui,sans-serif;text-align:center}
.digit-entry-card{box-sizing:border-box;max-width:560px;width:100%;padding:32px;border:1px solid #d7deda;border-radius:16px;background:#fff;box-shadow:0 12px 40px #064e3b0a}
.digit-entry-logo{display:block;object-fit:contain;margin:0 auto 22px}
.digit-entry-card h1{font-size:20px;line-height:1.7;margin:16px 0 8px}
.digit-entry-card p{color:#4f5f57;font-size:15px;line-height:1.9;margin:8px 0 12px}
.digit-entry-card .digit-entry-elapsed{min-height:1.9em;margin:0 0 12px;font-size:13px;color:#5b6b63;font-variant-numeric:tabular-nums}
.digit-entry-list{margin:0 0 12px;padding-inline-start:20px;text-align:start;color:#1f2a24;font-size:15px;line-height:1.9}
.digit-entry-actions{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:16px;min-height:44px}
.digit-entry-actions button,.digit-entry-actions a{font:inherit;font-size:14px;line-height:1.7;min-height:44px;padding:8px 16px;box-sizing:border-box;border-radius:8px}
.digit-entry-actions button{background:#064e3b;color:#fff;border:1px solid #064e3b;cursor:pointer}
.digit-entry-actions a{color:#064e3b;text-decoration:underline;display:inline-flex;align-items:center}
.digit-entry-actions :focus-visible{outline:3px solid #34d399;outline-offset:3px}
/* First paint: the server renders both languages; startup.js has already set <html lang> from the app preference. */
html[lang="ar"] .digit-entry [lang="en"],html[lang="en"] .digit-entry [lang="ar"],html[lang="ar"] .digit-opening [lang="en"],html[lang="en"] .digit-opening [lang="ar"]{display:none}
/* Links to copied screens whose Frappe app is not installed (www/digit.py OPTIONAL_ENGINES). */
html[data-digit-without~="insights"] a[href^="/digit/insights"]{display:none!important}
/* Host notice shown after mount when the record limit cut a record type (indicators may be incomplete). */
.digit-host-notices{position:fixed;inset-inline:16px;bottom:16px;z-index:60;max-width:640px;margin-inline:auto;display:grid;gap:8px}
.digit-host-overlay{position:fixed;inset:0;z-index:70;display:grid;place-items:center;padding:16px;background:#0b1f17d9;font-family:"IBM Plex Sans Arabic","IBM Plex Sans",system-ui,sans-serif;text-align:center}
.digit-host-overlay h1{font-size:20px;line-height:1.7;margin:0 0 8px}
.digit-host-overlay p{color:#4f5f57;font-size:15px;line-height:1.9;margin:8px 0 16px}
.digit-host-notice{box-sizing:border-box;display:flex;gap:12px;align-items:flex-start;padding:12px 16px;border:1px solid #e2c27a;border-radius:12px;background:#fffaf0;color:#3d2e05;box-shadow:0 8px 24px #0000001f;font:14px/1.7 "IBM Plex Sans Arabic","IBM Plex Sans",system-ui,sans-serif}
.digit-host-notice p{margin:0;flex:1}
.digit-host-notice button{font:inherit;min-height:36px;min-width:36px;padding:4px 10px;border:1px solid #c9a24a;border-radius:8px;background:#fff;color:#3d2e05;cursor:pointer}
.digit-host-notice button:focus-visible{outline:3px solid #b7791f;outline-offset:2px}
@media(max-width:480px){.digit-entry{padding:16px}.digit-entry-card{padding:24px 16px}.digit-host-notices{inset-inline:8px;bottom:8px}}


/* Opening screen (user request 2026-10-24, www/digit.html #root before React mounts). The DIGIT mark is drawn with the
   exact geometry of digit_ui/logo.svg (100-unit tile, rx 24; bars at x18 y22.5/43.5/64.5, h13) as HTML boxes so its
   motion is transform/opacity only and stays on the compositor while the main thread parses the boot data. Behind it a
   still, native hint of the shell (dock, module rail, section panel, header, page band) is frosted and tinted. The
   screen only ever covers these still shapes (never the mounted app), so they are blurred once with a static filter:
   measured on ent at 1440 px, a backdrop-filter veil was recomputed on every animation frame (about 30 fps, any radius)
   while this cached blur keeps 60 fps with the same look. The blur never covers an error card or the Retry button
   (those replace #root). React removes the whole block on mount, so no animation outlives the opening; nothing waits a minimum time. */
.digit-opening{position:fixed;inset:0;display:grid;place-items:center;overflow:hidden;background:#f4f3ee;color:#0b1f17;font-family:"IBM Plex Sans Arabic","IBM Plex Sans",system-ui,sans-serif;text-align:center}
.digit-opening-scene{position:absolute;inset:0;display:flex;filter:blur(18px)}
.digit-opening-scene>i{display:block;flex:none}
.digit-opening-dock{width:64px;background:#eceee8;border-inline-end:1px solid #d7deda}
.digit-opening-rail{width:72px;background:#0f3d2f}
.digit-opening-side{width:231px;background:#1f4c3b}
.digit-opening-page{display:block;flex:1 1 auto;min-width:0}
.digit-opening-head{display:block;height:56px;background:#fff;border-bottom:1px solid #d7deda}
.digit-opening-band{display:block;height:150px;margin:20px 24px 0;border-radius:14px;background:#064e3b}
.digit-opening-veil{position:absolute;inset:0;background:#f4f3eeb3}
.digit-opening-center{position:relative;box-sizing:border-box;width:min(460px,100%);padding:24px 20px;display:flex;flex-direction:column;align-items:center}
.digit-mark{--s:clamp(76px,6vw + 30px,104px);position:relative;display:block;width:var(--s);height:var(--s);margin-bottom:26px;direction:ltr}
.digit-mark::before{content:"";position:absolute;inset:-42%;border-radius:50%;background:radial-gradient(closest-side,#34d3994d,#34d39900);opacity:.7}
.digit-mark-tile{position:absolute;inset:0;overflow:hidden;border-radius:24%;background:#064e3b;box-shadow:0 14px 34px #064e3b2e}
.digit-mark-tile i{position:absolute;display:block;left:18%;height:13%;border-radius:calc(var(--s) * .065);background:#fff;transform-origin:left center}
.digit-mark-tile .digit-mark-b1{top:22.5%;width:40%}
.digit-mark-tile .digit-mark-b2{top:22.5%;left:63%;width:19%;border-radius:calc(var(--s) * .05);background:#34d399;transform-origin:center}
.digit-mark-tile .digit-mark-b3{top:43.5%;width:64%}
.digit-mark-tile .digit-mark-b4{top:64.5%;width:50%}
.digit-mark-sheen{position:absolute;inset:0;background:linear-gradient(105deg,#fff0 30%,#ffffff2e 50%,#fff0 70%);opacity:0}
.digit-opening h1{margin:0;font-size:18px;font-weight:600;line-height:1.6}
.digit-opening p{margin:4px 0 0;color:#4f5f57;font-size:14px;line-height:1.75}
.digit-opening .digit-entry-elapsed{min-height:0;color:#5b6b63;font-size:13px;font-variant-numeric:tabular-nums}
.digit-opening .digit-entry-elapsed:empty,.digit-opening .digit-entry-actions:empty{display:none}
.digit-opening .digit-entry-actions{margin-top:16px}
@media (prefers-reduced-motion:no-preference){
.digit-mark{animation:dgo-in .5s cubic-bezier(.2,.8,.2,1) both}
.digit-mark::before{animation:dgo-breathe 3s ease-in-out .6s infinite alternate}
.digit-mark-b1{animation:dgo-build .55s cubic-bezier(.2,.8,.2,1) .12s both,dgo-wave 3s ease-in-out 1.1s infinite}
.digit-mark-b3{animation:dgo-build .55s cubic-bezier(.2,.8,.2,1) .24s both,dgo-wave 3s ease-in-out 1.3s infinite}
.digit-mark-b4{animation:dgo-build .55s cubic-bezier(.2,.8,.2,1) .36s both,dgo-wave 3s ease-in-out 1.5s infinite}
.digit-mark-b2{animation:dgo-pop .45s cubic-bezier(.3,1.4,.5,1) .55s both,dgo-pulse 3s ease-in-out 1.7s infinite}
.digit-mark-sheen{animation:dgo-sheen 3s ease-in-out 1s infinite}
.digit-opening-text{animation:dgo-fade .4s ease .2s both}
}
@keyframes dgo-in{from{opacity:0;transform:scale(.9)}}
@keyframes dgo-breathe{from{opacity:.45;transform:scale(.94)}to{opacity:.85;transform:scale(1.04)}}
@keyframes dgo-build{from{opacity:0;transform:scaleX(.15)}}
@keyframes dgo-wave{0%,45%,100%{opacity:1;transform:none}18%{opacity:.82;transform:scaleX(.88)}}
@keyframes dgo-pop{from{opacity:0;transform:scale(.3)}}
@keyframes dgo-pulse{0%,40%,100%{transform:none}20%{transform:scale(1.14)}}
@keyframes dgo-sheen{0%{opacity:0;transform:translateX(-100%)}10%{opacity:1}42%{opacity:1;transform:translateX(100%)}43%,100%{opacity:0;transform:translateX(100%)}}
@keyframes dgo-fade{from{opacity:0;transform:translateY(4px)}}
@media (max-width:1023px){.digit-opening-scene>.digit-opening-side{display:none}}
@media (max-width:767px){.digit-opening-scene>.digit-opening-dock,.digit-opening-scene>.digit-opening-rail{display:none}.digit-opening-head{height:52px}.digit-opening-band{height:180px;margin:12px 12px 0}}

/* App dock (user request, 2026-10-20): the Desk item is not shown in the dock; /desk stays reachable from the
   Administration navigation ("Desk Home") and the host's entry cards. The wrapper carries its own separator line. */
[data-dock-desk-wrap]{display:none!important}

/* Field backgrounds (user request, 2026-10-21): every input uses the field colour (--card: white in the light theme,
   the dark card colour in the dark theme), never the page background. In the supplied bundle two controls did not:
   the date box (.dx-date, background: var(--background)) and the header search (.field-input.bg-muted).
   Disabled fields keep the bundle's muted colour so they still read as disabled. The html prefix wins over the
   bundle's equal-specificity rules, which load after this file. */
html .dx-date:not([class*=border]):not([data-disabled]){background:var(--card)}
html .field-input.bg-muted:not(:disabled){background-color:var(--card)}
/* Native submit/cancel run on the server (startup-ui.js): the bundle's "server only" note no longer applies. */
html [data-server-only-note]{display:none}
.digit-lifecycle-note{flex-basis:100%;margin:6px 0 0;color:#b42318;font-size:13px}
/* Small authenticated launch page; no application data is loaded until an app is opened. */
.digit-start-page{max-width:1050px;margin:0 auto;padding:24px 20px 90px;color:#0b1f17;font-family:"IBM Plex Sans Arabic",system-ui,sans-serif}
.digit-start-head{display:flex;align-items:center;gap:16px;border-bottom:1px solid #d7deda;padding-bottom:20px}
.digit-start-head h1{font-size:24px;margin:0}.digit-start-head p{margin:4px 0;color:#4f5f57}.digit-start-head button{margin-inline-start:auto;background:#fff;color:#064e3b;border:1px solid #064e3b;padding:10px 16px;border-radius:9px;cursor:pointer;font:inherit}
.digit-start-note{background:#eef8f2;border:1px solid #c6e2d2;padding:16px 20px;border-radius:12px;margin-top:24px;line-height:1.9}.digit-start-note p{margin:4px 0}
.digit-start-page h2{font-size:18px;margin:28px 0 12px}.digit-start-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.digit-start-grid a{display:flex;align-items:center;gap:12px;min-height:56px;border:1px solid #d7deda;border-radius:10px;padding:12px 16px;background:#fff;color:#064e3b;text-decoration:none;font-weight:600}.digit-start-grid a:hover{background:#f3faf6;border-color:#0a8754}
.digit-start-page :focus-visible{outline:3px solid #34d399;outline-offset:2px}
/* Saudi Riyal sign (U+20C1; Frappe v16 lucide "saudi-riyal" geometry, fonts/digit-riyal.woff2): joins the UI families for that one
   code point, so every text that shows «ر.س» (rewritten by the host copy pass) draws the official sign in any weight. */
@font-face{font-family:"IBM Plex Sans Arabic";font-style:normal;font-weight:400;font-display:swap;src:url(/assets/digit_enterprise/fonts/digit-riyal.woff2) format("woff2");unicode-range:U+20C1}@font-face{font-family:"IBM Plex Sans Arabic";font-style:normal;font-weight:500;font-display:swap;src:url(/assets/digit_enterprise/fonts/digit-riyal.woff2) format("woff2");unicode-range:U+20C1}@font-face{font-family:"IBM Plex Sans Arabic";font-style:normal;font-weight:600;font-display:swap;src:url(/assets/digit_enterprise/fonts/digit-riyal.woff2) format("woff2");unicode-range:U+20C1}@font-face{font-family:"IBM Plex Sans Arabic";font-style:normal;font-weight:700;font-display:swap;src:url(/assets/digit_enterprise/fonts/digit-riyal.woff2) format("woff2");unicode-range:U+20C1}@font-face{font-family:"IBM Plex Sans";font-style:normal;font-weight:400;font-display:swap;src:url(/assets/digit_enterprise/fonts/digit-riyal.woff2) format("woff2");unicode-range:U+20C1}@font-face{font-family:"IBM Plex Sans";font-style:normal;font-weight:500;font-display:swap;src:url(/assets/digit_enterprise/fonts/digit-riyal.woff2) format("woff2");unicode-range:U+20C1}@font-face{font-family:"IBM Plex Sans";font-style:normal;font-weight:600;font-display:swap;src:url(/assets/digit_enterprise/fonts/digit-riyal.woff2) format("woff2");unicode-range:U+20C1}@font-face{font-family:"IBM Plex Sans";font-style:normal;font-weight:700;font-display:swap;src:url(/assets/digit_enterprise/fonts/digit-riyal.woff2) format("woff2");unicode-range:U+20C1}@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:400;font-display:swap;src:url(/assets/digit_enterprise/fonts/digit-riyal.woff2) format("woff2");unicode-range:U+20C1}@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:500;font-display:swap;src:url(/assets/digit_enterprise/fonts/digit-riyal.woff2) format("woff2");unicode-range:U+20C1}@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:600;font-display:swap;src:url(/assets/digit_enterprise/fonts/digit-riyal.woff2) format("woff2");unicode-range:U+20C1}@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:700;font-display:swap;src:url(/assets/digit_enterprise/fonts/digit-riyal.woff2) format("woff2");unicode-range:U+20C1}

/* Native Frappe login owns identity; supplier preview simulators are not login controls. */
label:has([data-switch-user]),label:has([data-dev-mode]),[data-switch-user],[data-dev-mode]{display:none!important}
