/*!*************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[2]!./node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js??ruleSet[1].rules[13].oneOf[12].use[3]!./app/globals.css ***!
  \*************************************************************************************************************************************************************************************************************************************************************/
*, ::before, ::after {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(59 130 246 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}

::backdrop {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x:  ;
  --tw-pan-y:  ;
  --tw-pinch-zoom:  ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position:  ;
  --tw-gradient-via-position:  ;
  --tw-gradient-to-position:  ;
  --tw-ordinal:  ;
  --tw-slashed-zero:  ;
  --tw-numeric-figure:  ;
  --tw-numeric-spacing:  ;
  --tw-numeric-fraction:  ;
  --tw-ring-inset:  ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgb(59 130 246 / 0.5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur:  ;
  --tw-brightness:  ;
  --tw-contrast:  ;
  --tw-grayscale:  ;
  --tw-hue-rotate:  ;
  --tw-invert:  ;
  --tw-saturate:  ;
  --tw-sepia:  ;
  --tw-drop-shadow:  ;
  --tw-backdrop-blur:  ;
  --tw-backdrop-brightness:  ;
  --tw-backdrop-contrast:  ;
  --tw-backdrop-grayscale:  ;
  --tw-backdrop-hue-rotate:  ;
  --tw-backdrop-invert:  ;
  --tw-backdrop-opacity:  ;
  --tw-backdrop-saturate:  ;
  --tw-backdrop-sepia:  ;
  --tw-contain-size:  ;
  --tw-contain-layout:  ;
  --tw-contain-paint:  ;
  --tw-contain-style:  ;
}/*
! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
*//*
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
*/

*,
::before,
::after {
  box-sizing: border-box; /* 1 */
  border-width: 0; /* 2 */
  border-style: solid; /* 2 */
  border-color: #e5e7eb; /* 2 */
}

::before,
::after {
  --tw-content: '';
}

/*
1. Use a consistent sensible line-height in all browsers.
2. Prevent adjustments of font size after orientation changes in iOS.
3. Use a more readable tab size.
4. Use the user's configured `sans` font-family by default.
5. Use the user's configured `sans` font-feature-settings by default.
6. Use the user's configured `sans` font-variation-settings by default.
7. Disable tap highlights on iOS
*/

html,
:host {
  line-height: 1.5; /* 1 */
  -webkit-text-size-adjust: 100%; /* 2 */
  -moz-tab-size: 4; /* 3 */
  -o-tab-size: 4;
     tab-size: 4; /* 3 */
  font-family: var(--font-sans); /* 4 */
  font-feature-settings: normal; /* 5 */
  font-variation-settings: normal; /* 6 */
  -webkit-tap-highlight-color: transparent; /* 7 */
}

/*
1. Remove the margin in all browsers.
2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
*/

body {
  margin: 0; /* 1 */
  line-height: inherit; /* 2 */
}

/*
1. Add the correct height in Firefox.
2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
3. Ensure horizontal rules are visible by default.
*/

hr {
  height: 0; /* 1 */
  color: inherit; /* 2 */
  border-top-width: 1px; /* 3 */
}

/*
Add the correct text decoration in Chrome, Edge, and Safari.
*/

abbr:where([title]) {
  -webkit-text-decoration: underline dotted;
          text-decoration: underline dotted;
}

/*
Remove the default font size and weight for headings.
*/

h1,
h2,
h3,
h4,
h5,
h6 {
  font-size: inherit;
  font-weight: inherit;
}

/*
Reset links to optimize for opt-in styling instead of opt-out.
*/

a {
  color: inherit;
  text-decoration: inherit;
}

/*
Add the correct font weight in Edge and Safari.
*/

b,
strong {
  font-weight: bolder;
}

/*
1. Use the user's configured `mono` font-family by default.
2. Use the user's configured `mono` font-feature-settings by default.
3. Use the user's configured `mono` font-variation-settings by default.
4. Correct the odd `em` font sizing in all browsers.
*/

code,
kbd,
samp,
pre {
  font-family: var(--font-mono); /* 1 */
  font-feature-settings: normal; /* 2 */
  font-variation-settings: normal; /* 3 */
  font-size: 1em; /* 4 */
}

/*
Add the correct font size in all browsers.
*/

small {
  font-size: 80%;
}

/*
Prevent `sub` and `sup` elements from affecting the line height in all browsers.
*/

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sub {
  bottom: -0.25em;
}

sup {
  top: -0.5em;
}

/*
1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
3. Remove gaps between table borders by default.
*/

table {
  text-indent: 0; /* 1 */
  border-color: inherit; /* 2 */
  border-collapse: collapse; /* 3 */
}

/*
1. Change the font styles in all browsers.
2. Remove the margin in Firefox and Safari.
3. Remove default padding in all browsers.
*/

button,
input,
optgroup,
select,
textarea {
  font-family: inherit; /* 1 */
  font-feature-settings: inherit; /* 1 */
  font-variation-settings: inherit; /* 1 */
  font-size: 100%; /* 1 */
  font-weight: inherit; /* 1 */
  line-height: inherit; /* 1 */
  letter-spacing: inherit; /* 1 */
  color: inherit; /* 1 */
  margin: 0; /* 2 */
  padding: 0; /* 3 */
}

/*
Remove the inheritance of text transform in Edge and Firefox.
*/

button,
select {
  text-transform: none;
}

/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Remove default button styles.
*/

button,
input:where([type='button']),
input:where([type='reset']),
input:where([type='submit']) {
  -webkit-appearance: button; /* 1 */
  background-color: transparent; /* 2 */
  background-image: none; /* 2 */
}

/*
Use the modern Firefox focus style for all focusable elements.
*/

:-moz-focusring {
  outline: auto;
}

/*
Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
*/

:-moz-ui-invalid {
  box-shadow: none;
}

/*
Add the correct vertical alignment in Chrome and Firefox.
*/

progress {
  vertical-align: baseline;
}

/*
Correct the cursor style of increment and decrement buttons in Safari.
*/

::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
  height: auto;
}

/*
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/

[type='search'] {
  -webkit-appearance: textfield; /* 1 */
  outline-offset: -2px; /* 2 */
}

