/* =========================================================
   BULLETIN PAGE — page-specific only. Loaded by bulletin.php
   via $pageExtraCss. No other page pays for this weight.
   ========================================================= */
/* ---- Overall layout: sticky sidebar (year rail + contact) + main column ---- */
.bulletin-layout{
  display:grid;
  grid-template-columns:310px 1fr;
  gap:40px;
  align-items:start;
}
.bulletin-main{ min-width:0; } /* allow horizontal scroll children to shrink */
.bulletin-sidebar{
  position:sticky;
  top:96px;
  display:flex;
  flex-direction:column;
  gap:28px;
}
/* ---- Sticky year nav (desktop) ---- */
.bulletin-year-nav{
  display:flex;
  flex-direction:column;
  gap:2px;
}
.year-nav-link{
  appearance:none;
  background:none;
  border:0;
  border-left:3px solid transparent;
  text-align:left;
  padding:9px 16px;
  font-size:.9rem;
  font-weight:600;
  color:var(--ink-soft);
  border-radius:0 8px 8px 0;
  cursor:pointer;
  transition:background .15s, color .15s, border-color .15s;
}
.year-nav-link:hover{
  background:var(--green-100);
  color:var(--green-800);
}
.year-nav-link.is-active{
  background:var(--green-100);
  color:var(--green-800);
  border-left-color:var(--green-800);
}
/* ---- Institution contact card ---- */
.bulletin-contact{
  background:var(--green-900);
  color:#fff;
  border-radius:var(--radius-lg);
  padding:22px 20px;
}
.bulletin-contact-title{
  font-family:'Poppins',sans-serif;
  font-size:.95rem;
  font-weight:800;
  letter-spacing:.02em;
  margin-bottom:18px;
  padding-bottom:14px;
  border-bottom:1px solid rgba(255,255,255,.14);
}
.bulletin-contact-item{
  display:flex;
  gap:12px;
  align-items:flex-start;
}
.bulletin-contact-item + .bulletin-contact-item{ margin-top:18px; }
.bulletin-contact-icon{
  flex-shrink:0;
  width:32px;
  height:32px;
  border-radius:9px;
  background:rgba(255,255,255,.1);
  display:flex;
  align-items:center;
  justify-content:center;
  color:#f0a800;
}
.bulletin-contact-icon svg{ width:16px; height:16px; }
.bulletin-contact-body{ min-width:0; }
.bulletin-contact-label{
  display:block;
  font-size:.68rem;
  font-weight:700;
  letter-spacing:.08em;
  text-transform:uppercase;
  color:rgba(255,255,255,.55);
  margin-bottom:5px;
}
.bulletin-contact-body p{
  font-size:.82rem;
  line-height:1.5;
  color:rgba(255,255,255,.92);
  margin-bottom:2px;
}
.bulletin-contact-body a{ color:#fff; }
.bulletin-contact-body a:hover{ color:#f0a800; }
.bulletin-contact-note{
  font-size:.72rem;
  color:rgba(255,255,255,.55);
}
.bulletin-contact-hours{
  display:block;
  font-size:.72rem;
  color:rgba(255,255,255,.5);
  margin-bottom:10px;
}
@media (max-width:900px){
  .bulletin-layout{ grid-template-columns:1fr; gap:0; }
  .bulletin-sidebar{ position:static; }
  .bulletin-year-nav{
    position:sticky;
    top:0;
    z-index:5;
    flex-direction:row;
    overflow-x:auto;
    gap:6px;
    padding:14px 0;
    margin-bottom:12px;
    background:#fff;
    border-bottom:1px solid var(--line);
  }
  .year-nav-link{
    flex:0 0 auto;
    border-left:0;
    border-bottom:3px solid transparent;
    border-radius:8px;
    white-space:nowrap;
  }
  .year-nav-link.is-active{ border-left-color:transparent; border-bottom-color:var(--green-800); }
  .bulletin-contact{ display:none; } /* keeps the mobile scroll strip lean; contact info lives in the site footer */
}
/* ---- Featured latest-issue hero ---- */
.bulletin-featured{
  display:flex;
  gap:32px;
  align-items:center;
  background:linear-gradient(135deg, var(--green-900), var(--green-700));
  border-radius:var(--radius-lg);
  padding:32px;
  margin-bottom:56px;
  color:#fff;
}
.bulletin-featured-cover{
  flex-shrink:0;
  width:170px;
  aspect-ratio:1 / 1.37;
  border-radius:12px;
  overflow:hidden;
  box-shadow:0 20px 44px -14px rgba(0,0,0,.45);
  background:rgba(255,255,255,.08);
}
.bulletin-featured-cover img{ width:100%; height:100%; object-fit:cover; display:block; }
.bulletin-featured-cover-placeholder{
  width:100%; height:100%;
  display:flex; align-items:center; justify-content:center;
  color:rgba(255,255,255,.5);
}
.bulletin-featured-cover-placeholder svg{ width:36px; height:36px; }
.bulletin-featured-body{ flex:1; min-width:0; }
.bulletin-featured-badge{
  display:inline-block;
  background:#f0a800;
  color:#1a1a1a;
  font-size:.7rem;
  font-weight:800;
  letter-spacing:.08em;
  text-transform:uppercase;
  padding:5px 12px;
  border-radius:999px;
  margin-bottom:14px;
}
.bulletin-featured-title{
  font-family:'Poppins',sans-serif;
  font-size:1.6rem;
  font-weight:800;
  line-height:1.25;
  margin-bottom:8px;
}
.bulletin-featured-meta{
  font-size:.88rem;
  opacity:.85;
  margin-bottom:22px;
}
.bulletin-featured-btn{
  display:inline-flex;
  align-items:center;
  gap:8px;
  padding:11px 22px;
  border-radius:10px;
  background:#fff;
  color:var(--green-800);
  font-size:.85rem;
  font-weight:700;
  transition:background .15s;
}
.bulletin-featured-btn:hover{ background:var(--green-100); }
.bulletin-featured-btn svg{ width:16px; height:16px; }
@media (max-width:640px){
  .bulletin-featured{ flex-direction:column; align-items:flex-start; text-align:left; padding:24px; }
  .bulletin-featured-cover{ width:130px; }
}
/* ---- Year group header ---- */
.bulletin-year-group{
  margin-bottom:56px;
  padding-top:8px;
}
.bulletin-year-heading{
  display:flex;
  align-items:center;
  gap:16px;
  margin-bottom:8px;
}
.bulletin-year-heading h2{
  font-family:'Poppins',sans-serif;
  font-size:1.75rem;
  font-weight:800;
  color:var(--green-900);
}
.bulletin-year-heading::after{
  content:'';
  flex:1;
  height:2px;
  background:linear-gradient(90deg, var(--line), transparent);
  border-radius:1px;
}
/* ---- Volume sub-group (nested inside a year) ---- */
.bulletin-volume-group{
  margin-top:28px;
}
.bulletin-volume-heading{
  font-size:.8rem;
  font-weight:700;
  letter-spacing:.08em;
  text-transform:uppercase;
  color:var(--green-700);
  background:var(--green-100);
  display:inline-block;
  padding:6px 14px;
  border-radius:999px;
  margin-bottom:20px;
}
/* ---- Issue shelf: horizontally scrolling row of cards ---- */
.shelf-scroll{
  display:flex;
  gap:22px;
  overflow-x:auto;
  padding:4px 4px 16px;
  scroll-snap-type:x proximity;
  scrollbar-width:thin;
  scrollbar-color:var(--green-100) transparent;
}
.shelf-scroll::-webkit-scrollbar{ height:7px; }
.shelf-scroll::-webkit-scrollbar-track{ background:transparent; }
.shelf-scroll::-webkit-scrollbar-thumb{ background:var(--green-100); border-radius:999px; }
.shelf-scroll::-webkit-scrollbar-thumb:hover{ background:var(--green-700); }
/* ---- Individual issue card ---- */
.issue-card{
  flex:0 0 190px;
  scroll-snap-align:start;
  background:#fff;
  border-radius:var(--radius-lg);
  box-shadow:0 8px 28px -12px rgba(10,61,38,.14);
  border:1px solid var(--line);
  overflow:hidden;
  display:flex;
  flex-direction:column;
  transition:transform .2s ease, box-shadow .2s ease;
}
.issue-card:hover{
  transform:translateY(-4px);
  box-shadow:0 20px 44px -16px rgba(10,61,38,.24);
}
/* cover image */
.issue-card-cover{
  position:relative;
  width:100%;
  padding-top:137%;   /* A4 ratio ~1.414 → looks like a real magazine cover */
  background:var(--green-100);
  overflow:hidden;
}
.issue-card-cover img{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  object-fit:cover;
  transition:transform .4s ease;
}
.issue-card:hover .issue-card-cover img{
  transform:scale(1.04);
}
.issue-card-cover-placeholder{
  position:absolute;
  inset:0;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:10px;
  color:var(--green-700);
}
.issue-card-cover-placeholder svg{ width:40px; height:40px; opacity:.45; }
.issue-card-cover-placeholder span{
  font-size:.72rem;
  font-weight:700;
  letter-spacing:.06em;
  text-transform:uppercase;
  opacity:.5;
}
/* vol badge overlay */
.issue-vol-badge{
  position:absolute;
  top:10px;
  left:10px;
  font-size:.68rem;
  font-weight:700;
  letter-spacing:.06em;
  text-transform:uppercase;
  background:var(--green-800);
  color:#fff;
  border-radius:999px;
  padding:4px 10px;
}
/* card body */
.issue-card-body{
  padding:16px 18px 18px;
  display:flex;
  flex-direction:column;
  flex:1;
}
.issue-card-name{
  font-family:'Poppins',sans-serif;
  font-size:.95rem;
  font-weight:700;
  color:var(--green-900);
  line-height:1.3;
  margin-bottom:6px;
}
.issue-card-meta{
  font-size:.76rem;
  color:var(--ink-soft);
  margin-bottom:14px;
}
/* PDF button */
.issue-card-actions{
  margin-top:auto;
  display:flex;
  gap:10px;
}
.issue-pdf-btn{
  flex:1;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  padding:9px 14px;
  border-radius:10px;
  border:2px solid var(--green-800);
  font-size:.82rem;
  font-weight:700;
  color:var(--green-800);
  background:#fff;
  transition:background .15s, color .15s;
}
.issue-pdf-btn:hover{
  background:var(--green-800);
  color:#fff;
}
.issue-pdf-btn svg{ width:15px; height:15px; flex-shrink:0; }
.issue-pdf-btn.no-pdf{
  opacity:.4;
  pointer-events:none;
  border-style:dashed;
}
/* ---- Skeleton loader (hero + shelf rows) ---- */
.bulletin-skeleton-shelf[hidden]{ display:none; }
.bulletin-skel-shimmer,
.bulletin-skel-hero,
.bulletin-skel-shelf-label,
.bulletin-skel{
  background:linear-gradient(110deg, var(--green-100) 40%, #e8f2ec 55%, var(--green-100) 70%);
  background-size:200% 100%;
  animation:shimmer 1.4s infinite;
  border-radius:var(--radius-lg);
}
.bulletin-skel-hero{
  height:220px;
  margin-bottom:56px;
}
.bulletin-skel-shelf-label{
  width:120px;
  height:26px;
  border-radius:999px;
  margin-bottom:20px;
}
.bulletin-skel-shelf{
  display:flex;
  gap:22px;
  overflow:hidden;
  margin-bottom:36px;
}
.bulletin-skel-shelf .bulletin-skel{
  flex:0 0 190px;
  aspect-ratio:1 / 1.6;
}
@keyframes shimmer{ to{ background-position:-200% 0; } }
/* ---- Empty state ---- */
.bulletin-empty{
  text-align:center;
  padding:80px 24px;
  color:var(--ink-soft);
}
.bulletin-empty svg{ width:52px; height:52px; color:var(--line); margin:0 auto 18px; }
.bulletin-empty h3{
  font-family:'Poppins',sans-serif;
  font-size:1.15rem;
  font-weight:700;
  color:var(--green-900);
  margin-bottom:8px;
}
.bulletin-empty p{ font-size:.9rem; }
/* ---- Section layout ---- */
.bulletin-section{
  padding:64px 0 80px;
}
