/* Atlas Command Center UI kit — local utility classes layered on colors_and_type.css */
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{font-family:var(--font-sans);background:var(--background);color:var(--foreground);font-size:14px;-webkit-font-smoothing:antialiased}
/* display/align/justify only matter when #root's sole content is the small mounted Clerk
   sign-in card (signed out) — once signed in, the app's own top-level div fills 100% height/width
   via its own inline styles, so centering a full-size child is a no-op. */
#root{height:100vh;width:100%;display:flex;align-items:center;justify-content:center}
button{font-family:inherit;cursor:pointer}
input,select,textarea{font-family:inherit}
::selection{background:var(--primary);color:var(--primary-foreground)}

/* scrollbars */
*::-webkit-scrollbar{width:8px;height:8px}
*::-webkit-scrollbar-thumb{background:#d4d4d8;border-radius:3px}
*::-webkit-scrollbar-track{background:transparent}

.icon{display:inline-flex;align-items:center;justify-content:center}
.icon svg{width:1em;height:1em;stroke-width:2}

/* --- Button --- */
/* text-decoration:none is for the <a class="btn"> cases (the dining drawer's "Open in Admin", the
   travel attachment download) — a real <button> has no underline to begin with, but an anchor keeps
   the UA default and reads as a link wearing a button's clothes. */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;white-space:nowrap;
  border-radius:var(--radius-md);font-size:14px;font-weight:400;border:1px solid transparent;text-decoration:none;
  transition:color .15s,box-shadow .15s,border-color .15s,opacity .15s;height:36px;padding:0 12px;box-shadow:var(--shadow-xs)}