/*
Remove the inner padding in Chrome and Safari on macOS.
*/

::-webkit-search-decoration {
  -webkit-appearance: none;
}

/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to `inherit` in Safari.
*/

::-webkit-file-upload-button {
  -webkit-appearance: button; /* 1 */
  font: inherit; /* 2 */
}

/*
Add the correct display in Chrome and Safari.
*/

summary {
  display: list-item;
}

/*
Removes the default spacing and border for appropriate elements.
*/

blockquote,
dl,
dd,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
figure,
p,
pre {
  margin: 0;
}

fieldset {
  margin: 0;
  padding: 0;
}

legend {
  padding: 0;
}

ol,
ul,
menu {
  list-style: none;
  margin: 0;
  padding: 0;
}

/*
Reset default styling for dialogs.
*/
dialog {
  padding: 0;
}

/*
Prevent resizing textareas horizontally by default.
*/

textarea {
  resize: vertical;
}

/*
1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
2. Set the default placeholder color to the user's configured gray 400 color.
*/

input::-moz-placeholder, textarea::-moz-placeholder {
  opacity: 1; /* 1 */
  color: #9ca3af; /* 2 */
}

input::placeholder,
textarea::placeholder {
  opacity: 1; /* 1 */
  color: #9ca3af; /* 2 */
}

/*
Set the default cursor for buttons.
*/

button,
[role="button"] {
  cursor: pointer;
}

/*
Make sure disabled buttons don't get the pointer cursor.
*/
:disabled {
  cursor: default;
}

/*
1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
   This can trigger a poorly considered lint error in some tools but is included by design.
*/

img,
svg,
video,
canvas,
audio,
iframe,
embed,
object {
  display: block; /* 1 */
  vertical-align: middle; /* 2 */
}

/*
Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
*/

img,
video {
  max-width: 100%;
  height: auto;
}

/* Make elements with the HTML hidden attribute stay hidden by default */
[hidden]:where(:not([hidden="until-found"])) {
  display: none;
}
.collapse {
  visibility: collapse;
}
.absolute {
  position: absolute;
}
.relative {
  position: relative;
}
.flex {
  display: flex;
}
.inline-flex {
  display: inline-flex;
}
.table {
  display: table;
}
.grid {
  display: grid;
}
.hidden {
  display: none;
}
.border {
  border-width: 1px;
}
.capitalize {
  text-transform: capitalize;
}
.outline {
  outline-style: solid;
}
.filter {
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
}
.transition {
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  transition-duration: 150ms;
}

/* ===== Nexly Sol design tokens (from colors_and_type.css) ===== */
/* =========================================================================
   NEXLY SOL — Foundations: Color & Type
   Brand primary: Violet (#7C3AED light / #A78BFA dark). Neutrals: cool slate.
   Theme switches via `.dark` on <html> (matches the app's next-themes setup).

   Usage:
     <link rel="stylesheet" href="colors_and_type.css">
     <html class="dark">  ← dark mode
   ========================================================================= */

@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap');

/* -------------------------------------------------------------------------
   1. PRIMITIVES  (raw, theme-agnostic values — never reference UI intent)
   ------------------------------------------------------------------------- */
