:root{
  --bg:#f7f6f2;
  --card:#ffffff;
  --ink:#1f2a33;
  --muted:rgba(31,42,51,.65);
  --line:rgba(31,42,51,.12);
  --gold:#caa24b;
  --shadow: 0 10px 30px rgba(31,42,51,.10);
  --r1:14px;
  --r2:20px;
}

*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;
  font-family: system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;
  color:var(--ink);
  background:var(--bg);
}

/* Prevent background scroll when modal is open */
body.modalOpen{overflow:hidden;}

.hidden{display:none !important;}

.topbar{
  position:sticky;
  top:0;
  z-index:10;
  display:flex;
  align-items:center;
  justify-content:space-between;
  padding:12px 14px;
  background:rgba(255,255,255,.9);
  backdrop-filter: blur(10px);
  border-bottom:1px solid var(--line);
}

.topbar .left{
  display:flex;
  align-items:center;
  gap:10px;
}

.brand{font-weight:900; letter-spacing:.2px}

.badge{
  font-size:12px;
  padding:6px 10px;
  border-radius:999px;
  border:1px solid var(--line);
  background:#fff;
}

.appShell{
  min-height: calc(100vh - 58px);
  padding:14px;
}

.card{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--r2);
  box-shadow: var(--shadow);
  padding:14px;
}

.authCard{
  max-width:520px;
  margin:28px auto 0 auto;
}

label{
  display:block;
  font-size:12px;
  font-weight:800;
  color:rgba(31,42,51,.75);
  margin:10px 0 6px;
}

input, select, textarea{
  width:100%;
  border:1px solid var(--line);
  border-radius:12px;
  padding:10px 12px;
  background:#fff;
  color:var(--ink);
  outline:none;
}
textarea{min-height:90px; resize:vertical}

.btn{
  border:1px solid var(--line);
  background:#fff;
  color:var(--ink);
  border-radius:12px;
  padding:10px 12px;
  font-weight:900;
  cursor:pointer;
}
.btn.sm{
  padding:8px 10px;
  border-radius:10px;
  font-size:13px;
}
.btn:hover{filter:brightness(.98)}
.btn:active{transform:translateY(1px)}
.btn.gold{
  background: linear-gradient(180deg, rgba(202,162,75,1), rgba(180,135,48,1));
  border-color: rgba(140,105,38,.5);
  color:#fff;
}
.btn.ghost{background:transparent}
.btn.ok{
  background:rgba(50,160,90,.12);
  border-color:rgba(50,160,90,.35);
}
.btn.danger{
  background:rgba(220,60,60,.10);
  border-color:rgba(220,60,60,.35);
  color:rgba(160,40,40,1);
}

.chip{
  border:1px solid var(--line);
  background:#fff;
  padding:8px 10px;
  border-radius:999px;
  font-weight:900;
  cursor:pointer;
}

.row{display:flex}
.wrap{flex-wrap:wrap}
.between{justify-content:space-between}
.gap{gap:10px}
.small{font-size:12px}
.muted{color:var(--muted)}

.grid2{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:10px;
}
@media (max-width:680px){
  .grid2{grid-template-columns:1fr}
}

.roleGrid{
  display:grid;
  grid-template-columns:1fr 1fr 1fr;
  gap:10px;
}
@media (max-width:560px){
  .roleGrid{grid-template-columns:1fr}
}

.mainView{
  display:flex;
  flex-direction:column;
  gap:12px;
  /* Fill viewport on desktop so chat composer never gets cut off */
  height: calc(100vh - 58px - 28px);
  min-height: 0;
}

.roleHeader{
  background:rgba(255,255,255,.9);
  border:1px solid var(--line);
  border-radius:var(--r2);
  box-shadow: var(--shadow);
  padding:12px 14px;
}

.roleHeaderInner{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:12px;
  flex-wrap:wrap;
}

.h1{font-size:18px; font-weight:1000; line-height:1.1}
.roleActions{display:flex; gap:10px; flex-wrap:wrap}

