:root{
  /* Default accent. Overridden at runtime by /v1/tenant/branding →
     primary_color so the UI can pick up per-tenant white-label colour. */
  --color-accent:#00FF87;

  /* ── Theme token layer ─────────────────────────────────────────────
     Default values below are dark-theme (current behaviour). A light
     override block sits in :root[data-theme="light"] further down.
     Inline styles and CSS rules that want to be theme-aware reference
     these vars (e.g. background: var(--bg-1)). The accent values stay
     brand-vibrant in both themes per locked design decision #1.        */

  /* Surface palette */
  --bg-0: #000;                   /* app base */
  --bg-1: rgba(255,255,255,.02);  /* card */
  --bg-2: rgba(255,255,255,.04);  /* card hover / tr:hover */
  --bg-3: rgba(255,255,255,.06);  /* elevated / input */
  --bg-4: rgba(255,255,255,.10);  /* pressed / toggles */

  /* Foreground (text) palette */
  --fg-0: #fff;                   /* primary */
  --fg-1: rgba(255,255,255,.6);   /* body */
  --fg-2: rgba(255,255,255,.45);  /* muted */
  --fg-3: rgba(255,255,255,.3);   /* subtle */
  --fg-4: rgba(255,255,255,.2);   /* faint labels */
  --fg-5: rgba(255,255,255,.12);  /* disabled / placeholder-ish */

  /* Borders + dividers */
  --bd-0: rgba(255,255,255,.07);  /* card border */
  --bd-1: rgba(255,255,255,.1);   /* input border */
  --bd-2: rgba(255,255,255,.04);  /* tr border */

  /* Status accents — kept vibrant in both themes */
  --acc-ok:   #00FF87;
  --acc-warn: #FFAA00;
  --acc-crit: #FF2D55;
  --acc-info: #0A84FF;
  --acc-feat: #9F7BFF;

  /* Accent faint fills + borders (for pills / icon boxes) */
  --acc-ok-10:   rgba(0,255,135,.10);
  --acc-warn-10: rgba(255,170,0,.10);
  --acc-crit-10: rgba(255,45,85,.10);
  --acc-info-10: rgba(10,132,255,.10);
  --acc-feat-10: rgba(159,123,255,.10);
  --acc-ok-bd:   rgba(0,255,135,.28);
  --acc-warn-bd: rgba(255,170,0,.28);
  --acc-crit-bd: rgba(255,45,85,.28);

  /* Chrome bits */
  --scrollbar: rgba(255,255,255,.12);
  --focus-ring: rgba(0,255,135,.35);
  --focus-glow: rgba(0,255,135,.08);

  /* Option-list surfaces (native <select> popup) */
  --opt-bg: #1a1030;
  --opt-bg-hover: #261448;
  --opt-bg-checked: #2d1a5e;

  /* Modal + elevated-surface tokens. Light theme overrides these to
     white in the [data-theme="light"] block below. `--code-bg` is the
     inset surface for read-only code / token blocks; `--code-fg` is
     the monospace text color on top of it. `--overlay` is the scrim
     behind modals. */
  --overlay:    rgba(0,0,0,.75);
  --modal-bg:   #15161B;
  --modal-bd:   rgba(255,255,255,.08);
  --modal-shadow: 0 32px 80px rgba(0,0,0,.6);
  --code-bg:    rgba(0,0,0,.4);
  --code-fg:    rgba(255,255,255,.85);
  --code-bd:    rgba(255,255,255,.06);

  /* Modal / drawer backdrop + elevated card */
  --overlay: rgba(0,0,0,.85);
  --modal-bg: rgba(10,10,20,.98);

  /* Translucent floating labels (topology edge labels, map chips) —
     need a contrasting wash against whatever's behind them. Dark-theme
     default is a dark wash; light-theme flips to a light wash so the
     label reads on a bright canvas. */
  --label-bg:      rgba(0,0,0,.5);
  --label-bg-soft: rgba(0,0,0,.35);

  /* ── Responsive type scale ─────────────────────────────────────────
     Each --fs-* uses clamp(min, fluid, max) so the whole UI breathes
     with the viewport without jumping at fixed breakpoints. The fluid
     term `Nvw + Mpx` is tuned to sit near the old fixed sizes around
     a 1440-wide viewport and scale gracefully on 1024px laptops up to
     2560px+ displays. Numbered scale (3xs–5xl) mirrors the literal
     px ranges that existed in inline styles.                            */
  --fs-3xs: clamp(7px,  0.30vw + 5px,  10px);   /* was 7–8 */
  --fs-2xs: clamp(8px,  0.35vw + 6px,  11px);   /* was 9   */
  --fs-xs:  clamp(9px,  0.40vw + 7px,  12px);   /* was 10  */
  --fs-sm:  clamp(10px, 0.45vw + 8px,  13px);   /* was 11  */
  --fs-md:  clamp(11px, 0.50vw + 9px,  14px);   /* was 12  */
  --fs-lg:  clamp(12px, 0.55vw + 10px, 16px);   /* was 13–14 */
  --fs-xl:  clamp(14px, 0.65vw + 11px, 18px);   /* was 15–16 */
  --fs-2xl: clamp(16px, 0.90vw + 13px, 22px);   /* was 18–20 */
  --fs-3xl: clamp(18px, 1.10vw + 14px, 26px);   /* was 22   */
  --fs-4xl: clamp(22px, 1.40vw + 16px, 32px);   /* was 24–28 */
  --fs-5xl: clamp(26px, 1.70vw + 18px, 40px);   /* was 32–36 */

  /* Spacing ladder (paddings, gaps). Fixed-pixel values below pre-dated
     this scale; they're preserved in helpers but new code should pull
     from these. */
  --sp-1: clamp(3px,  0.15vw + 2.5px, 5px);   /* 4 */
  --sp-2: clamp(5px,  0.25vw + 4px,   8px);   /* 6–8 */
  --sp-3: clamp(8px,  0.40vw + 6px,  12px);   /* 10–12 */
  --sp-4: clamp(12px, 0.55vw + 9px,  18px);   /* 14–16 */
  --sp-5: clamp(16px, 0.75vw + 12px, 24px);   /* 18–22 */
  --sp-6: clamp(20px, 1.00vw + 15px, 32px);   /* 24–28 */

  /* Radii — mild scaling; a cramped 1024-wide laptop uses 6px, a 4K
     display uses 10px. Bigger radii look jarring when scaled linearly. */
  --r-sm: clamp(4px, 0.1vw + 3px, 6px);
  --r-md: clamp(6px, 0.15vw + 5px, 10px);
  --r-lg: clamp(8px, 0.2vw + 6px, 12px);

  /* NavRail scales with viewport so items don't look cramped on wide
     displays nor overflow on narrow ones. Widths are sized to comfortably
     fit the widest uppercase labels in NAVS ("MAINTENANCE", "WAN METRICS"
     — 11 chars) at every font-scale step, with 6-8px of left/right
     breathing room inside the item bg. The items, icon box, and icon
     itself all track --rail-w so the rail stays coherent at any width. */
  --rail-w:       clamp(76px, 0.9vw + 62px, 104px);
  --rail-item-w:  clamp(68px, 0.8vw + 56px, 92px);
  --rail-item-h:  clamp(44px, 0.5vw + 38px, 60px);
  --rail-icon:    clamp(16px, 0.3vw + 13px, 22px);
}