:root {
  /* Violet — the Nexly Sol brand hue. */
  --violet-50:  #f5f3ff;
  --violet-100: #ede9fe;
  --violet-200: #ddd6fe;
  --violet-300: #c4b5fd;
  --violet-400: #a78bfa;   /* brand primary (dark mode) */
  --violet-500: #8b5cf6;
  --violet-600: #7c3aed;   /* brand primary (light mode) — THE color */
  --violet-700: #6d28d9;   /* primary hover (light) */
  --violet-800: #5b21b6;
  --violet-900: #4c1d95;

  /* Indigo — secondary accent (gradient partner / avatars) */
  --indigo-400: #818cf8;
  --indigo-500: #6366f1;
  --indigo-600: #4f46e5;
  --indigo-700: #4338ca;

  /* Slate — cool neutral ramp for text & surfaces */
  --slate-50:  #f8fafc;
  --slate-100: #f1f5f9;
  --slate-200: #e2e8f0;
  --slate-300: #cbd5e1;
  --slate-400: #94a3b8;
  --slate-500: #64748b;
  --slate-600: #475569;
  --slate-700: #334155;
  --slate-800: #1e293b;
  --slate-900: #0f172a;
  --slate-950: #020617;
  --slate-ink: #14161f;   /* primary text (near-black, cool) */

  /* Dark UI surfaces (cool slate, slight depth) */
  --d-bg:      #0b0f1a;
  --d-surface: #141a27;
  --d-raised:  #1d2533;
  --d-border:  #2a323f;
  --d-code:    #0c1119;

  /* Semantic primitives */
  --green-400: #4ade80;
  --green-500: #22c55e;
  --amber-400: #fbbf24;
  --amber-500: #f59e0b;
  --red-400:   #f87171;
  --red-500:   #ef4444;
  --blue-500:  #3b82f6;
  --white:     #ffffff;
  --black:     #000000;
}

/* -------------------------------------------------------------------------
   2. SEMANTIC TOKENS — LIGHT (default). Reference these in UI, never raw.
   Names mirror the app's CSS custom properties so generated markup drops in.
   ------------------------------------------------------------------------- */
:root {
  --color-primary:        var(--violet-600);
  --color-primary-hover:  var(--violet-700);
  --color-primary-soft:   var(--violet-100);   /* tinted backgrounds, selected rows */
  --color-primary-text:   var(--white);
  --color-accent:         var(--indigo-600);

  --color-bg:             #f3f5f9;              /* cool app canvas */
  --color-surface:        var(--white);         /* cards, top bar, modals */
  --color-surface-raised: var(--slate-50);      /* nested panels, hover rows */
  --color-border:         #e7e9f0;
  --color-border-strong:  #cdd3e0;

  --color-text:           var(--slate-ink);     /* primary text */
  --color-text-muted:     #5b6472;              /* labels, secondary */
  --color-text-faint:     #97a0b0;              /* placeholders, disabled */
  --color-text-inverted:  var(--white);

  --color-success:        var(--green-500);
  --color-warning:        var(--amber-500);
  --color-error:          var(--red-500);
  --color-info:           var(--blue-500);

  --color-success-soft:   #dcfce7;
  --color-warning-soft:   #fef3c7;
  --color-error-soft:     #fee2e2;
  --color-info-soft:      #dbeafe;
}

/* -------------------------------------------------------------------------
   3. SEMANTIC TOKENS — DARK  (.dark on <html>, matches next-themes)
   ------------------------------------------------------------------------- */
.dark {
  --color-primary:        var(--violet-400);
  --color-primary-hover:  var(--violet-300);
  --color-primary-soft:   #271f3d;
  --color-primary-text:   #1a1228;
  --color-accent:         var(--indigo-400);

  --color-bg:             var(--d-bg);
  --color-surface:        var(--d-surface);
  --color-surface-raised: var(--d-raised);
  --color-border:         var(--d-border);
  --color-border-strong:  #3b4556;

  --color-text:           #e8ebf2;
  --color-text-muted:     #98a2b3;
  --color-text-faint:     #5f6b7d;
  --color-text-inverted:  var(--d-bg);

  --color-success:        var(--green-400);
  --color-warning:        var(--amber-400);
  --color-error:          var(--red-400);
  --color-info:           #60a5fa;

  --color-success-soft:   #102a1c;
  --color-warning-soft:   #33280d;
  --color-error-soft:     #341818;
  --color-info-soft:      #14233f;
}

/* -------------------------------------------------------------------------
   4. TYPE — families, weights, fixed scale
   ------------------------------------------------------------------------- */
:root {
  --font-sans: 'Inter', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --font-mono: 'JetBrains Mono', ui-monospace, 'SF Mono', 'Courier New', monospace;

  --weight-light:    300;
  --weight-regular:  400;
  --weight-medium:   500;
  --weight-semibold: 600;
  --weight-bold:     700;
  --weight-extra:    800;

  /* Type scale (px). ERP UI is dense; base body is 14px. */
  --text-xs:   12px;
  --text-sm:   13px;
  --text-base: 14px;
  --text-md:   16px;
  --text-lg:   20px;
  --text-xl:   24px;
  --text-2xl:  30px;
  --text-3xl:  40px;
  --text-4xl:  56px;

  --leading-tight:  1.2;
  --leading-snug:   1.4;
  --leading-normal: 1.55;
  --leading-loose:  1.65;

  --tracking-tight:  -0.02em;
  --tracking-normal: 0;
  --tracking-wide:   0.04em;
  --tracking-wider:  0.08em;
}