/* Two-column layout (tickets + chat) */
.contentWrap{
  flex:1;
  min-height:0;
  display:grid;
  grid-template-columns: 1.6fr .9fr;
  gap:12px;
  align-items:start;
}

/* Filters row sits BELOW contentWrap.
   Desktop: aligns under tickets.
   Mobile: naturally falls under chat because contentWrap becomes 1 column. */
.filtersRow{
  margin-top:12px;
  padding-bottom: env(safe-area-inset-bottom);
}
.filtersBar{
  display:flex;
  gap:8px;
  flex-wrap:wrap;
  align-items:center;
  padding:10px;
  border:1px solid var(--line);
  border-radius:var(--r2);
  background:rgba(255,255,255,.86);
  margin:0;
}

.panel{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:var(--r2);
  box-shadow: var(--shadow);
  padding:12px;
}
.grow{min-width:0}

@media (max-width:980px){
  .contentWrap{grid-template-columns:1fr}
  .sidePanel{order:2}
}

/* Desktop: keep filters under tickets column, not full width */
@media (min-width:981px){
  .filtersRow{max-width: calc((100% - 12px) * 1.6 / (1.6 + .9));}
}

/* Chat panel */
.chatPanel{
  display:flex;
  flex-direction:column;
  height:auto;
  min-height:0;
}
.chatHeader{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
  padding-bottom:10px;
  border-bottom:1px solid var(--line);
}
.chatHeader .chatTitle{font-weight:1000}
.chatNameRow{
  display:flex;
  gap:8px;
  align-items:center;
}
.chatMessages{
  flex:1;
  overflow:auto;
  padding:10px 2px;
}
.chatMsg{
  padding:10px;
  border:1px solid var(--line);
  background:rgba(251,250,247,.98);
  border-radius:14px;
  margin-bottom:8px;
}
.chatMeta{
  display:flex;
  justify-content:space-between;
  gap:10px;
  font-size:12px;
  color:var(--muted);
  margin-bottom:6px;
}
.chatBody{white-space:pre-wrap; word-wrap:break-word}
.chatComposer{
  border-top:1px solid var(--line);
  padding-top:10px;
}
.chatComposer textarea{min-height:54px; resize:none}

/* Make panels scroll internally on desktop for app-like feel */
@media (min-width:981px){
  .ticketsPanel, .chatPanel{ height:100%; min-height:0; overflow:hidden; }
  #ticketsWrap{ height:100%; overflow:auto; padding-right:2px; }
  .chatMessages{ min-height:0; }
}

/* PDF viewer */
.soFrameWrap{
  width:100%;
  height: 68vh;
  border:1px solid var(--line);
  border-radius:14px;
  overflow:hidden;
  background:#fff;
}
.soFrame{width:100%; height:100%; border:0}
@media (max-width:560px){
  .soFrameWrap{height:56vh}
}

/* Toast */
.toast{
  position:fixed;
  left:50%;
  top:16px;
  transform:translateX(-50%);
  z-index:60;
  background:rgba(15,18,22,.92);
  color:#fff;
  padding:10px 14px;
  border-radius:999px;
  box-shadow:0 12px 30px rgba(0,0,0,.25);
  display:flex;
  gap:10px;
  align-items:center;
  max-width:min(720px, calc(100% - 22px));
}
.toast.hidden{display:none;}
.toast strong{font-weight:1000}

.list{display:flex; flex-direction:column; gap:10px}

.item{
  background:rgba(251,250,247,.98);
  border:1px solid var(--line);
  border-radius:var(--r2);
  padding:12px;
}

.itemTop{
  display:flex;
  justify-content:space-between;
  gap:10px;
}

.itemTitle{font-weight:1000}