/* ── Light theme override ──────────────────────────────────────────
   Activated by setting `data-theme="light"` on <html> via ThemeContext.
   Accents stay vibrant on purpose (brand vibrancy). Status information
   that relies on accent-as-text readability uses the pill pattern
   (fill + border + dark neutral text) in components.                  */
:root[data-theme="light"]{
  --bg-0: #F7F8FA;
  --bg-1: #FFFFFF;
  --bg-2: rgba(15,20,30,.03);
  --bg-3: rgba(15,20,30,.05);
  --bg-4: rgba(15,20,30,.09);

  --fg-0: #0D1117;
  --fg-1: rgba(13,17,23,.75);
  --fg-2: rgba(13,17,23,.58);
  --fg-3: rgba(13,17,23,.42);
  --fg-4: rgba(13,17,23,.28);
  --fg-5: rgba(13,17,23,.16);

  --bd-0: rgba(13,17,23,.09);
  --bd-1: rgba(13,17,23,.14);
  --bd-2: rgba(13,17,23,.06);

  /* Pill fills a touch stronger on white so they don't wash out */
  --acc-ok-10:   rgba(0,180,95,.14);
  --acc-warn-10: rgba(200,120,0,.14);
  --acc-crit-10: rgba(210,20,55,.12);
  --acc-info-10: rgba(10,100,220,.12);
  --acc-feat-10: rgba(120,80,230,.12);
  --acc-ok-bd:   rgba(0,160,85,.40);
  --acc-warn-bd: rgba(190,115,0,.40);
  --acc-crit-bd: rgba(200,25,60,.40);

  --scrollbar: rgba(13,17,23,.22);
  --focus-ring: rgba(0,200,110,.55);
  --focus-glow: rgba(0,200,110,.16);

  --opt-bg: #FFFFFF;
  --opt-bg-hover: #EEF2F7;
  --opt-bg-checked: #E6ECF4;

  --overlay: rgba(15,20,30,.35);
  --modal-bg: #FFFFFF;
  --modal-bd: rgba(13,17,23,.12);
  --modal-shadow: 0 24px 60px rgba(15,20,30,.18);
  --code-bg: #F0F2F6;
  --code-fg: rgba(13,17,23,.85);
  --code-bd: rgba(13,17,23,.09);

  --label-bg:      rgba(255,255,255,.82);
  --label-bg-soft: rgba(255,255,255,.65);
}

/* Nested overrides: subtrees tagged data-theme="dark" keep dark tokens
   even when the root is light. Used by the login left panel and any
   surface that must stay dark (branded/animated canvases).            */
[data-theme="dark"]{
  --bg-0: #000;
  --bg-1: rgba(255,255,255,.02);
  --bg-2: rgba(255,255,255,.04);
  --bg-3: rgba(255,255,255,.06);
  --bg-4: rgba(255,255,255,.10);

  --fg-0: #fff;
  --fg-1: rgba(255,255,255,.6);
  --fg-2: rgba(255,255,255,.45);
  --fg-3: rgba(255,255,255,.3);
  --fg-4: rgba(255,255,255,.2);
  --fg-5: rgba(255,255,255,.12);

  --bd-0: rgba(255,255,255,.07);
  --bd-1: rgba(255,255,255,.1);
  --bd-2: rgba(255,255,255,.04);

  --acc-ok-10:   rgba(0,255,135,.10);
  --acc-warn-10: rgba(255,170,0,.10);
  --acc-crit-10: rgba(255,45,85,.10);
  --acc-info-10: rgba(10,132,255,.10);
  --acc-feat-10: rgba(159,123,255,.10);
  --acc-ok-bd:   rgba(0,255,135,.28);
  --acc-warn-bd: rgba(255,170,0,.28);
  --acc-crit-bd: rgba(255,45,85,.28);

  --scrollbar: rgba(255,255,255,.12);
  --focus-ring: rgba(0,255,135,.35);
  --focus-glow: rgba(0,255,135,.08);

  --opt-bg: #1a1030;
  --opt-bg-hover: #261448;
  --opt-bg-checked: #2d1a5e;

  --overlay: rgba(0,0,0,.85);
  --modal-bg: #15161B;
  --modal-bd: rgba(255,255,255,.08);
  --modal-shadow: 0 32px 80px rgba(0,0,0,.6);
  --code-bg: rgba(0,0,0,.4);
  --code-fg: rgba(255,255,255,.85);
  --code-bd: rgba(255,255,255,.06);

  --label-bg:      rgba(0,0,0,.5);
  --label-bg-soft: rgba(0,0,0,.35);
}

*{box-sizing:border-box;margin:0;padding:0}
html,body,#root{height:100%;overflow:hidden;background:var(--bg-0)}

/* App shell backdrop — two subtle radial tints over the base surface.
   Dark mode keeps the original blue/green glow. Light mode tints the
   same positions with very soft blue/green wash against the grey base
   so the shell doesn't look flat. */
.app-shell-bg{
  background:
    radial-gradient(ellipse 80% 50% at 70% 18%,rgba(0,90,200,.07) 0,transparent 58%),
    radial-gradient(ellipse 55% 40% at 18% 80%,rgba(0,140,90,.05) 0,transparent 52%),
    var(--bg-0);
}
:root[data-theme="light"] .app-shell-bg{
  background:
    radial-gradient(ellipse 80% 50% at 70% 18%,rgba(0,90,200,.05) 0,transparent 58%),
    radial-gradient(ellipse 55% 40% at 18% 80%,rgba(0,140,90,.04) 0,transparent 52%),
    var(--bg-0);
}

/* Body uses Inter — a neutral, compact UI sans.
   Syne is kept as a display font, opted-in via the `.syne` class
   for logos and big titles only. */
body{
  font-family:'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
  font-feature-settings:'cv11','ss01','ss03';   /* Inter shape tweaks */
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  color:var(--fg-0);margin:0;height:100vh;overflow:hidden;
  letter-spacing:0;  /* reset: no stretch */
}
::-webkit-scrollbar{width:2px}
::-webkit-scrollbar-thumb{background:var(--scrollbar)}