/* -------------------------------------------------------------------------
   5. RADIUS / SHADOW / SPACING tokens
   ------------------------------------------------------------------------- */
:root {
  --radius-sm:   4px;
  --radius-md:   8px;
  --radius-lg:   12px;
  --radius-xl:   16px;
  --radius-full: 9999px;

  /* Soft, low-contrast elevation, tinted cool slate — never harsh black. */
  --shadow-xs: 0 1px 2px rgba(15, 23, 42, 0.06);
  --shadow-sm: 0 1px 3px rgba(15, 23, 42, 0.08), 0 1px 2px rgba(15, 23, 42, 0.04);
  --shadow-md: 0 4px 12px rgba(15, 23, 42, 0.10), 0 2px 4px rgba(15, 23, 42, 0.05);
  --shadow-lg: 0 12px 32px rgba(15, 23, 42, 0.14), 0 4px 8px rgba(15, 23, 42, 0.07);
  --shadow-focus: 0 0 0 3px rgba(124, 58, 237, 0.25);  /* violet focus ring */

  --space-1: 4px;  --space-2: 8px;  --space-3: 12px; --space-4: 16px;
  --space-5: 20px; --space-6: 24px; --space-8: 32px; --space-10: 40px; --space-12: 48px;

  --transition-fast: 0.1s ease;
  --transition-base: 0.15s ease;
  --transition-slow: 0.25s ease;
}
.dark {
  --shadow-xs: 0 1px 2px rgba(0,0,0,0.35);
  --shadow-sm: 0 1px 3px rgba(0,0,0,0.45), 0 1px 2px rgba(0,0,0,0.35);
  --shadow-md: 0 4px 12px rgba(0,0,0,0.5), 0 2px 4px rgba(0,0,0,0.35);
  --shadow-lg: 0 12px 32px rgba(0,0,0,0.6), 0 4px 8px rgba(0,0,0,0.45);
  --shadow-focus: 0 0 0 3px rgba(167, 139, 250, 0.35);
}

/* -------------------------------------------------------------------------
   6. SEMANTIC TYPE CLASSES — apply directly or copy the rules
   ------------------------------------------------------------------------- */
.ns-display { font-family: var(--font-sans); font-weight: var(--weight-extra); font-size: var(--text-4xl); line-height: var(--leading-tight); letter-spacing: var(--tracking-tight); color: var(--color-text); }
.ns-h1 { font-family: var(--font-sans); font-weight: var(--weight-bold); font-size: var(--text-2xl); line-height: var(--leading-tight); letter-spacing: var(--tracking-tight); color: var(--color-text); }
.ns-h2 { font-family: var(--font-sans); font-weight: var(--weight-bold); font-size: var(--text-xl); line-height: var(--leading-snug); color: var(--color-text); }
.ns-h3 { font-family: var(--font-sans); font-weight: var(--weight-semibold); font-size: var(--text-lg); line-height: var(--leading-snug); color: var(--color-text); }
.ns-eyebrow { font-family: var(--font-sans); font-weight: var(--weight-bold); font-size: var(--text-xs); text-transform: uppercase; letter-spacing: var(--tracking-wide); color: var(--color-primary); }
.ns-body { font-family: var(--font-sans); font-weight: var(--weight-regular); font-size: var(--text-base); line-height: var(--leading-loose); color: var(--color-text); }
.ns-small { font-family: var(--font-sans); font-weight: var(--weight-regular); font-size: var(--text-sm); line-height: var(--leading-normal); color: var(--color-text-muted); }
.ns-label { font-family: var(--font-sans); font-weight: var(--weight-medium); font-size: var(--text-sm); color: var(--color-text-muted); }
.ns-stat { font-family: var(--font-sans); font-weight: var(--weight-bold); font-size: var(--text-2xl); letter-spacing: var(--tracking-tight); color: var(--color-text); }
.ns-code { font-family: var(--font-mono); font-weight: var(--weight-regular); font-size: var(--text-sm); color: var(--color-text); }

/* ===== Nexly Sol app component styles (from ui_kits/app/app.css) ===== */
/* Nexly Sol — App UI kit styles. Consumes tokens from colors_and_type.css. */

