/* =====================================================
   Office Calculators â€“ premium mobile-first styles
   Designed to layer on top of your existing
   bootstrap.min.css + landing-page.css + homepage.css
   ===================================================== */

/* Register --p so the conic-gradient ring can animate smoothly.
   Without @property, custom-property transitions are silently ignored. */
@property --p {
  syntax: "<number>";
  initial-value: 0;
  inherits: false;
}

:root{
  --oc-primary:#2563eb;
  --oc-primary-2:#7c3aed;
  --oc-accent:#10b981;
  --oc-bg:#f8fafc;
  --oc-surface:#ffffff;
  --oc-text:#0f172a;
  --oc-muted:#64748b;
  --oc-border:#e5e7eb;
  --oc-shadow:0 12px 30px -14px rgba(2,6,23,.18);
  --oc-shadow-lg:0 22px 50px -20px rgba(2,6,23,.25);
  --oc-radius:18px;
}

.oc-page{
  font-family:'Inter','Plus Jakarta Sans',system-ui,sans-serif;
  color:var(--oc-text);
  background:var(--oc-bg);
  padding-bottom:48px;
}

/* ---------- HERO ---------- */
/* Bug fix #1: H1 hidden under fixed nav.
   We add padding-top to push content below the nav.
   The value uses a CSS custom property so sites can
   override it with their actual nav height via JS or
   a root variable. We fall back to 72px which covers
   most Bootstrap / common nav heights. */