@keyframes pg{0%,100%{opacity:.1}50%{opacity:.45}}
@keyframes pa{0%,100%{opacity:.12}50%{opacity:.58}}
@keyframes pr{0%,100%{opacity:.16}50%{opacity:.84}}
@keyframes blink{0%,100%{opacity:1}45%{opacity:.04}}
@keyframes breathe{0%,100%{opacity:.3}50%{opacity:1}}
@keyframes ripple{0%{transform:scale(1);opacity:1}100%{transform:scale(2.6);opacity:0}}
@keyframes kairos-scan{
  0%,8%{transform:scaleX(1);opacity:1}
  48%{transform:scaleX(.14);opacity:.7}
  92%,100%{transform:scaleX(1);opacity:1}
}
@keyframes edraw{from{stroke-dashoffset:600}to{stroke-dashoffset:0}}
@keyframes rring{from{stroke-dashoffset:0}to{stroke-dashoffset:-200}}
@keyframes nin{0%{opacity:0;transform:scale(0)}65%{transform:scale(1.15)}100%{opacity:1;transform:scale(1)}}
@keyframes cin{0%{opacity:0;transform:translateY(12px)}60%{transform:translateY(-2px)}100%{opacity:1;transform:translateY(0)}}
@keyframes ain{0%{opacity:0;transform:translateX(20px)}60%{transform:translateX(-3px)}100%{opacity:1;transform:translateX(0)}}
/* rin is used on every table row. Must NOT leave a residual `transform`
   in the `to` keyframe — animation-fill-mode:both on .rin would then
   keep a non-none transform post-animation, which creates a stacking
   context on every row and makes them paint on top of nearby sticky
   panels that should be covering them. Opacity-only keeps the entrance
   flicker and leaves rows with no transform afterward. */
@keyframes rin{from{opacity:0}to{opacity:1}}
@keyframes dropin{from{transform:translateX(100%)}to{transform:translateX(0)}}
@keyframes barin{from{transform:scaleX(0);transform-origin:left}to{transform:scaleX(1)}}
@keyframes rpl{0%{transform:translate(-50%,-50%) scale(0);opacity:.5}100%{transform:translate(-50%,-50%) scale(4);opacity:0}}
@keyframes scan{0%{transform:translateX(-10%);opacity:0}10%{opacity:1}90%{opacity:1}100%{transform:translateX(115%);opacity:0}}
@keyframes glitch{0%,94%,100%{clip-path:none;transform:none}95%{clip-path:inset(25% 0 45% 0);transform:translate(-2px,1px)}96%{clip-path:inset(60% 0 8% 0);transform:translate(2px,-1px)}97%{clip-path:inset(0 0 70% 0);transform:translate(-1px,2px)}}
@keyframes shimmer{0%{background-position:-400px 0}100%{background-position:400px 0}}
@keyframes topo-reveal-overlay{
  0%{opacity:1;backdrop-filter:blur(12px)}
  70%{opacity:.3;backdrop-filter:blur(2px)}
  100%{opacity:0;backdrop-filter:blur(0)}
}
@keyframes rail-nudge{
  0%,100%{transform:translateX(0)}
  20%{transform:translateX(-2px)}
  40%{transform:translateX(2px)}
  60%{transform:translateX(-1.5px)}
  80%{transform:translateX(1px)}
}
.rail-toggle{animation:rail-nudge .6s ease-in-out 2s infinite}
.rail-toggle:hover{animation:none}

/* ── Login page animations ────────────────────────────────────────── */
@keyframes gradient-shift{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}
@keyframes grid-drift{0%{background-position:0 0}100%{background-position:0 60px}}
@keyframes fadeInUp{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}
@keyframes slideInRight{from{opacity:0;transform:translateX(24px)}to{opacity:1;transform:translateX(0)}}
@keyframes pulse-ring{0%{transform:scale(1);opacity:.4}100%{transform:scale(2.2);opacity:0}}
@keyframes packet-flow{0%{offset-distance:0%}100%{offset-distance:100%}}
@keyframes node-appear{0%{opacity:0;transform:scale(0)}60%{transform:scale(1.15)}100%{opacity:1;transform:scale(1)}}
@keyframes stroke-draw{from{stroke-dashoffset:200}to{stroke-dashoffset:0}}
@keyframes glow-pulse{0%,100%{opacity:.4}50%{opacity:.8}}
@keyframes marquee-scroll{0%{transform:translateX(0)}100%{transform:translateX(-50%)}}
@keyframes zoom-enter{0%{transform:scale(1);opacity:1;filter:blur(0)}70%{transform:scale(1.4);opacity:.6;filter:blur(4px)}100%{transform:scale(1.6);opacity:0;filter:blur(8px)}}
@keyframes float-y{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}
@keyframes shake{10%,90%{transform:translateX(-2px)}20%,80%{transform:translateX(4px)}30%,50%,70%{transform:translateX(-6px)}40%,60%{transform:translateX(6px)}}
@keyframes btn-glow{0%,100%{box-shadow:0 4px 20px rgba(109,40,217,.3)}50%{box-shadow:0 4px 30px rgba(109,40,217,.55)}}
@keyframes scan-sweep{0%{top:8%;opacity:0}10%{opacity:1}90%{opacity:1}100%{top:88%;opacity:0}}

.pg{animation:pg 3.5s ease-in-out infinite}
.pa{animation:pa 1.8s ease-in-out infinite}
.pr{animation:pr .85s ease-in-out infinite}
.blink{animation:blink 1.1s ease-in-out infinite}
.glitch{animation:glitch 5s ease-in-out infinite}
.nin{animation:nin .5s cubic-bezier(.34,1.56,.64,1) both}
.cin{animation:cin .44s cubic-bezier(.34,1.56,.64,1) both}
.ain{animation:ain .38s cubic-bezier(.34,1.56,.64,1) both}
.rin{animation:rin .27s ease-out both}
.mono{font-family:'DM Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
.syne{font-family:'Syne',sans-serif;letter-spacing:.04em}
.fadein{animation:cin .35s ease-out both}
.slidein{animation:rin .25s ease-out both}
.shimmer{background:linear-gradient(90deg,var(--bg-1) 25%,var(--bg-3) 50%,var(--bg-1) 75%);background-size:800px 100%;animation:shimmer 1.5s infinite}

/* Let body text stay at natural Inter metrics.  Inputs/buttons often
   inherit `font-family:inherit` but forget letter-spacing, which is
   why some labels looked "stretched" — reset here. */
input,button,select,textarea{letter-spacing:0}

button{font-family:inherit;background:none;border:none;color:inherit;cursor:pointer}
input,select,textarea{font-family:inherit}

/* Spinner animation (used by src/components/Loading.jsx). The `.shimmer`
   class used by that same module is already defined below (search "shimmer"). */
@keyframes kairos-spin { to { transform: rotate(360deg); } }

/* Drawer open animations (used by CircuitDrawer in WANView). */
@keyframes slideInRight { from { transform: translateX(100%); } to { transform: translateX(0); } }
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }

/* ── Global table styling ────────────────────────────────────────── */
table{width:100%;border-collapse:collapse;border-spacing:0}
th{
  font-family:'DM Mono',monospace;font-size:var(--fs-2xs);font-weight:700;
  color:var(--fg-4);letter-spacing:.02em;text-transform:uppercase;
  text-align:left;padding:var(--sp-2) var(--sp-3);
  border-bottom:1px solid var(--bd-0);
}
td{
  font-size:var(--fs-md);color:var(--fg-1);
  padding:var(--sp-2) var(--sp-3);
  border-bottom:1px solid var(--bd-2);
  vertical-align:middle;
}
tr:hover td{background:var(--bg-1)}

