/* Signal Lab — shared layout, sidebar, topbar, footer, ui-status.
   Each page adds its own page-specific rules on top of this file. */

/* ── Reset / base ────────────────────────────────────────────────────── */
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;background:#F4F7FE;font-family:'Poppins',sans-serif;font-size:14px;color:#1B254B;-webkit-font-smoothing:antialiased}

/* ── Top-level shell ─────────────────────────────────────────────────── */
.app{display:flex;min-height:100vh;align-items:flex-start}
.main{flex:1;display:flex;flex-direction:column;min-width:0;overflow-x:hidden}
.main-content{padding:14px 20px 28px;flex:1}

/* ── Sidebar ─────────────────────────────────────────────────────────── */
.sidebar{width:290px;min-height:100vh;background:#fff;flex-shrink:0;display:flex;flex-direction:column;padding:24px 16px 30px;box-shadow:14px 17px 40px 4px rgba(112,144,176,0.08);position:sticky;top:0;height:100vh;overflow-y:auto}
.logo-wrap{padding:8px 16px 32px}
.logo-wrap img{width:140px;height:auto;display:block}
.nav-group-label{font-size:11px;font-weight:700;color:#A3AED0;letter-spacing:0.06em;text-transform:uppercase;padding:0 16px;margin-bottom:8px}
.nav-item-wrap{position:relative}
.nav-item{display:flex;align-items:center;gap:14px;padding:10px 16px;border-radius:10px;cursor:pointer;color:#A3AED0;font-size:14px;font-weight:500;text-decoration:none;margin-bottom:2px}
.nav-item svg{width:20px;height:20px;flex-shrink:0}
.nav-item.active{color:#2B3674;font-weight:700}
.nav-item:not(.active):hover{color:#2B3674}
.active-bar{position:absolute;right:0;top:50%;transform:translateY(-50%);width:4px;height:36px;background:#315cff;border-radius:4px 0 0 4px}
.upgrade-card{margin-top:auto;background:linear-gradient(135deg,#7B9FFF 0%,#315cff 45%,#1a3db5 100%);border-radius:20px;padding:16px;color:#fff;text-align:center}
.upgrade-card h4{font-size:15px;font-weight:700;margin-bottom:5px}
.upgrade-card p{font-size:11px;opacity:0.8;line-height:1.5;margin-bottom:12px}
.upgrade-btn{background:rgba(255,255,255,0.15);border:1.5px solid rgba(255,255,255,0.4);color:#fff;padding:9px 0;border-radius:70px;font-size:13px;font-weight:600;cursor:pointer;width:100%;font-family:'Poppins',sans-serif}
.upgrade-btn:hover{background:rgba(255,255,255,0.25)}

/* ── Topbar ──────────────────────────────────────────────────────────── */
.topbar-sticky{position:sticky;top:0;z-index:100;background:#F4F7FEee;padding:16px 20px 12px;display:flex;justify-content:space-between;align-items:center;backdrop-filter:blur(8px)}
.nb-path{font-size:12px;color:#A3AED0;margin-bottom:2px}
.nb-title{font-size:22px;font-weight:700;color:#2B3674}
.topbar-right{display:flex;align-items:center;gap:10px}
.nb-date{font-size:12px;font-weight:600;color:#2B3674;background:#fff;border:1px solid #E0E5F2;border-radius:20px;padding:6px 14px}
.pf-select{background:#fff;border:1px solid #E0E5F2;border-radius:20px;padding:6px 14px;font-size:13px;color:#2B3674;font-weight:500;cursor:pointer;outline:none;font-family:'Poppins',sans-serif}
.custom-dd{position:relative;font-family:'Poppins',sans-serif}
.dd-trigger{background:#fff;border:1px solid #E0E5F2;border-radius:20px;padding:7px 14px;font-size:13px;color:#2B3674;font-weight:500;cursor:pointer;display:flex;align-items:center;gap:8px;white-space:nowrap;box-shadow:14px 17px 40px 4px rgba(112,144,176,0.04)}
.dd-trigger:hover{border-color:#A3AED0}
.dd-menu{display:none;position:absolute;top:calc(100% + 6px);right:0;background:#fff;border-radius:14px;box-shadow:14px 17px 40px 4px rgba(112,144,176,0.18);border:1px solid #E0E5F2;overflow:hidden;min-width:160px;z-index:200}
.dd-menu.open{display:block}
.dd-item{padding:10px 16px;font-size:13px;color:#2B3674;cursor:pointer;transition:background 0.1s}
.dd-item:hover{background:#F4F7FE}
.dd-item.dd-active{background:#315cff;color:#fff;font-weight:600}
.dd-item.dd-active:hover{background:#2a50e0}

/* ── Footer ──────────────────────────────────────────────────────────── */
.site-footer{background:#F4F7FE;border-top:1px solid #E0E5F2;padding:10px 28px;margin-top:20px;display:flex;justify-content:space-between;align-items:center}

/* ── Mobile block ────────────────────────────────────────────────────── */
.mobile-block{display:none;position:fixed;inset:0;background:#F4F7FE;z-index:9999;align-items:center;justify-content:center;flex-direction:column;text-align:center;padding:32px}
.mobile-block-icon{width:56px;height:56px;background:#fff;border-radius:16px;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 24px rgba(112,144,176,0.15);margin-bottom:20px}
.mobile-block h2{font-size:18px;font-weight:700;color:#2B3674;margin-bottom:10px}
.mobile-block p{font-size:14px;color:#A3AED0;line-height:1.6;max-width:280px}

/* ── UI status bar (loading / refreshing / error / empty) ────────────── */
.ui-status{position:sticky;top:0;z-index:50;margin:8px 20px 0;padding:8px 12px;border-radius:10px;font-size:12px;font-weight:600;display:none;align-items:center;justify-content:space-between;gap:10px;overflow:hidden}
.ui-status.show{display:flex}
.ui-status.loading{background:#eef3ff;color:#315cff}
.ui-status.refreshing{background:#f2fbff;color:#1d4ed8}
.ui-status.error{background:#fff1f2;color:#be123c}
.ui-status.empty{background:#f8fafc;color:#64748b}
.ui-status button{border:0;background:#315cff;color:#fff;border-radius:8px;padding:4px 10px;font-size:11px;cursor:pointer}
/* Indeterminate progress stripe under the text, only during loading/refreshing */
.ui-status.loading::after,.ui-status.refreshing::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:2px;
  background:linear-gradient(90deg,transparent 0%,currentColor 60%,transparent 100%);
  background-size:40% 100%;animation:bar-slide 1.2s linear infinite;opacity:.7
}
@keyframes bar-slide{0%{background-position:-40% 0}100%{background-position:140% 0}}

/* ── Status banner (success / error / info / warning feedback) ───────── */
.status-banner{display:none;border-radius:12px;padding:10px 12px;margin:0 0 12px 0;font-size:12px;font-weight:600;line-height:1.4}
.status-banner.show{display:block}
.status-banner.info{background:#eef4ff;color:#315cff;border:1px solid #c9d9ff}
.status-banner.error{background:#fff1f2;color:#be123c;border:1px solid #fecdd3}
.status-banner.success{background:#ecfdf3;color:#047857;border:1px solid #a7f3d0}
.status-banner.warning{background:#fff3e0;color:#e65100;border:1px solid #ff9800}

/* ── System alert banners (token expiry, reconnect, etc.) ────────────── */
.alert-warning{background:linear-gradient(90deg,#fff3e0,#ffe0b2);border:1.5px solid #ff9800;border-radius:12px;padding:12px 18px;margin:0 0 16px;display:flex;align-items:center;gap:10px;font-family:'Poppins',sans-serif;font-size:13px;color:#e65100;font-weight:500}
.alert-warning a{color:#e65100;text-decoration:underline;font-weight:700}
.alert-warning svg{flex-shrink:0}

/* ── Skeleton shimmer + section empty note ───────────────────────────── */
.screen-loading .card,.screen-loading .sc-card,.screen-loading .post-card{position:relative;overflow:hidden}
.screen-loading .card::after,.screen-loading .sc-card::after,.screen-loading .post-card::after{content:"";position:absolute;inset:0;background:linear-gradient(110deg,rgba(255,255,255,0) 0%,rgba(255,255,255,.45) 45%,rgba(255,255,255,0) 100%);transform:translateX(-100%);animation:shimmer 1.2s infinite}
.section-empty{color:#94a3b8;font-size:12px;text-align:center;padding:10px 0}
@keyframes shimmer{100%{transform:translateX(100%)}}

/* ── Global full-page loading overlay (cold-load only) ───────────────── */
@-webkit-keyframes sl-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}
@keyframes sl-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}
@keyframes sl-overlay-in{from{opacity:0}to{opacity:1}}

.sl-loading-overlay{
  position:fixed;inset:0;z-index:9999;
  background:rgba(244,247,254,.92);
  backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);
  display:none;align-items:center;justify-content:center;flex-direction:column;gap:14px;
  animation:sl-overlay-in 160ms ease-out both;
}
body.is-loading{overflow:hidden}
body.is-loading .sl-loading-overlay{display:flex}
.sl-spinner{
  width:44px;height:44px;border-radius:50%;
  border:3px solid #E9EEF8;border-top-color:#315cff;
  -webkit-animation:sl-spin .9s linear infinite;
  animation:sl-spin .9s linear infinite;
  -webkit-animation-play-state:running;
  animation-play-state:running;
  will-change:transform;
}
.sl-loading-overlay-text{
  font-size:13px;font-weight:600;color:#315cff;
  letter-spacing:.02em;text-align:center;max-width:320px;line-height:1.5
}
.sl-loading-overlay-hint{
  font-size:11px;font-weight:500;color:#A3AED0;letter-spacing:.02em
}
.sl-spinner-sm {
  width: 24px;
  height: 24px;
  border-radius: 50%;
  border: 2px solid rgba(49, 92, 255, 0.1);
  border-top-color: currentColor;
  -webkit-animation: sl-spin .8s linear infinite;
  animation: sl-spin .8s linear infinite;
  -webkit-animation-play-state: running;
  animation-play-state: running;
  will-change: transform;
}

/* ── Micro-animations ── */
.nav-item, .dd-trigger, .sc-card, .card, .upgrade-btn, .btn-primary {
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}
.nav-item:hover {
  transform: translateX(4px);
}
.sc-card:hover, .card:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 25px -5px rgba(112, 144, 176, 0.15), 0 8px 10px -6px rgba(112, 144, 176, 0.1);
}
.upgrade-btn:active, .btn-primary:active {
  transform: scale(0.98);
}
@keyframes pulse-opacity {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.6; }
}
.refreshing .sl-spinner-sm {
  animation: sl-spin .8s linear infinite, pulse-opacity 2s ease-in-out infinite;
}

/* ── Login / Auth pages ──────────────────────────────────────────────── */
.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:32px 16px}
.login-card{background:#fff;border-radius:28px;box-shadow:0 4px 40px 0 rgba(112,144,176,0.14);padding:44px 40px 40px;width:100%;max-width:420px}

/* Logo area */
.logo-area{text-align:center;margin-bottom:36px}
.welcome-label{font-size:12px;font-weight:700;color:#A3AED0;letter-spacing:0.08em;text-transform:uppercase;margin-bottom:12px}
.logo-img{height:48px;width:auto;display:block;margin:0 auto}

/* Fields */
.field-row{margin-bottom:20px}
.field-label{font-size:11px;font-weight:700;color:#A3AED0;letter-spacing:0.07em;text-transform:uppercase;margin-bottom:8px}
.license-wrap{position:relative}
.license-input{width:100%;background:#F4F7FE;border:1.5px solid #E0E5F2;border-radius:12px;padding:11px 14px;font-size:13px;color:#2B3674;font-family:'Poppins',sans-serif;outline:none;transition:border-color 0.15s;letter-spacing:0.08em}
.license-input:focus{border-color:#315cff;background:#fff}
.login-error{display:none;margin-top:14px;font-size:12px;font-weight:500;color:#be123c;line-height:1.55;background:#fff1f2;border:1px solid #fecdd3;border-radius:10px;padding:10px 12px}
.login-error.show{display:block}
.use-different{display:block;margin-top:6px;font-size:11px;color:#315cff;font-weight:600;cursor:pointer;text-decoration:underline;background:none;border:none;padding:0}
.field-hint{font-size:11px;color:#A3AED0;margin-top:7px;line-height:1.5}
.error-msg{font-size:11px;color:#fd7c52;margin-top:7px;display:none}

/* PIN row */
.pin-row{display:flex;gap:8px}
.pin-input{width:52px;height:52px;text-align:center;font-size:20px;font-weight:700;color:#2B3674;background:#F4F7FE;border:1.5px solid #E0E5F2;border-radius:12px;font-family:'Poppins',sans-serif;outline:none;transition:border-color 0.15s;-webkit-text-security:disc}
.pin-input:focus{border-color:#315cff;background:#fff}
.pin-input.error{border-color:#fd7c52;background:#fff8f4}
.pin-input.success{border-color:#05CD99;background:#f0fdf8}

/* Buttons */
.btn-row{display:flex;gap:10px;margin-top:28px;align-items:center}
.btn-login,.btn-forgot{flex:1;border-radius:70px;padding:12px 0;font-size:12px;font-weight:700;cursor:pointer;font-family:'Poppins',sans-serif;letter-spacing:0.06em;text-align:center;transition:background 0.15s,color 0.15s,border-color 0.15s}
.btn-login{background:#315cff;color:#fff;border:none}
.btn-login:hover{background:#2449e0}
.btn-forgot{background:transparent;color:#6e8dff;border:1.5px solid #6e8dff}
.btn-forgot:hover:not(:disabled){background:#F0F3FF}
.btn-forgot.sent{background:#A3AED0;border-color:#A3AED0;color:#fff;cursor:default}
.btn-save{width:auto;min-width:180px;border-radius:70px;padding:12px 40px;font-size:12px;font-weight:700;cursor:pointer;font-family:'Poppins',sans-serif;letter-spacing:0.06em;text-align:center;transition:background 0.15s;background:#315cff;color:#fff;border:none}
.btn-save:hover{background:#2449e0}
.btn-save:disabled{background:#A3AED0;cursor:default}
.btn-go{display:inline-block;margin-top:16px;background:#315cff;color:#fff;border:none;border-radius:70px;padding:11px 32px;font-size:12px;font-weight:700;cursor:pointer;font-family:'Poppins',sans-serif;letter-spacing:0.06em}
.btn-go:hover{background:#2449e0}

/* Forgot message */
.forgot-msg{display:none;margin-top:14px;font-size:12px;color:#A3AED0;line-height:1.65;background:#F4F7FE;border-radius:10px;padding:12px 14px}

/* Success state (create-pin) */
.success-state{display:none;text-align:center;padding:12px 0}
.success-state svg{margin-bottom:12px}
.success-state h3{font-size:16px;font-weight:700;color:#2B3674;margin-bottom:6px}
.success-state p{font-size:13px;color:#A3AED0;line-height:1.6}

/* Divider */
.divider{height:1px;background:#F4F7FE;margin:28px 0 0}

/* ── Responsive ──────────────────────────────────────────────────────── */
@media (max-width:767px){
  .mobile-block{display:flex}
  .app{display:none}
  .login-page{display:none!important}
}
@media (min-width:768px) and (max-width:1023px){
  html,body{font-size:13px}
  .sidebar{width:200px;padding:16px 10px 20px}
  .logo-wrap{padding:6px 10px 20px}
  .logo-wrap img{width:110px}
  .nav-item{font-size:12.5px;padding:8px 10px;gap:10px}
  .nav-group-label{font-size:10px}
  .upgrade-card h4{font-size:13px}
  .upgrade-card p{font-size:10px}
  .upgrade-btn{font-size:11px}
  .topbar-sticky{padding:12px 14px 10px}
  .nb-path{font-size:11px}
  .nb-title{font-size:18px}
  .nb-date,.pf-select{font-size:11px;padding:5px 10px}
  .dd-trigger,.dd-item{font-size:12px}
  .main-content{padding:10px 14px 20px}
  /* Login / auth tablet adjustments */
  .login-card{padding:36px 30px 32px}
  .pin-input{width:46px;height:46px;font-size:18px}
}
@media (min-width:1024px){
  html,body{font-size:14px}
}