.pill{
  font-size:11px;
  padding:5px 9px;
  border-radius:999px;
  border:1px solid var(--line);
  background:#fff;
  font-weight:1000;
  text-transform:uppercase;
  letter-spacing:.4px;
}
.pill.urgent{
  border-color:rgba(220,60,60,.4);
  background:rgba(220,60,60,.10);
  color:rgba(160,40,40,1);
}
.pill.unacked{
  border-color:rgba(202,162,75,.55);
  background:rgba(202,162,75,.12);
  color:rgba(120,85,20,1);
}
.pill.ready{
  border-color:rgba(50,160,90,.35);
  background:rgba(50,160,90,.10);
  color:rgba(40,120,70,1);
}

.sep{
  border:none;
  border-top:1px solid var(--line);
  margin:10px 0;
}

.sectionBlock{margin-bottom:12px}
.sectionHeader{
  display:flex;
  justify-content:space-between;
  align-items:center;
  margin-bottom:8px;
}
.sectionTitle{font-weight:1000}

.summaryRow{
  list-style:none;
  display:flex;
  justify-content:space-between;
  align-items:center;
  cursor:pointer;
  padding:8px 0;
}
details > summary::-webkit-details-marker{display:none;}

.modal{
  position:fixed;
  inset:0;
  background:rgba(15,18,22,.45);
  display:flex;
  align-items:center;
  justify-content:center;
  padding:14px;
  z-index:30;
}
.modalPanel{
  width:min(920px, 100%);
  max-height: min(86vh, 900px);
  overflow:auto;
  background:rgba(255,255,255,.98);
  border:1px solid var(--line);
  border-radius:var(--r2);
  box-shadow: 0 20px 60px rgba(0,0,0,.18);
  padding:14px;
}

@media (max-width:560px){
  .modal{
    align-items:flex-end;
    padding:0;
  }
  .modalPanel{
    border-radius: var(--r2) var(--r2) 0 0;
    max-height: 88vh;
  }
}

/* Smaller close button */
#modalClose{
  padding: 10px 14px !important;
  border-radius: 14px !important;
  font-size: 14px !important;
}

/* Sticky action bar inside ticket modal */
.ticketTopBar{
  position: sticky;
  top: 0;
  z-index: 5;
  background: rgba(251,250,247,.98);
  border-bottom: 1px solid rgba(31,42,51,.10);
  padding: 10px 0;
  margin-top: 10px;
}

.ticketTopBar{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap: 10px;
}

.ticketTopRight{
  display:flex;
  gap: 8px;
  flex-wrap: wrap;
  justify-content: flex-end;
}

.ticketTopLeft{
  display:flex;
  gap: 8px;
  align-items:center;
  flex-wrap: wrap;
  }


/* =========================
   Realtime attention + tabs
   ========================= */
.flashOverlay{
  position: fixed;
  inset: 0;
  background: rgba(202,162,75,.22);
  pointer-events: none;
  z-index: 9999;
}
.flashOverlay.pulse{
  animation: flashPulse 700ms ease-out 1;
}
@keyframes flashPulse{
  0%{opacity:0}
  20%{opacity:1}
  100%{opacity:0}
}

/* Ticket color coding */
.item{
  border-left: 8px solid rgba(31,42,51,.18);
}
/* Hand Select = BLUE */
.item.type-hand_select{
  border-left-color: rgba(25,118,210,.85);
  background: rgba(25,118,210,.07);
}

/* Load Up = GREEN */
.item.type-load_up{
  border-left-color: rgba(46,125,50,.85);
  background: rgba(46,125,50,.08);
}

/* Internal Move = YELLOW */
.item.type-internal_move{
  border-left-color: rgba(202,162,75,.90);
  background: rgba(202,162,75,.10);
}
.item.type-issue{ border-left-color: rgba(211,47,47,.85); background: rgba(211,47,47,.06); }
.item.status-unacked{ box-shadow: 0 0 0 1px rgba(202,162,75,.25) inset; }
.item.status-new{ box-shadow: 0 0 0 1px rgba(202,162,75,.25) inset; }