/* ── Global input/select styling ─────────────────────────────────── */
input,select,textarea{
  background:var(--bg-3);
  border:1px solid var(--bd-1);
  border-radius:var(--r-md);color:var(--fg-0);padding:var(--sp-2) var(--sp-3);
  font-size:var(--fs-md);outline:none;transition:border-color .2s,box-shadow .2s;
  width:100%;
}
input:focus,select:focus,textarea:focus{
  border-color:var(--focus-ring);
  box-shadow:0 0 0 2px var(--focus-glow);
}
/* Bare inputs inside custom containers (search bars, etc.) */
input.bare{background:transparent;border:none;border-radius:0;padding:0;width:auto;box-shadow:none}
input.bare:focus{border-color:transparent;box-shadow:none}
input::placeholder{color:var(--fg-4)}
select{cursor:pointer;appearance:auto;color:var(--fg-0)}
select option{background:var(--opt-bg);color:var(--fg-0);padding:8px}
select option:checked{background:var(--opt-bg-checked)}
select option:hover{background:var(--opt-bg-hover)}

[data-alert-focused] {
  outline: 1px solid var(--focus-ring) !important;
  background: var(--focus-glow) !important;
}

/* ── Responsive layout helpers ────────────────────────────────────
   Stat-card strips across the app used `repeat(4, 1fr)` which crushes
   cards on narrow screens. .stat-grid auto-fits to minmax so the same
   markup keeps looking right from 1024px to 4K. Opt-in class; existing
   grid styles that already wrap their contents are unaffected.        */
.stat-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: var(--sp-3);
}
.kpi-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: var(--sp-3);
}

/* Container query primitive — opt a wrapper into "query against my
   own width" so nested components can react to panel width, not the
   whole viewport. Used by the Inventory drawer and circuit-detail
   split layouts. */
.cq-inline { container-type: inline-size; }

/* Pulse animation used by the SWR refresh pill. */
@keyframes pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50%      { opacity: .5; transform: scale(1.2); }
}

/* Keep Topology + chart SVGs immune to the clamp-driven root-font
   scaling — their labels are computed from viewBox geometry and must
   stay unitless numbers. This is a safety net: SVGChart etc. set
   fontSize={N} as attributes which render as `font-size="N"` in SVG
   and naturally ignore the CSS var system anyway. */
svg text, svg tspan { font-size: inherit; }
:root{--diff-background-color:initial;--diff-text-color:initial;--diff-font-family:Consolas,Courier,monospace;--diff-selection-background-color:#b3d7ff;--diff-selection-text-color:var(--diff-text-color);--diff-gutter-insert-background-color:#d6fedb;--diff-gutter-insert-text-color:var(--diff-text-color);--diff-gutter-delete-background-color:#fadde0;--diff-gutter-delete-text-color:var(--diff-text-color);--diff-gutter-selected-background-color:#fffce0;--diff-gutter-selected-text-color:var(--diff-text-color);--diff-code-insert-background-color:#eaffee;--diff-code-insert-text-color:var(--diff-text-color);--diff-code-delete-background-color:#fdeff0;--diff-code-delete-text-color:var(--diff-text-color);--diff-code-insert-edit-background-color:#c0dc91;--diff-code-insert-edit-text-color:var(--diff-text-color);--diff-code-delete-edit-background-color:#f39ea2;--diff-code-delete-edit-text-color:var(--diff-text-color);--diff-code-selected-background-color:#fffce0;--diff-code-selected-text-color:var(--diff-text-color);--diff-omit-gutter-line-color:#cb2a1d;}.diff{background-color:var(--diff-background-color);border-collapse:collapse;color:var(--diff-text-color);table-layout:fixed;width:100%;}.diff::-moz-selection{background-color:#b3d7ff;background-color:var(--diff-selection-background-color);color:var(--diff-text-color);color:var(--diff-selection-text-color);}.diff::selection{background-color:#b3d7ff;background-color:var(--diff-selection-background-color);color:var(--diff-text-color);color:var(--diff-selection-text-color);}.diff td{padding-bottom:0;padding-top:0;vertical-align:top;}.diff-line{font-family:Consolas,Courier,monospace;font-family:var(--diff-font-family);line-height:1.5;}.diff-gutter>a{color:inherit;display:block;}.diff-gutter{cursor:pointer;padding:0 1ch;text-align:right;-webkit-user-select:none;-moz-user-select:none;user-select:none;}.diff-gutter-insert{background-color:#d6fedb;background-color:var(--diff-gutter-insert-background-color);color:var(--diff-text-color);color:var(--diff-gutter-insert-text-color);}.diff-gutter-delete{background-color:#fadde0;background-color:var(--diff-gutter-delete-background-color);color:var(--diff-text-color);color:var(--diff-gutter-delete-text-color);}.diff-gutter-omit{cursor:default;}.diff-gutter-selected{background-color:#fffce0;background-color:var(--diff-gutter-selected-background-color);color:var(--diff-text-color);color:var(--diff-gutter-selected-text-color);}.diff-code{word-wrap:break-word;padding:0 0 0 .5em;white-space:pre-wrap;word-break:break-all;}.diff-code-edit{color:inherit;}.diff-code-insert{background-color:#eaffee;background-color:var(--diff-code-insert-background-color);color:var(--diff-text-color);color:var(--diff-code-insert-text-color);}.diff-code-insert .diff-code-edit{background-color:#c0dc91;background-color:var(--diff-code-insert-edit-background-color);color:var(--diff-text-color);color:var(--diff-code-insert-edit-text-color);}.diff-code-delete{background-color:#fdeff0;background-color:var(--diff-code-delete-background-color);color:var(--diff-text-color);color:var(--diff-code-delete-text-color);}.diff-code-delete .diff-code-edit{background-color:#f39ea2;background-color:var(--diff-code-delete-edit-background-color);color:var(--diff-text-color);color:var(--diff-code-delete-edit-text-color);}.diff-code-selected{background-color:#fffce0;background-color:var(--diff-code-selected-background-color);color:var(--diff-text-color);color:var(--diff-code-selected-text-color);}.diff-widget-content{vertical-align:top;}.diff-gutter-col{width:7ch;}.diff-gutter-omit{height:0;}.diff-gutter-omit:before{background-color:#cb2a1d;background-color:var(--diff-omit-gutter-line-color);content:" ";display:block;height:100%;margin-left:4.6ch;overflow:hidden;white-space:pre;width:2px;}.diff-decoration{line-height:1.5;-webkit-user-select:none;-moz-user-select:none;user-select:none;}.diff-decoration-content{font-family:Consolas,Courier,monospace;font-family:var(--diff-font-family);padding:0;}/* ── Theme overrides for react-diff-view ─────────────────────────────
 * All rules scoped under .kairos-diff-view so the library's default
 * light-theme styles can't leak into any other view. Targets the
 * library's real class names (verified against
 * node_modules/react-diff-view/style/index.css in 3.3.x):
 *   .diff-gutter, .diff-gutter-insert, .diff-gutter-delete
 *   .diff-code, .diff-code-insert, .diff-code-delete
 *   .diff-line, .diff-hunk
 *   .diff-decoration, .diff-decoration-content   (hunk header)
 * Colours use theme tokens so the diff reads on both dark and light.
 */