*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%}
body{font-family:var(--font-sans);background:var(--color-bg);color:var(--color-text);font-size:14px}
button{font-family:inherit;cursor:pointer}
input,select{font-family:inherit}
::-moz-selection{background:var(--color-primary);color:#fff}
::selection{background:var(--color-primary);color:#fff}
*,*::before,*::after{transition:background-color .15s ease,border-color .15s ease,color .1s ease}

/* ---------- layout ---------- */
.app-root{min-height:100vh;display:flex;flex-direction:column}
.main{flex:1;width:100%}
.page{max-width:1180px;margin:0 auto;padding:28px 28px 64px}
.page-wide{max-width:100%;padding:0}
.page-head{display:flex;align-items:center;gap:16px;margin-bottom:22px}
.page-head h1{font-size:24px;font-weight:700;letter-spacing:-0.01em}
.page-head .sub{font-size:13px;color:var(--color-text-muted)}
.spacer{flex:1}

/* ---------- top bar ---------- */
.topbar{position:sticky;top:0;z-index:40;display:flex;align-items:center;gap:14px;height:58px;padding:0 18px;background:var(--color-surface);border-bottom:1px solid var(--color-border)}
.brand{display:flex;align-items:center;gap:9px;font-weight:800;font-size:17px;letter-spacing:-0.02em;color:var(--color-text);white-space:nowrap}
.brand .mark{width:30px;height:30px;border-radius:8px;background:var(--color-primary);display:flex;align-items:center;justify-content:center;position:relative}
.brand .mark svg{width:17px;height:17px;color:#fff;stroke-width:2.6}
.brand .mark .sun{position:absolute;top:5px;right:5px;width:5px;height:5px;border-radius:50%;background:var(--color-warning)}
.brand .accent{color:var(--color-primary)}
.tenant-chip{font-size:13px;color:var(--color-text-muted);padding-left:6px;border-left:1px solid var(--color-border);margin-left:2px;padding:4px 0 4px 12px}
.iconbtn{width:36px;height:36px;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;color:var(--color-text-muted);background:transparent;border:0}
.iconbtn:hover{background:var(--color-surface-raised);color:var(--color-text)}
.iconbtn svg{width:18px;height:18px}
.avatar{width:34px;height:34px;border-radius:50%;background:var(--color-accent);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:13px;border:0}
.avatar.sm{width:30px;height:30px;font-size:12px}
.avatar.lg{width:42px;height:42px;font-size:15px}

/* dropdown menu */
.menu{position:absolute;top:52px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);padding:6px;min-width:190px;z-index:50}
.menu.right{right:14px}
.menu-item{display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:var(--radius-sm);font-size:13.5px;color:var(--color-text);background:transparent;border:0;width:100%;text-align:left}
.menu-item:hover{background:var(--color-surface-raised)}
.menu-item svg{width:16px;height:16px;color:var(--color-text-muted)}
.menu-sep{height:1px;background:var(--color-border);margin:5px 0}
.menu-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-faint);padding:8px 11px 4px}

/* app launcher dropdown grid */
.launcher{position:absolute;top:52px;left:60px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);padding:12px;z-index:50;display:grid;grid-template-columns:repeat(3,84px);gap:6px}
.launcher-item{display:flex;flex-direction:column;align-items:center;gap:7px;padding:12px 6px;border-radius:var(--radius-md);background:transparent;border:0;text-align:center}
.launcher-item:hover{background:var(--color-surface-raised)}
.launcher-item .chip{width:38px;height:38px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;color:#fff}
.launcher-item .chip svg{width:20px;height:20px}
.launcher-item span{font-size:11.5px;font-weight:500;color:var(--color-text)}

/* ---------- buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;font-size:14px;font-weight:600;border-radius:var(--radius-md);padding:9px 16px;border:1px solid transparent;white-space:nowrap}
.btn svg{width:16px;height:16px}
.btn-primary{background:var(--color-primary);color:#fff}
.btn-primary:hover{background:var(--color-primary-hover)}
.btn-secondary{background:var(--color-surface);color:var(--color-text);border-color:var(--color-border-strong)}
.btn-secondary:hover{background:var(--color-surface-raised)}
.btn-ghost{background:transparent;color:var(--color-text-muted)}
.btn-ghost:hover{background:var(--color-surface-raised);color:var(--color-text)}
.btn-danger{background:var(--color-error);color:#fff}
.btn-sm{padding:6px 12px;font-size:13px}
.btn-lg{padding:11px 22px;font-size:15px}
.btn-block{width:100%}
.btn:disabled{opacity:.55;pointer-events:none}

/* ---------- forms ---------- */
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}
.field label{font-size:13px;font-weight:500;color:var(--color-text-muted)}
.control{display:flex;align-items:center;gap:8px;background:var(--color-surface);border:1px solid var(--color-border-strong);border-radius:var(--radius-sm);padding:9px 11px}
.control svg{width:16px;height:16px;color:var(--color-text-faint);flex-shrink:0}
.control input,.control select{border:0;outline:0;font-size:14px;width:100%;background:transparent;color:var(--color-text)}
.control:focus-within{border-color:var(--color-primary);box-shadow:var(--shadow-focus)}
.control select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}

/* ---------- cards / tiles ---------- */
.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm)}
.stat-card{padding:18px 20px;display:flex;flex-direction:column;gap:7px}
.stat-card .lbl{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.03em;color:var(--color-text-muted);display:flex;align-items:center;gap:7px}
.stat-card .lbl svg{width:14px;height:14px}
.stat-card .val{font-size:28px;font-weight:700;letter-spacing:-0.02em}
.stat-card .delta{font-size:12px;color:var(--color-text-muted)}