/* Mobile tabs */
.mobileTabs{
  display:none;
  gap:10px;
  align-items:center;
  background:rgba(255,255,255,.9);
  border:1px solid var(--line);
  border-radius:var(--r2);
  box-shadow: var(--shadow);
  padding:8px;
}
.tabBtn{
  flex:1;
  border:1px solid var(--line);
  background:#fff;
  border-radius:999px;
  padding:10px 12px;
  font-weight:900;
  display:flex;
  align-items:center;
  justify-content:center;
  gap:8px;
}
.tabBtn.active{
  border-color: rgba(202,162,75,.8);
  box-shadow: 0 0 0 3px rgba(202,162,75,.18);
}
.tabBadge{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-width:22px;
  height:22px;
  padding:0 7px;
  border-radius:999px;
  background: rgba(211,47,47,.95);
  color:#fff;
  font-size:12px;
  font-weight:1000;
}
.adminPanel { width: 100%; }

/* Layout: make the app fill the viewport on desktop */
.appShell{display:flex; flex-direction:column;}
.mainView{flex:1; min-height:0;}
.contentWrap{flex:1; min-height:0;}
.ticketsPanel{min-height:0;}
.chatPanel{min-height:0; height:auto;}
/* Tickets panel scroll on desktop so chat composer never gets cut off */
@media (min-width:981px){
  .contentWrap{height:100%;}
  .ticketsPanel{max-height: calc(100vh - 58px - 14px*2 - 12px - 12px - 60px); overflow:auto;}
  .chatPanel{max-height: calc(100vh - 58px - 14px*2 - 12px - 12px); overflow:hidden;}
}

/* Tabs mode on <=980px: only show one panel at a time */
@media (max-width:980px){
  .mobileTabs{display:flex;}
  body.tabs-show-chat #ticketsPanel{display:none;}
  body.tabs-show-tickets #chatPanel{display:none;}
  body.tabs-show-tickets #ticketsPanel,
  body.tabs-show-chat #chatPanel{display:flex;}
}

@media (max-width:980px){
  body.tabs-show-admin #chatPanel{display:none;}
  body.tabs-show-admin #ticketsPanel{display:flex;}

  /* Admin tab shows users, hides ticket list */
  body.tabs-show-admin #ticketsWrap{display:none;}
  body.tabs-show-admin #adminUsersWrap{display:block !important;}
}


/* =========================
   MOBILE: CHAT TAB = PAGE SCROLL (no fixed heights)
   ========================= */
@media (max-width:980px){

  /* Keep your tabs behavior */
  .mobileTabs{display:flex;}
  body.tabs-show-chat #ticketsPanel{display:none;}
  body.tabs-show-tickets #chatPanel{display:none;}
  body.tabs-show-tickets #ticketsPanel,
  body.tabs-show-chat #chatPanel{display:flex;}

  /* Admin tab behavior (keep what you already had) */
  body.tabs-show-admin #chatPanel{display:none;}
  body.tabs-show-admin #ticketsPanel{display:flex;}
  body.tabs-show-admin #ticketsWrap{display:none;}
  body.tabs-show-admin #adminUsersWrap{display:block !important;}

  /* THE FIX: allow page scrolling on chat tab */
  body.tabs-show-chat{ overflow:auto !important; }

  /* Do NOT trap scroll inside chat panel/messages */
  body.tabs-show-chat .chatPanel{ height:auto !important; overflow:visible !important; }
  body.tabs-show-chat .chatMessages{ overflow:visible !important; }

  /* Give the bottom some room so Send isn’t flush to the edge */
  body.tabs-show-chat .chatComposer{
    padding-bottom: calc(12px + env(safe-area-inset-bottom));
  }
}

/* =========================
   MOBILE: fixed chat messages box (internal scroll)
   Keep page scroll enabled
   ========================= */
@media (max-width:980px){

  /* Keep the PAGE scrollable (do not change anything else) */
  body.tabs-show-chat{ overflow:auto !important; }

  /* Make only the messages area fixed + scrollable */
  body.tabs-show-chat #chatMessages{
    max-height: 50vh;              /* tweak: 45–60vh depending on preference */
    overflow-y: auto !important;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior: contain;  /* prevents weird scroll chaining */
  }
}