.btn:disabled{opacity:.5;pointer-events:none}
.btn .icon{font-size:16px}
.btn-sm{height:32px;padding:0 12px;border-radius:var(--radius-sm);gap:6px;font-size:14px}
.btn-lg{height:40px;padding:0 24px}
.btn-icon{width:36px;height:36px;padding:0}
.btn-primary{background:var(--primary);color:var(--primary-foreground)}
.btn-primary:hover{background:color-mix(in oklab,var(--primary) 90%,transparent)}
.btn-secondary{background:var(--secondary);color:var(--secondary-foreground)}
.btn-secondary:hover{background:color-mix(in oklab,var(--secondary) 80%,#fff)}
.btn-outline{background:var(--background);border-color:var(--border);color:var(--foreground)}
.btn-outline:hover{background:var(--accent)}
.btn-ghost{background:transparent;box-shadow:none;color:var(--foreground)}
.btn-ghost:hover{background:var(--accent)}
.btn-blue{background:#3b82f6;color:#fff}
.btn-blue:hover{background:rgba(59,130,246,.82)}
.btn-destructive{background:var(--destructive);color:#fff}
.btn-destructive:hover{opacity:.9}
.btn-text{background:none;box-shadow:none;color:var(--muted-foreground);height:auto;padding:0;gap:4px}
.btn-text:hover{opacity:.5}

/* --- Badge --- */
.badge{display:inline-flex;align-items:center;gap:6px;font-weight:500;border:1px solid transparent;white-space:nowrap;
  padding:1px 8px;border-radius:6px;font-size:12px;width:fit-content}
.badge .icon{font-size:12px}
.badge-default{background:var(--primary);color:var(--primary-foreground)}
.badge-secondary{background:var(--secondary);color:var(--secondary-foreground)}
.badge-outline{border-color:var(--border);color:var(--foreground)}
.badge-success{background:#22c55e;color:#fff}
.badge-destructive{background:var(--destructive);color:#fff}
.badge-warning{background:#facc15;border-color:#f59e0b;color:#000}
.badge-status{background:var(--secondary);color:var(--secondary-foreground);font-weight:600}
.dot{width:9px;height:9px;border-radius:50%;flex-shrink:0}

/* --- Card --- */
.card{background:var(--card);color:var(--card-foreground);border:1px solid var(--border);
  border-radius:var(--radius-md);box-shadow:var(--shadow-xs);display:flex;flex-direction:column}
.card-pad{padding:12px}

/* --- Input --- */
.field-label{font-size:14px;font-weight:600;margin-bottom:6px;display:block}
.input{width:100%;height:36px;border:1px solid var(--input);border-radius:var(--radius-sm);
  background:transparent;padding:0 12px;font-size:14px;box-shadow:var(--shadow-xs);color:var(--foreground);transition:box-shadow .15s,border-color .15s}
.input::placeholder{color:var(--muted-foreground);font-size:14px}
.input:focus{outline:none;border-color:var(--ring);box-shadow:0 0 0 3px color-mix(in oklab,var(--ring) 50%,transparent)}
.input-invalid{border-color:var(--destructive)!important;box-shadow:0 0 0 3px color-mix(in oklab,var(--destructive) 20%,transparent)!important}

/* --- Tabs (underline) --- */
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--border)}
.tab{padding:8px 16px;font-size:14px;font-weight:500;color:var(--muted-foreground);position:relative;background:none;border:none}
.tab:hover{color:var(--foreground)}
.tab.active{color:var(--foreground)}
.tab.active:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--foreground)}

/* pill tabs */
.tabs-pill{display:inline-flex;background:var(--muted);border-radius:var(--radius-lg);padding:4px;gap:2px}
.tab-pill{padding:5px 12px;font-size:14px;font-weight:500;color:var(--muted-foreground);border:none;background:none;border-radius:var(--radius-sm)}
.tab-pill.active{background:var(--background);color:var(--foreground);box-shadow:var(--shadow-sm)}

/* --- Table --- */
.tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:14px}
.tbl th{text-align:left;font-weight:500;font-size:11px;letter-spacing:.06em;text-transform:uppercase;height:34px;padding:0 16px;color:var(--muted-foreground)}
.tbl td{padding:14px 16px;border-bottom:1px solid var(--border);vertical-align:middle}
.tbl tbody tr:last-child td{border-bottom:none}
.tbl tbody tr.tbl-data{transition:background .12s;cursor:pointer}
.tbl tbody tr.tbl-data:hover td{background:color-mix(in oklab,var(--muted) 50%,transparent)}
.tbl tbody tr.tbl-data:hover td:first-child{box-shadow:inset 3px 0 0 var(--primary)}
.tbl-group td{padding:18px 16px 7px;border-bottom:1px solid var(--border)}
.tbl-group .lbl{font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--muted-foreground)}
.tbl-group .cnt{font-size:11px;font-weight:500;color:var(--muted-foreground);opacity:.7}
.mono{font-family:var(--font-mono);font-size:12px}
.muted{color:var(--muted-foreground)}

/* --- Admin link hover affordance (arrow appears on hover only) --- */
.admin-link .admin-link-arrow{opacity:0;transition:opacity .12s ease}
.admin-link:hover .admin-link-arrow{opacity:1}

/* --- Brand icons (Slack / Zendesk product logos, components.jsx's BrandIcon) --- */
/* Slack's mark is already 4-color and reads fine on either theme. Zendesk's is a single very
   dark green (#03363D) that all but vanishes against a dark card, so lift it in dark mode only.
   brightness() rather than invert(): it keeps the brand hue (dark green -> legible teal) where
   inverting would turn it pink. */
.brand-icon{opacity:.85;transition:opacity .12s ease}
a:hover > .brand-icon{opacity:1}
.dark .brand-icon[alt="zendesk"]{filter:brightness(2.9)}

/* Bordered target for a brand logo used as a link. Without a border the bare logos read as decoration
   rather than something clickable, which is exactly how they looked on the dining cards. Hover lifts
   the border and background; :active presses it so the click is acknowledged even when the new tab
   takes a moment to open. */
.brand-link{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;
  border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--card);
  transition:background .12s ease,border-color .12s ease,transform .06s ease}
.brand-link:hover{background:var(--accent);border-color:var(--muted-foreground)}
.brand-link:active{transform:scale(.92)}
.brand-link:focus-visible{outline:2px solid var(--ring);outline-offset:1px}

/* --- Avatar --- */
.avatar{width:32px;height:32px;border-radius:50%;background:var(--secondary);display:inline-flex;align-items:center;justify-content:center;
  font-size:12px;font-weight:600;color:var(--secondary-foreground);flex-shrink:0}

/* separators / misc */
.sep{height:1px;background:var(--border);width:100%}
.row{display:flex;align-items:center}
.col{display:flex;flex-direction:column}

/* dialog */
.overlay{position:fixed;inset:0;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;z-index:50;animation:fade .15s ease}
.dialog{background:var(--popover);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:0 10px 40px -10px rgba(0,0,0,.35);width:440px;max-width:92vw;animation:pop .18s cubic-bezier(.23,1,.32,1)}
@keyframes fade{from{opacity:0}}
@keyframes pop{from{opacity:0;transform:scale(.96)}}

/* toast */
.toast{position:fixed;bottom:20px;right:20px;background:var(--popover);border:1px solid var(--border);border-radius:var(--radius-md);
  box-shadow:var(--shadow-md);padding:12px 14px;font-size:14px;display:flex;gap:10px;align-items:center;z-index:60;animation:pop .2s ease}

/* spinner — Refresh button on the three board tabs (dining-board/travel-board/travel-status),
   while a manual refresh is in flight */
.icon-spin{animation:icon-spin .8s linear infinite}
@keyframes icon-spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}
