    /* Kalpurush is named in the stacks below as a local fallback only.
       The @font-face that used to sit here pointed at a jsdelivr repo that
       has gone, so both files came back 404 on every load. Bengali text is
       served by Noto Sans Bengali from Google Fonts, loaded in index.html. */
    body, * { font-family: 'Noto Sans Bengali', 'Plus Jakarta Sans', 'Kalpurush', sans-serif; }
    .rd-detail-btn{transition:background-color .18s,color .18s,transform .12s;}
    .rd-detail-btn:hover,.rd-detail-btn:focus-visible,.rd-detail-btn:active{background:#2563eb;color:#fff;}
    .rd-detail-btn:active{transform:scale(.98);}
    .font-premium, .font-premium h4 { font-family: 'Plus Jakarta Sans', 'Noto Sans Bengali', 'Kalpurush', sans-serif; letter-spacing: .005em; }
    .font-display { font-family: 'Space Grotesk', 'Noto Sans Bengali', sans-serif !important; }

    /* ---------- Typography utility classes ----------
       Reusable type ramp for the redesign; each class sets
       size + weight + line-height so a single class is enough. */
    .rd-label{font-size:.6rem;font-weight:800;letter-spacing:.28em;text-transform:uppercase;line-height:1.2;}
    @media(min-width:640px){.rd-label{font-size:.68rem;}}
    .rd-h1{font-family:'Space Grotesk','Noto Sans Bengali',sans-serif;font-size:clamp(1.5rem,4vw,2.75rem);font-weight:800;line-height:1.08;letter-spacing:-.01em;}
    .rd-h2{font-family:'Space Grotesk','Noto Sans Bengali',sans-serif;font-size:clamp(1.25rem,3vw,2rem);font-weight:800;line-height:1.1;letter-spacing:-.005em;}
    .rd-h3{font-family:'Plus Jakarta Sans','Noto Sans Bengali',sans-serif;font-size:clamp(1rem,2.5vw,1.35rem);font-weight:700;line-height:1.2;}
    .rd-body{font-size:clamp(.85rem,1.5vw,1rem);line-height:1.7;color:var(--rd-text);}
    .rd-cap{font-size:.75rem;line-height:1.5;color:var(--rd-text-subtle);}

    button, a, select, input, .cursor-pointer { cursor: pointer !important; transition: color .25s var(--rd-ease-smooth), background-color .25s var(--rd-ease-smooth), border-color .25s var(--rd-ease-smooth), box-shadow .25s var(--rd-ease-smooth), transform .25s var(--rd-ease-smooth), opacity .25s var(--rd-ease-smooth); }
    button:active, a:active { transform: scale(0.96); }

    /* ================= PREMIUM HOVER PASS =================
       .card-pro was referenced by the Home activity cards but never defined,
       so they had no surface and no hover. Defined here with a gradient top
       rail, an icon lift and a colour shift on the heading. */
    .card-pro{position:relative;background:#fff;border:1px solid #e2e8f0;
      box-shadow:0 1px 2px rgba(15,23,42,.04), 0 10px 28px -18px rgba(15,23,42,.18);
      overflow:hidden;isolation:isolate;
      transition:transform .32s cubic-bezier(.16,1,.3,1),box-shadow .32s ease,border-color .32s ease;}
    .card-pro:before{content:"";position:absolute;left:0;right:0;top:0;height:3px;
      background:linear-gradient(90deg,#0ea5e9,#6366f1);transform:scaleX(0);
      transform-origin:left;transition:transform .42s cubic-bezier(.16,1,.3,1);}
    .card-pro>div:first-child{transition:transform .32s cubic-bezier(.16,1,.3,1),box-shadow .32s ease;}
    .card-pro>h3{transition:color .28s ease;}
    .card-pro:hover,.card-pro:focus-within{transform:translateY(-6px);border-color:#bae6fd;
      box-shadow:0 2px 6px rgba(15,23,42,.05), 0 26px 50px -24px rgba(14,165,233,.55);}
    .card-pro:hover:before,.card-pro:focus-within:before{transform:scaleX(1);}
    .card-pro:hover>div:first-child{transform:translateY(-2px) scale(1.08);
      box-shadow:0 10px 22px -12px rgba(14,165,233,.6);}
    .card-pro:hover>h3{color:#0369a1;}

    /* Generic premium tile: used on every static information card. */
    .rd-tile{transition:transform .3s cubic-bezier(.16,1,.3,1),box-shadow .3s ease,border-color .3s ease,background-color .3s ease;}
    .rd-tile:hover,.rd-tile:focus-within{transform:translateY(-4px);border-color:#bae6fd;
      box-shadow:0 2px 5px rgba(15,23,42,.05), 0 22px 44px -24px rgba(14,165,233,.5);}
    .rd-tile-dark{transition:transform .3s cubic-bezier(.16,1,.3,1),box-shadow .3s ease,border-color .3s ease,background-color .3s ease;}
    .rd-tile-dark:hover{transform:translateY(-4px);background:rgba(255,255,255,.10);
      border-color:rgba(125,211,252,.5);box-shadow:0 22px 44px -24px rgba(56,189,248,.55);}

    /* The icon chip on the third PDACC "who teaches" tile. The other two use
       bg-indigo-500/15 and bg-blue-500/15, but Tailwind never built an emerald
       pair for this page, and rebuilding style.css would drop classes that the
       JavaScript injects at runtime. So this one chip carries its own colours:
       emerald-500 at 15% behind emerald-300 glyphs. */
    .rd-pd-chip-emerald{background:rgba(16,185,129,.15);color:#6ee7b7;}

    /* Every button reacts to the mouse. The two exclusions are the slideshow
       and lightbox arrows, which are already vertically centred with a
       transform -- lifting them would knock them off centre. */
    button:not(:disabled):not(.lb-nav):not([class*="translate-y-1/2"]):hover{
      transform:translateY(-2px);box-shadow:0 14px 28px -16px rgba(14,165,233,.65);}
    button:not(:disabled):not(.lb-nav):not([class*="translate-y-1/2"]):active{transform:translateY(0) scale(.97);}
    a:not(.premium-nav-item):hover{color:#0369a1;}

    .glass-nav{background:rgba(255,255,255,.94);backdrop-filter:blur(20px);border-bottom:1px solid var(--rd-border);box-shadow:0 14px 34px -26px rgba(15,23,42,.35);}
    .glass-nav:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--rd-primary);opacity:.95;}

    .page-view { display: none; animation: pageIn 0.38s cubic-bezier(0.16, 1, 0.3, 1) forwards; }
    .page-view.active { display: block; animation: none !important; }
    @keyframes pageIn { 0% { opacity: 0; transform: translateY(14px) scale(0.995); } 100% { opacity: 1; transform: translateY(0) scale(1); } }
    @media (prefers-reduced-motion:reduce){.page-view{animation:none;}}

    ::-webkit-scrollbar { width: 7px; height: 7px; }
    ::-webkit-scrollbar-track { background: #F8FAFC; }
    ::-webkit-scrollbar-thumb { background: #CBD5E1; border-radius: 9999px; }
    ::-webkit-scrollbar-thumb:hover { background: #2563EB; }
  
    .form-label{display:block;font-size:.78rem;font-weight:800;color:#334155;margin-bottom:.45rem;}
    .form-input{width:100%;background:#f8fafc;border:1px solid #e2e8f0;border-radius:.85rem;padding:.78rem 1rem;font-size:.9rem;color:#0f172a;outline:none;transition:.2s;}
    .form-input:focus{background:#fff;border-color:#3b82f6;box-shadow:0 0 0 3px rgba(59,130,246,.12);}

    :root{
      --rd-primary:#0ea5e9;--rd-primary-light:#e0f2fe;
      --rd-accent:#0ea5e9;--rd-accent-dark:#0284c7;--rd-sky:#38bdf8;
      --rd-surface:#f8fafc;--rd-border:#e2e8f0;
      --rd-ink:#0f172a;--rd-text:#334155;--rd-text-muted:#334155;--rd-text-subtle:#64748b;
      --rd-ease-out:cubic-bezier(.16,1,.3,1);--rd-ease-smooth:cubic-bezier(.4,0,.2,1);
      --rd-shadow-card:0 1px 3px rgba(15,23,42,.06),0 8px 24px -12px rgba(14,165,233,.12);
      --rd-shadow-lift:0 2px 6px rgba(15,23,42,.06),0 20px 40px -20px rgba(14,165,233,.35);
      --rd-shadow-glow:0 10px 26px -10px rgba(14,165,233,.65);
    }
    .premium-nav-item{position:relative;display:inline-flex;align-items:center;border:0;background:transparent;padding:.5rem .6rem;font-size:.78rem;font-weight:700;letter-spacing:.01em;color:#334155;cursor:pointer;border-radius:12px;white-space:nowrap;}
    .premium-nav-item:after{content:"";position:absolute;left:12px;right:12px;bottom:4px;height:2px;border-radius:99px;background:var(--rd-primary);transform:scaleX(0);transform-origin:center;transition:transform .28s ease;}
    .premium-nav-item:hover{color:#0c4a6e;background:rgba(14,165,233,.10);transform:translateY(-1px);}
    .premium-nav-item:hover:after,.premium-nav-item.active:after{transform:scaleX(1);}
    .premium-nav-item.active{color:#0c4a6e;background:rgba(14,165,233,.14);box-shadow:inset 0 0 0 1px rgba(14,165,233,.32);}
    /* The angled accent band on the brand row (the diagonal in the reference). */
    .nav-accent{position:absolute;top:0;bottom:0;left:33%;width:31%;transform:skewX(-20deg);background:var(--rd-primary-light);opacity:1;pointer-events:none;z-index:0;}
    @media (max-width:1279px){ .nav-accent{left:auto;right:-8%;width:42%;opacity:.5;} }
    /* Second tier: the pages live on a light strip under the brand row. */
    .nav-strip{background:var(--rd-surface);border-top:1px solid var(--rd-border);}
    .nav-strip .premium-nav-item{padding:.55rem .85rem;font-size:.8rem;color:var(--rd-text-muted);}
    .nav-strip .premium-nav-item:after{display:none;}
    .nav-strip .premium-nav-item:hover{color:#0c4a6e;background:rgba(14,165,233,.12);transform:none;}
    .nav-strip .premium-nav-item.active{background:var(--rd-primary);color:#fff;box-shadow:0 8px 18px -10px rgba(14,165,233,.95);}
    /* Premium register CTA */
    .nav-cta{position:relative;display:inline-flex;align-items:center;gap:.4rem;padding:.55rem .9rem;border-radius:13px;font-weight:800;font-size:.79rem;white-space:nowrap;color:#fff;background:var(--rd-accent);box-shadow:var(--rd-shadow-glow);border:1px solid rgba(2,132,199,.28);}
    .nav-cta:hover{transform:translateY(-2px);background:var(--rd-accent-dark);box-shadow:0 16px 34px -10px rgba(14,165,233,.9);}
    /* Premium brand lockup */
    .brand-logo{position:relative;width:3.15rem;height:3.15rem;border-radius:9999px;display:flex;align-items:center;justify-content:center;background:#f0f9ff;box-shadow:0 0 0 1.5px rgba(14,165,233,.35), 0 8px 22px -8px rgba(14,165,233,.45);overflow:hidden;transition:transform .35s cubic-bezier(.16,1,.3,1), box-shadow .35s ease;}
    .brand-logo img{width:100%;height:100%;object-fit:contain;padding:.2rem;filter:drop-shadow(0 2px 5px rgba(15,23,42,.16));}
    .group:hover .brand-logo{transform:translateY(-1px) scale(1.05);box-shadow:0 0 0 1.5px rgba(14,165,233,.75), 0 14px 30px -8px rgba(14,165,233,.6);}
    /* Cover headline: one fixed message for the whole slideshow. */
    /* প্রতিটি স্লাইডে নিজের একটি নিচ-থেকে-উপরের কালো গ্রেডিয়েন্ট আছে
       (ক্যাপশনের জন্য)। তাই এই পর্দাটি শুধু উপরের অংশে, হালকা করে — নইলে
       দুটো মিলে পুরো ছবিটাই কালো হয়ে যায়। লেখার পাঠযোগ্যতা text-shadow
       দিয়ে সামলানো হয়েছে, পর্দা গাঢ় করে নয়। */
    .rd-hero-veil{background:linear-gradient(180deg,rgba(2,6,23,.52) 0%,rgba(2,6,23,.26) 24%,rgba(2,6,23,.06) 42%,rgba(2,6,23,0) 55%);}
    #rd-hero-copy>*{text-shadow:0 2px 10px rgba(2,6,23,.55), 0 1px 2px rgba(2,6,23,.45);}
    #rd-hero-copy button{text-shadow:none;}
    @keyframes rdHeroIn{0%{opacity:0;transform:translateY(16px);filter:blur(7px);letter-spacing:.14em}55%{filter:blur(0)}100%{opacity:1;transform:none;filter:blur(0);letter-spacing:normal}}
    .rd-hero-anim>*{animation:rdHeroIn .95s cubic-bezier(.16,1,.3,1) both;}
    .rd-hero-anim>*:nth-child(1){animation-delay:.04s}
    .rd-hero-anim>*:nth-child(2){animation-delay:.20s}
    .rd-hero-anim>*:nth-child(3){animation-delay:.40s}
    .rd-hero-anim>*:nth-child(4){animation-delay:.58s}
    @media (prefers-reduced-motion:reduce){.rd-hero-anim>*{animation:none!important}}
    /* The two wordings swap in place, so the block keeps one height and
       the slideshow underneath never shifts. */
    #rd-hero-copy{min-height:11.5rem;}
    @media (min-width:640px){#rd-hero-copy{min-height:15rem;}}
    /* The PDACC bar gets its own entrance so the two pages never feel
       like the same banner twice: it slides in from the side with a slight
       skew, where the home one rises and unblurs. */
    @keyframes rdPdIn{0%{opacity:0;transform:translateX(-26px) skewX(-6deg) scale(.97)}60%{opacity:1;transform:translateX(0) skewX(0) scale(1.008)}100%{opacity:1;transform:none}}
    .rd-pd-anim>*{animation:rdPdIn 1.05s cubic-bezier(.22,1.2,.32,1) both;}
    .rd-pd-anim>*:nth-child(1){animation-delay:.03s}
    .rd-pd-anim>*:nth-child(2){animation-delay:.18s}
    .rd-pd-anim>*:nth-child(3){animation-delay:.34s}
    .rd-pd-anim>*:nth-child(4){animation-delay:.50s}
    .rd-pd-anim>*:nth-child(5){animation-delay:.64s}
    /* The hero crossfade.  The markup asks for duration-1000 ease-out, and
       ease-out spends most of a fade in its first moments -- so the outgoing
       picture disappeared early and the step felt like a cut.  A longer,
       symmetric curve makes the two pictures cross in the middle instead.
       Written here rather than as arbitrary Tailwind classes so the prebuilt
       stylesheet does not have to carry two more one-off utilities. */
    .cover-slide, .pdacc-slide {
      transition-property: opacity, transform !important;
      transition-duration: 1600ms !important;
      transition-timing-function: cubic-bezier(.4, 0, .2, 1) !important;
    }
    #pdacc-hero-copy>*{text-shadow:0 2px 10px rgba(2,6,23,.55), 0 1px 2px rgba(2,6,23,.45);}
    #pdacc-hero-copy button{text-shadow:none;}
    #pdacc-hero-copy{min-height:12.5rem;}
    @media (min-width:640px){#pdacc-hero-copy{min-height:16rem;}}
    /* The headline written on a picture, on both bars. The rule underneath
       it draws itself out, so a caption change is noticed without moving
       the picture at all. */
    @keyframes rdCapIn{0%{opacity:0;transform:translateY(14px)}100%{opacity:1;transform:none}}
    @keyframes rdCapBadge{0%{opacity:0;transform:translateY(10px) scale(.92)}100%{opacity:1;transform:none}}
    @keyframes rdCapLine{0%{width:0;opacity:0}100%{width:2.75rem;opacity:1}}
    .rd-cap-badge{animation:rdCapBadge .7s cubic-bezier(.16,1,.3,1) both;animation-delay:.10s}
    .rd-cap-line{display:block;height:2px;margin-top:.55rem;border-radius:2px;
      background:linear-gradient(90deg,rgba(255,255,255,.95),rgba(255,255,255,0));
      animation:rdCapLine .8s cubic-bezier(.16,1,.3,1) both;animation-delay:.24s}
    .rd-cap-title{animation:rdCapIn .85s cubic-bezier(.16,1,.3,1) both;animation-delay:.34s}
    @media (prefers-reduced-motion:reduce){
      .rd-pd-anim>*,.rd-cap-badge,.rd-cap-line,.rd-cap-title{animation:none!important}
      .rd-cap-line{width:2.75rem;opacity:1}
    }
    /* ---------- the President deck on the home page ----------------------
       Batch 35: the two messages used to sit in a two-column grid, so the
       page opened with two walls of text. One at a time now. The track is a
       flex row as wide as the number of messages and slides by whole
       viewport widths; `touch-action:pan-y` keeps a vertical scroll working
       while a sideways drag is read as a swipe. */
    .leader-deck{position:relative;overflow:hidden;}
    .leader-track{display:flex;align-items:flex-start;transition:transform .6s cubic-bezier(.16,1,.3,1);touch-action:pan-y;}
    .leader-slide{flex:0 0 100%;min-width:100%;}
    .leader-dots{display:flex;justify-content:center;gap:.45rem;margin-top:1.35rem;}
    .leader-dot{width:.45rem;height:.45rem;padding:0;border:0;border-radius:9999px;background:#cbd5e1;cursor:pointer;transition:width .3s ease,background .3s ease;}
    .leader-dot.on{width:1.6rem;background:#1d4ed8;}
    @media (prefers-reduced-motion:reduce){.leader-track{transition:none;}}
    .brand-word{display:flex;flex-direction:column;gap:.2rem;line-height:1;}
    .brand-name{white-space:nowrap;font-size:clamp(.92rem,3vw,1.3rem);line-height:1;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#0f172a;text-shadow:none;}
    .brand-duet,.brand-title-duet{color:#0f766e !important;text-shadow:0 1px 0 rgba(255,255,255,.8);}
    .brand-tag{white-space:nowrap;font-size:.5rem;letter-spacing:.09em;text-transform:uppercase;font-weight:600;color:#64748b;}
    @media (max-width:1023px){ .brand-tag{white-space:normal;font-size:.42rem;letter-spacing:.04em;line-height:1.3;max-width:11.5rem;} }
    @media (max-width:359px){ .brand-tag{display:none;} }
    @media (min-width:1024px) and (max-width:1279px){ .brand-tag{font-size:.45rem;letter-spacing:.05em;} }

    .mobile-nav-item{display:flex;align-items:center;gap:.65rem;width:100%;text-align:left;padding:.8rem 1rem;border-radius:12px;color:#334155;font-weight:700;}
    .mobile-nav-item:hover{background:rgba(14,165,233,.12);color:#0c4a6e;}
    .mobile-nav-item.active{background:rgba(14,165,233,.16);color:#0c4a6e;}

    /* ---------- Sub-pages (this site has no popups) ---------- */
    .subpage-bar{position:sticky;top:5rem;z-index:30;background:rgba(248,250,252,.94);backdrop-filter:blur(10px);border-bottom:1px solid #e2e8f0;}
    .subpage-bar.on-dark{background:rgba(2,6,23,.94);border-bottom-color:rgba(255,255,255,.10);}
    .subpage-back{display:inline-flex;align-items:center;gap:.4rem;padding:.6rem 1.05rem;border-radius:9999px;background:#fff;border:1px solid #e2e8f0;font-size:.8rem;font-weight:700;color:#334155;box-shadow:0 1px 2px rgba(15,23,42,.06);transition:background .2s,color .2s,border-color .2s;cursor:pointer;white-space:nowrap;}
    .subpage-back:hover{background:#2563eb;border-color:#2563eb;color:#fff;}
    .subpage-back.on-dark{background:rgba(255,255,255,.10);border-color:rgba(255,255,255,.18);color:#e2e8f0;}
    .subpage-back.on-dark:hover{background:#2563eb;border-color:#2563eb;color:#fff;}
    .lb-ctrl{width:2.75rem;height:2.75rem;border-radius:9999px;display:inline-flex;align-items:center;justify-content:center;background:rgba(255,255,255,.10);color:#fff;border:1px solid rgba(255,255,255,.14);transition:background .2s;cursor:pointer;}
    .lb-ctrl:hover{background:rgba(255,255,255,.24);}
    /* Prev/next arrows flanking the photo itself, not just in the toolbar. */
    .lb-nav{position:absolute;top:50%;transform:translateY(-50%);width:3rem;height:3rem;border-radius:9999px;
      display:flex;align-items:center;justify-content:center;z-index:5;cursor:pointer;color:#fff;
      background:rgba(2,6,23,.68);border:1px solid rgba(255,255,255,.22);
      -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);
      transition:background .2s,border-color .2s;}
    .lb-nav:hover{background:rgba(37,99,235,.92);border-color:rgba(147,197,253,.6);}
    .lb-nav:active{transform:translateY(-50%) scale(.93);}
    .lb-nav-prev{left:.35rem;} .lb-nav-next{right:.35rem;}
    @media (min-width:640px){ .lb-nav-prev{left:-.75rem;} .lb-nav-next{right:-.75rem;} }

    /* ---------- Mobile + accessibility polish ---------- */
    /* Horizontal clipping belongs on the html element, NOT on body: on body it
       turns body into a scroll container, which silently breaks position:sticky
       for the navbar and the sub-page back bars. */
    html{overflow-x:clip;}
    @supports not (overflow:clip){ html{overflow-x:hidden;} }
    *{-webkit-tap-highlight-color:transparent;}

    /* iOS Safari zooms the whole page when a focused field is smaller than 16px. */
    @media (max-width:640px){
      input:not([type=checkbox]):not([type=radio]), select, textarea{font-size:16px !important;}
      .subpage-back{min-height:2.75rem;}
    }

    /* Visible keyboard focus (mouse users never see it) */
    :focus-visible{outline:2px solid #2563eb;outline-offset:2px;border-radius:8px;}
    .form-input:focus-visible{outline:none;}
    /* Field-level validation: only the wrong box is marked, the rest of the
       form keeps everything the user typed. */
    .alumni-page-btn{min-width:2.5rem;height:2.75rem;padding:0 .7rem;border-radius:.85rem;
      display:inline-flex;align-items:center;justify-content:center;gap:.3rem;
      font-size:.85rem;font-weight:700;color:#334155;background:#fff;
      border:1px solid #e2e8f0;cursor:pointer;transition:.18s;}
    .alumni-page-btn:hover:not(:disabled){border-color:#3b82f6;color:#1d4ed8;background:#eff6ff;}
    .alumni-page-btn:disabled{opacity:.42;cursor:not-allowed;}
    .alumni-page-btn.is-current{background:linear-gradient(135deg,#2563eb,#0ea5e9);border-color:transparent;
      color:#fff;box-shadow:0 6px 16px -6px rgba(37,99,235,.7);}
    /* ---------- Notice line -------------------------------------------
       One line, right to left, and it stops while the pointer or the
       keyboard is on it -- a notice nobody can finish reading is no
       notice at all. Motion is dropped entirely when the visitor has
       asked the system for less of it. */
    .rd-marquee{overflow:hidden;position:relative;display:flex;align-items:center;min-height:2.75rem;}
    .rd-marquee-track{display:inline-flex;align-items:center;gap:3rem;white-space:nowrap;
      padding-left:100%;animation:rd-marquee-run 34s linear infinite;}
    .rd-marquee:hover .rd-marquee-track,
    .rd-marquee:focus-within .rd-marquee-track{animation-play-state:paused;}
    @keyframes rd-marquee-run{from{transform:translateX(0);}to{transform:translateX(-100%);}}
    @media (prefers-reduced-motion: reduce){
      .rd-marquee{min-height:0;}
      .rd-marquee-track{animation:none;padding-left:0;white-space:normal;
        flex-wrap:wrap;gap:.35rem 1.25rem;padding:.6rem 0;}
    }
    /* ---------- A sliding rail ----------------------------------------
       Buttons move it, but the scrolling itself is the browser's own: that
       is what keeps the thumb swipe, the trackpad and the keyboard working
       without a line of JavaScript pretending to be a carousel. */
    /* ---- the PDACC page's own little nav, crest and contact cards ---- */
    .rd-pd-navbtn{display:inline-flex;align-items:center;gap:.4rem;padding:.55rem .9rem;
      border-radius:1rem;border:1px solid #e2e8f0;background:#fff;color:#475569;
      font-size:11px;font-weight:800;cursor:pointer;transition:all .18s ease;white-space:nowrap;}
    .rd-pd-navbtn:hover{border-color:#a5b4fc;color:#4338ca;background:#eef2ff;}
    .rd-pd-navbtn.is-fb{border-color:#bfdbfe;color:#1d4ed8;background:#eff6ff;}
    .rd-pd-navbtn.is-fb:hover{background:#dbeafe;}
    /* On a 375px phone the three buttons measured 320px against 319px of room,
       so the last one wrapped onto a third line of its own and the strip stood
       153px tall -- with the header, 29% of the screen, permanently. Trimming
       the side padding gives back 24px and puts all three on one line. */
    @media (max-width:430px){
      .rd-pd-navbtn{padding:.5rem .65rem;}
    }
    /* The strip stays under the site header while the PDACC page scrolls, so
       every page it names is one tap away. The offset lives here rather than in
       the markup as a Tailwind arbitrary value: style.css is generated output
       and never carried the arbitrary top the markup used to ask for, so the
       computed top was `auto`, and a sticky box with no offset never sticks.
       (The dead class is not named here on purpose -- a harness asserts it
       appears nowhere in the source, and a comment counts.)

       It parks flush against the header, not a few pixels below it: a gap is a
       window, and the page scrolling underneath shows through it. The header is
       80.8px tall, so 80px leaves a hair of overlap that the header's own
       z-index covers. */
    .rd-pd-nav{position:sticky;top:80px;
      transition:box-shadow .3s ease,background .3s ease;}
    /* From xl up the header shows its second row, the `.nav-strip` menu, and is
       130px tall instead of 81px. Without this the strip parks behind it. */
    @media (min-width:1280px){
      .rd-pd-nav{top:129px;}
    }
    /* The ribbon sits under the strip, so it scrolls away with the page. It
       gets a little air above it now that the strip is no longer over it. */
    .rd-pd-nav + .rd-pd27{margin-top:2px}
    /* The Admission guide is the exception: it has its own tab strip that
       already sticks at the same offset, and two bars stacked would take a
       third of a phone screen. So the PDACC strip scrolls away there. The way
       back is not lost -- the site header stays on screen and carries PDACC in
       its menu. */
    #pdacc-nav-sub{position:static;}
    .rd-pd-navbtn.is-key{border-color:transparent;color:#fff;
      background:linear-gradient(135deg,#4338ca,#1e1b4b);}
    .rd-pd-navbtn.is-key:hover{color:#fff;border-color:transparent;
      background:linear-gradient(135deg,#3730a3,#312e81);}
    .rd-pd-navbtn:focus-visible{outline:2px solid #6366f1;outline-offset:2px;}
    /* the big card that opens the admission guide */
    .rd-pd-guide{width:100%;display:flex;align-items:center;gap:1rem;text-align:left;
      padding:1.15rem 1.25rem;border-radius:1.4rem;border:1px solid #e2e8f0;
      background:linear-gradient(135deg,#f8faff,#fff);cursor:pointer;
      box-shadow:0 20px 40px -34px rgba(30,27,75,.5);
      transition:transform .35s cubic-bezier(.22,1,.36,1),border-color .35s,box-shadow .35s;}
    .rd-pd-guide:hover{transform:translateY(-3px);border-color:#a5b4fc;
      box-shadow:0 26px 48px -30px rgba(30,27,75,.55);}
    .rd-pd-guide:focus-visible{outline:2px solid #6366f1;outline-offset:3px;}
    .rd-pd-guide strong{display:block;font-size:1.02rem;font-weight:800;color:#1e1b4b;}
    .rd-pd-guide em{display:block;margin-top:.3em;font-style:normal;font-size:.82rem;
      line-height:1.85;color:#5b6480;}
    .rd-pd-guide-i{flex:0 0 auto;width:3rem;height:3rem;border-radius:1rem;
      display:inline-flex;align-items:center;justify-content:center;color:#fff;
      background:linear-gradient(135deg,#4338ca,#1e1b4b);}
    .rd-pd-guide>[data-lucide]{color:#6366f1;}
    @media (prefers-reduced-motion:reduce){
      .rd-pd-guide{transition:none;}
      .rd-pd-guide:hover{transform:none;}
    }
    .rd-pd-crest{width:2.5rem;height:2.5rem;border-radius:.9rem;border:1px solid #e2e8f0;
      background:#fff;overflow:hidden;display:inline-flex;align-items:center;
      justify-content:center;flex:0 0 auto;}
    .rd-pd-crest.is-big{width:4.5rem;height:4.5rem;border-radius:1.4rem;}
    .rd-pd-crest img{width:100%;height:100%;object-fit:contain;padding:.15rem;}
    .rd-pd-contact{display:flex;align-items:center;gap:.75rem;padding:1rem 1.15rem;
      border-radius:1.25rem;border:1px solid #e2e8f0;background:#fff;color:#334155;
      text-align:left;cursor:pointer;width:100%;transition:all .18s ease;
      box-shadow:0 1px 2px rgba(15,23,42,.04);}
    .rd-pd-contact:hover{border-color:#a5b4fc;color:#3730a3;transform:translateY(-1px);
      box-shadow:0 12px 30px -18px rgba(15,23,42,.45);}
    .rd-pd-contact strong{display:block;font-size:13px;font-weight:800;}
    .rd-pd-contact em{display:block;font-style:normal;font-size:11px;font-weight:700;
      opacity:.7;word-break:break-word;}
    .rd-pd-contact.is-fb{border-color:#bfdbfe;background:#eff6ff;color:#1d4ed8;}
    .rd-rail-wrap{position:relative;}
    .rd-rail{display:flex;gap:1.25rem;overflow-x:auto;scroll-snap-type:x mandatory;
      scroll-behavior:smooth;padding:.25rem .25rem 1rem;-webkit-overflow-scrolling:touch;
      scrollbar-width:none;-ms-overflow-style:none;}
    .rd-rail::-webkit-scrollbar{display:none;}
    .rd-rail > *{scroll-snap-align:start;flex:0 0 85%;min-width:0;}
    @media (min-width:640px){.rd-rail > *{flex-basis:47%;}}
    @media (min-width:1024px){.rd-rail > *{flex-basis:31.4%;}}
    .rd-rail-btn{position:absolute;top:36%;z-index:5;width:2.75rem;height:2.75rem;
      display:inline-flex;align-items:center;justify-content:center;border-radius:9999px;
      background:#fff;border:1px solid #e2e8f0;color:#334155;cursor:pointer;
      box-shadow:0 12px 28px -14px rgba(15,23,42,.45);transition:.2s;}
    .rd-rail-btn:hover{border-color:#93c5fd;color:#1d4ed8;transform:translateY(-1px);}
    .rd-rail-btn:disabled{opacity:.3;pointer-events:none;}
    .rd-rail-prev{left:-.4rem;}
    .rd-rail-next{right:-.4rem;}
    @media (min-width:1024px){.rd-rail-prev{left:-1.3rem;}.rd-rail-next{right:-1.3rem;}}
    @media (prefers-reduced-motion:reduce){.rd-rail{scroll-behavior:auto;}}
    /* ---------- "Latest News" card ------------------------------------
       The shape DUET's own site uses: picture on top, title under it,
       the date at the bottom-left and VIEW MORE at the bottom-right. */
    .rd-news-card{display:flex;flex-direction:column;height:100%;background:#fff;
      border:1px solid #e2e8f0;border-radius:1rem;overflow:hidden;transition:.2s;}
    .rd-news-card:hover{border-color:#93c5fd;transform:translateY(-2px);
      box-shadow:0 18px 40px -24px rgba(15,23,42,.45);}
    .rd-news-thumb{position:relative;aspect-ratio:16/10;background:#f1f5f9;overflow:hidden;
      display:flex;align-items:center;justify-content:center;}
    /* A Drive link that answers with nothing used to leave a plain grey
       rectangle on the card. The monogram now sits underneath the picture,
       so the frame always reads as a card even when the picture never
       arrives. */
    .rd-news-thumb::after{content:'RANGDHANU';position:absolute;inset:0;z-index:0;display:flex;
      align-items:center;justify-content:center;text-align:center;
      background:linear-gradient(135deg,#eef2ff,#f8fafc 48%,#e0f2fe);
      font-size:.6rem;font-weight:800;letter-spacing:.3em;color:#94a3b8;}
    .rd-news-thumb img{position:relative;z-index:1;width:100%;height:100%;object-fit:cover;}
    .rd-news-thumb.is-logo{background:linear-gradient(135deg,#f8fafc,#eff6ff);}
    .rd-news-thumb.is-logo img{object-fit:contain;padding:1.4rem;}
    .rd-news-tag{position:absolute;top:.6rem;left:.6rem;display:inline-flex;align-items:center;
      gap:.3rem;padding:.2rem .55rem;border-radius:.55rem;background:rgba(15,23,42,.78);
      color:#fff;font-size:10px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;}
    .rd-news-foot{margin-top:auto;display:flex;align-items:center;justify-content:space-between;
      gap:.5rem;padding:.65rem 1rem;border-top:1px solid #f1f5f9;background:#f8fafc;}
    .rd-news-title{text-align:left;font-weight:800;line-height:1.35;color:#0f172a;
      background:none;border:0;padding:0;cursor:pointer;}
    .rd-news-title:hover{color:#1d4ed8;}
    /* Two-line trim without relying on a Tailwind plugin. */
    .rd-clamp2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
    .rd-clamp3{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;}
    .rd-file-frame{width:100%;height:min(78vh,860px);border:0;display:block;background:#f1f5f9;}
    .form-input.is-invalid{border-color:#e11d48;background:#fff1f2;box-shadow:0 0 0 3px rgba(225,29,72,.14);}
    .form-input.is-invalid:focus{border-color:#e11d48;box-shadow:0 0 0 3px rgba(225,29,72,.2);}
    .field-error{display:none;margin-top:.35rem;font-size:.75rem;font-weight:600;color:#e11d48;line-height:1.45;}
    .field-error.show{display:block;}

    #mobile-menu{max-height:calc(100vh - 5rem);overflow-y:auto;overscroll-behavior:contain;}
    @supports (height:100dvh){ #mobile-menu{max-height:calc(100dvh - 5rem);} }

    #page-photo img{-webkit-user-select:none;user-select:none;touch-action:pan-y;}

    /* MEMBER DIRECTORY CARDS
       The grid used to snap in fully formed the moment the fetch landed, which
       read as a jolt on a page where everything else fades.  The cards now rise
       the way .page-view does, so the arrival matches the rest of the site.

       The stagger is per row of three rather than per card: eighteen separate
       delays would finish nearly a second apart and start to feel slow, while a
       row at a time still reads as filling in.  Delays stay short on purpose --
       the last row is only .10s behind the first, so nobody waits for motion.

       No prefers-reduced-motion rule is needed here; the catch-all at the end of
       this file already flattens every animation on the page. */
    @keyframes rdCardIn{0%{opacity:0;transform:translateY(12px) scale(.985)}100%{opacity:1;transform:none}}
    #alumni-grid>.alumni-card{animation:rdCardIn .5s cubic-bezier(.16,1,.3,1) both;}
    #alumni-grid>.alumni-card:nth-child(n+4){animation-delay:.02s;}
    #alumni-grid>.alumni-card:nth-child(n+7){animation-delay:.04s;}
    #alumni-grid>.alumni-card:nth-child(n+10){animation-delay:.06s;}
    #alumni-grid>.alumni-card:nth-child(n+13){animation-delay:.08s;}
    #alumni-grid>.alumni-card:nth-child(n+16){animation-delay:.10s;}

    /* The photo carries its own fade because it lands after its card -- Drive is
       a second request, and a picture appearing with a snap inside a card that
       already faded in was the jolt moved rather than removed.  The class is
       dropped by an onload handler, so a cached image is never held back. */
    #alumni-grid .alumni-card img,#page-profile .rd-photo-in{transition:opacity .45s ease;}
    .rd-photo-in{opacity:0;}
    .rd-photo-in.rd-photo-ready{opacity:1;}

    @media (prefers-reduced-motion:reduce){
      /* !important because Tailwind's .scroll-smooth class outranks a bare html selector */
      html,html.scroll-smooth{scroll-behavior:auto !important;}
      *,*::before,*::after{animation-duration:.001ms !important;animation-iteration-count:1 !important;transition-duration:.001ms !important;}
      button:active,a:active{transform:none;}
    }

    /* Two icon buttons now sit in the brand row on a phone: sign in, then the
       menu. At 375 px the pair ran a few pixels past the edge, so on the
       narrowest screens both boxes lose a little padding. */
    @media (max-width:430px){
      #mobile-member-btn,#mobile-menu-btn{padding:.55rem;}
      #mobile-member-btn svg,#mobile-menu-btn svg{width:1.35rem;height:1.35rem;}
    }

    /* MY PROFILE cover, on the Edit tab. The gradients below are only what shows
       in the moment before rdMypCover runs; from then on the box carries either
       the member's own cover or cover-default.jpg, the same file the Profile tab
       stands on.
       The ratio is 851/315 -- .rd-mp-cover's ratio, not a rounded version of it.
       It used to be a fixed h-32 sm:h-44, so one picture was cropped one way on
       Edit and another way on Profile, and the position saved on one tab did not
       look like the position seen on the other. */
    .rd-cover{
      aspect-ratio:851/315;
      overflow:hidden;
      background-color:#0f172a;
      background-image:
        radial-gradient(120% 90% at 12% 0%,rgba(56,132,255,.38) 0%,rgba(15,23,42,0) 62%),
        repeating-linear-gradient(135deg,rgba(255,255,255,.05) 0 1px,rgba(255,255,255,0) 1px 9px);
      background-size:cover,auto;
      background-position:center;
    }
    /* The sign-in confirmation: one line under the header, in the page flow.
       It is not fixed, not a layer and has no backdrop, so it cannot become the
       popup the site does not have. Hidden it takes no height at all. */
    .rd-flash{
      display:flex;align-items:center;justify-content:center;gap:.5rem;
      padding:.5rem 1rem;
      background:#ecfdf5;
      border-bottom:1px solid #a7f3d0;
      color:#047857;
      font-size:.8125rem;font-weight:800;
      line-height:1.25rem;
      white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
      animation:rdFlashIn .25s ease-out both;
    }
    .rd-flash.hidden{display:none;}
    @keyframes rdFlashIn{from{opacity:0;transform:translateY(-.35rem)}to{opacity:1;transform:none}}

    /* The drawn cover: PROUD MEMBER. No photo is fetched for it, so it is on
       screen with the page and costs nothing. The two corner arcs, the brush
       streaks and the letters are all one blue -- the Association's own -- so
       the band never reads as a flag or an arc of colours.

       Everything is sized in vw inside its own box, which is why one drawing
       fits a phone and a desktop without a second copy. */
    .rd-proud{
      position:absolute;inset:0;overflow:hidden;
      display:flex;flex-direction:column;align-items:center;justify-content:center;
      gap:.15em;
      background-color:#f1f7ff;
      background-image:
        radial-gradient(78% 130% at -10% -26%,#1d6fe0 0 33%,rgba(29,111,224,0) 34%),
        radial-gradient(58% 96% at 106% 122%,#1d6fe0 0 38%,rgba(29,111,224,0) 39%),
        radial-gradient(60% 100% at -4% 8%,#7cb6ff 0 26%,rgba(124,182,255,0) 27%),
        repeating-linear-gradient(118deg,rgba(59,130,246,.10) 0 .5rem,rgba(255,255,255,0) .5rem 1.7rem);
      /* The site loads three families and no more: Noto Sans Bengali for
         Bengali, Plus Jakarta Sans for Latin text, Space Grotesk for numerals
         and short display words. This used to name two families that are never
         loaded, so PROUD MEMBER was drawn in whatever the device happened to
         have -- a different face per visitor. The names are left out of this
         comment on purpose: a harness asserts they appear nowhere. */
      font-family:'Plus Jakarta Sans','Noto Sans Bengali',system-ui,sans-serif;
      line-height:.92;
      text-align:center;
      user-select:none;
    }
    .rd-proud-1,.rd-proud-2{
      font-weight:900;font-style:italic;letter-spacing:.02em;
      text-transform:uppercase;white-space:nowrap;
    }
    .rd-proud-1{
      font-size:clamp(1.15rem,5.4vw,2.6rem);
      color:#1d6fe0;
      text-shadow:0 .06em .12em rgba(29,111,224,.22);
    }
    .rd-proud-2{
      position:relative;
      font-size:clamp(1.7rem,8.2vw,4rem);
      color:#fff;
      text-shadow:
        .045em 0 0 #1d6fe0,-.045em 0 0 #1d6fe0,0 .045em 0 #1d6fe0,0 -.045em 0 #1d6fe0,
        .032em .032em 0 #1d6fe0,-.032em .032em 0 #1d6fe0,
        .032em -.032em 0 #1d6fe0,-.032em -.032em 0 #1d6fe0,
        0 .16em .2em rgba(29,111,224,.3);
    }
    /* The crown sits on the last letter, so it moves with the word instead of
       drifting off on a narrow screen. */
    .rd-proud-crown{
      position:absolute;top:-.62em;right:-.5em;
      width:.5em;height:.5em;color:#1d6fe0;
    }
    .rd-proud-tag{
      margin-top:.5em;
      max-width:92%;
      padding:.18em .8em .26em;
      border-radius:9999px;
      background:#1d6fe0;color:#fff;
      /* The tag line under it is Bengali, so it leads with the Bengali face. */
      font-family:'Noto Sans Bengali','Plus Jakarta Sans',sans-serif;
      font-weight:700;line-height:1.35;
      font-size:clamp(.5rem,2.2vw,.85rem);
      box-shadow:0 .12em .3em rgba(29,111,224,.35);
      overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
    }
    /* An uploaded cover replaces the drawing, so the two never show through
       each other. */
    .rd-cover.rd-cover-photo > .rd-proud{display:none;}
    .rd-cover.rd-cover-photo{
      background-image:none;
      background-color:#0f172a;
      background-size:cover;
      background-position:center;
      background-repeat:no-repeat;
    }

    /* Only the camera badge on the avatar is left here. The cover's own button
       is now one of the .rd-mp-cbtn pills the Profile tab uses, because the
       cover carries two of them -- Cover and Use default -- and .rd-cover-btn
       pinned itself to the bottom right corner, where a second button would
       have landed on top of the first. */
    .rd-photo-btn{
      position:absolute;right:-.35rem;bottom:-.35rem;padding:.45rem;
      display:inline-flex;align-items:center;gap:.4rem;
      cursor:pointer;font-size:.75rem;font-weight:700;
      background:rgba(255,255,255,.92);color:#0f172a;
      border:1px solid rgba(15,23,42,.08);
      border-radius:9999px;box-shadow:0 2px 8px rgba(15,23,42,.18);
      transition:background .15s ease;
    }
    .rd-photo-btn:hover{background:#fff;}

    /* "Who can see this" sits under its own field, small enough to stay out of
       the way and close enough that nobody mistakes which field it governs. */
    .rd-vis-row{
      display:flex;align-items:center;gap:.4rem;margin-top:.4rem;
      font-size:.7rem;font-weight:700;color:#64748b;
    }
    .rd-vis-select{
      flex:1 1 auto;min-width:0;
      border:1px solid #e2e8f0;border-radius:.6rem;
      padding:.25rem 1.5rem .25rem .5rem;
      font-size:.7rem;font-weight:700;color:#334155;
      background:#f8fafc;cursor:pointer;
      text-overflow:ellipsis;
    }
    .rd-vis-select:focus{outline:none;border-color:#93c5fd;background:#fff;}

    /* ---------------- social media accounts ----------------------------
       Two shapes, one look: the editable row on the registration form and
       My Profile, and the read only chip another member taps. */
    .rd-soc-row{
      display:flex;align-items:center;gap:.5rem;margin-bottom:.5rem;
      padding:.4rem;border:1px solid #e2e8f0;border-radius:.9rem;background:#f8fafc;
    }
    .rd-soc-row.is-bad{border-color:#fca5a5;background:#fef2f2;}
    .rd-soc-mark{
      width:2rem;height:2rem;flex:0 0 auto;border-radius:.6rem;
      display:flex;align-items:center;justify-content:center;
      background:#fff;border:1px solid #e2e8f0;color:#475569;
    }
    .rd-soc-mark svg{width:1.05rem;height:1.05rem;}
    .rd-soc-net{
      flex:0 0 auto;width:6.5rem;
      border:1px solid #e2e8f0;border-radius:.6rem;background:#fff;
      padding:.4rem .5rem;font-size:.75rem;font-weight:700;color:#334155;cursor:pointer;
    }
    .rd-soc-url{
      flex:1 1 auto;min-width:0;
      border:1px solid #e2e8f0;border-radius:.6rem;background:#fff;
      padding:.4rem .6rem;font-size:.8rem;color:#0f172a;
    }
    .rd-soc-net:focus,.rd-soc-url:focus{outline:none;border-color:#93c5fd;}
    .rd-soc-del{
      width:2rem;height:2rem;flex:0 0 auto;border-radius:.6rem;
      display:flex;align-items:center;justify-content:center;
      background:#fff;border:1px solid #e2e8f0;color:#94a3b8;cursor:pointer;
      transition:background .15s ease,color .15s ease,border-color .15s ease;
    }
    .rd-soc-del:hover,.rd-soc-del:focus-visible{background:#fef2f2;border-color:#fca5a5;color:#dc2626;}
    .rd-soc-foot{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem .75rem;}
    .rd-soc-add{
      display:inline-flex;align-items:center;gap:.35rem;
      padding:.4rem .8rem;border-radius:.7rem;
      border:1px dashed #93c5fd;background:#eff6ff;color:#1d4ed8;
      font-size:.75rem;font-weight:800;cursor:pointer;
      transition:background .15s ease,border-color .15s ease;
    }
    .rd-soc-add:hover:not(:disabled){background:#dbeafe;border-color:#60a5fa;}
    .rd-soc-add:disabled{opacity:.5;cursor:not-allowed;}
    .rd-soc-note{font-size:.7rem;font-weight:700;color:#94a3b8;}
    .rd-soc-err{font-size:.75rem;font-weight:700;color:#dc2626;margin-top:.5rem;}

    /* The chip carries the platform's own colour, so the row of logos reads at
       a glance without a label being needed at all. */
    .rd-soc-chips{display:flex;flex-wrap:wrap;gap:.5rem;}
    .rd-soc-chip{
      display:inline-flex;align-items:center;gap:.45rem;
      padding:.5rem .85rem;border-radius:.8rem;
      border:1px solid #e2e8f0;background:#f8fafc;color:#334155;
      font-size:.78rem;font-weight:800;text-decoration:none;
      transition:background .15s ease,border-color .15s ease,color .15s ease;
    }
    .rd-soc-chip svg{width:1.05rem;height:1.05rem;}
    .rd-soc-chip.is-facebook{color:#1877f2;border-color:#c7ddfb;background:#eff6ff;}
    .rd-soc-chip.is-linkedin{color:#0a66c2;border-color:#c3dcf5;background:#eff6ff;}
    .rd-soc-chip.is-x{color:#0f172a;border-color:#d8dee7;background:#f1f5f9;}
    .rd-soc-chip:hover,.rd-soc-chip:focus-visible{background:#fff;border-color:currentColor;}

    @media (max-width:480px){
      .rd-soc-row{flex-wrap:wrap;}
      .rd-soc-net{width:auto;flex:1 1 5rem;}
      .rd-soc-url{flex:1 1 100%;order:3;}
    }

    /* ============================================================
       organization.html -- the Association's own reference document.

       That page is not part of the single-page app: it is a plain static
       document with its own address, so a crawler and a reader both get one
       URL that is only about the organization.  Its styles live here rather
       than in a <style> block on the page, because CSS does not go back
       inside the markup anywhere in this project.  Nothing below hides
       text: no display:none, no zero-height, no colour matching the
       background.  Every word on that page is meant to be read.
       ============================================================ */

    .rd-kb{background:#f8fafc;color:#0f172a;}
    .rd-kb-wrap{max-width:52rem;margin:0 auto;padding:2.5rem 1.25rem 4rem;
      font-family:'Plus Jakarta Sans','Noto Sans Bengali',system-ui,sans-serif;
      font-size:1rem;line-height:1.75;}

    .rd-kb-head{border-bottom:1px solid #e2e8f0;padding-bottom:2rem;margin-bottom:2rem;}
    .rd-kb-crest{width:4.5rem;height:4.5rem;object-fit:contain;margin-bottom:1rem;}
    .rd-kb-kicker{font-size:.75rem;font-weight:800;letter-spacing:.08em;
      text-transform:uppercase;color:#2563eb;margin:0 0 .35rem;}
    .rd-kb-wrap h1{font-size:2rem;font-weight:800;line-height:1.25;margin:0 0 .5rem;}
    .rd-kb-sub{font-size:1.0625rem;color:#475569;margin:0 0 1rem;}
    .rd-kb-note{font-size:.875rem;color:#64748b;margin:0;}

    .rd-kb-toc{background:#fff;border:1px solid #e2e8f0;border-radius:.875rem;
      padding:1.25rem 1.5rem;margin-bottom:2.5rem;}
    .rd-kb-toc h2{font-size:.75rem;font-weight:800;letter-spacing:.08em;
      text-transform:uppercase;color:#64748b;margin:0 0 .75rem;}
    .rd-kb-toc ol{margin:0;padding-left:1.35rem;
      columns:2;column-gap:2rem;font-size:.9375rem;}
    .rd-kb-toc li{margin:.15rem 0;break-inside:avoid;}

    .rd-kb-sec{margin:0 0 3rem;}
    .rd-kb-sec h2{font-size:1.375rem;font-weight:800;line-height:1.35;
      margin:0 0 1rem;padding-bottom:.5rem;border-bottom:1px solid #e2e8f0;}
    .rd-kb-sec h3{font-size:1.0625rem;font-weight:700;margin:1.75rem 0 .5rem;}
    .rd-kb-sec p{margin:0 0 1rem;}
    .rd-kb-sec a{color:#1d4ed8;text-decoration:underline;text-underline-offset:2px;}
    .rd-kb-sec a:hover{color:#1e3a8a;}
    .rd-kb-lead{font-size:1.0625rem;font-weight:600;color:#0f172a;}

    .rd-kb-sec ul,.rd-kb-sec ol{margin:0 0 1rem;padding-left:1.35rem;}
    .rd-kb-sec li{margin:.25rem 0;}
    .rd-kb-cols{columns:2;column-gap:2rem;}
    .rd-kb-cols li{break-inside:avoid;}
    .rd-kb-num li{margin:.5rem 0;}

    .rd-kb-dl{margin:0 0 1rem;padding:0;}
    .rd-kb-dl dt{font-weight:700;font-size:.9375rem;color:#0f172a;margin-top:1rem;}
    .rd-kb-dl dt:first-child{margin-top:0;}
    .rd-kb-dl dd{margin:.15rem 0 0;padding:0;color:#334155;}

    .rd-kb-callout{background:#eff6ff;border:1px solid #bfdbfe;
      border-radius:.875rem;padding:1.25rem 1.5rem;margin:1.5rem 0;}
    .rd-kb-callout h3{margin-top:0;color:#1e3a8a;}
    .rd-kb-callout p:last-child{margin-bottom:0;}

    /* The relationship diagram. pre keeps the box-drawing characters aligned;
       overflow-x means a narrow phone scrolls it instead of breaking it. */
    .rd-kb-tree{background:#0f172a;color:#e2e8f0;border-radius:.875rem;
      padding:1.25rem 1.5rem;margin:1.25rem 0;overflow-x:auto;
      font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
      font-size:.8125rem;line-height:1.7;}

    .rd-kb-table{width:100%;border-collapse:collapse;font-size:.9375rem;
      background:#fff;border:1px solid #e2e8f0;border-radius:.875rem;
      overflow:hidden;}
    .rd-kb-table caption{caption-side:bottom;text-align:left;
      font-size:.8125rem;color:#64748b;padding-top:.65rem;}
    .rd-kb-table th,.rd-kb-table td{padding:.65rem .9rem;
      border-bottom:1px solid #eef2f6;vertical-align:top;text-align:left;}
    .rd-kb-table th{font-weight:700;color:#0f172a;width:38%;background:#f8fafc;}
    .rd-kb-table tr:last-child th,.rd-kb-table tr:last-child td{border-bottom:0;}

    .rd-kb-foot{border-top:1px solid #e2e8f0;padding-top:1.5rem;
      font-size:.875rem;color:#64748b;}
    .rd-kb-foot a{color:#1d4ed8;text-decoration:underline;}
    .rd-kb-foot p{margin:0 0 .35rem;}

    @media (max-width:640px){
      .rd-kb-wrap{padding:1.75rem 1rem 3rem;}
      .rd-kb-wrap h1{font-size:1.625rem;}
      .rd-kb-toc ol,.rd-kb-cols{columns:1;}
      .rd-kb-table th{width:45%;}
    }

/* ================= PDACC: the DUET admission guide ================= */
/* ============================================= rd-ad-* : DUET admission page
   PDACC-branded. Same ink and key colours as the PDACC section so the two read
   as one place, but a darker masthead so it is clearly its own page. */
.rd-ad{--ad-ink:#1e1b4b;--ad-key:#4338ca;--ad-key2:#6366f1;--ad-teal:#0f766e;
  --ad-soft:#eef2ff;--ad-line:#e2e8f7;
  font-family:'Noto Sans Bengali','Plus Jakarta Sans',sans-serif;color:var(--ad-ink)}

/* --------------------------------------------------------------- masthead */
.rd-ad-top{position:relative;overflow:hidden;color:#fff;padding:38px 26px 34px;
  border-radius:22px;background:linear-gradient(125deg,#1e1b4b,#312e81 52%,#0f766e)}
.rd-ad-top::after{content:'';position:absolute;inset:-45% -12% auto auto;width:420px;height:420px;
  border-radius:50%;background:radial-gradient(closest-side,rgba(255,255,255,.13),transparent)}
.rd-ad-brand{display:flex;align-items:center;gap:12px;position:relative;z-index:1}
.rd-ad-brand img{width:44px;height:44px;border-radius:12px;background:#fff;padding:4px;object-fit:contain}
.rd-ad-brand b{font-size:.95rem;font-weight:800;letter-spacing:.02em;display:block}
.rd-ad-brand span{font-size:.76rem;color:#c7d2fe;display:block}
.rd-ad-brand i{font-style:normal;display:block;font-size:.68rem;font-weight:700;
  letter-spacing:.06em;color:#a5b4fc;margin-top:.15em}
.rd-ad-top h1{position:relative;z-index:1;margin-top:20px;font-size:clamp(1.5rem,4.4vw,2.3rem);
  font-weight:800;letter-spacing:-.02em;line-height:1.3}
.rd-ad-top p{position:relative;z-index:1;margin-top:.7rem;max-width:62ch;
  font-size:.95rem;line-height:1.9;color:#cbd5f5}
.rd-ad-chips{position:relative;z-index:1;display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}
.rd-ad-chip{font-size:.78rem;font-weight:700;padding:.34em .85em;border-radius:99px;
  background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.22);color:#e8ecff;
  transition:background .35s,transform .35s}
.rd-ad-chip:hover{background:rgba(255,255,255,.2);transform:translateY(-1px)}

/* ------------------------------------------------------------------ cards */
.rd-ad-card{background:#fff;border:1px solid var(--ad-line);border-radius:20px;padding:26px 24px;
  box-shadow:0 1px 2px rgba(30,27,75,.04),0 12px 30px -18px rgba(30,27,75,.18);
  transition:transform .45s cubic-bezier(.22,1,.36,1),box-shadow .45s,border-color .45s}
.rd-ad-card:hover{transform:translateY(-3px);border-color:#c9d3f2;
  box-shadow:0 2px 4px rgba(30,27,75,.05),0 26px 50px -22px rgba(30,27,75,.28)}
.rd-ad-h{font-size:clamp(1.12rem,2.4vw,1.42rem);font-weight:800;letter-spacing:-.01em;
  position:relative;display:inline-block;padding-bottom:.28em}
.rd-ad-h::after{content:'';position:absolute;left:0;right:0;bottom:.06em;height:.34em;
  border-radius:99px;background:linear-gradient(90deg,rgba(99,102,241,.34),rgba(13,148,136,.26));
  transform:scaleX(.16);transform-origin:left center;
  transition:transform .6s cubic-bezier(.22,1,.36,1)}
.rd-ad-card:hover .rd-ad-h::after{transform:scaleX(1)}
.rd-ad-sub{color:#5b6480;font-size:.95rem;line-height:1.85;margin-top:.5rem}
.rd-ad-src{margin-top:14px;font-size:.78rem;color:#8b93ad;line-height:1.7}

/* -------------------------------------------------------- the paper split */
.rd-ad-split{display:grid;gap:14px;margin-top:20px;
  grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}
.rd-ad-pane{border:1px solid var(--ad-line);border-radius:16px;overflow:hidden;background:#fff;
  transition:transform .4s cubic-bezier(.22,1,.36,1),box-shadow .4s,border-color .4s}
.rd-ad-pane:hover{transform:translateY(-3px);border-color:#c3cef0;
  box-shadow:0 18px 34px -20px rgba(30,27,75,.32)}
.rd-ad-pane-h{padding:14px 16px;background:linear-gradient(120deg,var(--ad-soft),#f6f8ff);
  border-bottom:1px solid var(--ad-line);display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.rd-ad-pane-h b{font-size:1rem;font-weight:800}
.rd-ad-pane-h em{font-style:normal;font-size:.8rem;font-weight:700;color:var(--ad-teal)}
.rd-ad-tbl{width:100%;border-collapse:collapse;font-size:.88rem}
/* the caption is for screen readers; the pane heading already says it on screen */
.rd-ad-tbl caption{position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.rd-ad-tbl th small{display:block;font-weight:500;color:#8b93ad;font-size:.74rem;margin-top:.1em}
.rd-ad-tbl th,.rd-ad-tbl td{padding:9px 14px;text-align:left;border-bottom:1px solid #f0f3fa}
.rd-ad-tbl th{font-weight:600;color:#4b5470}
.rd-ad-tbl td{text-align:right;font-family:'Space Grotesk','Noto Sans Bengali',sans-serif;
  font-weight:700;white-space:nowrap}
.rd-ad-tbl tr:hover th,.rd-ad-tbl tr:hover td{background:#f9fbff}
.rd-ad-tbl tfoot th,.rd-ad-tbl tfoot td{background:#f4f6fd;font-weight:800;color:var(--ad-ink);
  border-bottom:none}

/* the grand total strip */
.rd-ad-total{margin-top:16px;display:flex;flex-wrap:wrap;align-items:center;gap:10px 22px;
  padding:16px 20px;border-radius:16px;border:1px solid #dbe3f8;
  background:linear-gradient(135deg,#eef2ff,#f7f9ff 60%,#effcfa)}
.rd-ad-total b{font-family:'Space Grotesk','Noto Sans Bengali',sans-serif;
  font-size:2rem;font-weight:700;color:var(--ad-key);line-height:1}
.rd-ad-total span{font-size:.9rem;line-height:1.8;color:#4b5470}

/* --------------------------------------------------------- the seat map */
.rd-ad-seats{display:grid;gap:12px;margin-top:20px;
  grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}
.rd-ad-seat{position:relative;border:1px solid var(--ad-line);border-radius:14px;padding:16px;
  background:#fff;overflow:hidden;
  transition:transform .4s cubic-bezier(.22,1,.36,1),border-color .4s,box-shadow .4s}
.rd-ad-seat::before{content:'';position:absolute;inset:auto 0 0 0;height:3px;transform:scaleX(var(--s));
  transform-origin:left;background:linear-gradient(90deg,var(--ad-key2),var(--ad-key))}
.rd-ad-seat:hover{transform:translateY(-4px);border-color:#c3cef0;
  box-shadow:0 18px 34px -20px rgba(30,27,75,.35)}
.rd-ad-seat b{display:block;font-size:.92rem;font-weight:800;transition:color .35s}
.rd-ad-seat:hover b{color:var(--ad-key)}
.rd-ad-seat:hover u{color:var(--ad-key2)}
.rd-ad-seat small{display:block;font-size:.74rem;color:#8b93ad;margin-top:.1em}
.rd-ad-seat i{font-style:normal;display:block;margin-top:.55rem;
  font-family:'Space Grotesk','Noto Sans Bengali',sans-serif;font-size:1.7rem;font-weight:700}
.rd-ad-seat u{text-decoration:none;font-size:.78rem;color:#6b7391;font-weight:600;
  transition:color .35s}
.rd-ad-seat-sum{margin-top:16px;padding:16px 20px;border-radius:16px;border:1px solid #dbe3f8;
  background:linear-gradient(135deg,#eef2ff,#effcfa);display:flex;flex-wrap:wrap;
  align-items:center;gap:10px 20px}
.rd-ad-seat-sum b{font-family:'Space Grotesk','Noto Sans Bengali',sans-serif;
  font-size:2rem;font-weight:700;color:var(--ad-key);line-height:1}
.rd-ad-seat-sum span{font-size:.9rem;color:#4b5470;line-height:1.8}

/* ------------------------------------------------- the marks simulation */
.rd-ad-sim{margin-top:20px;border:1px solid var(--ad-line);border-radius:18px;
  background:linear-gradient(180deg,#fbfcff,#fff);padding:18px 20px}
.rd-ad-sim-h b{display:block;font-size:1rem;font-weight:800;color:var(--ad-ink)}
.rd-ad-sim-h span{display:block;margin-top:.3em;font-size:.84rem;line-height:1.85;color:#5b6480}
.rd-ad-sim-rows{margin-top:16px;display:grid;gap:12px}
.rd-ad-sim-row{display:grid;gap:8px 14px;align-items:center;
  grid-template-columns:minmax(0,1fr);border:1px solid #eef1fa;border-radius:14px;
  padding:.75em .9em;background:#fff;transition:border-color .35s,box-shadow .35s}
.rd-ad-sim-row:hover,.rd-ad-sim-row:focus-within{border-color:#c3cef0;
  box-shadow:0 14px 28px -22px rgba(30,27,75,.35)}
.rd-ad-sim-lab b{font-size:.9rem;font-weight:800;color:var(--ad-ink)}
.rd-ad-sim-lab em{font-style:normal;margin-left:.5em;font-size:.72rem;font-weight:600;
  color:#a8afc6;letter-spacing:.03em}
.rd-ad-sim-range{width:100%;accent-color:#4338ca;cursor:pointer}
.rd-ad-sim-range:focus-visible{outline:2px solid var(--ad-key2);outline-offset:3px}
.rd-ad-sim-val{display:flex;flex-wrap:wrap;align-items:center;gap:8px;
  font-size:.76rem;font-weight:600;color:#5b6480}
.rd-ad-sim-val b{font-family:'Space Grotesk','Noto Sans Bengali',sans-serif;font-weight:700;
  color:var(--ad-ink)}
.rd-ad-sim-val>span{background:var(--ad-soft);border:1px solid #e4e9f8;border-radius:99px;
  padding:.24em .8em}
.rd-ad-sim-pc{min-width:3.6em;text-align:center;font-weight:800;color:var(--ad-key)!important;
  background:#eef2ff!important;border-color:#d7ddf8!important}
.rd-ad-sim-out{margin-top:16px;display:flex;flex-wrap:wrap;align-items:center;
  justify-content:space-between;gap:12px;border-radius:16px;padding:14px 18px;
  background:linear-gradient(135deg,#312e81,#1e1b4b);color:#fff}
.rd-ad-sim-big b{font-family:'Space Grotesk','Noto Sans Bengali',sans-serif;
  font-size:2rem;font-weight:700;line-height:1}
.rd-ad-sim-big em{display:block;font-style:normal;font-size:.76rem;font-weight:600;
  color:#c7d2fe;margin-top:.2em}
.rd-ad-sim-side{display:flex;flex-wrap:wrap;gap:8px}
.rd-ad-sim-side span{font-size:.8rem;font-weight:600;color:#e0e7ff;
  background:rgba(255,255,255,.12);border-radius:99px;padding:.35em .9em}
.rd-ad-sim-side b{font-family:'Space Grotesk','Noto Sans Bengali',sans-serif;color:#fff}
.rd-ad-sim-gate{margin-top:12px;font-size:.83rem;line-height:1.85;font-weight:600;
  border-radius:12px;padding:.65em .9em;transition:background .35s,color .35s,border-color .35s}
.rd-ad-sim-gate.ok{color:#0f766e;background:#f0fdfa;border:1px solid #bdece5}
.rd-ad-sim-gate.bad{color:#b91c1c;background:#fef2f2;border:1px solid #f7cccc}
@media (min-width:620px){
  .rd-ad-sim-row{grid-template-columns:11rem minmax(0,1fr) auto}
}

/* --------------------------------------------- the selection funnel steps */
.rd-ad-flow{margin-top:20px;display:grid;gap:0;list-style:none;padding-left:0;
  counter-reset:adstep}
.rd-ad-fstep{counter-increment:adstep;position:relative;padding:0 0 20px 40px;
  border-left:2px dotted #cdd6ee}
.rd-ad-fstep:last-child{border-left-color:transparent;padding-bottom:0}
.rd-ad-fstep::before{content:counter(adstep, bengali);position:absolute;left:-13px;top:0;
  width:26px;height:26px;border-radius:50%;display:grid;place-items:center;
  font-family:'Space Grotesk',sans-serif;font-size:.8rem;font-weight:700;color:#fff;
  background:linear-gradient(140deg,var(--ad-key2),var(--ad-key));
  transition:transform .35s cubic-bezier(.22,1,.36,1)}
.rd-ad-fstep:hover::before{transform:scale(1.12)}
.rd-ad-fstep h5{font-size:.95rem;font-weight:800;transition:color .35s}
.rd-ad-fstep:hover h5{color:var(--ad-key)}
.rd-ad-fstep p{font-size:.88rem;line-height:1.85;color:#5b6480;margin-top:.25rem}

/* -------------------------------------------------------- eligibility rules */
.rd-ad-elig{display:grid;gap:12px;margin-top:20px;
  grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}
.rd-ad-rule{border:1px solid var(--ad-line);border-left:3px solid #dfe5f8;
  border-radius:14px;padding:16px 18px;background:#fff;
  transition:transform .4s cubic-bezier(.22,1,.36,1),box-shadow .4s,border-color .4s,
    background .4s}
.rd-ad-rule:hover,.rd-ad-rule:focus-within{transform:translateY(-3px);
  border-color:#c3cef0;border-left-color:var(--ad-key);background:#fbfcff;
  box-shadow:0 16px 32px -20px rgba(30,27,75,.32)}
.rd-ad-rule:hover b{color:var(--ad-key)}
.rd-ad-rule:hover p{color:#3f4770}
.rd-ad-rule b{display:block;font-size:.92rem;font-weight:800;color:var(--ad-ink);
  transition:color .35s}
.rd-ad-rule p{margin-top:.35rem;font-size:.87rem;line-height:1.85;color:#5b6480;
  transition:color .35s}
.rd-ad-rule .num{font-family:'Space Grotesk','Noto Sans Bengali',sans-serif;
  font-weight:700;color:var(--ad-key)}

/* ------------------------------------- department to diploma technology map */
.rd-ad-map{display:grid;gap:12px;margin-top:20px}
.rd-ad-mrow{display:grid;grid-template-columns:190px 1fr;gap:16px;align-items:start;
  border:1px solid var(--ad-line);border-radius:14px;padding:14px 16px;background:#fff;
  transition:border-color .4s,box-shadow .4s}
.rd-ad-mrow:hover{border-color:#c3cef0;box-shadow:0 14px 28px -20px rgba(30,27,75,.3)}
.rd-ad-mrow>b{font-size:.92rem;font-weight:800;color:var(--ad-ink);line-height:1.6}
.rd-ad-mrow>b small{display:block;font-weight:500;color:#8b93ad;font-size:.72rem;margin-top:.1em}
.rd-ad-techs{display:flex;flex-wrap:wrap;gap:6px}
.rd-ad-tech{font-size:.78rem;font-weight:600;color:#3f4770;background:var(--ad-soft);
  border:1px solid #dfe5f8;border-radius:99px;padding:.3em .75em;line-height:1.5;
  transition:background .3s,color .3s}
.rd-ad-tech:hover{background:#dfe6ff;color:var(--ad-key)}

/* --------------------------------------------------------------- syllabus */
.rd-ad-syl{display:grid;gap:12px;margin-top:20px}
.rd-ad-list{margin-top:.9rem;display:flex;flex-direction:column;gap:10px}
.rd-ad-item{border:1px solid var(--ad-line);border-left:3px solid var(--ad-key2);
  border-radius:12px;padding:.7em .9em;background:#fbfcff;
  transition:background .3s,border-color .3s,transform .3s,box-shadow .3s}
.rd-ad-item b{display:block;font-size:.9rem;font-weight:800;color:var(--ad-ink);
  transition:color .3s}
.rd-ad-item p{margin:.35em 0 0;font-size:.83rem;line-height:1.85;color:#5b6480;
  transition:color .3s}
.rd-ad-item:hover{background:#fff;border-color:#c3cef0;border-left-color:var(--ad-key);
  transform:translateY(-2px);box-shadow:0 10px 24px -18px rgba(30,27,75,.5)}
.rd-ad-item:hover b{color:var(--ad-key)}
.rd-ad-item:hover p{color:#3f4770}
.rd-ad-isub{margin:1.1rem 0 .2rem;font-size:.78rem;font-weight:800;letter-spacing:.04em;
  text-transform:uppercase;color:var(--ad-key)}
.rd-ad-inote{margin:.2rem 0 0;font-size:.82rem;line-height:1.85;color:#5b6480}
.rd-ad-hint{margin:14px 0 0;font-size:.85rem;line-height:1.9;color:#5b6480;
  background:var(--ad-soft);border:1px dashed #c8d0ea;border-radius:12px;padding:.8em 1em}
/* the topics arrive one after another when a pane opens */
.rd-js .rd-ad-pane2.on .rd-ad-item,
.rd-js .rd-ad-pane2.on .rd-ad-isub,
.rd-js .rd-ad-pane2.on .rd-ad-inote{animation:rd-ad-item-in .5s cubic-bezier(.22,1,.36,1) both;
  animation-delay:var(--d,0s)}
@keyframes rd-ad-item-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

@media (max-width:640px){ .rd-ad-mrow{grid-template-columns:1fr;gap:8px} }

@media (prefers-reduced-motion:reduce){
  .rd-ad-card,.rd-ad-pane,.rd-ad-seat,.rd-ad-chip,.rd-ad-rule{transition:none}
  .rd-ad-card:hover,.rd-ad-pane:hover,.rd-ad-seat:hover,.rd-ad-chip:hover,
  .rd-ad-rule:hover{transform:none}
}

/* ------------------------------------------------ technology finder */
.rd-ad-lead{margin-top:.55rem;font-size:.92rem;line-height:1.95;color:#5b6480}
.rd-ad-hint{margin-top:.9rem;font-size:.78rem;font-weight:600;color:#8b93ad}
.rd-ad-search{position:relative;margin-top:16px}
.rd-ad-search svg{position:absolute;left:16px;top:50%;transform:translateY(-50%);
  width:19px;height:19px;fill:none;stroke:#8b93ad;stroke-width:2;stroke-linecap:round;
  transition:stroke .35s;pointer-events:none}
.rd-ad-search input{width:100%;font:inherit;font-size:1rem;font-weight:600;
  color:var(--ad-ink);background:#fff;border:1.5px solid #dfe5f8;border-radius:16px;
  padding:.95em 5.6em .95em 3em;
  box-shadow:0 1px 2px rgba(30,27,75,.04);
  transition:border-color .35s,box-shadow .35s,background .35s}
.rd-ad-search input::placeholder{color:#a8afc6;font-weight:500}
.rd-ad-search input:focus{outline:none;border-color:#8b9bf0;background:#fdfdff;
  box-shadow:0 0 0 4px rgba(99,102,241,.14),0 18px 34px -26px rgba(30,27,75,.5)}
.rd-ad-search:focus-within svg{stroke:var(--ad-key)}
.rd-ad-clear{position:absolute;right:10px;top:50%;transform:translateY(-50%);
  font:inherit;font-size:.78rem;font-weight:700;color:#5b6480;cursor:pointer;
  background:var(--ad-soft);border:1px solid #e4e9f8;border-radius:99px;padding:.45em 1em;
  transition:background .3s,color .3s}
.rd-ad-clear:hover{background:#e9eeff;color:var(--ad-key);border-color:#c9d3f2}
.rd-ad-clear:focus-visible{outline:2px solid var(--ad-key2);outline-offset:2px}

/* the technology list is a native dropdown, filtered by the search box */
.rd-ad-selwrap{position:relative;margin-top:14px}
.rd-ad-selwrap::after{content:'';position:absolute;right:20px;top:50%;width:9px;height:9px;
  border-right:2px solid #5b6480;border-bottom:2px solid #5b6480;pointer-events:none;
  transform:translateY(-70%) rotate(45deg)}
.rd-ad-sel{font:inherit;width:100%;cursor:pointer;color:var(--ad-ink);background:#fff;
  border:1px solid #e4e9f8;border-radius:14px;padding:.95em 3em .95em 1.1em;
  font-size:.92rem;font-weight:700;-webkit-appearance:none;appearance:none;
  box-shadow:0 12px 26px -22px rgba(30,27,75,.4);
  transition:border-color .35s,box-shadow .35s,background .35s}
.rd-ad-sel{transition:border-color .35s,background .35s,color .35s}
.rd-ad-sel:hover{border-color:var(--ad-key2);background:#fbfcff;color:var(--ad-key)}
.rd-ad-sel:focus-visible{outline:none;border-color:var(--ad-key);
  box-shadow:0 0 0 4px rgba(79,70,229,.14)}
.rd-ad-sel:disabled{cursor:not-allowed;color:#a8afc6;background:var(--ad-soft)}
.rd-ad-sel option{font-weight:600}
.rd-ad-sellab{display:block;font-size:.72rem;font-weight:700;color:#5b6480;
  letter-spacing:.04em;text-transform:uppercase;margin-bottom:.5em}
.rd-ad-empty{font-size:.87rem;line-height:1.9;color:#5b6480}
@keyframes rd-ad-in{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

.rd-ad-res:not(:empty){margin-top:20px;padding-top:18px;border-top:1px dashed #e4e9f8}
.rd-ad-resh{display:flex;flex-wrap:wrap;align-items:baseline;gap:10px}
.rd-ad-resh b{font-size:1.08rem;font-weight:800;color:var(--ad-ink)}
.rd-ad-resh span{font-size:.8rem;font-weight:700;color:#0f766e;background:#e6fbf7;
  border:1px solid #bdece5;border-radius:99px;padding:.28em .85em}
.rd-ad-cards{display:grid;gap:12px;margin-top:14px;
  grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}
.rd-ad-dcard{position:relative;overflow:hidden;background:#fff;border:1px solid var(--ad-line);
  border-radius:16px;padding:16px 18px 15px;
  animation:rd-ad-in .55s cubic-bezier(.22,1,.36,1) both;animation-delay:var(--d,0s);
  transition:transform .4s cubic-bezier(.22,1,.36,1),box-shadow .4s,border-color .4s}
.rd-ad-dcard::before{content:"";position:absolute;inset:0 auto 0 0;width:3px;
  background:linear-gradient(180deg,#818cf8,#0f766e);opacity:.85}
.rd-ad-dcard:hover{transform:translateY(-3px);border-color:#c3cef0;
  box-shadow:0 22px 40px -26px rgba(30,27,75,.45)}
.rd-ad-dcard b{display:block;font-size:.95rem;font-weight:800;color:var(--ad-ink);
  line-height:1.6;transition:color .35s}
.rd-ad-dcard:hover b{color:var(--ad-key)}
.rd-ad-dcard em{display:block;font-style:normal;font-size:.72rem;font-weight:600;color:#8b93ad;
  margin-top:.15em;letter-spacing:.02em}
.rd-ad-dnote{display:block;margin-top:.6rem;font-size:.76rem;line-height:1.7;
  color:#0f766e;background:#f0fdfa;border:1px solid #bdece5;border-radius:10px;
  padding:.5em .75em}
.rd-ad-dseat{display:inline-block;margin-top:.7rem;font-size:.76rem;font-weight:700;
  color:#3f4770;background:var(--ad-soft);border:1px solid #dfe5f8;border-radius:99px;
  padding:.24em .8em}
.rd-ad-dgo{display:block;margin-top:.85rem;font:inherit;font-size:.78rem;font-weight:700;
  color:var(--ad-key);cursor:pointer;background:none;border:none;padding:0;
  transition:color .3s,transform .3s}
.rd-ad-dgo:hover{color:#0f766e;transform:translateX(2px)}
.rd-ad-dgo:focus-visible{outline:2px solid var(--ad-key2);outline-offset:3px;border-radius:6px}
.rd-ad-rnote{margin-top:.85rem;font-size:.82rem;line-height:1.9;color:#5b6480}

/* ------------------------------------------------------ syllabus tabs */
.rd-ad-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}
.rd-ad-tab{position:relative;overflow:hidden;font:inherit;text-align:left;cursor:pointer;
  background:#fff;border:1.5px solid #e4e9f8;border-radius:14px;padding:.6em 1em;
  transition:transform .4s cubic-bezier(.22,1,.36,1),border-color .4s,box-shadow .4s}
/* the dark fill is an overlay, so the colour change can actually animate */
.rd-ad-tab::after{content:"";position:absolute;inset:0;z-index:0;opacity:0;
  background:linear-gradient(135deg,#312e81,#1e1b4b);transition:opacity .4s}
.rd-ad-tab.on::after{opacity:1}
.rd-ad-tab b,.rd-ad-tab span{position:relative;z-index:1}
.rd-ad-tab b{display:block;font-size:.88rem;font-weight:800;color:var(--ad-ink);transition:color .3s}
.rd-ad-tab span{display:block;font-size:.66rem;font-weight:700;color:#a8afc6;margin-top:.15em;
  letter-spacing:.04em;text-transform:uppercase;transition:color .3s}
.rd-ad-tab:hover{transform:translateY(-2px);border-color:var(--ad-key2);
  box-shadow:0 14px 26px -20px rgba(30,27,75,.4)}
.rd-ad-tab:hover b{color:var(--ad-key)}
.rd-ad-tab:hover span{color:var(--ad-key2)}
.rd-ad-tab.on:hover b,.rd-ad-tab.on:hover span{color:#fff}
.rd-ad-tab:focus-visible{outline:2px solid var(--ad-key2);outline-offset:2px}
.rd-ad-tab.on{border-color:#1e1b4b;box-shadow:0 20px 34px -22px rgba(30,27,75,.7)}
.rd-ad-tab.on b{color:#fff}
.rd-ad-tab.on span{color:#a5b4fc}

.rd-ad-panes{margin-top:16px}
.rd-js .rd-ad-pane2{display:none}
.rd-js .rd-ad-pane2.on{display:block;animation:rd-ad-in .45s cubic-bezier(.22,1,.36,1) both}
.rd-ad-pane2{border:1px solid var(--ad-line);border-radius:16px;padding:18px 20px;
  background:linear-gradient(180deg,#fdfdff,#fff)}
.rd-ad-pane2+.rd-ad-pane2{margin-top:12px}
.rd-ad-pane-top{display:flex;flex-wrap:wrap;align-items:baseline;gap:10px;
  padding-bottom:.7rem;border-bottom:1px solid #eef1f9}
.rd-ad-pane-top b{font-size:1.05rem;font-weight:800;color:var(--ad-ink)}
.rd-ad-pane-top em{font-style:normal;font-size:.74rem;font-weight:600;color:#8b93ad;
  letter-spacing:.02em}
.rd-ad-pane-top span{font-size:.75rem;font-weight:700;color:#3f4770;background:var(--ad-soft);
  border:1px solid #dfe5f8;border-radius:99px;padding:.24em .78em}
.rd-ad-pane-top i{font-style:normal;font-size:.75rem;font-weight:700;color:#0f766e;
  background:#e6fbf7;border:1px solid #bdece5;border-radius:99px;padding:.24em .78em}
.rd-ad-pane-note{margin-top:.75rem;font-size:.84rem;line-height:1.9;color:#5b6480;
  border-left:2px solid #c7d2fe;padding-left:.8em}

@media (max-width:640px){
  .rd-ad-tab{flex:1 1 calc(50% - 8px)}
  .rd-ad-search input{padding-right:1em;padding-bottom:2.6em}
  .rd-ad-clear{top:auto;bottom:8px;right:12px;transform:none}
}
@media (prefers-reduced-motion:reduce){
  .rd-ad-dcard,.rd-ad-tab,.rd-js .rd-ad-pane2.on{animation:none;transition:none}
  .rd-ad-tab::after{transition:none}
  .rd-js .rd-ad-pane2.on .rd-ad-item,.rd-js .rd-ad-pane2.on .rd-ad-isub,
  .rd-js .rd-ad-pane2.on .rd-ad-inote{animation:none}
  .rd-ad-item,.rd-ad-rule,.rd-ad-seat,.rd-ad-sel{transition:none}
  .rd-ad-item:hover,.rd-ad-rule:hover{transform:none}
  .rd-ad-dcard:hover,.rd-ad-tab:hover{transform:none}
}

/* ---------------------------------------------------- premium layer */
.rd-ad{counter-reset:adsec;scroll-padding-top:96px}

/* the page sits on a soft field of light, not flat white */
.rd-ad::before{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;
  background:
    radial-gradient(52rem 30rem at 12% -6%, rgba(99,102,241,.12), transparent 65%),
    radial-gradient(44rem 26rem at 96% 8%, rgba(13,148,136,.10), transparent 62%),
    linear-gradient(180deg,#fbfcff,#f7f9ff)}

/* sticky section nav, glass */
.rd-ad-nav{position:sticky;top:80px;z-index:25;display:flex;gap:6px;overflow-x:auto;
  padding:8px;border-radius:16px;
  background:rgba(255,255,255,.78);border:1px solid rgba(226,232,247,.9);
  box-shadow:0 12px 30px -22px rgba(30,27,75,.45);
  -webkit-backdrop-filter:saturate(1.4) blur(10px);backdrop-filter:saturate(1.4) blur(10px);
  scrollbar-width:none}
.rd-ad-nav::-webkit-scrollbar{display:none}
.rd-ad-nav a{flex:0 0 auto;font-size:.8rem;font-weight:700;color:#4b5470;text-decoration:none;
  padding:.5em .95em;border-radius:11px;white-space:nowrap;
  transition:background .3s,color .3s,transform .3s}
.rd-ad-nav a:hover{background:var(--ad-soft);color:var(--ad-key);transform:translateY(-1px)}
.rd-ad-nav a:focus-visible{outline:2px solid var(--ad-key2);outline-offset:2px}

/* every section carries a quiet number, so the page reads as a sequence */
.rd-ad-card{position:relative}
.rd-ad-card::before{counter-increment:adsec;content:counter(adsec, bengali);
  position:absolute;top:18px;right:20px;
  font-family:'Space Grotesk','Noto Sans Bengali',sans-serif;font-size:.86rem;font-weight:700;
  color:#c3cbe4;letter-spacing:.06em;transition:color .45s}
.rd-ad-card:hover::before{color:var(--ad-key2)}
.rd-ad-card>.rd-ad-h{padding-right:2.4em}

/* the masthead gets depth: a fine grid, a warmer glow, and a hairline edge */
.rd-ad-top{box-shadow:0 30px 60px -34px rgba(30,27,75,.75),
  inset 0 1px 0 rgba(255,255,255,.14)}
.rd-ad-top::before{content:"";position:absolute;inset:0;opacity:.5;
  background-image:linear-gradient(rgba(255,255,255,.055) 1px,transparent 1px),
    linear-gradient(90deg,rgba(255,255,255,.055) 1px,transparent 1px);
  background-size:34px 34px;
  mask-image:radial-gradient(70% 60% at 30% 0%,#000,transparent 78%);
  -webkit-mask-image:radial-gradient(70% 60% at 30% 0%,#000,transparent 78%)}
.rd-ad-top h1{background:linear-gradient(100deg,#fff 30%,#c7d2fe);
  -webkit-background-clip:text;background-clip:text;color:transparent}

/* section headings sit on a hairline rule that draws itself in */
.rd-ad-h{font-family:'Plus Jakarta Sans','Noto Sans Bengali',sans-serif}

@media (max-width:640px){
  /* The header is 81px on a phone as well, so the offset does not change here.
     It used to say 66px, which parked this strip 15px behind the header. */
  .rd-ad-nav{border-radius:14px}
  .rd-ad-card::before{top:14px;right:14px;font-size:.76rem}
}
/* From xl up the site header grows a second row -- the `.nav-strip` menu -- so
   it is 130px tall there, not 81px. Every sticky bar under it needs the taller
   offset or it hides behind the header. */
@media (min-width:1280px){
  .rd-ad-nav{top:129px}
}
@media (prefers-reduced-motion:reduce){
  .rd-ad-nav a,.rd-ad-card::before{transition:none}
  .rd-ad-nav a:hover{transform:none}
}

/* the floating Seat Booking pill, PDACC page only */
.rd-pd-seat{position:fixed;right:18px;bottom:18px;z-index:45;display:none;
  align-items:center;gap:.7rem;padding:.8em 1.15em;border-radius:99px;
  color:#fff;text-decoration:none;font-weight:800;font-size:.9rem;
  background:linear-gradient(135deg,#dc2626,#b91c1c);
  box-shadow:0 22px 38px -18px rgba(185,28,28,.75);
  transition:transform .35s cubic-bezier(.22,1,.36,1),box-shadow .35s,background .35s}
#page-prokoushali.active~.rd-pd-seat.is-on,
#page-pdacc-admission.active~.rd-pd-seat.is-on{display:inline-flex}
.rd-pd-seat:hover{transform:translateY(-3px);background:linear-gradient(135deg,#b91c1c,#991b1b);
  box-shadow:0 26px 44px -18px rgba(185,28,28,.85)}
.rd-pd-seat:focus-visible{outline:3px solid #fca5a5;outline-offset:3px}
.rd-pd-seat i{font-style:normal;display:block;font-size:.66rem;font-weight:700;
  letter-spacing:.08em;text-transform:uppercase;color:#fecaca}
.rd-pd-seat b{display:block;line-height:1.35}
.rd-pd-seat .rd-pd-ring{position:absolute;inset:-6px;border-radius:99px;
  border:2px solid rgba(220,38,38,.55);animation:rd-pd-ring 2.4s ease-out infinite}
@keyframes rd-pd-ring{0%{transform:scale(.92);opacity:.85}100%{transform:scale(1.18);opacity:0}}
@media (max-width:640px){
  .rd-pd-seat{right:12px;left:12px;bottom:12px;justify-content:center}
}
@media (prefers-reduced-motion:reduce){
  .rd-pd-seat{transition:none}
  .rd-pd-seat:hover{transform:none}
  .rd-pd-seat .rd-pd-ring{animation:none;opacity:0}
}

/* ============ PDACC: the record, the batches and the season ============ */
.rd-pd{--pd-ink:#1e1b4b;--pd-key:#4338ca;--pd-key2:#6366f1;--pd-soft:#eef2ff;
  --pd-line:#e2e8f7;font-family:'Noto Sans Bengali','Plus Jakarta Sans',sans-serif}

/* Soft wash behind the section. Indigo and teal on purpose: RANGDHANU is the
   association's name, not a palette. */
.rd-pd-wash{position:relative;isolation:isolate}
.rd-pd-wash::before{content:'';position:absolute;inset:0;z-index:-1;
  background:
    radial-gradient(60% 50% at 12% 0%,rgba(99,102,241,.13),transparent 70%),
    radial-gradient(55% 45% at 92% 8%,rgba(13,148,136,.10),transparent 72%),
    linear-gradient(180deg,#fbfcff 0%,#f6f8ff 55%,#ffffff 100%)}

.rd-pd-card{background:#fff;border:1px solid var(--pd-line);border-radius:20px;
  padding:26px 24px;box-shadow:0 1px 2px rgba(30,27,75,.04),0 12px 30px -18px rgba(30,27,75,.18);
  transition:transform .45s cubic-bezier(.22,1,.36,1),box-shadow .45s,border-color .45s}
.rd-pd-card:hover{transform:translateY(-3px);border-color:#c9d3f2;
  box-shadow:0 2px 4px rgba(30,27,75,.05),0 26px 50px -22px rgba(30,27,75,.28)}

/* Typography: a brush stroke that draws itself under the heading on hover. Used
   only on card headings, so it stays a highlight rather than a habit. */
.rd-pd-h{font-size:clamp(1.15rem,2.4vw,1.45rem);font-weight:800;color:var(--pd-ink);
  letter-spacing:-.01em;position:relative;display:inline-block;padding-bottom:.28em}
.rd-pd-h::after{content:'';position:absolute;left:0;right:0;bottom:.06em;height:.34em;
  border-radius:99px;background:linear-gradient(90deg,rgba(99,102,241,.34),rgba(13,148,136,.26));
  transform:scaleX(.16);transform-origin:left center;
  transition:transform .6s cubic-bezier(.22,1,.36,1)}
.rd-pd-card:hover .rd-pd-h::after{transform:scaleX(1)}
.rd-pd-sub{color:#5b6480;font-size:.95rem;line-height:1.8;margin-top:.5rem}

/* ------------------------------------------------------- the column chart */
.rd-pd-chart{margin-top:24px;display:grid;gap:8px;align-items:end;
  grid-template-columns:repeat(7,minmax(0,1fr));min-height:270px;
  padding:8px 4px 0;position:relative;border-bottom:1px solid var(--pd-line)}
.rd-pd-col{position:relative;height:100%}
.rd-pd-val{position:absolute;left:0;right:0;bottom:var(--h);margin-bottom:7px;text-align:center;
  font-family:'Space Grotesk','Noto Sans Bengali',sans-serif;font-weight:700;
  font-size:clamp(1rem,2.4vw,1.35rem);color:var(--pd-ink);line-height:1;
  transition:color .35s,transform .35s cubic-bezier(.22,1,.36,1)}
.rd-pd-bar{position:absolute;bottom:0;left:0;right:0;margin:0 auto;
  width:100%;max-width:64px;height:var(--h);
  border-radius:12px 12px 4px 4px;
  background:linear-gradient(180deg,#818cf8,#4338ca);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.35);
  transform-origin:bottom center;
  animation:rd-pd-rise .95s cubic-bezier(.22,1,.36,1) both;animation-delay:var(--d,0s);
  transition:filter .35s,box-shadow .35s}
.rd-pd-col.lead .rd-pd-bar{background:linear-gradient(180deg,#34d399,#0f766e)}
.rd-pd-col.lead .rd-pd-val{color:#0f766e}
.rd-pd-col:hover .rd-pd-bar{filter:saturate(1.15) brightness(1.06);
  box-shadow:0 18px 30px -18px rgba(30,27,75,.55),inset 0 1px 0 rgba(255,255,255,.4)}
.rd-pd-col:hover .rd-pd-val{transform:translateY(-3px)}
@keyframes rd-pd-rise{from{transform:scaleY(0)}to{transform:scaleY(1)}}
.rd-pd-axis{display:grid;gap:8px;grid-template-columns:repeat(7,minmax(0,1fr));
  padding:10px 4px 0;text-align:center}
.rd-pd-axis b{display:block;font-size:.86rem;font-weight:700;color:var(--pd-ink)}
.rd-pd-axis span{display:block;font-size:.7rem;font-weight:600;color:#98a0bb;margin-top:.15em}

/* -------------------------------------------------- department distribution */
.rd-pd-rows{display:grid;gap:10px;margin-top:18px}
.rd-pd-row{display:grid;grid-template-columns:132px 1fr 46px;align-items:center;gap:12px}
.rd-pd-row-n{font-size:.9rem;font-weight:700;color:var(--pd-ink)}
.rd-pd-row-n small{display:block;font-weight:500;color:#8b93ad;font-size:.74rem}
.rd-pd-track{height:10px;border-radius:99px;background:#eef1f9;overflow:hidden}
.rd-pd-fill{height:100%;border-radius:99px;width:var(--w);
  background:linear-gradient(90deg,var(--pd-key2),var(--pd-key));
  animation:rd-pd-grow 1s cubic-bezier(.22,1,.36,1) both;animation-delay:var(--d,0s)}
@keyframes rd-pd-grow{from{width:0}to{width:var(--w)}}
.rd-pd-row-v{text-align:right;font-family:'Space Grotesk','Noto Sans Bengali',sans-serif;
  font-weight:700;color:var(--pd-ink)}
/* ----------------------------------------------------------------- batches */
.rd-pd-grid3{display:grid;gap:14px;margin-top:18px;
  grid-template-columns:repeat(auto-fit,minmax(230px,1fr))}
.rd-pd-batch{border:1px solid var(--pd-line);border-radius:14px;padding:18px;background:#fff;
  transition:transform .4s cubic-bezier(.22,1,.36,1),box-shadow .4s,border-color .4s}
.rd-pd-batch:hover{transform:translateY(-3px);border-color:#c3cef0;
  box-shadow:0 16px 32px -20px rgba(30,27,75,.32)}
.rd-pd-batch h4{font-size:1.02rem;font-weight:800;color:var(--pd-ink);
  position:relative;display:inline-block;padding-bottom:.2em}
.rd-pd-batch h4::after{content:'';position:absolute;left:0;bottom:0;height:.3em;width:100%;
  border-radius:99px;background:rgba(99,102,241,.28);
  transform:scaleX(.18);transform-origin:left;
  transition:transform .55s cubic-bezier(.22,1,.36,1)}
.rd-pd-batch:hover h4::after{transform:scaleX(1)}
.rd-pd-batch p{margin-top:.5rem;font-size:.9rem;line-height:1.85;color:#5b6480}

/* ------------------------------------------------------------------ season */
.rd-pd-season{margin-top:20px;display:grid;gap:0;counter-reset:pdstep}
.rd-pd-step{position:relative;padding:0 0 22px 30px;border-left:2px dotted #cdd6ee}
.rd-pd-step:last-child{border-left-color:transparent;padding-bottom:0}
.rd-pd-step::before{counter-increment:pdstep;content:counter(pdstep, bengali);
  position:absolute;left:-14px;top:-2px;width:26px;height:26px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;background:#fff;
  border:2px solid var(--pd-key2);color:var(--pd-key);font-size:.76rem;
  font-weight:800;line-height:1;
  transition:transform .35s,background .35s,color .35s}
.rd-pd-step:hover::before{transform:scale(1.12);background:var(--pd-key2);color:#fff}
.rd-pd-step h5{font-size:.95rem;font-weight:800;color:var(--pd-ink)}
.rd-pd-step p{font-size:.88rem;line-height:1.85;color:#5b6480;margin-top:.25rem}
.rd-pd-step em{font-style:normal;font-weight:700;color:#0f766e}

/* ------------------------------------------------------------------- facts */
.rd-pd-facts{display:grid;gap:12px;margin-top:18px;
  grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}
.rd-pd-fact{display:flex;gap:12px;padding:14px;border-radius:12px;background:var(--pd-soft);
  border:1px solid #dfe5f8;transition:background .35s,transform .35s}
.rd-pd-fact:hover{background:#e7ecfe;transform:translateY(-2px)}
.rd-pd-fact svg{flex:0 0 20px;width:20px;height:20px;color:var(--pd-key);margin-top:2px}
.rd-pd-fact p{font-size:.88rem;line-height:1.8;color:#454e6b}

@media (max-width:640px){
  .rd-pd-chart,.rd-pd-axis{grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}
  .rd-pd-chart{min-height:210px}
  .rd-pd-axis b{font-size:.74rem}
  .rd-pd-axis span{font-size:.6rem}
  .rd-pd-row{grid-template-columns:104px 1fr 40px}
}

/* The chart columns are laid out from the number of series the admin has
   saved, so the count is a custom property rather than a fixed seven. */
.rd-pd-chart,.rd-pd-axis{grid-template-columns:repeat(var(--pd-n,7),minmax(0,1fr))}
@media (max-width:640px){
  .rd-pd-chart,.rd-pd-axis{grid-template-columns:repeat(var(--pd-n,7),minmax(0,1fr))}
}
@media (prefers-reduced-motion:reduce){
  .rd-pd-fill{animation:none;width:var(--w)}
  .rd-pd-bar{animation:none}
  .rd-pd-card,.rd-pd-batch,.rd-pd-fact,.rd-pd-val{transition:none}
  .rd-pd-card:hover,.rd-pd-batch:hover,.rd-pd-fact:hover{transform:none}
  .rd-pd-col:hover .rd-pd-val{transform:none}
  .rd-pd-step::before,.rd-pd-step:hover::before{transition:none;transform:none}
}

/* ============ PDACC: the 27th year ribbon ============ */
/* The page opens on the one figure PDACC states about itself: it has entered
   its 27th year. It sits above the nav strip, so it has to stay a thin line,
   not a card. The numeral is carried in a gradient and a slow shine crosses
   the strip once every few seconds. */
.rd-pd27{position:relative;overflow:hidden;display:inline-flex;align-items:center;
  gap:9px;margin:0 0 10px;padding:6px 15px 6px 9px;border-radius:9999px;
  background:linear-gradient(120deg,#0b1220,#131f3a 55%,#0b1220);
  border:1px solid rgba(129,140,248,.3);
  box-shadow:0 8px 22px -14px rgba(15,23,42,.7);
  transition:transform .35s cubic-bezier(.22,1,.36,1),box-shadow .35s}
.rd-pd27:hover{transform:translateY(-1px);
  box-shadow:0 14px 30px -14px rgba(49,46,129,.75)}
.rd-pd27-glow{position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(100deg,transparent 36%,rgba(165,180,252,.26) 50%,transparent 64%);
  transform:translateX(-120%);animation:rd-pd27-sweep 6.5s ease-in-out 1.2s infinite}
@keyframes rd-pd27-sweep{0%{transform:translateX(-120%)}
  55%,100%{transform:translateX(120%)}}
.rd-pd27-n{position:relative;flex:0 0 auto;display:flex;align-items:center;
  justify-content:center;width:26px;height:26px;border-radius:9999px;
  background:rgba(99,102,241,.18);border:1px solid rgba(165,180,252,.4);
  font-size:.78rem;font-weight:800;line-height:1;
  background-clip:padding-box;color:#c7d2fe}
.rd-pd27-t{position:relative;font-size:.76rem;font-weight:800;letter-spacing:.01em;
  background:linear-gradient(100deg,#e0e7ff,#a5b4fc 55%,#67e8f9);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  white-space:nowrap}
@media (max-width:420px){
  .rd-pd27-t{white-space:normal;line-height:1.45}
}
@media (prefers-reduced-motion:reduce){
  .rd-pd27-glow{animation:none;opacity:0}
  .rd-pd27,.rd-pd27:hover{transition:none;transform:none}
}

/* The strip is on the Admission guide too. There, the guide's own button is
   the page you are standing on, so it is a label rather than a control: same
   look, no pointer, no hover. */
.rd-pd-navbtn.is-here{cursor:default;opacity:.95}
.rd-pd-navbtn.is-here:hover{color:#fff;border-color:transparent}


/* =====================================================================
   MEMBER PROFILE, MEMBER DIRECTORY AND MEMBERSHIP APPLICATION
   Moved here from work/profile-preview4.* once the design was approved.
   Hand written, so style.css never has to be rebuilt for it: a Tailwind
   class the CLI never scanned produces no rule at all, and a profile is
   not the place to find that out.
   ===================================================================== */
/* ---- the shell ------------------------------------------------------- */
/* The credential spans the full width, because the cover is the hero and a
   cover squeezed into a 23rem column would undo the whole point of matching
   the Facebook ratio. Below it the page splits: the record on the left, the
   reference facts parked in a sticky rail on the right. One long stack of
   equal cards was what made a full profile tiring to read. */
.rd-mp-grid{display:grid;gap:1rem}
.rd-mp-grid>.rd-mp,.rd-mp-grid>.rd-mp-todo{grid-column:1/-1}
/* A grid item will not shrink below its own min-content unless it is told it
   may. Without this, one long unbreakable string anywhere on the page -- a
   paper URL, an institute name with no spaces -- sets the width of the whole
   column and the card runs off the side of a phone. */
.rd-mp-grid>*{min-width:0}
@media (min-width:900px){
  .rd-mp-grid{grid-template-columns:minmax(0,1fr) 20.5rem;align-items:start}
  .rd-mp-side{position:sticky;top:1rem}
}
/* My Profile paints the page in one call and can wrap each column in a div. The
   public profile is assembled from five separate strings, so there is nothing
   to wrap them in: its sections sit directly in the grid instead, and is-side
   is what picks the narrow column. Dense placement is what lets the first side
   section share a row with the top of the wide column rather than queueing up
   after the last section in it. */
.rd-mp-grid{grid-auto-flow:row dense}
@media (min-width:900px){
  .rd-mp-grid>.rd-mp-sec{grid-column:1}
  .rd-mp-grid>.rd-mp-sec.is-side{grid-column:2}
}
.rd-mp{position:relative;background:var(--mp-paper);border:1px solid var(--mp-line);
  border-radius:1.25rem;overflow:hidden;box-shadow:var(--mp-e3);color:var(--mp-ink)}
/* Edge to edge on a phone. A 16px gutter each side costs 32px of cover
   width, and the cover is the one thing here that wants every pixel. */
@media (max-width:639px){
  .rd-mp{margin-left:-1rem;margin-right:-1rem;border-radius:0;border-left:0;border-right:0}
}

/* ---- the cover ------------------------------------------------------ */
/* 851/315 is the Facebook profile cover ratio and the default artwork is
   drawn to it (2659x984 = 2.7027). Because the box ratio and the picture
   ratio agree, object-fit never has anything to crop: the wordmark is whole
   at 320px and at 1280px alike, which a fixed h-32/h-44 pair could not do. */
.rd-mp-cover{position:relative;aspect-ratio:851/315;background:#1e1b4b;overflow:hidden}
.rd-mp-cover>img{width:100%;height:100%;object-fit:cover;display:block;
  object-position:var(--rd-cover-pos,50% 50%)}
/* A thin wash along the bottom, but only under an uploaded photo. The default
   artwork is light and finished, and dimming its lower third made it look
   dirty. A member's own photo can be any brightness, so that one keeps it. */
.rd-mp-cover-photo::after{content:'';position:absolute;inset:auto 0 0 0;height:34%;
  background:linear-gradient(to top,rgba(30,27,75,.3),rgba(30,27,75,0));pointer-events:none}

.rd-mp-cbtns{position:absolute;right:.6rem;bottom:.6rem;z-index:2;
  display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.4rem}
.rd-mp-cbtn{display:inline-flex;align-items:center;gap:.35rem;cursor:pointer;
  font-size:.72rem;font-weight:800;line-height:1;padding:.5rem .7rem;border-radius:9999px;
  background:rgba(255,255,255,.94);color:var(--mp-ink);border:1px solid rgba(30,27,75,.08);
  box-shadow:0 2px 8px rgba(30,27,75,.22);transition:background .15s ease}
.rd-mp-cbtn:hover{background:#fff}
/* "Use default" is in the Edit tab's markup with the hidden attribute on it and
   rdMypCover takes it off when there is a cover to undo. That attribute needs
   spelling out here: Tailwind's [hidden]{display:none} and .rd-mp-cbtn's
   display:inline-flex have the same specificity, and custom.css is the later
   sheet, so the class would win and the button would sit there with nothing to
   undo. */
.rd-mp-cbtn[hidden]{display:none}
.rd-mp-cbtn i{width:.95rem;height:.95rem}
.rd-mp-cbtn-lbl{display:none}
@media (min-width:420px){.rd-mp-cbtn-lbl{display:inline}}
/* ---- reposition ----------------------------------------------------- */
/* A strip inside the card, under the cover, in the page flow, not a layer
   over the page. The site has no modals and this must not become the first
   one. Drag the picture itself; the strip only saves or cancels. */
.rd-mp-cover.is-pos{cursor:grab;touch-action:none}
.rd-mp-cover.is-pos:active{cursor:grabbing}
.rd-mp-cover.is-pos::after{display:none}
.rd-mp-posbar{display:none;align-items:center;gap:.5rem;flex-wrap:wrap;padding:.7rem .9rem;
  background:linear-gradient(125deg,#1e1b4b,#312e81 60%,#0f766e);color:#fff;
  font-size:.75rem;font-weight:700}
.rd-mp.is-pos .rd-mp-posbar{display:flex}
/* The avatar normally rides up over the cover. While the cover is being
   repositioned it would ride up over this bar instead and cover Save, so the
   overlap is dropped for as long as the bar is on screen. */
.rd-mp.is-pos .rd-mp-face{margin-top:.9rem}
.rd-mp-posbar>span{flex:1 1 100%;opacity:.85}
.rd-mp-posacts{display:flex;gap:.5rem;margin-left:auto}
@media (min-width:480px){.rd-mp-posbar>span{flex:1 1 10rem}}
.rd-mp-posbtn{border:0;border-radius:9999px;padding:.45rem .9rem;font:inherit;cursor:pointer}
.rd-mp-posbtn-ok{background:#fff;color:var(--mp-ink)}
.rd-mp-posbtn-no{background:rgba(255,255,255,.16);color:#fff}

/* ---- the credential -------------------------------------------------- */
/* The signature of the page. The old head was a social card: picture, name,
   grey boxes. This one is an issued credential -- the body's name in spaced
   capitals above, the seal watermarked behind, the member number set in the
   site's numeral face on a hairline rule. Nothing here repeats a fact that
   is already stated somewhere else on the page. */
.rd-mp-id{position:relative;padding:0 1.15rem 1.25rem}
@media (min-width:640px){.rd-mp-id{padding:0 1.5rem 1.5rem}}
/* No seal watermark here. It was drawn and then cut: the cover already carries
   the logo and the wordmark, so a second faint logo 20px below it was the same
   duplication this redesign is meant to remove. The credential reads as issued
   from the spaced capitals, the status tick and the engraved data line, which
   is type doing the work instead of an image. */
.rd-mp-eyebrow{position:relative;padding-top:.9rem;font-size:.58rem;font-weight:800;
  letter-spacing:.16em;text-transform:uppercase;color:var(--mp-mute);line-height:1.5}
@media (min-width:640px){.rd-mp-eyebrow{font-size:.62rem}}
/* ---- the face ------------------------------------------------------- */
/* Overlaps the cover by a little under half its height, the way a real
   profile does, and it is a circle. The old rounded square at 96px read as a
   list thumbnail rather than a face. */
.rd-mp-face{position:relative;width:7rem;height:7rem;margin-top:-3rem}
@media (min-width:640px){.rd-mp-face{width:8.5rem;height:8.5rem;margin-top:-3.75rem}}
.rd-mp-face>img,.rd-mp-mono{width:100%;height:100%;border-radius:9999px;object-fit:cover;
  background:#fff;border:4px solid #fff;box-shadow:var(--mp-e2);display:block}
@media (min-width:640px){.rd-mp-face>img,.rd-mp-mono{border-width:5px}}
/* Most members have no photo yet. logo.png in every circle made every one of
   those pages identical, so a member with no picture gets initials on a tint
   derived from the name instead: still anonymous, but no longer interchangeable. */
.rd-mp-mono{display:flex;align-items:center;justify-content:center;
  font-family:'Plus Jakarta Sans','Noto Sans Bengali',sans-serif;
  font-size:2.3rem;font-weight:800;letter-spacing:-.02em;color:#fff;
  background:linear-gradient(140deg,hsl(var(--mp-h) 42% 42%),hsl(var(--mp-h) 46% 26%))}
@media (min-width:640px){.rd-mp-mono{font-size:2.8rem}}
/* Two Bengali letters are wider than two Latin ones at the same size and were
   touching the ring, so the Bengali monogram is set a step down. */
.rd-mp-mono:lang(bn){font-size:1.95rem;letter-spacing:0}
@media (min-width:640px){.rd-mp-mono:lang(bn){font-size:2.35rem}}
.rd-mp-facebtn{position:absolute;right:0;bottom:.15rem;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;padding:.5rem;
  border-radius:9999px;background:#fff;color:var(--mp-ink);
  border:1px solid rgba(30,27,75,.1);box-shadow:0 2px 8px rgba(30,27,75,.2)}
.rd-mp-facebtn i{width:1rem;height:1rem}

/* ---- name and headline ---------------------------------------------- */
.rd-mp-name{display:flex;align-items:center;gap:.45rem;flex-wrap:wrap;margin-top:.7rem;
  font-size:1.5rem;font-weight:800;letter-spacing:-.02em;line-height:1.25}
/* Noto Sans Bengali sits smaller on the same font-size than Plus Jakarta
   Sans does, so a Bengali name set at the Latin size reads a step too quiet.
   It gets its own size rather than a shared one. */
.rd-mp-name:lang(bn){font-size:1.62rem;line-height:1.35}
@media (min-width:640px){
  .rd-mp-name{font-size:1.9rem}
  .rd-mp-name:lang(bn){font-size:2.05rem}
}
.rd-mp-name i{width:1.15rem;height:1.15rem;color:var(--mp-seal);flex:0 0 auto}
/* One line instead of four rows. "Assistant Engineer, LGED" is what a member
   wants to know first, and reading it off a Designation row and an
   Organization row was work the page should have done itself. */
.rd-mp-head{margin-top:.3rem;font-size:.92rem;font-weight:600;color:var(--mp-mute);
  line-height:1.5;overflow-wrap:anywhere}
.rd-mp-head b{font-weight:800;color:var(--mp-ink)}
/* ---- the data rule --------------------------------------------------- */
/* Member number, series, department and batch on one engraved line. These
   are the four facts that place a member inside the Association, so they are
   set as record rather than as four decorated pills. Tabular figures, so the
   numbers line up between one member's page and the next. */
.rd-mp-rule{margin-top:1rem;padding-top:.85rem;border-top:1px solid var(--mp-line);
  display:flex;flex-wrap:wrap;align-items:baseline;gap:.35rem 1.25rem}
.rd-mp-fact{display:flex;flex-direction:column;gap:.15rem;min-width:0}
.rd-mp-fact dt{font-size:.55rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;
  color:var(--mp-mute)}
.rd-mp-fact dd{margin:0;font-family:'Space Grotesk','Plus Jakarta Sans',sans-serif;
  font-variant-numeric:tabular-nums;font-feature-settings:'tnum' 1;
  font-size:.95rem;font-weight:700;letter-spacing:.01em;color:var(--mp-ink)}
/* A department is words, not a figure, so it keeps the text face. */
.rd-mp-fact dd.is-word{font-family:'Plus Jakarta Sans','Noto Sans Bengali',sans-serif;
  font-size:.88rem;font-weight:800;letter-spacing:0}
.rd-mp-fact dd.is-blood{color:#9f1239}

/* ---- the credential, at card width ----------------------------------- */
/* On a phone the identity block is one column and the data line runs across the
   bottom of it. Given 900px the same block has room to read like the thing it
   is: photo and name on the left, the record in a panel on the right behind a
   full-height hairline. Areas rather than wrappers, so the markup is the same at
   both sizes and a missing headline or an empty data line just drops its row. */
@media (min-width:900px){
  .rd-mp-id{display:grid;column-gap:2.25rem;align-items:start;
    grid-template-columns:minmax(0,1fr) auto;
    grid-template-areas:'face rule' 'eyeb rule' 'name rule' 'head rule'
                        'pill rule' 'acts rule' 'act2 rule'}
  .rd-mp-face{grid-area:face}
  .rd-mp-eyebrow{grid-area:eyeb}
  .rd-mp-name{grid-area:name}
  .rd-mp-head{grid-area:head;max-width:34rem}
  .rd-mp-pillrow{grid-area:pill}
  .rd-mp-acts{grid-area:acts}
  .rd-mp-acts2{grid-area:act2}
  .rd-mp-rule{grid-area:rule;align-self:stretch;margin-top:0;padding:1.15rem 0 .25rem 2.25rem;
    border-top:0;border-left:1px solid var(--mp-line);
    flex-direction:column;flex-wrap:nowrap;align-items:flex-start;
    gap:.9rem;min-width:12.5rem}
  .rd-mp-fact dd{font-size:1rem}
}

/* Status. Only two states can be true, and each is stated once. */
.rd-mp-pillrow{margin-top:.5rem}
.rd-mp-pill{display:inline-flex;align-items:center;gap:.3rem;padding:.22rem .6rem;
  border-radius:9999px;font-size:.68rem;font-weight:800;letter-spacing:.02em;white-space:nowrap}
.rd-mp-pill i{width:.8rem;height:.8rem}
.rd-mp-pill-ok{background:#effcfa;color:var(--mp-seal);border:1px solid #bdece5}
.rd-mp-pill-wait{background:#fffbeb;color:#92400e;border:1px solid #fde68a}

/* ---- the actions ----------------------------------------------------- */
/* Reaching a member is what somebody opened this page to do, so it is the
   first action on it. Call carries the Association's accent; WhatsApp keeps
   its own green because that green is a brand mark and not decoration. */
/* auto-fit, not 1fr 1fr: a member with no WhatsApp number leaves one button
   here, and it should take the row rather than sit in half of it. */
.rd-mp-acts{display:grid;grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));
  gap:.5rem;margin-top:1.1rem}
/* Full width is right on a phone, where the thumb needs the target. On a wide
   card two 900px-wide buttons would just look like a mistake. */
@media (min-width:640px){.rd-mp-acts{grid-template-columns:repeat(2,minmax(0,11rem))}}
.rd-mp-act{display:inline-flex;align-items:center;justify-content:center;gap:.45rem;
  padding:.78rem 1rem;border-radius:.85rem;text-decoration:none;border:0;cursor:pointer;
  font-family:inherit;font-size:.84rem;font-weight:800;line-height:1;white-space:nowrap;
  transition:transform .15s ease,box-shadow .15s ease,filter .15s ease}
.rd-mp-act i{width:1.05rem;height:1.05rem}
.rd-mp-act:hover{filter:brightness(1.07)}
.rd-mp-act:active{transform:translateY(1px)}
/* White text on both at AA: #4338ca is 8.6:1, #047857 is 4.9:1. WhatsApp's
   own #25d366 is 1.9:1 with white, so the darker green carries the label. */
.rd-mp-act-call{background:var(--mp-key);color:#fff;box-shadow:var(--mp-e1)}
.rd-mp-act-wa{background:#047857;color:#fff;box-shadow:var(--mp-e1)}
.rd-mp-act-lock{background:#eef2ff;color:var(--mp-key);border:1px solid #dfe5f8;
  grid-column:1/-1}
/* The two things a member actually does with somebody else's page: put the
   number in their phone, and pass the page on. Quieter than Call, because
   they are useful rather than urgent. */
.rd-mp-acts2{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.5rem}
@media (min-width:640px){.rd-mp-acts2{max-width:22.5rem}}
.rd-mp-act2{flex:1 1 8rem;display:inline-flex;align-items:center;justify-content:center;gap:.4rem;
  padding:.62rem .8rem;border-radius:.85rem;cursor:pointer;text-decoration:none;
  background:#fff;color:var(--mp-ink);border:1px solid var(--mp-line);
  font-family:inherit;font-size:.76rem;font-weight:800;line-height:1;white-space:nowrap;
  box-shadow:var(--mp-e1);transition:border-color .15s ease,color .15s ease}
.rd-mp-act2:hover{border-color:#c3cef0;color:var(--mp-key)}
.rd-mp-act2 i{width:.95rem;height:.95rem;color:var(--mp-key)}

/* ---- the record ------------------------------------------------------ */
.rd-mp-sec{background:#fff;border:1px solid var(--mp-line);border-radius:1.25rem;
  padding:1.1rem 1.15rem 1.2rem;box-shadow:var(--mp-e1)}
@media (min-width:640px){.rd-mp-sec{padding:1.3rem 1.45rem 1.4rem}}
.rd-mp-main>.rd-mp-sec+.rd-mp-sec,.rd-mp-side>.rd-mp-sec+.rd-mp-sec{margin-top:1rem}
.rd-mp-sech{display:flex;align-items:center;gap:.5rem;font-size:.62rem;font-weight:800;
  letter-spacing:.16em;text-transform:uppercase;color:var(--mp-mute)}
.rd-mp-sech i{width:.9rem;height:.9rem;color:var(--mp-key);opacity:.75}
.rd-mp-rows{margin-top:.3rem}
.rd-mp-row{display:flex;align-items:flex-start;gap:.8rem;padding:.78rem 0}
.rd-mp-row+.rd-mp-row{border-top:1px solid #f2f5fc}
/* One accent, held at one weight. The old page had blue, rose, amber and
   slate icon tints competing inside a single card. */
.rd-mp-ico{width:2.25rem;height:2.25rem;border-radius:.7rem;flex:0 0 auto;
  display:flex;align-items:center;justify-content:center;
  background:#eef2ff;color:var(--mp-key);border:1px solid #e4e9f8}
.rd-mp-ico i{width:1.05rem;height:1.05rem}
.rd-mp-ico-blood{background:#fef2f2;color:#e11d48;border-color:#fca5a5}
.rd-mp-txt{min-width:0;flex:1 1 auto}
.rd-mp-k{font-size:.58rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;
  color:var(--mp-mute);margin-bottom:.2rem}
.rd-mp-v{font-weight:700;color:var(--mp-ink);line-height:1.45;overflow-wrap:anywhere}
.rd-mp-v-num{font-family:'Space Grotesk','Plus Jakarta Sans',sans-serif;
  font-variant-numeric:tabular-nums;font-size:1.02rem;font-weight:700;letter-spacing:.02em}
/* A fact nobody filled in draws nothing at all. The old page printed N/A. */
/* ---- the Rangdhanu timeline ------------------------------------------ */
/* The one place a numbered or ordered device is honest here: a member's life
   in the Association really is a sequence, and the order carries information
   (which series they came in on, what they held, when they became alumni).
   Everywhere else the page uses plain rows. */
.rd-mp-tl{position:relative;margin-top:.6rem;padding-left:1.4rem}
.rd-mp-tl::before{content:'';position:absolute;left:.3rem;top:.55rem;bottom:.55rem;width:2px;
  background:linear-gradient(180deg,var(--mp-key2),var(--mp-seal));border-radius:2px;opacity:.35}
.rd-mp-tli{position:relative;padding:.55rem 0}
.rd-mp-tli::before{content:'';position:absolute;left:-1.22rem;top:.95rem;width:.6rem;height:.6rem;
  border-radius:9999px;background:#fff;border:2px solid var(--mp-key2)}
.rd-mp-tli.is-now::before{background:var(--mp-seal);border-color:var(--mp-seal);
  box-shadow:0 0 0 3px rgba(15,118,110,.16)}
.rd-mp-tly{font-family:'Space Grotesk','Plus Jakarta Sans',sans-serif;
  font-variant-numeric:tabular-nums;font-size:.66rem;font-weight:700;letter-spacing:.1em;
  color:var(--mp-mute)}
.rd-mp-tlv{font-size:.9rem;font-weight:800;color:var(--mp-ink);line-height:1.4;margin-top:.1rem}
.rd-mp-tls{font-size:.76rem;font-weight:600;color:var(--mp-mute);line-height:1.5}

/* ---- signed out, and empty ------------------------------------------- */
/* One row in place of the private facts, not five empty ones. */
.rd-mp-gate{text-align:center;padding:1.1rem .9rem;border-radius:1rem;
  background:#eef2ff;border:1px solid #dfe5f8;margin-top:.6rem}
.rd-mp-gate-ico{width:2.5rem;height:2.5rem;margin:0 auto;border-radius:9999px;
  background:#fff;border:1px solid #c3cef0;color:var(--mp-key);
  display:flex;align-items:center;justify-content:center}
.rd-mp-gate-h{font-weight:800;color:var(--mp-ink);margin:.6rem 0 .2rem;font-size:.92rem}
.rd-mp-gate-p{font-size:.78rem;color:var(--mp-mute);margin:0;line-height:1.6}
/* An empty screen is an invitation to act, so on a member's own page the gaps
   are named and counted instead of leaving the record looking broken. */
.rd-mp-todo{margin-top:.7rem;padding:.9rem 1rem;border-radius:1rem;
  background:linear-gradient(125deg,#eef2ff,#f7f9ff 55%,#effcfa);border:1px solid #dfe5f8}
.rd-mp-todo-t{display:flex;align-items:center;justify-content:space-between;gap:.6rem;
  font-size:.78rem;font-weight:800;color:var(--mp-ink)}
.rd-mp-todo-n{font-family:'Space Grotesk','Plus Jakarta Sans',sans-serif;
  font-variant-numeric:tabular-nums;color:var(--mp-key)}
.rd-mp-bar{height:.3rem;border-radius:9999px;background:#dfe5f8;margin-top:.55rem;overflow:hidden}
.rd-mp-bar>i{display:block;height:100%;border-radius:9999px;
  background:linear-gradient(90deg,var(--mp-key2),var(--mp-seal))}
.rd-mp-todo-l{margin:.55rem 0 0;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:.35rem}
.rd-mp-todo-l li{font-size:.68rem;font-weight:700;color:var(--mp-mute);background:#fff;
  border:1px solid var(--mp-line);border-radius:9999px;padding:.24rem .55rem}
/* ---- the quality floor ----------------------------------------------- */
/* A keyboard ring that looks designed rather than defaulted, on every
   interactive thing the page draws. */
.rd-mp-act:focus-visible,.rd-mp-act2:focus-visible,.rd-mp-cbtn:focus-visible,
.rd-mp-posbtn:focus-visible,.rd-mp-facebtn:focus-visible{
  outline:2px solid var(--mp-key);outline-offset:2px}
.rd-mp-cbtn:focus-visible,.rd-mp-posbtn:focus-visible{outline-color:#fff}

/* One entrance, once, on load: the cover settles, the name comes up behind it,
   the record follows. Scattered hover effects would have been cheaper and would
   have read as decoration. */
@keyframes rdMpUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@keyframes rdMpFace{from{opacity:0;transform:scale(.9)}to{opacity:1;transform:none}}
@keyframes rdMpFade{from{opacity:0}to{opacity:1}}
.rd-mp-cover>img{animation:rdMpFade .5s ease both}
.rd-mp-face{animation:rdMpFace .45s cubic-bezier(.2,.8,.2,1) .08s both}
.rd-mp-eyebrow,.rd-mp-name,.rd-mp-head,.rd-mp-pillrow,.rd-mp-rule,
.rd-mp-acts,.rd-mp-acts2{
  animation:rdMpUp .45s cubic-bezier(.2,.8,.2,1) both}
.rd-mp-name{animation-delay:.06s}
.rd-mp-head{animation-delay:.1s}
.rd-mp-pillrow{animation-delay:.12s}
.rd-mp-rule{animation-delay:.14s}
.rd-mp-acts{animation-delay:.18s}
.rd-mp-acts2{animation-delay:.22s}
.rd-mp-sec{animation:rdMpUp .45s cubic-bezier(.2,.8,.2,1) .16s both}
@media (prefers-reduced-motion:reduce){
  .rd-mp-cover>img,.rd-mp-face,.rd-mp-eyebrow,.rd-mp-name,.rd-mp-head,.rd-mp-pillrow,
  .rd-mp-rule,.rd-mp-acts,.rd-mp-acts2,.rd-mp-sec,.rd-mp-todo{animation:none}
  .rd-mp-act,.rd-mp-act2,.rd-mp-cbtn{transition:none}
}
/* =====================================================================
   v3's dated record lived here: .rd-mp-led* for the year-column rows,
   .rd-mp-grp* for a section holding more than one body, .rd-mp-nowtag for the
   "still there" marker. All three are gone, replaced by the .rd-sv-* rail
   further down, which draws service, work and education from one primitive and
   gives each body a crest instead of a heading. Nothing emits the old class
   names any more, so the rules came out rather than sitting here waiting to be
   mistaken for live code.
   ===================================================================== */
/* ---- research -------------------------------------------------------- */
/* The thesis is the one place on the page where a member writes a paragraph,
   so it is the one place set as prose: a quoted headline, then body text at a
   readable measure. */
.rd-mp-th{margin:.1rem 0 0}
.rd-mp-tht{font-size:1.05rem;line-height:1.4;font-weight:750;color:var(--mp-ink);margin:0;
  padding-left:.9rem;border-left:2px solid var(--mp-key2)}
@media (min-width:640px){.rd-mp-tht{font-size:1.15rem}}
.rd-mp-thd{margin:.7rem 0 0;font-size:.88rem;line-height:1.7;color:#3f4763;max-width:44rem}
.rd-mp-more{margin-top:.4rem;background:none;border:0;padding:0;font:inherit;font-size:.8rem;
  font-weight:800;color:var(--mp-key);cursor:pointer;text-decoration:underline;
  text-underline-offset:3px}
.rd-mp-more:focus-visible{outline:2px solid var(--mp-key2);outline-offset:3px;border-radius:.2rem}
/* Papers sit under the thesis when there is one, and a rule between them says
   the list is a separate thing rather than more of the abstract. */
.rd-mp-papers{margin-top:.1rem}
.rd-mp-papers.has-th{margin-top:1.1rem;padding-top:1.1rem;border-top:1px solid var(--mp-line)}
/* A paper is a link, and a link that leaves the site should say so before it is
   tapped, not after. */
.rd-mp-paper{display:flex;align-items:center;gap:.7rem;padding:.65rem .8rem;border-radius:.7rem;
  border:1px solid var(--mp-line);background:var(--mp-paper);text-decoration:none;
  transition:border-color .18s,transform .18s}
.rd-mp-paper+.rd-mp-paper{margin-top:.45rem}
.rd-mp-paper:hover{border-color:var(--mp-key2);transform:translateY(-1px)}
.rd-mp-paper:focus-visible{outline:2px solid var(--mp-key2);outline-offset:2px}
.rd-mp-paper i{width:1rem;height:1rem;color:var(--mp-key);flex:0 0 auto}
/* A paper title wraps. It used to be one nowrap line with an ellipsis, which
   cut most real titles in half on a phone and, worse, made the whole page grid
   as wide as the longest title -- a nowrap line has no narrower size to fall
   back to, so the column took its full width and the card overflowed. */
.rd-mp-papert{min-width:0;font-size:.88rem;font-weight:700;color:var(--mp-ink);
  line-height:1.4;overflow-wrap:anywhere}
.rd-mp-paperh{margin-left:auto;font-size:.72rem;color:var(--mp-mute);white-space:nowrap;
  font-family:'Space Grotesk',sans-serif;align-self:flex-start;padding-top:.1rem}
@media (max-width:479px){.rd-mp-paperh{display:none}}
/* =====================================================================
   v3 -- the editor: one block per entry, added and removed in place
   =====================================================================
   The existing Social Media editor on this site already works this way, so
   these rows deliberately copy its shape: a row per entry, a remove button on
   the row itself, and one Add button at the foot that names what it adds.
   Nothing here opens a modal, because the site does not have any. */
.rd-rep{margin-top:.15rem}
.rd-rep-row{position:relative;border:1px solid var(--mp-line);border-radius:1rem;
  background:var(--mp-paper);padding:.9rem .9rem .95rem;box-shadow:var(--mp-e1)}
.rd-rep-row+.rd-rep-row{margin-top:.6rem}
.rd-rep-row.is-bad{border-color:#e11d48;background:#fff5f7}
/* The number is not decoration: these entries are shown newest first on the
   profile, and a member adding a fourth term needs to see at a glance how many
   are already there. */
.rd-rep-n{position:absolute;top:.55rem;right:2.6rem;font-family:'Space Grotesk',sans-serif;
  font-size:.7rem;font-weight:600;color:#94a0bd;font-variant-numeric:tabular-nums}
.rd-rep-del{position:absolute;top:.45rem;right:.45rem;width:1.9rem;height:1.9rem;
  display:inline-flex;align-items:center;justify-content:center;border-radius:.6rem;
  border:1px solid var(--mp-line);background:#fff;color:#7c869f;cursor:pointer;
  transition:color .18s,border-color .18s,background .18s}
.rd-rep-del:hover{color:#e11d48;border-color:#fecdd3;background:#fff1f2}
.rd-rep-del:focus-visible{outline:2px solid var(--mp-key2);outline-offset:2px}
.rd-rep-del i{width:.95rem;height:.95rem}
.rd-rep-grid{display:grid;gap:.6rem;grid-template-columns:minmax(0,1fr)}
@media (min-width:560px){.rd-rep-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
.rd-rep-f{min-width:0}
.rd-rep-f.is-wide{grid-column:1/-1}
/* Start and end year sit side by side at every width. Split across a
   breakpoint they read as two unrelated questions. */
.rd-rep-yy{display:grid;grid-template-columns:1fr auto 1fr;align-items:end;gap:.4rem}
.rd-rep-dash{padding-bottom:.65rem;color:#94a0bd;font-weight:700}
.rd-rep-l{display:block;font-size:.68rem;font-weight:800;letter-spacing:.09em;
  text-transform:uppercase;color:#6b7593;margin:0 0 .25rem}
.rd-rep-i,.rd-rep-s{width:100%;box-sizing:border-box;border:1px solid #d7deee;border-radius:.6rem;
  padding:.5rem .65rem;font:inherit;font-size:.88rem;color:var(--mp-ink);background:#fff;
  transition:border-color .18s,box-shadow .18s}
.rd-rep-i:focus,.rd-rep-s:focus{outline:0;border-color:var(--mp-key2);
  box-shadow:0 0 0 3px rgba(99,102,241,.16)}
.rd-rep-i.is-num{font-family:'Space Grotesk',sans-serif;font-variant-numeric:tabular-nums;
  letter-spacing:.02em}
.rd-rep-s{appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236b7593' stroke-width='2.5' stroke-linecap='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right .55rem center;background-size:.9rem;
  padding-right:1.9rem}
.rd-rep-foot{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;margin-top:.7rem}
.rd-rep-add{display:inline-flex;align-items:center;gap:.4rem;border:1px dashed #b9c4de;
  background:#fff;color:var(--mp-key);border-radius:.7rem;padding:.55rem .85rem;font:inherit;
  font-size:.82rem;font-weight:800;cursor:pointer;transition:border-color .18s,background .18s}
.rd-rep-add:hover:not(:disabled){border-color:var(--mp-key2);background:#f5f7ff}
.rd-rep-add:disabled{opacity:.45;cursor:not-allowed}
.rd-rep-add:focus-visible{outline:2px solid var(--mp-key2);outline-offset:2px}
.rd-rep-add i{width:.95rem;height:.95rem}
.rd-rep-note{font-size:.76rem;color:var(--mp-mute);line-height:1.5}
.rd-rep-err{margin:.5rem 0 0;font-size:.8rem;font-weight:700;color:#be123c}
.rd-rep-err.hidden{display:none}
/* An empty group says what the group is for. A bare Add button does not. */
.rd-rep-none{border:1px dashed #cfd8ea;border-radius:1rem;background:#fafbff;padding:.9rem 1rem;
  font-size:.83rem;line-height:1.6;color:var(--mp-mute);margin:0}
/* The editor's own card, so the mock reads like a page rather than a form dump */
.rd-ed{background:#fff;border:1px solid var(--mp-line);border-radius:1.25rem;
  padding:1.15rem 1.1rem 1.25rem;box-shadow:var(--mp-e2)}
.rd-ed+.rd-ed{margin-top:1rem}
@media (min-width:640px){.rd-ed{padding:1.3rem 1.45rem 1.4rem}}
.rd-ed-h{display:flex;align-items:center;gap:.55rem;margin:0 0 .2rem;font-size:.74rem;
  font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--mp-key)}
.rd-ed-h i{width:1rem;height:1rem}
.rd-ed-p{margin:.35rem 0 .9rem;font-size:.83rem;line-height:1.65;color:var(--mp-mute);
  max-width:42rem}
.rd-ed-ta{width:100%;box-sizing:border-box;border:1px solid #d7deee;border-radius:.7rem;
  padding:.65rem .75rem;font:inherit;font-size:.88rem;line-height:1.65;color:var(--mp-ink);
  min-height:6.5rem;resize:vertical;transition:border-color .18s,box-shadow .18s}
.rd-ed-ta:focus{outline:0;border-color:var(--mp-key2);box-shadow:0 0 0 3px rgba(99,102,241,.16)}
.rd-ed-count{margin:.3rem 0 0;font-size:.72rem;color:#94a0bd;text-align:right;
  font-family:'Space Grotesk',sans-serif;font-variant-numeric:tabular-nums}
.rd-ed-save{margin-top:1.1rem;width:100%;border:0;border-radius:.85rem;padding:.85rem 1rem;
  font:inherit;font-size:.9rem;font-weight:800;color:#fff;cursor:pointer;
  background:linear-gradient(135deg,var(--mp-key),#312e81 65%,var(--mp-seal));
  box-shadow:var(--mp-e2);transition:transform .18s,box-shadow .18s}
.rd-ed-save:hover{transform:translateY(-1px);box-shadow:var(--mp-e3)}
.rd-ed-save:focus-visible{outline:2px solid var(--mp-key2);outline-offset:3px}
/* =====================================================================
   v3 -- the directory card
   =====================================================================
   Eighteen of these sit on screen at once, which is the whole design problem:
   anything loud on one card is loud eighteen times. So the card is quiet and
   the rhythm does the work -- a status key-line down the left edge, a name, one
   engraved data line, and a single precise object at the foot.

   Three things from the current card are deliberately gone. The gradient blob
   in the top right corner, because it decorated nothing. The scale-up on the
   avatar, because eighteen cards twitching is not a hover state. And the
   "Engineer" / "Organization" placeholders, because a member who has not filled
   in a job should not be shown holding one. */
.rd-dc{position:relative;display:flex;flex-direction:column;background:#fff;
  border:1px solid var(--mp-line);border-radius:1.1rem;overflow:hidden;
  box-shadow:var(--mp-e1);transition:box-shadow .22s,border-color .22s,transform .22s}
.rd-dc:hover{border-color:#cdd6ef;box-shadow:var(--mp-e2);transform:translateY(-2px)}
/* The key-line is the status. A colour alone never carries a fact, so the word
   is printed too -- this is the redundancy, not the message. */
.rd-dc::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;
  background:linear-gradient(180deg,var(--mp-key2),var(--mp-key));border-radius:3px 0 0 3px}
.rd-dc.is-alumni::before{background:linear-gradient(180deg,#14b8a6,var(--mp-seal))}
.rd-dc.is-pending::before{background:linear-gradient(180deg,#fbbf24,#b45309)}
/* A teacher is not a fourth standing. Their card never carries a Running Member
   or an Alumni pill, so this finish says which list the card came out of, not
   where its person stands inside ours. */
.rd-dc.is-faculty::before{background:linear-gradient(180deg,#818cf8,#4338ca)}
.rd-dc-top{display:flex;align-items:flex-start;gap:.8rem;padding:.95rem 1rem .1rem 1.15rem}
.rd-dc-face{position:relative;width:3.25rem;height:3.25rem;border-radius:.85rem;flex:0 0 auto;
  overflow:hidden;background:#eef2ff;box-shadow:0 0 0 1px var(--mp-line),var(--mp-e1)}
.rd-dc-face img{width:100%;height:100%;object-fit:cover;display:block}
.rd-dc-mono{width:100%;height:100%;display:flex;align-items:center;justify-content:center;
  font-weight:800;font-size:1.1rem;letter-spacing:.02em;
  color:hsl(var(--mp-h) 45% 34%);background:hsl(var(--mp-h) 62% 94%)}
.rd-dc-mono:lang(bn){font-size:.95rem;letter-spacing:0}
.rd-dc-id{min-width:0;flex:1 1 auto;padding-top:.1rem}
.rd-dc-name{margin:0;font-size:.98rem;font-weight:750;line-height:1.3;color:var(--mp-ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* The data line is the card's version of the credential's engraved rule: the
   same three facts, the same numerals face, set small. */
.rd-dc-meta{margin:.2rem 0 0;font-family:'Space Grotesk','Plus Jakarta Sans',sans-serif;
  font-size:.74rem;font-weight:600;letter-spacing:.04em;color:var(--mp-key);
  font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rd-dc-stat{margin:.3rem 0 0;font-size:.63rem;font-weight:800;letter-spacing:.11em;
  text-transform:uppercase;color:var(--mp-key)}
.rd-dc.is-alumni .rd-dc-stat{color:var(--mp-seal)}
.rd-dc.is-pending .rd-dc-stat{color:#b45309}
/* The body sits between the head and the foot and is allowed to be empty. A
   card with no job typed in simply becomes shorter -- align-items:stretch on the
   grid keeps the row tidy without a placeholder sentence in every gap. */
.rd-dc-body{padding:.7rem 1rem .2rem 1.15rem;min-width:0}
.rd-dc-role{margin:0;font-size:.85rem;font-weight:700;line-height:1.4;color:var(--mp-ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rd-dc-org{margin:.12rem 0 0;font-size:.79rem;line-height:1.45;color:var(--mp-mute);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* One term of office, when there is one. It is the fact that makes an alumni
   directory worth reading, and it was not on the card at all before. */
.rd-dc-post{display:inline-flex;align-items:baseline;gap:.35rem;margin:.45rem 0 0;
  padding:.14rem .45rem .18rem;border-radius:.4rem;background:#f2f5ff;
  border:1px solid #e3e9fa;max-width:100%}
.rd-dc-posty{font-family:'Space Grotesk',sans-serif;font-size:.66rem;font-weight:600;
  color:var(--mp-key);font-variant-numeric:tabular-nums;flex:0 0 auto}
.rd-dc-postv{font-size:.7rem;font-weight:700;color:#3f4763;min-width:0;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
.rd-dc-more{font-size:.66rem;font-weight:700;color:var(--mp-mute);margin-left:.35rem}

/* ---- the action row -------------------------------------------------- */
/* Three separate small buttons is what made this corner feel cheap: three
   borders, three shadows, three radii, eighteen times over. One segmented
   object instead -- a single border, hairlines inside it, and the primary
   action holding the label. */
.rd-dc-foot{margin-top:auto;padding:.85rem 1rem 1rem 1.15rem}
.rd-dc-seg{display:grid;grid-template-columns:minmax(0,1fr);align-items:stretch;
  border:1px solid #dde4f4;border-radius:.8rem;overflow:hidden;background:#fff}
.rd-dc-seg.has-2{grid-template-columns:minmax(0,1fr) 2.65rem}
.rd-dc-seg.has-3{grid-template-columns:minmax(0,1fr) 2.65rem 2.65rem}
.rd-dc-seg>*{border:0;border-left:1px solid #dde4f4;background:transparent;font:inherit;
  cursor:pointer;display:inline-flex;align-items:center;justify-content:center;
  min-height:2.5rem;color:var(--mp-key);text-decoration:none;
  transition:background .18s,color .18s}
.rd-dc-seg>*:first-child{border-left:0}
.rd-dc-seg>*:focus-visible{outline:2px solid var(--mp-key2);outline-offset:-2px}
.rd-dc-seg i{width:1rem;height:1rem}
/* The primary cell. Its rest state is here; the hover belongs to the footer
   block further down, which draws it as a wash travelling under the label. The
   three-stop navy-to-teal gradient that used to sit on this line was already
   dead -- fully overridden there -- and it was the colour that got the footer
   sent back, so it is gone rather than left to be read as live one day. */
.rd-dc-open{gap:.45rem;font-size:.83rem;font-weight:800;letter-spacing:.01em;
  padding:0 .75rem;color:var(--mp-ink)}
.rd-dc-open .rd-dc-arw{width:.9rem;height:.9rem;transition:transform .22s}
/* The label is an element, not loose text in the button, so the hover wash
   cannot paint over it -- see .rd-dc-open>* in the footer block. It also gives
   the long names something to shorten. */
.rd-dc-lbl{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rd-dc:hover .rd-dc-open .rd-dc-arw{transform:translateX(3px)}
.rd-dc-call:hover{background:#eef2ff}
.rd-dc-wa{color:var(--mp-seal)}
.rd-dc-wa:hover{background:#ecfdf5}
/* The signed-out card keeps the same object with one cell in it, so the grid
   does not change shape when a member signs in -- only what is inside it. */
.rd-dc-gate{gap:.4rem;font-size:.8rem;font-weight:700;color:var(--mp-mute);padding:0 .7rem}
.rd-dc-gate:hover{background:#f6f8fd;color:var(--mp-key)}
@media (prefers-reduced-motion:reduce){
  .rd-dc,.rd-dc-open,.rd-dc-arw,.rd-dc-seg>*,.rd-mp-paper{transition:none}
  .rd-dc:hover{transform:none}
  .rd-dc:hover .rd-dc-open .rd-dc-arw{transform:none}
}
:root{
  --mp-ink:#0c2340;        /* navy ink, was indigo #1e1b4b */
  --mp-key:#17416b;        /* structural navy, was #4338ca */
  --mp-key2:#2b6296;
  --mp-seal:#0f766e;       /* alumni status only */
  --mp-mute:#5a6779;
  --mp-line:#dde3ec;
  --mp-paper:#fdfdfb;
  --rd-navy:#0c2340;
  --rd-navy2:#17416b;
  --mp-brass:#a9772a;
  --mp-brass2:#d9ab54;
  --mp-brasspale:#f7f0e0;
  --mp-e1:0 1px 2px rgba(12,35,64,.07);
  --mp-e2:0 10px 26px -12px rgba(12,35,64,.26),inset 0 1px 0 rgba(255,255,255,.85);
  --mp-e3:0 22px 52px -24px rgba(12,35,64,.4),inset 0 1px 0 rgba(255,255,255,.9);
}
/* ---- the navigation call to action ------------------------------------ */
/* The live button is #0ea5e9 with a 26px coloured glow under it and weight
   800. Bright fill plus soft coloured glow plus heavy type is the exact recipe
   that reads as a free template, and because it sits in the brand row it drags
   the whole bar down with it. Everything expensive about a real button is in
   the edges instead: a 1px darker border, a 1px inner light on the top edge, a
   short tight shadow, and one warm hairline that only lights on hover. */
.nav-cta{position:relative;display:inline-flex;align-items:center;gap:.5rem;
  padding:.6rem 1.05rem;border-radius:.6rem;font-size:.8rem;font-weight:700;
  letter-spacing:.005em;color:#fff;text-decoration:none;white-space:nowrap;
  border:1px solid #000;cursor:pointer;
  background:#000;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.18),0 1px 2px rgba(0,0,0,.35);
  transition:box-shadow .24s,transform .24s,filter .24s}
.nav-cta>i,.nav-cta>svg{width:.95rem;height:.95rem;color:var(--mp-brass2)}
.nav-cta::after{content:'';position:absolute;left:.75rem;right:.75rem;bottom:-1px;
  height:1px;opacity:0;transition:opacity .24s;
  background:linear-gradient(90deg,transparent,var(--mp-brass2),transparent)}
.nav-cta:hover{transform:translateY(-1px);background:#111;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.24),0 7px 18px -7px rgba(0,0,0,.58)}
.nav-cta:hover::after{opacity:1}
.nav-cta:focus-visible{outline:2px solid var(--mp-brass2);outline-offset:2px}
/* ---- the directory card, take two ------------------------------------- */
/* v3 put a 3px coloured rail down the left edge and floated a rounded pill of
   buttons inside the bottom padding. The rail is what every card on the web
   already does, and the pill still read as furniture sitting on the card
   rather than part of it.
   This card is a nameplate. The head is a navy plate with the series and
   department engraved into it in brass, and the finish of the rule under that
   plate is the standing: polished brass for a member, patina for an alumnus,
   unpolished grey while an application is still waiting. The action row is
   flush to the bottom edge, so it is the card's own footer. */
.rd-dc{position:relative;display:flex;flex-direction:column;background:var(--mp-paper);
  border:1px solid var(--mp-line);border-radius:.85rem;overflow:hidden;
  box-shadow:var(--mp-e1);transition:box-shadow .26s,border-color .26s,transform .26s}
.rd-dc:hover{border-color:#c3cfe0;box-shadow:var(--mp-e2);transform:translateY(-3px)}
.rd-dc::before{display:none}                 /* the old left rail is gone */

.rd-dc-plate{position:relative;display:flex;align-items:center;gap:.6rem;
  padding:.45rem .85rem .47rem;
  background:linear-gradient(180deg,#164272,var(--rd-navy));
  border-bottom:2px solid var(--mp-brass)}
.rd-dc-plate::after{content:'';position:absolute;left:0;right:0;top:0;height:1px;
  background:rgba(255,255,255,.15)}
.rd-dc-pid{min-width:0;font-family:'Space Grotesk','Plus Jakarta Sans',sans-serif;
  font-size:.7rem;font-weight:700;letter-spacing:.13em;text-transform:uppercase;
  color:var(--mp-brass2);font-variant-numeric:tabular-nums;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rd-dc-pst{margin-left:auto;flex:0 0 auto;display:inline-flex;align-items:center;gap:.3rem;
  font-size:.57rem;font-weight:800;
  letter-spacing:.13em;text-transform:uppercase;color:rgba(255,255,255,.7);
  white-space:nowrap}
/* alumniStatusLabel puts a glyph in front of the word. Left at its natural size
   it stood a whole line taller than .57rem text and pushed the plate open. */
.rd-dc-psti{width:.72rem;height:.72rem;flex:0 0 auto}
/* Only the finish of the rule changes with standing, and the engraving stays
   brass on every card. Colouring the engraved line as well meant an alumnus card
   had two teal things on it, and since most of the roll is alumni the whole grid
   read teal -- a status quietly turning into the brand colour. Polished brass is
   a serving member, patina is an alumnus, unpolished grey is an application still
   waiting. Three finishes of the same metal, and the word on the right says it
   in plain English anyway. */
.rd-dc.is-alumni .rd-dc-plate{border-bottom-color:#57a99b}
.rd-dc.is-pending .rd-dc-plate{border-bottom-color:#8d9bad}
.rd-dc.is-faculty .rd-dc-plate{border-bottom-color:#6c74c9}

.rd-dc-top{display:flex;align-items:flex-start;gap:.85rem;padding:.95rem .95rem .1rem}
.rd-dc-face{width:3.4rem;height:3.4rem;border-radius:9999px;background:#eef2f8;
  box-shadow:0 0 0 1px #fff,0 0 0 2px rgba(169,119,42,.32),var(--mp-e1);
  transition:box-shadow .26s}
.rd-dc:hover .rd-dc-face{box-shadow:0 0 0 1px #fff,0 0 0 2px var(--mp-brass),var(--mp-e1)}
/* One monogram treatment for everybody. Nine tinted circles in a nine-card
   grid was colour doing no work. */
.rd-dc-mono{font-family:'Space Grotesk',sans-serif;font-weight:700;font-size:1.02rem;
  letter-spacing:.03em;color:var(--rd-navy2);background:#eef2f8}
.rd-dc-name{font-size:1rem;font-weight:750;color:var(--mp-ink)}
.rd-dc-meta,.rd-dc-stat{display:none}        /* both now live on the plate */
.rd-dc-body{padding:.65rem .95rem .55rem}
.rd-dc-post{background:var(--mp-brasspale);border-color:rgba(169,119,42,.28)}
.rd-dc-posty{color:#8a5f1c}
.rd-dc-postv{color:#3d4757}

/* ---- the card footer -------------------------------------------------- */
/* Flush to the bottom edge, one hairline above it, no radius of its own. The
   primary cell warms from the left on hover -- brass over paper, the same warm
   pair the standing line and the post row already use.
   It used to flood navy and turn the label white. Two things were wrong with
   that. A dark flood under an inverting label is the one hover in the card that
   can lose its own text, and it did. And navy travelling over navy ink made the
   cell read as switched off rather than reached for. Nothing inverts here now:
   the ink darkens to bronze, 6:1 on the wash, so the words cannot go missing at
   any point of the sweep. */
.rd-dc-foot{margin-top:auto;padding:0}
.rd-dc-seg{position:relative;border:0;border-top:1px solid var(--mp-line);
  border-radius:0;background:#f6f8fc}
.rd-dc-seg::before{content:'';position:absolute;left:0;right:0;top:-1px;height:1px;
  background:var(--mp-brass);transform:scaleX(0);transform-origin:left;
  transition:transform .36s cubic-bezier(.16,1,.3,1)}
.rd-dc:hover .rd-dc-seg::before{transform:none}
.rd-dc-seg.has-2{grid-template-columns:minmax(0,1fr) 2.9rem}
.rd-dc-seg.has-3{grid-template-columns:minmax(0,1fr) 2.9rem 2.9rem}
.rd-dc-seg>*{border-left-color:var(--mp-line);min-height:2.7rem;color:var(--mp-key)}
.rd-dc-seg>*:focus-visible{outline:2px solid var(--mp-brass);outline-offset:-2px}
/* Signed out the control is one column and two rows, so the divider between its
   cells runs across rather than down. Without this the sign in line carried a
   left border and nothing above it, which read as a rendering fault. */
.rd-dc-seg.is-gate>*+*{border-left:0;border-top:1px solid var(--mp-line)}
.rd-dc-open{position:relative;overflow:hidden;color:var(--rd-navy);font-weight:750;
  font-size:.84rem}
.rd-dc-open::before{content:'';position:absolute;inset:0;transform:translateX(-101%);
  background:linear-gradient(90deg,#fefcf5,#f7edd6);
  transition:transform .36s cubic-bezier(.16,1,.3,1)}
.rd-dc-open>*{position:relative;z-index:1}
.rd-dc:hover .rd-dc-open::before,.rd-dc-open:hover::before,
.rd-dc-open:focus-visible::before{transform:none}
.rd-dc:hover .rd-dc-open,.rd-dc-open:hover,.rd-dc-open:focus-visible{
  background:none;color:#896618}
.rd-dc:hover .rd-dc-open .rd-dc-arw{transform:translateX(3px)}
.rd-dc-call:hover{background:#e9eef6;color:var(--rd-navy)}
.rd-dc-wa:hover{background:#e8f7f3}
.rd-dc-gate:hover{background:#eef2f8;color:var(--rd-navy2)}
/* A cell in the segmented foot that is not pressable: a four-digit campus
   extension, which tel: cannot dial from off campus, or a card DUET publishes
   no contact for at all. It holds the foot's shape without posing as a link. */
.rd-dc-flat{gap:.4rem;font-size:.78rem;font-weight:700;color:var(--mp-mute);
  padding:0 .7rem;min-width:0;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;cursor:default}
@media (prefers-reduced-motion:reduce){
  .rd-dc-open::before,.rd-dc-seg::before,.rd-dc-face{transition:none}
}
/* ---- service record, with graphics ------------------------------------ */
/* His words: "bortoman sudhu text ar text dekhteci, alada kono graphics hover
   dekhtecina." Fair. v3 set the terms of office as a year column and a line of
   text, which is honest and completely flat.
   Each body now gets a crest -- a navy tile carrying its own icon -- and the
   terms hang off a rail with one station dot each, hollow for a term served,
   filled brass for the term being served now. A row lifts a faint tint on
   hover and its dot grows. No images: the graphics are the geometry. */
.rd-sv{display:grid;gap:.95rem}
.rd-sv-grp{border:1px solid var(--mp-line);border-radius:.8rem;background:#fff;
  overflow:hidden;box-shadow:var(--mp-e1);transition:box-shadow .24s,border-color .24s}
.rd-sv-grp:hover{border-color:#c9d4e4;box-shadow:var(--mp-e2)}
.rd-sv-h{display:flex;align-items:center;gap:.7rem;padding:.65rem .8rem;
  background:linear-gradient(180deg,#f8fafd,#eff3f9);border-bottom:1px solid var(--mp-line)}
.rd-sv-crest{position:relative;width:2.35rem;height:2.35rem;border-radius:.58rem;
  flex:0 0 auto;display:flex;align-items:center;justify-content:center;
  color:var(--mp-brass2);background:linear-gradient(180deg,#1a4b7c,var(--rd-navy));
  box-shadow:inset 0 0 0 1px rgba(217,171,84,.4),0 2px 6px -2px rgba(12,35,64,.5)}
.rd-sv-crest i,.rd-sv-crest svg{width:1.12rem;height:1.12rem}
.rd-sv-ttl{min-width:0}
.rd-sv-n{margin:0;font-size:.86rem;font-weight:800;color:var(--mp-ink);line-height:1.3}
.rd-sv-c{margin:.08rem 0 0;font-family:'Space Grotesk',sans-serif;font-size:.64rem;
  font-weight:600;letter-spacing:.11em;text-transform:uppercase;color:var(--mp-mute)}
.rd-sv-list{list-style:none;margin:0;padding:.4rem .7rem .6rem .8rem}
.rd-sv-t{position:relative;display:flex;align-items:baseline;gap:.7rem;
  padding:.48rem .5rem .5rem 1.5rem;border-radius:.45rem;
  transition:background .18s}
.rd-sv-t:hover{background:#f3f7fc}
.rd-sv-t::before{content:'';position:absolute;left:.3rem;top:0;bottom:0;width:1px;
  background:var(--mp-line)}
.rd-sv-t:first-child::before{top:.92rem}
.rd-sv-t:last-child::before{bottom:auto;height:.92rem}
.rd-sv-t:first-child:last-child::before{display:none}
.rd-sv-t::after{content:'';position:absolute;left:0;top:.78rem;width:.62rem;height:.62rem;
  border-radius:9999px;background:#fff;box-shadow:0 0 0 1.6px var(--mp-key2);
  transition:transform .2s,box-shadow .2s}
.rd-sv-t:hover::after{transform:scale(1.2)}
.rd-sv-t.is-now::after{background:var(--mp-brass);
  box-shadow:0 0 0 1.6px var(--mp-brass),0 0 0 4px rgba(169,119,42,.15)}
.rd-sv-y{flex:0 0 auto;min-width:5.2rem;font-family:'Space Grotesk',sans-serif;
  font-size:.74rem;font-weight:600;letter-spacing:.02em;color:var(--mp-key);
  font-variant-numeric:tabular-nums}
/* The 5.2rem is what keeps the years of one group under each other, and it also
   held a 5.2rem hole open next to the dot when a group had no year to print at
   all. A group with no dated term anywhere in it drops the column instead, so
   the post sits against its own dot. A group with even one date keeps it, and
   its undated rows stay in line with the dated ones. rdMpSvGroup adds no-dates,
   because only it can see the whole list. */
.rd-sv-grp.no-dates .rd-sv-y{display:none}
.rd-sv-p{min-width:0;font-size:.86rem;font-weight:700;line-height:1.4;color:var(--mp-ink)}
.rd-sv-chip{margin-left:.42rem;display:inline-flex;align-items:center;
  padding:.04rem .36rem .09rem;border-radius:.28rem;font-size:.59rem;font-weight:800;
  letter-spacing:.09em;text-transform:uppercase;color:#815414;white-space:nowrap;
  background:var(--mp-brasspale);border:1px solid rgba(169,119,42,.32)}
/* Work and education borrow the same object, so the profile reads as one
   system rather than three inventions. A group is a crest plus a rail; what
   changes is which icon is on the crest and what hangs off the rail. */
.rd-sv-org{display:block;font-size:.79rem;font-weight:500;color:var(--mp-steel,var(--mp-mute));
  line-height:1.45;margin:.1rem 0 0}
.rd-sv-t.has-sub{align-items:flex-start}
.rd-sv-t.has-sub .rd-sv-y{padding-top:.08rem}

/* ---- the membership application --------------------------------------- */
/* Not one field removed, not one renamed. Eighteen questions in a single
   column is what makes a person close the tab, so the same eighteen are dealt
   out in five named steps: who you are, DUET, where you live, what you do,
   and finish. Each step is one idea a person could say out loud, which is the
   rule that decides where the cuts go -- not a field count. */
.rd-reg{max-width:52rem;margin:0 auto}
.rd-reg-card{background:#fff;border:1px solid var(--mp-line);border-radius:1rem;
  overflow:hidden;box-shadow:var(--mp-e2)}
.rd-reg-plate{position:relative;padding:1.15rem 1.3rem 1.2rem;
  background:linear-gradient(160deg,#164272 0%,var(--rd-navy) 62%,#081a2e 100%);
  border-bottom:2px solid var(--mp-brass)}
.rd-reg-plate::after{content:'';position:absolute;left:0;right:0;top:0;height:1px;
  background:rgba(255,255,255,.14)}
.rd-reg-eyebrow{margin:0;font-family:'Space Grotesk',sans-serif;font-size:.64rem;
  font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--mp-brass2)}
.rd-reg-ttl{margin:.35rem 0 0;font-size:1.3rem;font-weight:750;color:#fff;
  letter-spacing:-.01em;line-height:1.25}
.rd-reg-sub{margin:.4rem 0 0;font-size:.82rem;line-height:1.55;color:rgba(255,255,255,.74);
  max-width:34rem}

/* The stepper. Named, because a number alone does not tell anybody what is
   coming, and the count is spoken as well as drawn. */
.rd-reg-steps{display:flex;margin:0;padding:0;list-style:none;background:#f7f9fc;
  border-bottom:1px solid var(--mp-line);overflow:hidden}
.rd-reg-step{flex:1 1 0;min-width:0;position:relative;padding:.7rem .5rem .72rem .95rem;
  font-size:.72rem;font-weight:700;color:var(--mp-mute);background:transparent;
  border:0;font-family:inherit;text-align:left;cursor:not-allowed;
  transition:color .2s,background .2s}
.rd-reg-step[data-open="1"]{cursor:pointer}
.rd-reg-step[data-open="1"]:hover{background:#eef3f9;color:var(--rd-navy)}
.rd-reg-step .rd-reg-sn{display:block;font-family:'Space Grotesk',sans-serif;
  font-size:.6rem;font-weight:600;letter-spacing:.14em;color:#93a1b3;margin-bottom:.12rem}
.rd-reg-step .rd-reg-sl{display:block;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap}
.rd-reg-step::after{content:'';position:absolute;left:0;right:0;bottom:0;height:2px;
  background:var(--mp-brass);transform:scaleX(0);transform-origin:left;
  transition:transform .34s cubic-bezier(.16,1,.3,1)}
.rd-reg-step[aria-current="step"]{color:var(--rd-navy);background:#fff}
.rd-reg-step[aria-current="step"]::after{transform:none}
.rd-reg-step[aria-current="step"] .rd-reg-sn{color:var(--mp-brass)}
.rd-reg-step.is-done{color:var(--mp-key)}
.rd-reg-step.is-done .rd-reg-sn{color:var(--mp-seal)}
/* On a phone five labels will not fit, so the stepper becomes the one line
   that matters -- where you are, out of how many, and what this step is called
   -- over a rule that fills as real steps complete. It must not lie: the rule
   is steps done over steps total, nothing else. */
.rd-reg-mob{display:block;padding:.7rem .95rem .8rem;background:#f7f9fc;
  border-bottom:1px solid var(--mp-line)}
.rd-reg-mobn{margin:0;font-family:'Space Grotesk',sans-serif;font-size:.63rem;
  font-weight:600;letter-spacing:.15em;text-transform:uppercase;color:var(--mp-brass)}
.rd-reg-mobl{margin:.16rem 0 .5rem;font-size:.92rem;font-weight:750;color:var(--rd-navy)}
.rd-reg-rule{height:3px;border-radius:3px;background:#dfe6ef;overflow:hidden}
.rd-reg-rule>span{display:block;height:100%;border-radius:3px;
  background:linear-gradient(90deg,var(--rd-navy2),var(--mp-brass));
  transition:width .4s cubic-bezier(.16,1,.3,1)}
@media (min-width:760px){.rd-reg-mob{display:none}}
@media (max-width:759px){.rd-reg-steps{display:none}}

/* ---- fields ------------------------------------------------------------ */
/* A premium input is a quiet one: a hairline, generous height, one clear focus
   ring, and a label that reads like a person asking. No inner shadows, no
   rounded-pill inputs, no placeholder standing in for a label. */
.rd-reg-body{padding:1.15rem 1.3rem 1.3rem}
.rd-reg-grid{display:grid;gap:.9rem 1rem;grid-template-columns:minmax(0,1fr)}
@media (min-width:640px){.rd-reg-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
.rd-reg-wide{grid-column:1/-1}
.rd-f{min-width:0}
.rd-f>label{display:block;font-size:.76rem;font-weight:650;color:#3d4c5f;
  margin:0 0 .3rem;letter-spacing:.005em}
.rd-f .rd-req{color:var(--mp-brass);font-weight:700}
.rd-f>input,.rd-f>select,.rd-f>textarea{width:100%;font:inherit;font-size:.88rem;
  color:var(--mp-ink);background:#fff;border:1px solid #cfd8e4;border-radius:.55rem;
  padding:.6rem .7rem;transition:border-color .18s,box-shadow .18s}
.rd-f>select{appearance:none;background-image:
  linear-gradient(45deg,transparent 49%,#5a6779 50%),
  linear-gradient(-45deg,transparent 49%,#5a6779 50%);
  background-size:5px 5px,5px 5px;
  background-position:calc(100% - 15px) 55%,calc(100% - 10px) 55%;
  background-repeat:no-repeat;padding-right:2rem}
.rd-f>input:hover,.rd-f>select:hover{border-color:#b3c0d1}
.rd-f>input:focus,.rd-f>select:focus,.rd-f>textarea:focus{outline:0;
  border-color:var(--rd-navy2);box-shadow:0 0 0 3px rgba(18,58,94,.13)}
.rd-f.is-bad>input,.rd-f.is-bad>select{border-color:#b91c1c;
  box-shadow:0 0 0 3px rgba(185,28,28,.1)}
.rd-f-err{margin:.28rem 0 0;font-size:.73rem;font-weight:600;color:#b91c1c}
.rd-f-hint{margin:.28rem 0 0;font-size:.73rem;color:var(--mp-mute);line-height:1.45}
.rd-reg-sec{margin:0 0 .9rem}
.rd-reg-sech{margin:0;font-size:1.02rem;font-weight:750;color:var(--mp-ink)}
.rd-reg-secp{margin:.25rem 0 0;font-size:.8rem;line-height:1.55;color:var(--mp-mute)}

/* ---- the step footer --------------------------------------------------- */
/* One primary action, one clearly subordinate way back. Back never costs a
   keystroke: every field stays in the DOM the whole time, so returning to a
   step shows exactly what was typed. */
.rd-reg-foot{display:flex;align-items:center;gap:.7rem;padding:1rem 1.3rem 1.15rem;
  border-top:1px solid var(--mp-line);background:#fafbfd}
.rd-reg-back{display:inline-flex;align-items:center;gap:.4rem;font:inherit;
  font-size:.82rem;font-weight:650;color:var(--mp-key);background:transparent;
  border:1px solid transparent;border-radius:.55rem;padding:.55rem .7rem;cursor:pointer;
  transition:background .18s,color .18s}
.rd-reg-back:hover{background:#eaeff6;color:var(--rd-navy)}
.rd-reg-back[hidden]{display:none}
.rd-reg-count{margin-left:auto;font-family:'Space Grotesk',sans-serif;font-size:.7rem;
  font-weight:600;letter-spacing:.08em;color:var(--mp-mute);
  font-variant-numeric:tabular-nums}
.rd-reg-next{position:relative;display:inline-flex;align-items:center;gap:.5rem;
  font:inherit;font-size:.85rem;font-weight:700;color:#fff;cursor:pointer;
  padding:.68rem 1.25rem;border-radius:.6rem;border:1px solid #091b31;
  background:linear-gradient(180deg,#1b4a78,var(--rd-navy));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.18),0 1px 2px rgba(12,35,64,.3);
  transition:box-shadow .24s,transform .24s,filter .24s}
.rd-reg-next i,.rd-reg-next svg{width:1rem;height:1rem;color:var(--mp-brass2)}
.rd-reg-next:hover{transform:translateY(-1px);filter:brightness(1.08);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.24),0 8px 20px -8px rgba(12,35,64,.55)}
.rd-reg-next:focus-visible{outline:2px solid var(--mp-brass2);outline-offset:2px}

/* ---- the review step --------------------------------------------------- */
/* Eighteen answers read back before anything is sent, each one linking to the
   step that owns it. A person about to hand over their phone number and their
   photograph is owed a last look. */
.rd-reg-rev{border:1px solid var(--mp-line);border-radius:.7rem;overflow:hidden}
.rd-reg-revg{display:flex;align-items:center;gap:.55rem;padding:.5rem .8rem;
  background:#f2f6fb;border-bottom:1px solid var(--mp-line);border-top:1px solid var(--mp-line)}
.rd-reg-rev>.rd-reg-revg:first-child{border-top:0}
.rd-reg-revn{margin:0;font-family:'Space Grotesk',sans-serif;font-size:.64rem;
  font-weight:600;letter-spacing:.13em;text-transform:uppercase;color:var(--rd-navy)}
.rd-reg-reve{margin-left:auto;font:inherit;font-size:.72rem;font-weight:700;
  color:var(--mp-key);background:none;border:0;cursor:pointer;padding:.1rem .25rem;
  border-radius:.3rem;text-decoration:underline;text-underline-offset:2px}
.rd-reg-reve:hover{color:var(--mp-brass);background:var(--mp-brasspale)}
.rd-reg-revr{display:flex;gap:.8rem;padding:.42rem .8rem;font-size:.8rem;line-height:1.5}
.rd-reg-revk{flex:0 0 9.5rem;color:var(--mp-mute);font-weight:600}
.rd-reg-revv{min-width:0;color:var(--mp-ink);font-weight:650;overflow-wrap:anywhere}
.rd-reg-revv.is-empty{color:#93a1b3;font-weight:500;font-style:italic}

/* ---- registration: the parts the stepper draws at run time -------------- */
.rd-reg-panel:focus{outline:none}
.rd-reg-panel:focus-visible{outline:2px solid var(--mp-key2);outline-offset:6px;
  border-radius:.4rem}
/* A group of controls that no single <label for> can name, so the name sits in a
   span and the group points at it. */
.rd-f-lab{display:block;margin:0 0 .3rem;font-size:.74rem;font-weight:700;
  letter-spacing:.02em;color:var(--mp-ink)}
.rd-reg-addr{display:grid;gap:.4rem;grid-template-columns:minmax(0,1fr)}
@media (min-width:520px){.rd-reg-addr{grid-template-columns:repeat(3,minmax(0,1fr))}}
.rd-reg-soc{display:grid;gap:.4rem}
.rd-reg-socr{display:grid;gap:.4rem;grid-template-columns:minmax(0,1fr)}
@media (min-width:520px){.rd-reg-socr{grid-template-columns:9.5rem minmax(0,1fr)}}
.rd-reg-socadd{justify-self:start;display:inline-flex;align-items:center;gap:.35rem;
  margin-top:.1rem;padding:.36rem .62rem;border-radius:.42rem;font-size:.74rem;
  font-weight:700;color:var(--mp-key);background:#fff;cursor:pointer;
  border:1px dashed rgba(23,65,107,.4);transition:background .18s,border-color .18s}
.rd-reg-socadd:hover{background:#f2f6fc;border-color:var(--mp-key2)}
.rd-reg-socadd:focus-visible{outline:2px solid var(--mp-key2);outline-offset:2px}
.rd-reg-socadd i,.rd-reg-socadd svg{width:.8rem;height:.8rem}
.rd-reg-revh{display:flex;align-items:center;gap:.6rem;margin:0 0 .45rem}
.rd-reg-reve i,.rd-reg-reve svg{width:.72rem;height:.72rem}

@media (prefers-reduced-motion:reduce){
  .nav-cta,.rd-reg-next,.rd-reg-step::after,.rd-reg-rule>span,.rd-sv-t,
  .rd-sv-t::after,.rd-sv-grp,.rd-reg-socadd{transition:none}
  .nav-cta:hover,.rd-reg-next:hover{transform:none}
}

/* ---- every icon was 24px ------------------------------------------------ */
/* lucide.createIcons() does not style the <i>, it replaces it with an <svg>,
   copying only the element's attributes across. So a rule written as
   `.rd-mp-act i{width:1.05rem}` matches nothing once the icons are drawn, and
   the whole preview has been rendering lucide's 24px default everywhere -- the
   heaviest thing on a line of 13px text. Thirteen selectors, all the same
   mistake, so all thirteen are widened to the svg here rather than left for
   later. Sizes are the ones the rules always intended. */
.rd-mp-cbtn svg,.rd-mp-act2 svg,.rd-rep-del svg,.rd-rep-add svg{width:.95rem;height:.95rem}
.rd-mp-act2 svg{color:var(--mp-key)}
.rd-mp-facebtn svg,.rd-dc-seg svg,.rd-ed-h svg{width:1rem;height:1rem}
.rd-mp-paper svg{width:1rem;height:1rem;color:var(--mp-key);flex:0 0 auto}
.rd-mp-name svg{width:1.15rem;height:1.15rem;color:var(--mp-seal);flex:0 0 auto}
.rd-mp-pill svg{width:.8rem;height:.8rem}
.rd-mp-act svg,.rd-mp-ico svg{width:1.05rem;height:1.05rem}
.rd-mp-sech svg{width:.9rem;height:.9rem;color:var(--mp-key);opacity:.75}
.rd-dc-open svg.rd-dc-arw{width:.9rem;height:.9rem}
.rd-reg-back svg{width:.9rem;height:.9rem}

/* ---- body and level: segments, not a dropdown ------------------------- */
/* Three fixed choices that decide which list the row belongs to. A select hid
   the answer and clipped the longest one; segments show all three, and the
   selected one is the only filled thing in the row, so a member scanning six
   rows reads the bodies without reading anything else. */
.rd-seg{display:flex;flex-wrap:wrap;gap:.35rem}
.rd-seg-o{flex:1 1 auto;min-width:0;position:relative;display:flex;cursor:pointer}
.rd-seg-r{position:absolute;width:1px;height:1px;margin:0;padding:0;opacity:0;
  pointer-events:none}
.rd-seg-b{flex:1 1 auto;min-width:0;display:inline-flex;align-items:center;
  justify-content:center;gap:.35rem;text-align:center;
  border:1px solid #d7deee;border-radius:.6rem;background:#fff;
  padding:.5rem .6rem;font-size:.8rem;font-weight:700;color:#5a6779;
  line-height:1.25;transition:color .18s,border-color .18s,background .18s,box-shadow .18s}
.rd-seg-b i,.rd-seg-b svg{width:.9rem;height:.9rem;flex:0 0 auto;opacity:.7}
.rd-seg-o:hover .rd-seg-b{border-color:#b3c0d1;color:var(--mp-ink)}
.rd-seg-r:checked+.rd-seg-b{background:var(--rd-navy);border-color:var(--rd-navy);
  color:#fff;box-shadow:var(--mp-e1)}
/* Brass on navy, the same pairing the plate uses, so the chosen segment reads
   as part of the record rather than as a form widget. */
.rd-seg-r:checked+.rd-seg-b i,.rd-seg-r:checked+.rd-seg-b svg{color:var(--mp-brass2);opacity:1}
.rd-seg-r:focus-visible+.rd-seg-b{outline:2px solid var(--mp-key2);outline-offset:2px}
/* Below 420px the three stack. "Rangdhanu Alumni Association" needs a whole
   line of a 320px phone to itself, and a segment can wrap where a select
   could not. */
@media (max-width:419px){
  .rd-seg{display:grid;grid-template-columns:minmax(0,1fr);gap:.3rem}
  .rd-seg-b{justify-content:flex-start;text-align:left}
}

/* ---- the two joins between the new stylesheet and the live page --------- */
/* The directory card is hovered on its own root, and #alumni-grid>.alumni-card
   already runs the rdCardIn entrance with fill-mode both. An animation outranks
   an author rule, so the 100% keyframe's transform:none would swallow the hover
   lift for good. The animation therefore stays on a wrapper and the card sits
   inside it -- one element each, and neither fights the other. */
.rd-dcw{display:flex;min-width:0}
.rd-dcw>.rd-dc{flex:1 1 auto}

/* My Profile now has two faces: the credential a member reads, and the form
   they edit. Both are in the page at once and only one is shown, which is what
   keeps a half-typed form from being thrown away by a stray click. */
.rd-mpx{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin-bottom:1rem}
.rd-mpx-b{display:inline-flex;align-items:center;gap:.4rem;padding:.5rem .85rem;
  border-radius:.6rem;border:1px solid var(--mp-line);background:#fff;cursor:pointer;
  font-size:.8rem;font-weight:700;color:var(--mp-mute);
  transition:color .18s,border-color .18s,background .18s}
.rd-mpx-b>i,.rd-mpx-b>svg{width:.9rem;height:.9rem;flex:0 0 auto}
.rd-mpx-b:hover{border-color:#b3c0d1;color:var(--mp-ink)}
.rd-mpx-b[aria-current="page"]{background:var(--rd-navy);border-color:var(--rd-navy);color:#fff}
.rd-mpx-b[aria-current="page"]>i,.rd-mpx-b[aria-current="page"]>svg{color:var(--mp-brass2)}
.rd-mpx-b:focus-visible{outline:2px solid var(--mp-key2);outline-offset:2px}
.rd-mpx-menu{position:relative}
.rd-mpx-dropdown{position:absolute;right:0;top:calc(100% + .4rem);z-index:10;min-width:9rem;padding:.3rem;border:1px solid #e2e8f0;border-radius:.8rem;background:#fff;box-shadow:0 14px 30px -18px rgba(15,23,42,.55)}
.rd-mpx-dropdown:not(.hidden){display:block}
.rd-mpx-dropdown button{display:flex;align-items:center;gap:.45rem;width:100%;padding:.55rem .65rem;border-radius:.55rem;color:#b42318;font-size:.78rem;font-weight:700;text-align:left}
.rd-mpx-dropdown button:hover{background:#fff1f2}
.rd-nav-profile-menu{position:relative}
.rd-nav-profile-trigger{display:inline-flex;align-items:center;gap:.35rem}
.rd-nav-profile-chevron{width:.85rem;height:.85rem;transition:transform .18s}
.rd-nav-profile-trigger[aria-expanded="true"] .rd-nav-profile-chevron{transform:rotate(180deg)}
.rd-nav-profile-dropdown{position:absolute;right:0;top:calc(100% + .45rem);z-index:60;min-width:10rem;padding:.3rem;border:1px solid #e2e8f0;border-radius:.8rem;background:#fff;box-shadow:0 16px 34px -18px rgba(15,23,42,.55)}
.rd-nav-profile-dropdown:not(.hidden){display:block}
.rd-nav-profile-dropdown button{display:block;width:100%;padding:.6rem .7rem;border-radius:.55rem;color:#334155;font-size:.78rem;font-weight:700;text-align:left;white-space:nowrap}
.rd-nav-profile-dropdown button:hover{background:#f1f5f9}
.rd-nav-profile-dropdown .rd-nav-profile-danger{color:#b42318}
.rd-nav-profile-dropdown .rd-nav-profile-danger:hover{background:#fff1f2}
.rd-mobile-profile-menu{display:block}
.rd-mobile-profile-trigger{display:flex;align-items:center;justify-content:space-between}
.rd-mobile-profile-dropdown{position:static;margin:.25rem 0 .5rem 1rem;box-shadow:none}
.ec-owner-mode{padding:.55rem .9rem;border:1px solid rgba(148,163,184,.3);border-radius:.7rem;background:rgba(255,255,255,.68);color:#475569;font-size:.78rem;font-weight:800;cursor:pointer;transition:.2s;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
.ec-owner-mode:hover{background:rgba(255,255,255,.9);border-color:rgba(15,118,110,.28)}
.ec-owner-mode.active{background:rgba(255,255,255,.9);border-color:rgba(15,118,110,.38);color:#0f766e;box-shadow:0 8px 18px -14px rgba(15,118,110,.7),inset 0 1px 0 rgba(255,255,255,.95)}
.ec-member-result{display:flex;align-items:center;justify-content:space-between;gap:.75rem;width:100%;padding:.7rem .8rem;border:1px solid #e2e8f0;border-radius:.75rem;background:#fff;text-align:left;cursor:pointer}
.ec-member-result:hover{border-color:#99f6e4;background:#f0fdfa}
.rd-mpx-n{flex:1 1 12rem;min-width:0;margin:0;font-size:.78rem;line-height:1.5;
  color:var(--mp-mute)}
@media (prefers-reduced-motion:reduce){.rd-mpx-b{transition:none}}
body.rd-member-restoring #page-my-profile > * {
  visibility: hidden;
}

/* Keep the desktop navigation light and restrained: the active item reads as
   frosted glass instead of a solid blue tab, while the strip stays bright. */
@media (min-width: 1280px) {
  .nav-strip {
    background: rgba(255, 255, 255, .78);
    border-top: 1px solid rgba(255, 255, 255, .85);
    border-bottom: 1px solid rgba(148, 163, 184, .2);
    backdrop-filter: blur(18px) saturate(135%);
    -webkit-backdrop-filter: blur(18px) saturate(135%);
    box-shadow: 0 10px 28px -24px rgba(15, 23, 42, .45);
  }

  /* Refined home hero: calmer colour contrast and a more editorial Bengali
     headline keep the opening screen premium without looking promotional. */
  .rd-home-hero {
    background: #fbfcfe;
    border-color: rgba(148, 163, 184, .18);
  }
  .rd-home-hero-glow {
    background:
      radial-gradient(circle at 16% 8%, rgba(15, 118, 110, .07), transparent 30%),
      radial-gradient(circle at 86% 12%, rgba(30, 64, 175, .055), transparent 30%);
    pointer-events: none;
  }
  .rd-home-hero-content { position: relative; }
  .rd-hero-kicker {
    color: #526277;
    background: rgba(255, 255, 255, .74);
    border: 1px solid rgba(148, 163, 184, .26);
    box-shadow: 0 6px 18px -16px rgba(15, 23, 42, .7);
    font-family: 'Plus Jakarta Sans', 'Noto Sans Bengali', sans-serif;
    font-size: .66rem;
    font-weight: 700;
    letter-spacing: .08em;
  }
  .rd-home-hero-title {
    color: #102a43;
    font-family: 'Noto Sans Bengali', sans-serif;
    font-size: clamp(2.05rem, 5.7vw, 4.15rem);
    font-weight: 700;
    line-height: 1.2;
    letter-spacing: -.055em;
  }
  .rd-home-hero-title span {
    color: #0f766e;
    display: inline-block;
    margin-top: .18rem;
  }
  .rd-home-hero-copy {
    color: #617084;
    font-family: 'Noto Sans Bengali', 'Plus Jakarta Sans', sans-serif;
    font-size: clamp(.96rem, 1.55vw, 1.12rem);
    font-weight: 400;
    line-height: 1.95;
  }
  .rd-home-hero-actions button {
    min-height: 3.15rem;
    padding: .8rem 1.35rem;
    border-radius: .85rem;
    font-family: 'Noto Sans Bengali', 'Plus Jakarta Sans', sans-serif;
    font-size: .86rem;
    font-weight: 600;
    letter-spacing: -.01em;
    transition: transform .22s ease, box-shadow .22s ease, background-color .22s ease, border-color .22s ease;
  }

  /* Executive committee: a calmer editorial surface with one clear visual
     hierarchy for the leaders, selectors, and supporting member cards. */
  .rd-committee-page {
    background:
      radial-gradient(circle at 50% 0%, rgba(15, 118, 110, .055), transparent 28rem),
      #f7f9fc;
  }
  .rd-committee-kicker {
    color: #0f766e;
    background: rgba(240, 253, 250, .86);
    border: 1px solid rgba(15, 118, 110, .18);
  }
  .rd-committee-title {
    color: #102a43;
    letter-spacing: -.035em;
  }
  .rd-committee-intro {
    color: #64748b;
  }
  #ec-committee-tabs {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .ec-committee-tab {
    min-height: 5.9rem;
    background: rgba(255, 255, 255, .76);
    border-color: rgba(148, 163, 184, .24);
    box-shadow: 0 12px 28px -26px rgba(15, 23, 42, .7);
  }
  .ec-committee-tab:hover {
    border-color: rgba(15, 118, 110, .35);
    transform: translateY(-2px);
  }
  .ec-committee-tab.bg-blue-600 {
    background: #102a43;
    border-color: #102a43;
    box-shadow: 0 16px 30px -22px rgba(16, 42, 67, .8);
  }
  #ec-session-tabs {
    padding: .3rem;
    width: fit-content;
    max-width: 100%;
    margin-left: auto;
    margin-right: auto;
    border: 1px solid rgba(148, 163, 184, .2);
    border-radius: 999px;
    background: rgba(255, 255, 255, .68);
  }
  .ec-session-tab {
    border-color: transparent;
  }
  .ec-session-tab.bg-slate-900 {
    background: #0f766e;
    border-color: #0f766e;
    box-shadow: 0 8px 18px -14px rgba(15, 118, 110, .9);
  }
  .ec-leader-card {
    border-color: rgba(15, 118, 110, .2);
    box-shadow: 0 18px 44px -30px rgba(16, 42, 67, .75);
  }
  .ec-leader-card:hover,
  .ec-member-card:hover {
    transform: translateY(-3px);
    box-shadow: 0 22px 42px -30px rgba(16, 42, 67, .72);
  }
  .ec-leader-card .bg-blue-600 {
    background: #0f766e;
  }
  .ec-member-card {
    border-color: rgba(148, 163, 184, .2);
    box-shadow: 0 12px 28px -25px rgba(15, 23, 42, .65);
  }
  .ec-member-card .bg-blue-50 {
    background: #ecfdf5;
    border-color: #ccefe4;
    color: #0f766e;
  }
  .rd-committee-submit {
    background: linear-gradient(135deg, #102a43, #17416b);
    border: 1px solid rgba(255, 255, 255, .1);
    box-shadow: 0 22px 42px -30px rgba(16, 42, 67, .82);
  }
  .rd-committee-submit p {
    color: rgba(255, 255, 255, .78);
  }
  .rd-committee-submit p:first-child {
    color: #fff;
  }
  .rd-committee-submit button {
    background: #fff;
    color: #102a43;
  }
  .rd-committee-submit button:hover {
    background: #ccfbf1;
    color: #0f766e;
  }
  @media (max-width: 639px) {
    #ec-committee-tabs { grid-template-columns: 1fr; }
    .ec-committee-tab { min-height: 0; }
    #ec-session-tabs { border-radius: 1rem; width: 100%; justify-content: center; }
  }
  .rd-hero-primary {
    color: #fff;
    background: #102a43;
    border: 1px solid #102a43;
    box-shadow: 0 12px 24px -16px rgba(16, 42, 67, .75);
  }
  .rd-hero-primary:hover {
    background: #183f5f;
    box-shadow: 0 16px 28px -16px rgba(16, 42, 67, .8);
    transform: translateY(-2px);
  }
  .rd-hero-secondary {
    color: #17416b;
    background: rgba(255, 255, 255, .82);
    border: 1px solid rgba(23, 65, 107, .2);
    box-shadow: 0 8px 18px -16px rgba(15, 23, 42, .65);
  }
  .rd-hero-secondary:hover {
    color: #0f766e;
    background: #fff;
    border-color: rgba(15, 118, 110, .38);
    box-shadow: 0 14px 24px -17px rgba(15, 118, 110, .5);
    transform: translateY(-2px);
  }
  @media (max-width: 639px) {
    .rd-home-hero-title { letter-spacing: -.045em; }
    .rd-hero-kicker { font-size: .58rem; letter-spacing: .045em; }
    .rd-home-hero-copy { line-height: 1.8; }
    .rd-home-hero-actions button { width: min(100%, 18rem); }
  }
  @media (min-width: 1280px) {
    .rd-home-hero-title {
      font-size: clamp(2.35rem, 3.35vw, 3.35rem);
      line-height: 1.26;
      letter-spacing: -.035em;
    }
    .rd-home-hero-copy {
      max-width: 52rem;
      font-size: 1rem;
      line-height: 1.8;
    }
    .rd-home-hero-actions {
      margin-top: 1.6rem;
    }
  }
  .nav-strip .premium-nav-item {
    font-family: 'Plus Jakarta Sans', 'Noto Sans Bengali', sans-serif;
    font-size: .76rem;
    font-weight: 600;
    letter-spacing: .005em;
    color: #475569;
    border: 1px solid transparent;
    border-radius: 10px;
    background: transparent;
  }
  .nav-strip .premium-nav-item:hover {
    color: #0f3d63;
    background: rgba(255, 255, 255, .72);
    border-color: rgba(148, 163, 184, .24);
    box-shadow: 0 5px 14px -12px rgba(15, 23, 42, .6);
  }
  .nav-strip .premium-nav-item.active {
    color: #17416b;
    background: rgba(255, 255, 255, .88);
    border-color: rgba(148, 163, 184, .3);
    box-shadow: 0 6px 16px -13px rgba(15, 23, 42, .7), inset 0 1px 0 rgba(255, 255, 255, .95);
  }
  .nav-strip .premium-nav-item.active::after {
    display: block;
    left: 16px;
    right: 16px;
    bottom: 3px;
    height: 2px;
    background: linear-gradient(90deg, transparent, #38a5df, transparent);
  }
  .nav-strip .nav-cta {
    font-family: 'Plus Jakarta Sans', 'Noto Sans Bengali', sans-serif;
    font-weight: 600;
  }
}

/* The hero styles also apply below the desktop navigation breakpoint. */
.rd-home-hero {
  background: #fbfcfe;
  border-color: rgba(148, 163, 184, .18);
}
.rd-home-hero-glow {
  background:
    radial-gradient(circle at 16% 8%, rgba(15, 118, 110, .07), transparent 30%),
    radial-gradient(circle at 86% 12%, rgba(30, 64, 175, .055), transparent 30%);
  pointer-events: none;
}
.rd-home-hero-content { position: relative; }
.rd-hero-kicker {
  color: #526277;
  background: rgba(255, 255, 255, .74);
  border: 1px solid rgba(148, 163, 184, .26);
  box-shadow: 0 6px 18px -16px rgba(15, 23, 42, .7);
  font-family: 'Plus Jakarta Sans', 'Noto Sans Bengali', sans-serif;
  font-size: .66rem;
  font-weight: 700;
  letter-spacing: .08em;
}
.rd-home-hero-title {
  color: #102a43;
  font-family: 'Noto Sans Bengali', sans-serif;
  font-size: clamp(2.05rem, 5.7vw, 4.15rem);
  font-weight: 700;
  line-height: 1.2;
  letter-spacing: -.055em;
}
.rd-home-hero-title span {
  color: #0f766e;
  display: inline-block;
  margin-top: .18rem;
}
.rd-home-hero-copy {
  color: #617084;
  font-family: 'Noto Sans Bengali', 'Plus Jakarta Sans', sans-serif;
  font-size: clamp(.96rem, 1.55vw, 1.12rem);
  font-weight: 400;
  line-height: 1.95;
}
.rd-home-hero-actions button {
  min-height: 3.15rem;
  padding: .8rem 1.35rem;
  border-radius: .85rem;
  font-family: 'Noto Sans Bengali', 'Plus Jakarta Sans', sans-serif;
  font-size: .86rem;
  font-weight: 600;
  letter-spacing: -.01em;
}
.rd-hero-primary {
  color: #fff;
  background: #102a43;
  border: 1px solid #102a43;
  box-shadow: 0 12px 24px -16px rgba(16, 42, 67, .75);
}
.rd-hero-secondary {
  color: #17416b;
  background: rgba(255, 255, 255, .82);
  border: 1px solid rgba(23, 65, 107, .2);
  box-shadow: 0 8px 18px -16px rgba(15, 23, 42, .65);
}
@media (max-width: 639px) {
  .rd-home-hero-title { letter-spacing: -.045em; }
  .rd-hero-kicker { font-size: .58rem; letter-spacing: .045em; }
  .rd-home-hero-copy { line-height: 1.8; }
  .rd-home-hero-actions button { width: min(100%, 18rem); }
}