/* ---------- badges ---------- */
.badge{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;font-weight:600;padding:3px 10px;border-radius:9999px;white-space:nowrap}
.badge .dot{width:6px;height:6px;border-radius:50%}
.b-draft{background:var(--color-surface-raised);color:var(--color-text-muted)}
.b-sent{background:var(--color-info-soft);color:#1d4ed8}
.b-paid{background:var(--color-success-soft);color:#15803d}
.b-overdue{background:var(--color-error-soft);color:#b91c1c}
.b-cancelled{background:var(--color-surface-raised);color:var(--color-text-faint)}
.b-primary{background:var(--color-primary-soft);color:var(--color-primary)}
.dark .b-sent{color:#93b4fb}.dark .b-paid{color:#86efac}.dark .b-overdue{color:#fca5a5}

/* ---------- segmented / tabs ---------- */
.seg{display:inline-flex;background:var(--color-surface-raised);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:3px}
.seg button{border:0;background:transparent;padding:6px 12px;border-radius:5px;font-size:13px;font-weight:600;color:var(--color-text-muted);display:flex;align-items:center;gap:6px}
.seg button svg{width:15px;height:15px}
.seg button.active{background:var(--color-surface);color:var(--color-text);box-shadow:var(--shadow-xs)}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--color-border);margin-bottom:22px}
.tabs button{border:0;background:transparent;padding:11px 14px;font-size:14px;font-weight:600;color:var(--color-text-muted);border-bottom:2px solid transparent;margin-bottom:-1px}
.tabs button.active{color:var(--color-primary);border-bottom-color:var(--color-primary)}

/* ---------- kanban ---------- */
.kanban{display:grid;grid-template-columns:repeat(auto-fill,minmax(248px,1fr));gap:16px}
.kard{padding:16px;display:flex;flex-direction:column;gap:11px}
.kard-top{display:flex;gap:11px;align-items:center}
.kard-name{font-size:14.5px;font-weight:600}
.kard-sub{font-size:12px;color:var(--color-text-muted)}
.kard-row{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--color-text-muted)}
.kard-row svg{width:14px;height:14px}

/* ---------- table ---------- */
.tablecard{overflow:hidden}
table.list{width:100%;border-collapse:collapse;font-size:13.5px}
table.list thead th{text-align:left;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-muted);padding:13px 16px;border-bottom:1px solid var(--color-border);background:var(--color-surface-raised)}
table.list tbody td{padding:13px 16px;border-bottom:1px solid var(--color-border)}
table.list tbody tr:last-child td{border-bottom:0}
table.list tbody tr:hover{background:var(--color-primary-soft)}
table.list .num{font-family:var(--font-mono);font-weight:500;font-size:12.5px}
.right{text-align:right}.bold{font-weight:700}

/* ---------- modal ---------- */
.scrim{position:fixed;inset:0;background:rgba(26,21,35,.45);backdrop-filter:blur(2px);display:flex;align-items:center;justify-content:center;z-index:100;padding:24px}
.dark .scrim{background:rgba(0,0,0,.6)}
.modal{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:100%;max-width:480px;max-height:90vh;overflow:auto}
.modal.wide{max-width:560px}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:18px 22px;border-bottom:1px solid var(--color-border)}
.modal-head h3{font-size:17px;font-weight:700}
.modal-body{padding:22px}
.modal-foot{display:flex;justify-content:flex-end;gap:10px;padding:16px 22px;border-top:1px solid var(--color-border)}