.kairos-diff-view {
  background: transparent;
  border: 1px solid var(--bd-0);
  border-radius: 8px;
  overflow: auto;
  max-height: 420px;
  font-family: 'DM Mono', monospace;
  font-size: var(--fs-sm);
  line-height: 1.55;
}

.kairos-diff-view .diff {
  background: transparent;
  color: var(--fg-1);
  font-family: 'DM Mono', monospace;
}

.kairos-diff-view .diff-line {
  font-family: 'DM Mono', monospace;
  line-height: 1.55;
}

/* Line-number gutter (default / unchanged rows). */
.kairos-diff-view .diff-gutter {
  color: var(--fg-3);
  font-family: 'DM Mono', monospace;
  text-align: right;
  background: transparent;
  -webkit-user-select: none;
  user-select: none;
}

/* Code cell (default / unchanged rows). */
.kairos-diff-view .diff-code {
  background: transparent;
  color: var(--fg-1);
  white-space: pre;
  word-break: normal;
}

/* Addition rows — green accent reads on both themes; darken the text in
 * light mode so it has contrast against the pale-green tint. */
.kairos-diff-view .diff-gutter-insert {
  background: rgba(0, 255, 135, 0.08);
  color: #00A85A;
}
.kairos-diff-view .diff-code-insert {
  background: rgba(0, 255, 135, 0.08);
  color: #00A85A;
}
:root[data-theme="dark"] .kairos-diff-view .diff-gutter-insert,
:root[data-theme="dark"] .kairos-diff-view .diff-code-insert {
  color: #00FF87;
}

/* Deletion rows. */
.kairos-diff-view .diff-gutter-delete {
  background: rgba(255, 45, 85, 0.08);
  color: #D6294A;
}
.kairos-diff-view .diff-code-delete {
  background: rgba(255, 45, 85, 0.08);
  color: #D6294A;
}
:root[data-theme="dark"] .kairos-diff-view .diff-gutter-delete,
:root[data-theme="dark"] .kairos-diff-view .diff-code-delete {
  color: #FF6B82;
}

/* Inline token edit highlights (when tokenize/markEdits is used; harmless
 * when not — these rules just don't match anything). */
.kairos-diff-view .diff-code-insert .diff-code-edit {
  background: rgba(0, 255, 135, 0.22);
  color: #00A85A;
}
.kairos-diff-view .diff-code-delete .diff-code-edit {
  background: rgba(255, 45, 85, 0.22);
  color: #D6294A;
}
:root[data-theme="dark"] .kairos-diff-view .diff-code-insert .diff-code-edit {
  color: #00FF87;
}
:root[data-theme="dark"] .kairos-diff-view .diff-code-delete .diff-code-edit {
  color: #FF6B82;
}

/* Hunk header — rendered via <Decoration> around the `@@` line. */
.kairos-diff-view .diff-decoration {
  background: var(--bg-2);
  color: var(--fg-3);
}
.kairos-diff-view .diff-decoration-content {
  font-family: 'DM Mono', monospace;
  color: var(--fg-3);
  padding: 2px 10px;
  font-size: var(--fs-xs);
}

/* Selection colours override (library defaults to a pale blue). */
.kairos-diff-view .diff::selection,
.kairos-diff-view .diff ::selection {
  background: rgba(159, 123, 255, 0.3);
  color: var(--fg-0);
}
/* required styles */

.leaflet-pane,
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-tile-container,
.leaflet-pane > svg,
.leaflet-pane > canvas,
.leaflet-zoom-box,
.leaflet-image-layer,
.leaflet-layer {
	position: absolute;
	left: 0;
	top: 0;
	}
.leaflet-container {
	overflow: hidden;
	}
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow {
	-webkit-user-select: none;
	   -moz-user-select: none;
	        user-select: none;
	  -webkit-user-drag: none;
	}
/* Prevents IE11 from highlighting tiles in blue */
.leaflet-tile::selection {
	background: transparent;
}
/* Safari renders non-retina tile on retina better with this, but Chrome is worse */
.leaflet-safari .leaflet-tile {
	image-rendering: -webkit-optimize-contrast;
	}
/* hack that prevents hw layers "stretching" when loading new tiles */
.leaflet-safari .leaflet-tile-container {
	width: 1600px;
	height: 1600px;
	-webkit-transform-origin: 0 0;
	}
.leaflet-marker-icon,
.leaflet-marker-shadow {
	display: block;
	}
/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
.leaflet-container .leaflet-overlay-pane svg {
	max-width: none !important;
	max-height: none !important;
	}
.leaflet-container .leaflet-marker-pane img,
.leaflet-container .leaflet-shadow-pane img,
.leaflet-container .leaflet-tile-pane img,
.leaflet-container img.leaflet-image-layer,
.leaflet-container .leaflet-tile {
	max-width: none !important;
	max-height: none !important;
	width: auto;
	padding: 0;
	}

.leaflet-container img.leaflet-tile {
	/* See: https://bugs.chromium.org/p/chromium/issues/detail?id=600120 */
	mix-blend-mode: plus-lighter;
}

.leaflet-container.leaflet-touch-zoom {
	-ms-touch-action: pan-x pan-y;
	touch-action: pan-x pan-y;
	}
.leaflet-container.leaflet-touch-drag {
	-ms-touch-action: pinch-zoom;
	/* Fallback for FF which doesn't support pinch-zoom */
	touch-action: none;
	touch-action: pinch-zoom;
}
.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
	-ms-touch-action: none;
	touch-action: none;
}
.leaflet-container {
	-webkit-tap-highlight-color: transparent;
}
.leaflet-container a {
	-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
}
.leaflet-tile {
	filter: inherit;
	visibility: hidden;
	}
.leaflet-tile-loaded {
	visibility: inherit;
	}
.leaflet-zoom-box {
	width: 0;
	height: 0;
	-moz-box-sizing: border-box;
	     box-sizing: border-box;
	z-index: 800;
	}
/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
.leaflet-overlay-pane svg {
	-moz-user-select: none;
	}

.leaflet-pane         { z-index: 400; }

.leaflet-tile-pane    { z-index: 200; }
.leaflet-overlay-pane { z-index: 400; }
.leaflet-shadow-pane  { z-index: 500; }
.leaflet-marker-pane  { z-index: 600; }
.leaflet-tooltip-pane   { z-index: 650; }
.leaflet-popup-pane   { z-index: 700; }

.leaflet-map-pane canvas { z-index: 100; }
.leaflet-map-pane svg    { z-index: 200; }

.leaflet-vml-shape {
	width: 1px;
	height: 1px;
	}