.oc-hero{
  background:linear-gradient(135deg,#1e3a8a,#2563eb 45%,#7c3aed);
  color:#fff;
  padding:calc(var(--nav-height, 72px) + 28px) 0 32px;
  margin-bottom:22px;
}
.oc-breadcrumb{display:flex;gap:8px;align-items:center;font-size:13px;opacity:.9;margin-bottom:14px;flex-wrap:wrap}
.oc-breadcrumb a{color:#fff;text-decoration:none;opacity:.85}
.oc-breadcrumb a:hover{opacity:1;text-decoration:underline}
.oc-breadcrumb i{font-size:9px;opacity:.7}
.oc-hero-title{
  font-family:'Plus Jakarta Sans',sans-serif;
  font-weight:800;
  font-size:clamp(26px,4vw,40px);
  line-height:1.15;
  margin:0 0 8px;
}
.oc-hero-sub{font-size:clamp(15px,2vw,18px);opacity:.92;margin:0 0 18px;max-width:720px}
.oc-trust{display:flex;flex-wrap:wrap;gap:14px;font-size:13px;opacity:.95}
.oc-trust span{display:inline-flex;align-items:center;gap:6px;background:rgba(255,255,255,.12);padding:6px 12px;border-radius:999px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}

/* ---------- SWITCHER PILLS ---------- */
/* Bug fix #3: Wrap in a relative container so we can add
   fade-out gradient cues that signal scrollability */
.oc-switcher-wrap{
  position:relative;
  margin-bottom:4px;
}
/* Fade-out gradient on right edge signals more pills to the right */
.oc-switcher-wrap::after{
  content:"";
  position:absolute;right:0;top:0;bottom:0;width:48px;
  background:linear-gradient(to right,transparent,var(--oc-bg));
  pointer-events:none;z-index:1;
  transition:opacity .3s;
}
.oc-switcher-wrap.at-end::after{opacity:0}
.oc-switcher{
  display:flex;gap:10px;overflow-x:auto;padding:4px 2px 12px;
  scroll-snap-type:x mandatory;scrollbar-width:none;
  -ms-overflow-style:none;
  -webkit-overflow-scrolling:touch;
  cursor:grab;
}
.oc-switcher:active{cursor:grabbing}
.oc-switcher::-webkit-scrollbar{display:none}
.oc-pill{
  flex:0 0 auto;display:inline-flex;align-items:center;gap:8px;
  padding:11px 18px;border-radius:999px;border:1px solid var(--oc-border);
  background:#fff;color:var(--oc-text);font-weight:600;font-size:14px;
  cursor:pointer;scroll-snap-align:start;transition:all .25s ease;
  box-shadow:0 1px 2px rgba(0,0,0,.04);
  white-space:nowrap;
}
.oc-pill i{font-size:14px;color:var(--oc-primary)}
.oc-pill:hover{transform:translateY(-1px);box-shadow:var(--oc-shadow)}
.oc-pill[aria-current="true"]{
  background:linear-gradient(135deg,var(--oc-primary),var(--oc-primary-2));
  color:#fff;border-color:transparent;box-shadow:var(--oc-shadow);
}
.oc-pill[aria-current="true"] i{color:#fff}

/* ---------- CAROUSEL ---------- */
/* Structure:
     .oc-carousel
       .oc-progress
       .oc-viewport-wrap          ← position:relative, overflow:VISIBLE
         .oc-arrow-prev / next    ← absolute, never clipped
         .oc-viewport             ← overflow:hidden (clips slides only)
           .oc-track
             .oc-slide × N
       .oc-dots
*/
.oc-carousel{position:relative;margin-bottom:8px}

/* oc-viewport-wrap: the positioning context for arrows.
   overflow is VISIBLE so arrow buttons can sit on the outside
   edge of the card without being clipped. */
.oc-viewport-wrap{position:relative;overflow:visible}
/* On desktop, add side padding equal to arrow overhang so
   the arrows never push against the container edge */
@media(min-width:901px){
  .oc-viewport-wrap{padding:0 24px}
}

/* oc-viewport: clips the sliding track, no position:relative needed */
.oc-viewport{overflow:hidden;border-radius:var(--oc-radius)}

/* Fix #2 – empty space:
   align-items:flex-start makes every slide shrink to its own
   content height instead of stretching to the tallest sibling. */
.oc-track{
  display:flex;
  align-items:flex-start;
  transition:transform .5s cubic-bezier(.22,.8,.27,1);
  touch-action:pan-y;
  will-change:transform;
  cursor:grab;
}
.oc-track.is-dragging{
  cursor:grabbing;
  transition:none; /* no transition while dragging for responsive feel */
}
.oc-slide{flex:0 0 100%;padding:4px;box-sizing:border-box}
.oc-card{
  background:var(--oc-surface);border:1px solid var(--oc-border);
  border-radius:var(--oc-radius);padding:22px;box-shadow:var(--oc-shadow-lg);
}
.oc-card-head{display:flex;gap:14px;align-items:center;margin-bottom:18px}
.oc-card-icon{
  width:54px;height:54px;border-radius:14px;display:grid;place-items:center;
  background:linear-gradient(135deg,#eef2ff,#ede9fe);color:var(--oc-primary);font-size:22px;
  flex-shrink:0;
}
.oc-card-title{margin:0;font-size:18px;font-weight:700;font-family:'Plus Jakarta Sans',sans-serif}
.oc-card-sub{margin:2px 0 0;color:var(--oc-muted);font-size:13.5px}

/* Fix #1 – arrows:
   They live inside .oc-viewport-wrap (overflow:visible) and are
   absolutely positioned at the vertical centre of that wrapper.
   On desktop they hang just outside the card left/right edges.
   On mobile (≤640px) they're hidden; users swipe instead. */
.oc-arrow{
  position:absolute;
  top:50%;
  transform:translateY(-50%);
  z-index:10;
  width:40px;height:40px;border-radius:50%;
  border:1px solid var(--oc-border);
  background:#fff;
  color:var(--oc-text);
  cursor:pointer;
  box-shadow:0 2px 12px rgba(0,0,0,.12);
  display:grid;place-items:center;font-size:13px;
  transition:background .2s ease,color .2s ease,border-color .2s ease,box-shadow .2s ease;
  /* prevent arrow clicks from triggering drag handlers */
  user-select:none;
}
.oc-arrow:hover{
  background:var(--oc-primary);color:#fff;
  border-color:var(--oc-primary);
  box-shadow:0 4px 16px rgba(37,99,235,.35);
}
/* Sit outside the card edges, not overlapping content */
.oc-arrow-prev{left:-20px}
.oc-arrow-next{right:-20px}
/* On narrower screens where -20px would clip into the container,
   bring them inside but keep them above the card content */
@media(max-width:900px){
  .oc-arrow-prev{left:6px}
  .oc-arrow-next{right:6px}
}
@media(max-width:640px){.oc-arrow{display:none}}

/* ---------- DOTS ---------- */
/* Tighter padding so they don't inflate carousel height unnecessarily */
.oc-dots{display:flex;justify-content:center;gap:8px;padding:10px 0 4px}
.oc-dot{width:8px;height:8px;border-radius:50%;border:0;background:#cbd5e1;cursor:pointer;transition:all .25s ease;padding:0}
.oc-dot[aria-current="true"]{background:var(--oc-primary);width:24px;border-radius:6px}

/* ---------- FORM ---------- */
.oc-form.oc-grid{display:grid;grid-template-columns:1fr;gap:14px}
@media(min-width:640px){.oc-form.oc-grid{grid-template-columns:1fr 1fr}}
.oc-field{display:flex;flex-direction:column;gap:6px}
.oc-field>span{font-size:13px;font-weight:600;color:var(--oc-text)}
.oc-field input,.oc-field select{
  width:100%;padding:12px 14px;border:1px solid var(--oc-border);border-radius:12px;
  font-size:15px;background:#fff;color:var(--oc-text);font-family:inherit;
  transition:border-color .2s ease,box-shadow .2s ease;
  box-sizing:border-box;
}
.oc-field input:focus,.oc-field select:focus{
  outline:none;border-color:var(--oc-primary);
  box-shadow:0 0 0 3px rgba(37,99,235,.15);
}
.oc-inline{display:flex;gap:8px}
.oc-inline input{flex:1}
.oc-inline select{flex:0 0 110px}

/* ---------- ACTIONS ---------- */
.oc-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:18px}
.oc-btn{
  display:inline-flex;align-items:center;gap:8px;
  padding:12px 18px;border-radius:12px;border:0;
  font-weight:600;font-size:14.5px;cursor:pointer;transition:transform .2s ease,box-shadow .2s ease,background .2s ease;
  font-family:inherit;
}
.oc-btn-primary{background:linear-gradient(135deg,var(--oc-primary),var(--oc-primary-2));color:#fff;box-shadow:0 8px 18px -8px rgba(37,99,235,.55)}
.oc-btn-primary:hover{transform:translateY(-1px);box-shadow:0 14px 24px -10px rgba(37,99,235,.7)}
.oc-btn-ghost{background:#f1f5f9;color:var(--oc-text)}
.oc-btn-ghost:hover{background:#e2e8f0}

/* ---------- RESULT ---------- */
.oc-result{
  margin-top:20px;padding:18px;border-radius:16px;
  background:linear-gradient(135deg,#ecfeff 0%,#eef2ff 60%,#fdf4ff 100%);
  border:1px solid #c7d2fe;
  animation:ocFade .35s ease;
}
@keyframes ocFade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.oc-result-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media(min-width:640px){.oc-result-grid{grid-template-columns:repeat(4,1fr)}}
.oc-stat{background:#fff;border:1px solid #e0e7ff;border-radius:12px;padding:14px}
.oc-stat-label{display:block;font-size:11.5px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--oc-muted);margin-bottom:6px}
.oc-stat strong{font-size:18px;font-weight:700;color:var(--oc-text)}
.oc-stat-big{font-size:22px!important;background:linear-gradient(135deg,var(--oc-primary),var(--oc-primary-2));-webkit-background-clip:text;background-clip:text;color:transparent;display:block}
.oc-stat-hero{grid-column:1 / -1;text-align:center}
@media(min-width:640px){.oc-stat-hero{grid-column:span 2}}

/* ---------- BAR CHART (salary projection) ---------- */
.oc-chart-title{margin:18px 0 10px;font-size:14px;font-weight:700;color:var(--oc-text)}
.oc-bars{display:flex;align-items:flex-end;gap:10px;height:180px;padding:18px 6px 28px;background:#fff;border-radius:12px;border:1px solid #e0e7ff}
.oc-bar{
  flex:1;background:linear-gradient(180deg,var(--oc-primary),var(--oc-primary-2));
  border-radius:8px 8px 0 0;position:relative;min-height:8px;
  transition:height .8s cubic-bezier(.22,.8,.27,1);
}
.oc-bar span{position:absolute;top:-22px;left:0;right:0;text-align:center;font-size:11px;font-weight:600;color:var(--oc-text);white-space:nowrap}
.oc-bar small{position:absolute;bottom:-22px;left:0;right:0;text-align:center;font-size:11px;color:var(--oc-muted);font-weight:600}

/* ---------- RING (attendance) ---------- */
.oc-attendance{display:grid;grid-template-columns:auto 1fr;gap:24px;align-items:center}
@media(max-width:640px){.oc-attendance{grid-template-columns:1fr;justify-items:center;text-align:center}}
.oc-ring{
  --p:0;
  --c:var(--oc-accent);
  width:160px;height:160px;border-radius:50%;
  background:conic-gradient(var(--c) calc(var(--p) * 1%),#e5e7eb 0);
  display:grid;place-items:center;
  transition:--p 1s ease, background .3s ease;
  position:relative;
}
.oc-ring::before{
  content:"";
  width:122px;height:122px;background:#fff;border-radius:50%;
  grid-area:1/1;
}
.oc-ring span{grid-area:1/1;font-weight:800;font-size:26px;color:var(--oc-text);z-index:1}
.oc-attendance-stats{display:grid;grid-template-columns:1fr 1fr;gap:10px;width:100%}

/* ---------- INTRO ---------- */
/* Bug fix #4: Collapsed gap between carousel and content.
   The oc-intro is now visually flush with the card below,
   using a smaller margin-top. */
.oc-intro{
  background:#fff;border:1px solid var(--oc-border);border-radius:var(--oc-radius);
  padding:14px 20px;margin-bottom:16px;color:var(--oc-muted);font-size:15px;
  box-shadow:0 4px 10px rgba(0,0,0,.03);
}

/* ---------- ARTICLE + FAQ ---------- */
.oc-content{display:grid;gap:18px;grid-template-columns:1fr}
@media(min-width:900px){.oc-content{grid-template-columns:1.4fr 1fr}}
.oc-article,.oc-faq{
  background:#fff;border:1px solid var(--oc-border);border-radius:var(--oc-radius);
  padding:22px;box-shadow:var(--oc-shadow);
}
.oc-article h2,.oc-faq h2{
  font-family:'Plus Jakarta Sans',sans-serif;
  font-weight:700;font-size:20px;margin:0 0 12px;color:var(--oc-text);
}
.oc-article h2:not(:first-child){margin-top:18px}
.oc-article p,.oc-article li{color:#334155;line-height:1.65;font-size:15px}
.oc-article ul,.oc-article ol{padding-left:20px}

.oc-faq-item{border-bottom:1px solid var(--oc-border);padding:12px 0}
.oc-faq-item:last-child{border-bottom:0}
.oc-faq-item summary{cursor:pointer;font-weight:600;color:var(--oc-text);font-size:15px;list-style:none;display:flex;justify-content:space-between;gap:10px;align-items:center}
.oc-faq-item summary::-webkit-details-marker{display:none}
.oc-faq-item summary::after{
  content:"+";
  font-size:22px;line-height:1;color:var(--oc-primary);
  transition:transform .2s ease;
  display:inline-block;
}
.oc-faq-item[open] summary::after{transform:rotate(45deg)}
.oc-faq-item p{margin:8px 0 0;color:var(--oc-muted);line-height:1.6;font-size:14px}

/* ---------- COMPARISON TABLE (industry data, tax slabs, etc.) ---------- */
.oc-table-wrap{overflow-x:auto;margin:14px 0;border-radius:12px;border:1px solid var(--oc-border)}
.oc-table{width:100%;border-collapse:collapse;font-size:14px;background:#fff;min-width:520px}
.oc-table thead{background:linear-gradient(135deg,#eef2ff,#ede9fe)}
.oc-table th{
  text-align:left;padding:12px 14px;font-weight:700;color:var(--oc-text);
  font-size:13px;text-transform:uppercase;letter-spacing:.04em;
  border-bottom:1px solid var(--oc-border);
}
.oc-table td{padding:11px 14px;border-bottom:1px solid #f1f5f9;color:#334155}
.oc-table tbody tr:last-child td{border-bottom:0}
.oc-table tbody tr:hover{background:#f8fafc}
.oc-table td strong{color:var(--oc-text)}

/* ---------- RELATED CALCULATORS BLOCK ---------- */
.oc-related{
  margin-top:22px;background:#fff;border:1px solid var(--oc-border);
  border-radius:var(--oc-radius);padding:20px;box-shadow:var(--oc-shadow);
}
.oc-related h2{
  font-family:'Plus Jakarta Sans',sans-serif;
  font-weight:700;font-size:18px;margin:0 0 14px;
}
.oc-related-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}
.oc-related-card{
  display:flex;align-items:center;gap:10px;
  padding:12px 14px;border:1px solid var(--oc-border);border-radius:12px;
  text-decoration:none;color:var(--oc-text);
  transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease;
  background:#fff;
}
.oc-related-card:hover{
  transform:translateY(-2px);box-shadow:var(--oc-shadow);
  border-color:var(--oc-primary);
}
.oc-related-card:hover .oc-related-go{color:var(--oc-primary)}
.oc-related-icon{
  width:36px;height:36px;border-radius:10px;
  background:linear-gradient(135deg,#eef2ff,#ede9fe);
  display:grid;place-items:center;flex-shrink:0;
}
.oc-related-icon i{color:var(--oc-primary);font-size:15px}
.oc-related-meta{flex:1;min-width:0}
.oc-related-meta strong{display:block;font-size:13px;font-weight:700;color:var(--oc-text);line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.oc-related-meta small{display:block;font-size:11px;color:var(--oc-muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.oc-related-go{color:var(--oc-muted);font-size:12px;flex-shrink:0;transition:color .2s}

/* ---------- TOAST ---------- */
.oc-toast{
  position:fixed;left:50%;bottom:24px;transform:translateX(-50%) translateY(20px);
  background:#0f172a;color:#fff;padding:12px 18px;border-radius:12px;
  font-size:14px;font-weight:500;opacity:0;pointer-events:none;
  transition:opacity .3s ease,transform .3s ease;z-index:9999;
  box-shadow:0 12px 30px rgba(0,0,0,.3);
}
.oc-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

/* ---------- CAROUSEL PROGRESS BAR (above dots) ---------- */
/* Thin bar under the viewport that fills based on current slide,
   giving another strong visual affordance for navigation state */
.oc-progress{
  height:3px;background:#e5e7eb;border-radius:2px;
  margin:8px 0 4px;overflow:hidden;
}
.oc-progress-fill{
  height:100%;border-radius:2px;
  background:linear-gradient(90deg,var(--oc-primary),var(--oc-primary-2));
  transition:width .45s cubic-bezier(.22,.8,.27,1);
}

/* ---------- RESULT COMPACT when calc is fresh (pre-calculate) ---------- */
/* Ensure no extra bottom margin on hidden result blocks */
.oc-result[hidden]{display:none}

/* ---------- PRINT (timesheet export) ---------- */
@media print{
  .oc-hero,.oc-switcher-wrap,.oc-arrow,.oc-dots,.oc-actions,.oc-related,.oc-toast,.oc-progress{display:none!important}
  .oc-page{background:#fff;padding:0}
  .oc-card,.oc-article,.oc-faq{box-shadow:none;border:1px solid #ccc}
}

/* ---------- ACCESSIBILITY ---------- */
@media (prefers-reduced-motion: reduce){
  .oc-track,.oc-bar,.oc-ring,.oc-btn,.oc-pill,.oc-arrow,.oc-toast,.oc-result,.oc-progress-fill{
    transition:none!important;animation:none!important;
  }
}