/* ---------- auth ---------- */
.auth{min-height:100vh;display:grid;grid-template-columns:1.1fr 1fr}
.auth-hero{background:linear-gradient(135deg,#7C3AED 0%,#4338CA 100%);color:#fff;padding:56px;display:flex;flex-direction:column;justify-content:space-between}
.auth-hero .brand{color:#fff}
.auth-hero .brand .mark{background:rgba(255,255,255,.16)}
.auth-hero h2{font-size:38px;font-weight:800;letter-spacing:-0.02em;line-height:1.15;margin-bottom:16px}
.auth-hero p{font-size:15px;opacity:.85;line-height:1.6;max-width:380px}
.auth-points{display:flex;flex-direction:column;gap:14px;margin-top:28px}
.auth-point{display:flex;align-items:center;gap:11px;font-size:14px;opacity:.92}
.auth-point svg{width:18px;height:18px}
.auth-form-wrap{display:flex;align-items:center;justify-content:center;padding:40px;background:var(--color-bg)}
.auth-form{width:100%;max-width:360px}
.auth-form h1{font-size:26px;font-weight:700;margin-bottom:6px}
.auth-form .lead{font-size:14px;color:var(--color-text-muted);margin-bottom:26px}
.auth-alt{font-size:13.5px;color:var(--color-text-muted);text-align:center;margin-top:20px}
.auth-alt a{color:var(--color-primary);font-weight:600;cursor:pointer}
@media(max-width:880px){.auth{grid-template-columns:1fr}.auth-hero{display:none}}

/* ---------- home launcher ---------- */
.home-wrap{max-width:1080px;margin:0 auto;padding:48px 28px}
.home-hi{font-size:28px;font-weight:700;letter-spacing:-0.01em;margin-bottom:4px}
.home-sub{font-size:14px;color:var(--color-text-muted);margin-bottom:34px}
.tile-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:18px}
.tile{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:20px;display:flex;flex-direction:column;gap:14px;text-align:left;border-width:1px}
.tile:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}
.tile .chip{width:48px;height:48px;border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;color:#fff}
.tile .chip svg{width:26px;height:26px}
.tile .t-name{font-size:16px;font-weight:600}
.tile .t-sub{font-size:12.5px;color:var(--color-text-muted);margin-top:2px}
.tile.locked{opacity:.6}
.tile.locked .chip{background:var(--color-text-faint)!important}

/* ---------- POS ---------- */
.pos{display:grid;grid-template-columns:1fr 360px;height:calc(100vh - 58px)}
.pos-products{padding:18px;overflow:auto}
.pos-cats{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap}
.pos-cat{padding:7px 14px;border-radius:9999px;font-size:13px;font-weight:600;border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text-muted)}
.pos-cat.active{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}
.pos-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:12px}
.pos-prod{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-xs);padding:0;overflow:hidden;text-align:left;display:flex;flex-direction:column}
.pos-prod:hover{box-shadow:var(--shadow-sm);border-color:var(--color-border-strong)}
.pos-prod .thumb{height:64px;display:flex;align-items:center;justify-content:center}
.pos-prod .thumb svg{width:26px;height:26px;color:#fff;opacity:.9}
.pos-prod .pinfo{padding:9px 11px}
.pos-prod .pname{font-size:13px;font-weight:600;line-height:1.3}
.pos-prod .pprice{font-size:13px;font-weight:700;color:var(--color-primary);margin-top:3px}
.pos-cart{background:var(--color-surface);border-left:1px solid var(--color-border);display:flex;flex-direction:column}
.pos-cart-head{padding:16px 18px;border-bottom:1px solid var(--color-border);display:flex;align-items:center;justify-content:space-between}
.pos-cart-head h3{font-size:15px;font-weight:700}
.pos-lines{flex:1;overflow:auto;padding:8px 0}
.pos-line{display:flex;align-items:center;gap:10px;padding:10px 18px}
.pos-line .pl-name{flex:1;font-size:13.5px;font-weight:500}
.pos-line .pl-qty{display:flex;align-items:center;gap:8px}
.pos-line .qbtn{width:24px;height:24px;border-radius:5px;border:1px solid var(--color-border);background:var(--color-surface);display:flex;align-items:center;justify-content:center;color:var(--color-text-muted)}
.pos-line .qbtn svg{width:13px;height:13px}
.pos-line .pl-sub{width:64px;text-align:right;font-weight:600;font-size:13px}
.pos-empty{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:var(--color-text-faint);font-size:13px}
.pos-empty svg{width:34px;height:34px}
.pos-totals{padding:14px 18px;border-top:1px solid var(--color-border)}
.pos-trow{display:flex;justify-content:space-between;font-size:13px;color:var(--color-text-muted);margin-bottom:6px}
.pos-trow.grand{font-size:18px;font-weight:700;color:var(--color-text);margin-top:8px}
.receipt{font-family:var(--font-mono);font-size:12px;line-height:1.7;background:var(--color-bg);border:1px dashed var(--color-border-strong);border-radius:var(--radius-sm);padding:18px}
.receipt .r-row{display:flex;justify-content:space-between}
.receipt .r-sep{border-top:1px dashed var(--color-border-strong);margin:8px 0}
.receipt .r-center{text-align:center}

/* ---------- charts ---------- */
.bars{display:flex;align-items:flex-end;gap:14px;height:150px;padding-top:10px}
.bar-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:8px;height:100%;justify-content:flex-end}
.bar{width:100%;border-radius:5px 5px 0 0;min-height:4px}
.bar-lbl{font-size:11px;color:var(--color-text-muted)}
.bar-val{font-size:11px;font-weight:700}
.donut-wrap{display:flex;align-items:center;gap:22px}
.legend{display:flex;flex-direction:column;gap:9px}
.legend-item{display:flex;align-items:center;gap:9px;font-size:13px}
.legend-item .sw{width:11px;height:11px;border-radius:3px}
.legend-item .lv{margin-left:auto;font-weight:700;font-family:var(--font-mono);font-size:12px}

.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
@media(max-width:760px){.grid-4{grid-template-columns:repeat(2,1fr)}.grid-2{grid-template-columns:1fr}.pos{grid-template-columns:1fr}}
.empty-note{padding:48px;text-align:center;color:var(--color-text-faint);font-size:13.5px}
.toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);background:var(--color-text);color:var(--color-surface);padding:11px 18px;border-radius:var(--radius-md);font-size:13.5px;font-weight:500;box-shadow:var(--shadow-lg);z-index:200;display:flex;align-items:center;gap:9px}
.toast svg{width:16px;height:16px;color:var(--color-success)}