.lvml {
	behavior: url(#default#VML);
	display: inline-block;
	position: absolute;
	}


/* control positioning */

.leaflet-control {
	position: relative;
	z-index: 800;
	pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
	pointer-events: auto;
	}
.leaflet-top,
.leaflet-bottom {
	position: absolute;
	z-index: 1000;
	pointer-events: none;
	}
.leaflet-top {
	top: 0;
	}
.leaflet-right {
	right: 0;
	}
.leaflet-bottom {
	bottom: 0;
	}
.leaflet-left {
	left: 0;
	}
.leaflet-control {
	float: left;
	clear: both;
	}
.leaflet-right .leaflet-control {
	float: right;
	}
.leaflet-top .leaflet-control {
	margin-top: 10px;
	}
.leaflet-bottom .leaflet-control {
	margin-bottom: 10px;
	}
.leaflet-left .leaflet-control {
	margin-left: 10px;
	}
.leaflet-right .leaflet-control {
	margin-right: 10px;
	}


/* zoom and fade animations */

.leaflet-fade-anim .leaflet-popup {
	opacity: 0;
	-webkit-transition: opacity 0.2s linear;
	   -moz-transition: opacity 0.2s linear;
	        transition: opacity 0.2s linear;
	}
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
	opacity: 1;
	}
.leaflet-zoom-animated {
	-webkit-transform-origin: 0 0;
	    -ms-transform-origin: 0 0;
	        transform-origin: 0 0;
	}
svg.leaflet-zoom-animated {
	will-change: transform;
}

.leaflet-zoom-anim .leaflet-zoom-animated {
	-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
	   -moz-transition:    -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
	        transition:         transform 0.25s cubic-bezier(0,0,0.25,1);
	}
.leaflet-zoom-anim .leaflet-tile,
.leaflet-pan-anim .leaflet-tile {
	-webkit-transition: none;
	   -moz-transition: none;
	        transition: none;
	}

.leaflet-zoom-anim .leaflet-zoom-hide {
	visibility: hidden;
	}


/* cursors */

.leaflet-interactive {
	cursor: pointer;
	}
.leaflet-grab {
	cursor: -webkit-grab;
	cursor:    -moz-grab;
	cursor:         grab;
	}
.leaflet-crosshair,
.leaflet-crosshair .leaflet-interactive {
	cursor: crosshair;
	}
.leaflet-popup-pane,
.leaflet-control {
	cursor: auto;
	}
.leaflet-dragging .leaflet-grab,
.leaflet-dragging .leaflet-grab .leaflet-interactive,
.leaflet-dragging .leaflet-marker-draggable {
	cursor: move;
	cursor: -webkit-grabbing;
	cursor:    -moz-grabbing;
	cursor:         grabbing;
	}

/* marker & overlays interactivity */
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-image-layer,
.leaflet-pane > svg path,
.leaflet-tile-container {
	pointer-events: none;
	}

.leaflet-marker-icon.leaflet-interactive,
.leaflet-image-layer.leaflet-interactive,
.leaflet-pane > svg path.leaflet-interactive,
svg.leaflet-image-layer.leaflet-interactive path {
	pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
	pointer-events: auto;
	}

/* visual tweaks */

.leaflet-container {
	background: #ddd;
	outline-offset: 1px;
	}
.leaflet-container a {
	color: #0078A8;
	}
.leaflet-zoom-box {
	border: 2px dotted #38f;
	background: rgba(255,255,255,0.5);
	}


/* general typography */
.leaflet-container {
	font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
	font-size: 12px;
	font-size: 0.75rem;
	line-height: 1.5;
	}


/* general toolbar styles */

.leaflet-bar {
	box-shadow: 0 1px 5px rgba(0,0,0,0.65);
	border-radius: 4px;
	}
.leaflet-bar a {
	background-color: #fff;
	border-bottom: 1px solid #ccc;
	width: 26px;
	height: 26px;
	line-height: 26px;
	display: block;
	text-align: center;
	text-decoration: none;
	color: black;
	}
.leaflet-bar a,
.leaflet-control-layers-toggle {
	background-position: 50% 50%;
	background-repeat: no-repeat;
	display: block;
	}
.leaflet-bar a:hover,
.leaflet-bar a:focus {
	background-color: #f4f4f4;
	}
.leaflet-bar a:first-child {
	border-top-left-radius: 4px;
	border-top-right-radius: 4px;
	}
.leaflet-bar a:last-child {
	border-bottom-left-radius: 4px;
	border-bottom-right-radius: 4px;
	border-bottom: none;
	}
.leaflet-bar a.leaflet-disabled {
	cursor: default;
	background-color: #f4f4f4;
	color: #bbb;
	}

.leaflet-touch .leaflet-bar a {
	width: 30px;
	height: 30px;
	line-height: 30px;
	}
.leaflet-touch .leaflet-bar a:first-child {
	border-top-left-radius: 2px;
	border-top-right-radius: 2px;
	}
.leaflet-touch .leaflet-bar a:last-child {
	border-bottom-left-radius: 2px;
	border-bottom-right-radius: 2px;
	}

/* zoom control */

.leaflet-control-zoom-in,
.leaflet-control-zoom-out {
	font: bold 18px 'Lucida Console', Monaco, monospace;
	text-indent: 1px;
	}

.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out  {
	font-size: 22px;
	}


/* layers control */

.leaflet-control-layers {
	box-shadow: 0 1px 5px rgba(0,0,0,0.4);
	background: #fff;
	border-radius: 5px;
	}
.leaflet-control-layers-toggle {
	background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAQAAAADQ4RFAAACf0lEQVR4AY1UM3gkARTePdvdoTxXKc+qTl3aU5U6b2Kbkz3Gtq3Zw6ziLGNPzrYx7946Tr6/ee/XeCQ4D3ykPtL5tHno4n0d/h3+xfuWHGLX81cn7r0iTNzjr7LrlxCqPtkbTQEHeqOrTy4Yyt3VCi/IOB0v7rVC7q45Q3Gr5K6jt+3Gl5nCoDD4MtO+j96Wu8atmhGqcNGHObuf8OM/x3AMx38+4Z2sPqzCxRFK2aF2e5Jol56XTLyggAMTL56XOMoS1W4pOyjUcGGQdZxU6qRh7B9Zp+PfpOFlqt0zyDZckPi1ttmIp03jX8gyJ8a/PG2yutpS/Vol7peZIbZcKBAEEheEIAgFbDkz5H6Zrkm2hVWGiXKiF4Ycw0RWKdtC16Q7qe3X4iOMxruonzegJzWaXFrU9utOSsLUmrc0YjeWYjCW4PDMADElpJSSQ0vQvA1Tm6/JlKnqFs1EGyZiFCqnRZTEJJJiKRYzVYzJck2Rm6P4iH+cmSY0YzimYa8l0EtTODFWhcMIMVqdsI2uiTvKmTisIDHJ3od5GILVhBCarCfVRmo4uTjkhrhzkiBV7SsaqS+TzrzM1qpGGUFt28pIySQHR6h7F6KSwGWm97ay+Z+ZqMcEjEWebE7wxCSQwpkhJqoZA5ivCdZDjJepuJ9IQjGGUmuXJdBFUygxVqVsxFsLMbDe8ZbDYVCGKxs+W080max1hFCarCfV+C1KATwcnvE9gRRuMP2prdbWGowm1KB1y+zwMMENkM755cJ2yPDtqhTI6ED1M/82yIDtC/4j4BijjeObflpO9I9MwXTCsSX8jWAFeHr05WoLTJ5G8IQVS/7vwR6ohirYM7f6HzYpogfS3R2OAAAAAElFTkSuQmCC);
	width: 36px;
	height: 36px;
	}