/* ---------- Odoo-style control panel ---------- */
.cpanel{display:flex;align-items:center;gap:14px;background:var(--color-surface);border-bottom:1px solid var(--color-border);padding:9px 22px;position:sticky;top:58px;z-index:30;min-height:52px}
.crumb{display:flex;align-items:center;gap:8px;font-size:15px;min-width:0}
.crumb a{color:var(--color-text-muted);cursor:pointer;font-weight:500;white-space:nowrap}
.crumb a:hover{color:var(--color-primary)}
.crumb .sep{color:var(--color-text-faint)}
.crumb .cur{font-weight:700;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cp-actions{display:flex;align-items:center;gap:10px}
.cp-right{margin-left:auto;display:flex;align-items:center;gap:10px}
.pager{display:flex;align-items:center;gap:2px;font-size:13px;color:var(--color-text-muted);white-space:nowrap}
.pager button{border:0;background:transparent;width:26px;height:26px;border-radius:5px;display:flex;align-items:center;justify-content:center;color:var(--color-text-muted)}
.pager button:hover:not(:disabled){background:var(--color-surface-raised);color:var(--color-text)}
.pager button:disabled{opacity:.4}
.vswitch{display:flex;border:1px solid var(--color-border);border-radius:var(--radius-sm);overflow:hidden}
.vswitch button{border:0;background:var(--color-surface);width:32px;height:30px;display:flex;align-items:center;justify-content:center;color:var(--color-text-muted)}
.vswitch button svg{width:16px;height:16px}
.vswitch button.active{background:var(--color-primary-soft);color:var(--color-primary)}
.vswitch button+button{border-left:1px solid var(--color-border)}
.cp-search{width:220px}
.cp-search .control{padding:7px 11px}

/* module sub-menu (Odoo in-app menu bar) */
.submenu{display:flex;gap:2px;background:var(--color-surface);border-bottom:1px solid var(--color-border);padding:0 18px}
.submenu button{border:0;background:transparent;padding:11px 14px;font-size:13.5px;font-weight:600;color:var(--color-text-muted);border-bottom:2px solid transparent;margin-bottom:-1px}
.submenu button:hover{color:var(--color-text)}
.submenu button.active{color:var(--color-primary);border-bottom-color:var(--color-primary)}

/* ---------- form / detail view (Odoo form sheet) ---------- */
.form-wrap{max-width:880px;margin:24px auto;padding:0 22px 64px}
.sheet{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);padding:28px 32px}
.sheet-head{display:flex;align-items:center;gap:12px;margin-bottom:24px;flex-wrap:wrap}
.sheet-title{font-size:26px;font-weight:700;letter-spacing:-0.01em}
.sheet-title .ph{color:var(--color-text-faint);font-weight:600}
.sheet-avatar{display:flex;align-items:center;gap:16px;margin-bottom:24px}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:2px 32px}
@media(max-width:680px){.form-grid{grid-template-columns:1fr}}
.form-read{display:flex;flex-direction:column;gap:3px;padding:9px 0;border-bottom:1px solid var(--color-border)}
.form-read .k{font-size:12px;font-weight:600;color:var(--color-text-muted)}
.form-read .v{font-size:14px;color:var(--color-text)}

/* status pipeline bar (Odoo statusbar) */
.statusbar{display:flex;margin-left:auto;flex-shrink:0}
.statusbar button{border:1px solid var(--color-border);background:var(--color-surface);padding:6px 14px;font-size:12px;font-weight:600;color:var(--color-text-faint)}
.statusbar button:first-child{border-radius:var(--radius-sm) 0 0 var(--radius-sm)}
.statusbar button:last-child{border-radius:0 var(--radius-sm) var(--radius-sm) 0}
.statusbar button+button{border-left:0}
.statusbar button.done{color:var(--color-text-muted)}
.statusbar button.active{background:var(--color-primary);color:#fff;border-color:var(--color-primary);position:relative;z-index:1}

/* line-item table inside a form */
.lines-table{width:100%;border-collapse:collapse;font-size:13.5px;margin-top:8px}
.lines-table th{text-align:left;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-muted);padding:8px 12px;border-bottom:1px solid var(--color-border)}
.lines-table td{padding:11px 12px;border-bottom:1px solid var(--color-border)}
.totals-box{margin-left:auto;margin-top:16px;width:260px}
.totals-box .trow{display:flex;justify-content:space-between;padding:5px 0;font-size:13.5px;color:var(--color-text-muted)}
.totals-box .trow.grand{font-size:17px;font-weight:700;color:var(--color-text);border-top:1px solid var(--color-border);margin-top:4px;padding-top:10px}
.clickrow{cursor:pointer}
.clickrow:hover{background:var(--color-primary-soft)}