.leaflet-retina .leaflet-control-layers-toggle {
	background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAQAAABvcdNgAAAEsklEQVR4AWL4TydIhpZK1kpWOlg0w3ZXP6D2soBtG42jeI6ZmQTHzAxiTbSJsYLjO9HhP+WOmcuhciVnmHVQcJnp7DFvScowZorad/+V/fVzMdMT2g9Cv9guXGv/7pYOrXh2U+RRR3dSd9JRx6bIFc/ekqHI29JC6pJ5ZEh1yWkhkbcFeSjxgx3L2m1cb1C7bceyxA+CNjT/Ifff+/kDk2u/w/33/IeCMOSaWZ4glosqT3DNnNZQ7Cs58/3Ce5HL78iZH/vKVIaYlqzfdLu8Vi7dnvUbEza5Idt36tquZFldl6N5Z/POLof0XLK61mZCmJSWjVF9tEjUluu74IUXvgttuVIHE7YxSkaYhJZam7yiM9Pv82JYfl9nptxZaxMJE4YSPty+vF0+Y2up9d3wwijfjZbabqm/3bZ9ecKHsiGmRflnn1MW4pjHf9oLufyn2z3y1D6n8g8TZhxyzipLNPnAUpsOiuWimg52psrTZYnOWYNDTMuWBWa0tJb4rgq1UvmutpaYEbZlwU3CLJm/ayYjHW5/h7xWLn9Hh1vepDkyf7dE7MtT5LR4e7yYpHrkhOUpEfssBLq2pPhAqoSWKUkk7EDqkmK6RrCEzqDjhNDWNE+XSMvkJRDWlZTmCW0l0PHQGRZY5t1L83kT0Y3l2SItk5JAWHl2dCOBm+fPu3fo5/3v61RMCO9Jx2EEYYhb0rmNQMX/vm7gqOEJLcXTGw3CAuRNeyaPWwjR8PRqKQ1PDA/dpv+on9Shox52WFnx0KY8onHayrJzm87i5h9xGw/tfkev0jGsQizqezUKjk12hBMKJ4kbCqGPVNXudyyrShovGw5CgxsRICxF6aRmSjlBnHRzg7Gx8fKqEubI2rahQYdR1YgDIRQO7JvQyD52hoIQx0mxa0ODtW2Iozn1le2iIRdzwWewedyZzewidueOGqlsn1MvcnQpuVwLGG3/IR1hIKxCjelIDZ8ldqWz25jWAsnldEnK0Zxro19TGVb2ffIZEsIO89EIEDvKMPrzmBOQcKQ+rroye6NgRRxqR4U8EAkz0CL6uSGOm6KQCdWjvjRiSP1BPalCRS5iQYiEIvxuBMJEWgzSoHADcVMuN7IuqqTeyUPq22qFimFtxDyBBJEwNyt6TM88blFHao/6tWWhuuOM4SAK4EI4QmFHA+SEyWlp4EQoJ13cYGzMu7yszEIBOm2rVmHUNqwAIQabISNMRstmdhNWcFLsSm+0tjJH1MdRxO5Nx0WDMhCtgD6OKgZeljJqJKc9po8juskR9XN0Y1lZ3mWjLR9JCO1jRDMd0fpYC2VnvjBSEFg7wBENc0R9HFlb0xvF1+TBEpF68d+DHR6IOWVv2BECtxo46hOFUBd/APU57WIoEwJhIi2CdpyZX0m93BZicktMj1AS9dClteUFAUNUIEygRZCtik5zSxI9MubTBH1GOiHsiLJ3OCoSZkILa9PxiN0EbvhsAo8tdAf9Seepd36lGWHmtNANTv5Jd0z4QYyeo/UEJqxKRpg5LZx6btLPsOaEmdMyxYdlc8LMaJnikDlhclqmPiQnTEpLUIZEwkRagjYkEibQErwhkTAKCLQEbUgkzJQWc/0PstHHcfEdQ+UAAAAASUVORK5CYII=);
	background-size: 26px 26px;
	}
.leaflet-touch .leaflet-control-layers-toggle {
	width: 44px;
	height: 44px;
	}
.leaflet-control-layers .leaflet-control-layers-list,
.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
	display: none;
	}
.leaflet-control-layers-expanded .leaflet-control-layers-list {
	display: block;
	position: relative;
	}
.leaflet-control-layers-expanded {
	padding: 6px 10px 6px 6px;
	color: #333;
	background: #fff;
	}
.leaflet-control-layers-scrollbar {
	overflow-y: scroll;
	overflow-x: hidden;
	padding-right: 5px;
	}
.leaflet-control-layers-selector {
	margin-top: 2px;
	position: relative;
	top: 1px;
	}
.leaflet-control-layers label {
	display: block;
	font-size: 13px;
	font-size: 1.08333em;
	}
.leaflet-control-layers-separator {
	height: 0;
	border-top: 1px solid #ddd;
	margin: 5px -10px 5px -6px;
	}

/* Default icon URLs */
.leaflet-default-icon-path { /* used only in path-guessing heuristic, see L.Icon.Default */
	background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII=);
	}


/* attribution and scale controls */

.leaflet-container .leaflet-control-attribution {
	background: #fff;
	background: rgba(255, 255, 255, 0.8);
	margin: 0;
	}
.leaflet-control-attribution,
.leaflet-control-scale-line {
	padding: 0 5px;
	color: #333;
	line-height: 1.4;
	}
.leaflet-control-attribution a {
	text-decoration: none;
	}
.leaflet-control-attribution a:hover,
.leaflet-control-attribution a:focus {
	text-decoration: underline;
	}
.leaflet-attribution-flag {
	display: inline !important;
	vertical-align: baseline !important;
	width: 1em;
	height: 0.6669em;
	}
.leaflet-left .leaflet-control-scale {
	margin-left: 5px;
	}
.leaflet-bottom .leaflet-control-scale {
	margin-bottom: 5px;
	}
.leaflet-control-scale-line {
	border: 2px solid #777;
	border-top: none;
	line-height: 1.1;
	padding: 2px 5px 1px;
	white-space: nowrap;
	-moz-box-sizing: border-box;
	     box-sizing: border-box;
	background: rgba(255, 255, 255, 0.8);
	text-shadow: 1px 1px #fff;
	}
.leaflet-control-scale-line:not(:first-child) {
	border-top: 2px solid #777;
	border-bottom: none;
	margin-top: -2px;
	}
.leaflet-control-scale-line:not(:first-child):not(:last-child) {
	border-bottom: 2px solid #777;
	}

.leaflet-touch .leaflet-control-attribution,
.leaflet-touch .leaflet-control-layers,
.leaflet-touch .leaflet-bar {
	box-shadow: none;
	}
.leaflet-touch .leaflet-control-layers,
.leaflet-touch .leaflet-bar {
	border: 2px solid rgba(0,0,0,0.2);
	background-clip: padding-box;
	}


/* popup */

.leaflet-popup {
	position: absolute;
	text-align: center;
	margin-bottom: 20px;
	}
.leaflet-popup-content-wrapper {
	padding: 1px;
	text-align: left;
	border-radius: 12px;
	}
.leaflet-popup-content {
	margin: 13px 24px 13px 20px;
	line-height: 1.3;
	font-size: 13px;
	font-size: 1.08333em;
	min-height: 1px;
	}
.leaflet-popup-content p {
	margin: 17px 0;
	margin: 1.3em 0;
	}
.leaflet-popup-tip-container {
	width: 40px;
	height: 20px;
	position: absolute;
	left: 50%;
	margin-top: -1px;
	margin-left: -20px;
	overflow: hidden;
	pointer-events: none;
	}
.leaflet-popup-tip {
	width: 17px;
	height: 17px;
	padding: 1px;

	margin: -10px auto 0;
	pointer-events: auto;

	-webkit-transform: rotate(45deg);
	   -moz-transform: rotate(45deg);
	    -ms-transform: rotate(45deg);
	        transform: rotate(45deg);
	}
.leaflet-popup-content-wrapper,
.leaflet-popup-tip {
	background: white;
	color: #333;
	box-shadow: 0 3px 14px rgba(0,0,0,0.4);
	}
.leaflet-container a.leaflet-popup-close-button {
	position: absolute;
	top: 0;
	right: 0;
	border: none;
	text-align: center;
	width: 24px;
	height: 24px;
	font: 16px/24px Tahoma, Verdana, sans-serif;
	color: #757575;
	text-decoration: none;
	background: transparent;
	}
.leaflet-container a.leaflet-popup-close-button:hover,
.leaflet-container a.leaflet-popup-close-button:focus {
	color: #585858;
	}
.leaflet-popup-scrolled {
	overflow: auto;
	}

.leaflet-oldie .leaflet-popup-content-wrapper {
	-ms-zoom: 1;
	}
.leaflet-oldie .leaflet-popup-tip {
	width: 24px;
	margin: 0 auto;

	-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
	filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
	}

.leaflet-oldie .leaflet-control-zoom,
.leaflet-oldie .leaflet-control-layers,
.leaflet-oldie .leaflet-popup-content-wrapper,
.leaflet-oldie .leaflet-popup-tip {
	border: 1px solid #999;
	}


/* div icon */

.leaflet-div-icon {
	background: #fff;
	border: 1px solid #666;
	}


/* Tooltip */
/* Base styles for the element that has a tooltip */
.leaflet-tooltip {
	position: absolute;
	padding: 6px;
	background-color: #fff;
	border: 1px solid #fff;
	border-radius: 3px;
	color: #222;
	white-space: nowrap;
	-webkit-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;
	pointer-events: none;
	box-shadow: 0 1px 3px rgba(0,0,0,0.4);
	}
.leaflet-tooltip.leaflet-interactive {
	cursor: pointer;
	pointer-events: auto;
	}
.leaflet-tooltip-top:before,
.leaflet-tooltip-bottom:before,
.leaflet-tooltip-left:before,
.leaflet-tooltip-right:before {
	position: absolute;
	pointer-events: none;
	border: 6px solid transparent;
	background: transparent;
	content: "";
	}

/* Directions */

.leaflet-tooltip-bottom {
	margin-top: 6px;
}
.leaflet-tooltip-top {
	margin-top: -6px;
}
.leaflet-tooltip-bottom:before,
.leaflet-tooltip-top:before {
	left: 50%;
	margin-left: -6px;
	}
.leaflet-tooltip-top:before {
	bottom: 0;
	margin-bottom: -12px;
	border-top-color: #fff;
	}
.leaflet-tooltip-bottom:before {
	top: 0;
	margin-top: -12px;
	margin-left: -6px;
	border-bottom-color: #fff;
	}
.leaflet-tooltip-left {
	margin-left: -6px;
}
.leaflet-tooltip-right {
	margin-left: 6px;
}
.leaflet-tooltip-left:before,
.leaflet-tooltip-right:before {
	top: 50%;
	margin-top: -6px;
	}
.leaflet-tooltip-left:before {
	right: 0;
	margin-right: -12px;
	border-left-color: #fff;
	}
.leaflet-tooltip-right:before {
	left: 0;
	margin-left: -12px;
	border-right-color: #fff;
	}

/* Printing */

@media print {
	/* Prevent printers from removing background-images of controls. */
	.leaflet-control {
		-webkit-print-color-adjust: exact;
		print-color-adjust: exact;
		}
	}
.leaflet-cluster-anim .leaflet-marker-icon, .leaflet-cluster-anim .leaflet-marker-shadow {
	-webkit-transition: -webkit-transform 0.3s ease-out, opacity 0.3s ease-in;
	-moz-transition: -moz-transform 0.3s ease-out, opacity 0.3s ease-in;
	-o-transition: -o-transform 0.3s ease-out, opacity 0.3s ease-in;
	transition: transform 0.3s ease-out, opacity 0.3s ease-in;
}

.leaflet-cluster-spider-leg {
	/* stroke-dashoffset (duration and function) should match with leaflet-marker-icon transform in order to track it exactly */
	-webkit-transition: -webkit-stroke-dashoffset 0.3s ease-out, -webkit-stroke-opacity 0.3s ease-in;
	-moz-transition: -moz-stroke-dashoffset 0.3s ease-out, -moz-stroke-opacity 0.3s ease-in;
	-o-transition: -o-stroke-dashoffset 0.3s ease-out, -o-stroke-opacity 0.3s ease-in;
	transition: stroke-dashoffset 0.3s ease-out, stroke-opacity 0.3s ease-in;
}
.marker-cluster-small {
	background-color: rgba(181, 226, 140, 0.6);
	}
.marker-cluster-small div {
	background-color: rgba(110, 204, 57, 0.6);
	}

.marker-cluster-medium {
	background-color: rgba(241, 211, 87, 0.6);
	}
.marker-cluster-medium div {
	background-color: rgba(240, 194, 12, 0.6);
	}

.marker-cluster-large {
	background-color: rgba(253, 156, 115, 0.6);
	}
.marker-cluster-large div {
	background-color: rgba(241, 128, 23, 0.6);
	}

	/* IE 6-8 fallback colors */
.leaflet-oldie .marker-cluster-small {
	background-color: rgb(181, 226, 140);
	}
.leaflet-oldie .marker-cluster-small div {
	background-color: rgb(110, 204, 57);
	}

.leaflet-oldie .marker-cluster-medium {
	background-color: rgb(241, 211, 87);
	}
.leaflet-oldie .marker-cluster-medium div {
	background-color: rgb(240, 194, 12);
	}

.leaflet-oldie .marker-cluster-large {
	background-color: rgb(253, 156, 115);
	}
.leaflet-oldie .marker-cluster-large div {
	background-color: rgb(241, 128, 23);
}

.marker-cluster {
	background-clip: padding-box;
	border-radius: 20px;
	}
.marker-cluster div {
	width: 30px;
	height: 30px;
	margin-left: 5px;
	margin-top: 5px;

	text-align: center;
	border-radius: 15px;
	font: 12px "Helvetica Neue", Arial, Helvetica, sans-serif;
	}
.marker-cluster span {
	line-height: 30px;
	}