*  {
  
    box-sizing: border-box

}

html, body  {
  
    margin: 0;
  
    min-height: 100%;
  
    overflow-x: hidden

}

html  {
  
    scroll-behavior: smooth

}

:root  {
  
    --primary: #0f4d3a;
  
    --primary2: #17664e;
  
    --gold: #d9c529;
  
    --ink: #17231f;
  
    --muted: #63736d;
  
    --soft: #edf4f1;
  
    --line: #dce6e2;
  
    --white: #fff;
  
    --shadow: 0 18px 44px rgba(15, 77, 58, .13);
  
    --r: 8px

}

body  {
  
    font-family: Inter, system-ui, -apple-system, "Segoe UI", sans-serif;
  
    background: #f6f9f8;
  
    color: var(--ink);
  
    line-height: 1.65

}

a  {
  
    text-decoration: none;
  
    color: inherit

}

img  {
  
    display: block;
  
    max-width: 100%

}

button, input, select, textarea  {
  
    font: inherit

}

.container  {
  
    width: min(1120px, calc(100% - 40px));
  
    margin: auto

}

.section  {
  
    padding: 82px 0

}

.soft  {
  
    background: var(--soft)

}

.eyebrow  {
  
    display: inline-flex;
  
    gap: 8px;
  
    align-items: center;
  
    color: var(--primary);
  
    font-size: 13px;
  
    font-weight: 900;
  
    letter-spacing: .08em;
  
    text-transform: uppercase

}

.eyebrow:before  {
  
    content: "";
  
    width: 26px;
  
    height: 2px;
  
    background: var(--gold)

}

.title  {
  
    margin: 10px 0 14px;
  
    color: var(--primary);
  
    font-size: clamp(30px, 4.8vw, 54px);
  
    line-height: 1.06

}

.lead  {
  
    max-width: 760px;
  
    margin: 0;
  
    color: var(--muted);
  
    font-size: 18px

}

.grid  {
  
    display: grid;
  
    gap: 22px

}

.g2  {
  
    grid-template-columns: repeat(2, minmax(0, 1fr))

}

.g3  {
  
    grid-template-columns: repeat(3, minmax(0, 1fr))

}

.g4  {
  
    grid-template-columns: repeat(4, minmax(0, 1fr))

}

.card  {
  
    background: #fff;
  
    border: 1px solid var(--line);
  
    border-radius: var(--r);
  
    box-shadow: 0 10px 26px rgba(15, 77, 58, .08);
  
    transition: .22s

}

.card:hover  {
  
    transform: translateY(-4px);
  
    box-shadow: var(--shadow);
  
    border-color: rgba(15, 77, 58, .22)

}

.btn  {
  
    display: inline-flex;
  
    align-items: center;
  
    justify-content: center;
  
    min-height: 46px;
  
    padding: 0 20px;
  
    border: 1px solid transparent;
  
    border-radius: 8px;
  
    font-weight: 900;
  
    cursor: pointer;
  
    transition: .2s

}

.btn:hover  {
  
    transform: translateY(-2px)

}

.btn-primary, .primary-btn  {
  
    background: var(--primary);
  
    color: #fff

}

.btn-primary:hover, .primary-btn:hover  {
  
    background: #0a3a2c

}

.btn-secondary, .btn-ghost  {
  
    background: #fff;
  
    color: var(--primary);
  
    border-color: var(--primary)

}

.btn-secondary:hover, .btn-ghost:hover  {
  
    background: var(--primary);
  
    color: #fff

}

.hero  {
  
    min-height: calc(100vh - 86px);
  
    display: grid;
  
    place-items: center;
  
    padding: 76px 0;
  
    background: linear-gradient(90deg, rgba(246, 249, 248, .98), rgba(246, 249, 248, .9)), url('../assets/images/engineering-bg.png') center/cover

}

.hero-grid  {
  
    display: grid;
  
    grid-template-columns: 1.05fr .95fr;
  
    gap: 42px;
  
    align-items: center

}

.hero h1, .hero h2  {
  
    margin: 0 0 18px;
  
    color: var(--primary);
  
    font-size: clamp(42px, 6vw, 72px);
  
    line-height: 1.03

}

.hero p  {
  
    margin: 0 0 28px;
  
    max-width: 650px;
  
    color: #52605b;
  
    font-size: 18px

}

.actions  {
  
    display: flex;
  
    gap: 14px;
  
    flex-wrap: wrap

}

.visual  {
  
    position: relative;
  
    min-height: 420px;
  
    border: 1px solid var(--line);
  
    border-radius: 8px;
  
    background: linear-gradient(135deg, #fff, #edf4f1);
  
    box-shadow: var(--shadow);
  
    overflow: hidden

}

.visual:before  {
  
    content: "";
  
    position: absolute;
  
    inset: 0;
  
    background-image: linear-gradient(rgba(15, 77, 58, .08) 1px, transparent 1px), linear-gradient(90deg, rgba(15, 77, 58, .08) 1px, transparent 1px);
  
    background-size: 34px 34px

}

.visual-panel  {
  
    position: absolute;
  
    left: 28px;
  
    right: 28px;
  
    bottom: 28px;
  
    padding: 24px;
  
    background: rgba(255, 255, 255, .94);
  
    border: 1px solid var(--line);
  
    border-radius: 8px

}

.mini  {
  
    display: grid;
  
    grid-template-columns: repeat(3, 1fr);
  
    gap: 12px;
  
    margin-top: 16px

}

.mini span  {
  
    padding: 12px;
  
    background: var(--soft);
  
    border-radius: 8px;
  
    color: var(--muted);
  
    font-size: 12px

}

.mini b  {
  
    display: block;
  
    color: var(--primary);
  
    font-size: 24px

}

.quick, .resource-card, .video-body, .info, .faq, .profile  {
  
    padding: 24px

}

.icon  {
  
    width: 48px;
  
    height: 48px;
  
    display: grid;
  
    place-items: center;
  
    background: var(--soft);
  
    border-radius: 8px;
  
    color: var(--primary);
  
    font-weight: 900

}

.quick h3, .resource-card h3, .video-body h3  {
  
    margin: 16px 0 8px;
  
    color: var(--primary);
  
    line-height: 1.25

}

.quick p, .resource-card p, .video-body p  {
  
    margin: 0;
  
    color: var(--muted)

}

.stats  {
  
    background: var(--primary);
  
    color: #fff

}

.stat  {
  
    padding: 24px;
  
    border: 1px solid rgba(255, 255, 255, .16);
  
    border-radius: 8px;
  
    background: rgba(255, 255, 255, .08)

}

.stat b  {
  
    display: block;
  
    font-size: 38px;
  
    line-height: 1

}

.page-head  {
  
    padding: 78px 0 54px;
  
    background: linear-gradient(90deg, #f8fbfa, #edf4f1);
  
    border-bottom: 1px solid var(--line)

}

.page-head h1  {
  
    max-width: 820px;
  
    margin: 8px 0 12px;
  
    color: var(--primary);
  
    font-size: clamp(36px, 5vw, 60px);
  
    line-height: 1.05

}

.toolbar  {
  
    display: grid;
  
    grid-template-columns: 1fr auto;
  
    gap: 14px;
  
    margin: 30px 0

}

.control  {
  
    width: 100%;
  
    min-height: 48px;
  
    padding: 0 14px;
  
    border: 1px solid var(--line);
  
    border-radius: 8px;
  
    background: #fff;
  
    outline: none

}

.control:focus  {
  
    border-color: var(--primary);
  
    box-shadow: 0 0 0 4px rgba(15, 77, 58, .08)

}

.filters  {
  
    display: flex;
  
    gap: 10px;
  
    flex-wrap: wrap;
  
    margin-bottom: 28px

}

.filter  {
  
    min-height: 40px;
  
    padding: 0 14px;
  
    border: 1px solid var(--line);
  
    border-radius: 8px;
  
    background: #fff;
  
    color: var(--primary);
  
    font-weight: 900

}

.filter.active, .filter:hover  {
  
    background: var(--primary);
  
    color: #fff

}

.badge  {
  
    display: inline-flex;
  
    align-items: center;
  
    min-height: 28px;
  
    padding: 0 10px;
  
    border-radius: 999px;
  
    background: var(--soft);
  
    color: var(--primary);
  
    font-size: 12px;
  
    font-weight: 900

}

.changelog-layout  {

    display: grid;

    grid-template-columns: minmax(260px, .72fr) minmax(0, 1.6fr);

    gap: 22px;

    align-items: start

}

.changelog-summary  {

    position: sticky;

    top: 110px

}

.changelog-summary h2  {

    margin: 12px 0;

    color: var(--primary);

    font-size: 30px;

    line-height: 1.1

}

.changelog-summary p  {

    color: var(--muted);

    line-height: 1.65

}

.changelog-list  {

    display: grid;

    gap: 14px

}

.changelog-item  {

    display: grid;

    grid-template-columns: 130px minmax(0, 1fr);

    gap: 18px;

    padding: 18px;

    border: 1px solid var(--line);

    border-radius: 8px;

    background: #fff;

    box-shadow: 0 10px 26px rgba(15, 77, 58, .07)

}

.changelog-item time  {

    color: var(--muted);

    font-size: 13px;

    font-weight: 900

}

.changelog-type  {

    display: inline-flex;

    min-height: 28px;

    align-items: center;

    padding: 0 10px;

    border-radius: 999px;

    background: #edf4f1;

    color: var(--primary);

    font-size: 12px;

    font-weight: 900

}

.changelog-type.added  {

    background: rgba(15, 77, 58, .1)

}

.changelog-type.improved  {

    background: rgba(217, 197, 41, .24)

}

.changelog-type.fixed  {

    background: rgba(41, 117, 217, .12)

}

.changelog-item h3  {

    margin: 10px 0 6px;

    color: var(--primary)

}

.changelog-item p  {

    margin: 0;

    color: var(--muted);

    line-height: 1.65

}

.meta  {
  
    display: flex;
  
    gap: 8px;
  
    flex-wrap: wrap

}

.resource-card  {
  
    display: flex;
  
    flex-direction: column;
  
    gap: 12px

}

.resource-card .actions  {
  
    margin-top: auto

}

.access-card  {

    max-width: 820px;

    margin: 0 auto;

    display: grid;

    gap: 18px

}

.access-card h2  {

    margin: 0;

    color: var(--primary);

    font-size: clamp(28px, 4vw, 44px);

    line-height: 1.08

}

.access-card p  {

    margin: 0;

    color: #52605b;

    font-size: 17px;

    line-height: 1.8

}

.notice-card  {

    padding: 18px;

    border: 1px solid var(--line);

    border-radius: 8px;

    background: var(--soft)

}

.notice-card strong  {

    display: block;

    margin-bottom: 6px;

    color: var(--primary)

}

.help-head-actions  {

    margin-top: 24px

}

.onboarding-grid .quick  {

    min-height: 100%;

    border-top: 4px solid var(--primary)

}

.student-guide-panel  {

    display: grid;

    grid-template-columns: repeat(3, minmax(0, 1fr));

    gap: 16px

}

.student-guide-panel article  {

    padding: 22px;

    border: 1px solid var(--line);

    border-radius: 8px;

    background: #fff;

    box-shadow: 0 18px 42px rgba(15, 77, 58, .08)

}

.student-guide-panel h3  {

    margin: 0 0 12px;

    color: var(--primary);

    font-size: 19px

}

.student-guide-panel ul  {

    display: grid;

    gap: 10px;

    margin: 0;

    padding-left: 20px;

    color: var(--muted);

    line-height: 1.65

}

.pwa-install-hint  {

    position: fixed;

    left: 18px;

    bottom: 18px;

    z-index: 1200;

    width: min(340px, calc(100vw - 36px));

    display: grid;

    gap: 8px;

    padding: 16px;

    border: 1px solid rgba(15, 77, 58, .16);

    border-radius: 8px;

    background: #fff;

    box-shadow: 0 24px 60px rgba(15, 77, 58, .22)

}

.pwa-install-hint strong  {

    color: var(--primary);

    font-size: 16px

}

.pwa-install-hint span  {

    color: var(--muted);

    font-size: 13px;

    line-height: 1.5

}

.pwa-install-hint div  {

    display: flex;

    gap: 8px;

    flex-wrap: wrap

}

.pwa-install-hint button  {

    min-height: 38px;

    padding: 0 13px;

    border: 1px solid rgba(15, 77, 58, .18);

    border-radius: 8px;

    background: var(--primary);

    color: #fff;

    font-weight: 900

}

.pwa-install-hint button[data-pwa-close]  {

    background: #fff;

    color: var(--primary)

}

.pagination  {
  
    display: flex;
  
    justify-content: center;
  
    gap: 8px;
  
    margin-top: 34px

}

.pagination button  {
  
    width: 40px;
  
    height: 40px;
  
    border: 1px solid var(--line);
  
    border-radius: 8px;
  
    background: #fff;
  
    color: var(--primary);
  
    font-weight: 900

}

.pagination .active  {
  
    background: var(--primary);
  
    color: #fff

}

.thumb  {
  
    height: 178px;
  
    display: grid;
  
    place-items: center;
  
    background: linear-gradient(135deg, #0f4d3a, #238464);
  
    color: #fff;
  
    font-size: 42px;
  
    font-weight: 900

}

.video-card  {
  
    overflow: hidden

}

.content-grid  {
    margin-top: 30px
}

#homeAnnouncements.content-grid  {
    display: block
}

.announcement-carousel-shell  {
    position: relative
}

.announcement-viewport  {
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    scroll-behavior: smooth;
    scrollbar-width: none;
    border-radius: 8px;
    -webkit-overflow-scrolling: touch
}

.announcement-viewport::-webkit-scrollbar  {
    display: none
}

.announcement-track  {
    display: flex;
    gap: 22px;
    align-items: flex-start
}

.announcement-track .announcement-card  {
    flex: 0 0 100%;
    scroll-snap-align: start;
    scroll-snap-stop: always
}

.announcement-nav  {
    position: absolute;
    top: 50%;
    z-index: 5;
    width: 46px;
    height: 46px;
    display: grid;
    place-items: center;
    border: 1px solid rgba(15, 77, 58, .18);
    border-radius: 999px;
    background: rgba(255, 255, 255, .94);
    color: var(--primary);
    box-shadow: 0 14px 34px rgba(15, 77, 58, .18);
    transform: translateY(-50%);
    cursor: pointer;
    transition: .2s
}

.announcement-nav:hover  {
    background: var(--primary);
    color: #fff
}

.announcement-nav:disabled  {
    opacity: .35;
    cursor: default;
    pointer-events: none
}

.announcement-nav span  {
    font-size: 34px;
    font-weight: 900;
    line-height: 1
}

.announcement-nav-prev  {
    left: 14px
}

.announcement-nav-next  {
    right: 14px
}

.announcement-card  {
    overflow: hidden;
    display: flex;
    flex-direction: column;
    position: relative;
    background: linear-gradient(180deg, #ffffff, #fbfefd);
    border-color: rgba(15, 77, 58, .12);
    box-shadow: 0 16px 38px rgba(15, 77, 58, .08);
    transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease
}

.announcement-card:before  {
    content: "";
    position: absolute;
    inset: 0 0 auto;
    height: 4px;
    background: linear-gradient(90deg, var(--gold), var(--primary));
    z-index: 2
}

.announcement-card:hover  {
    transform: translateY(-4px);
    border-color: rgba(15, 77, 58, .22);
    box-shadow: 0 22px 48px rgba(15, 77, 58, .13)
}

.featured-announcement  {
    grid-column: 1 / -1;
    display: grid;
    grid-template-columns: minmax(320px, .72fr) minmax(0, 1fr);
    border-color: rgba(217, 197, 41, .5)
}

.announcement-media  {
    width: 100%;
    height: 190px;
    flex: 0 0 190px;
    display: grid;
    place-items: center;
    background:
        radial-gradient(circle at 20% 15%, rgba(255,255,255,.24), transparent 28%),
        linear-gradient(135deg, #0f4d3a, #1b8060 55%, #d9c529);
    color: #fff;
    font-size: 42px;
    font-weight: 900;
    overflow: hidden;
    position: relative
}

.announcement-media:after  {
    content: "";
    position: absolute;
    inset: auto 18px 16px;
    height: 1px;
    background: rgba(255,255,255,.42)
}

.announcement-media.has-image  {
    height: auto;
    flex: 0 0 auto;
    display: block;
    padding: 0;
    background: #fff;
    border-bottom: 1px solid var(--line)
}

.announcement-media.has-image:after  {
    display: none
}

.featured-announcement .announcement-media.has-image  {
    height: auto;
    min-height: 0;
    align-self: start;
    border-right: 1px solid var(--line);
    border-bottom: 0
}

.announcement-media img  {
    width: 100%;
    height: auto;
    object-fit: contain;
    background: #fff
}

.announcement-image-button  {
    width: 100%;
    display: block;
    padding: 0;
    border: 0;
    background: #fff;
    cursor: zoom-in;
    position: relative;
    text-align: left
}

.announcement-image-button img  {
    display: block
}

.announcement-image-button span  {
    position: absolute;
    right: 12px;
    bottom: 12px;
    z-index: 2;
    display: inline-flex;
    align-items: center;
    min-height: 34px;
    padding: 8px 12px;
    border-radius: 999px;
    background: rgba(15, 77, 58, .92);
    color: #fff;
    font-size: 12px;
    font-weight: 900;
    box-shadow: 0 12px 26px rgba(0, 0, 0, .18);
    opacity: 0;
    transform: translateY(6px);
    transition: .18s
}

.announcement-image-button:hover span,
.announcement-image-button:focus-visible span  {
    opacity: 1;
    transform: translateY(0)
}

.photo-modal-open  {
    overflow: hidden
}

.announcement-photo-modal  {
    position: fixed;
    inset: 0;
    z-index: 9999;
    display: grid;
    place-items: center;
    padding: 18px
}

.announcement-photo-modal[hidden]  {
    display: none
}

.announcement-photo-backdrop  {
    position: absolute;
    inset: 0;
    background: rgba(5, 27, 21, .78);
    backdrop-filter: blur(10px)
}

.announcement-photo-dialog  {
    position: relative;
    z-index: 1;
    width: min(980px, 100%);
    max-height: calc(100dvh - 36px);
    display: grid;
    grid-template-rows: auto minmax(0, 1fr) auto;
    overflow: hidden;
    border: 1px solid rgba(255, 255, 255, .2);
    border-radius: 8px;
    background: #fff;
    box-shadow: 0 30px 80px rgba(0, 0, 0, .34)
}

.announcement-photo-toolbar,
.announcement-photo-actions  {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 14px 16px;
    background: #fff
}

.announcement-photo-toolbar  {
    border-bottom: 1px solid var(--line)
}

.announcement-photo-toolbar h3  {
    margin: 0;
    color: var(--primary);
    font-size: 18px;
    line-height: 1.25
}

.announcement-photo-close  {
    width: 42px;
    height: 42px;
    display: grid;
    place-items: center;
    border: 1px solid var(--line);
    border-radius: 999px;
    background: #f8fbfa;
    color: var(--primary);
    font-size: 26px;
    line-height: 1;
    cursor: pointer
}

.announcement-photo-frame  {
    min-height: 0;
    overflow: auto;
    display: grid;
    place-items: center;
    background: #f3f8f6;
    -webkit-overflow-scrolling: touch
}

.announcement-photo-frame img  {
    max-width: 100%;
    max-height: calc(100dvh - 170px);
    width: auto;
    height: auto;
    object-fit: contain;
    background: #fff
}

.announcement-photo-actions  {
    justify-content: flex-end;
    border-top: 1px solid var(--line)
}

@media (max-width: 640px)  {
    .announcement-image-button span  {
        opacity: 1;
        transform: none;
        right: 10px;
        bottom: 10px
    }

    .announcement-photo-modal  {
        padding: 10px
    }

    .announcement-photo-dialog  {
        max-height: calc(100dvh - 20px)
    }

    .announcement-photo-toolbar,
    .announcement-photo-actions  {
        padding: 12px
    }

    .announcement-photo-toolbar h3  {
        font-size: 16px
    }

    .announcement-photo-frame img  {
        max-height: calc(100dvh - 170px)
    }

    .announcement-photo-actions  {
        display: grid;
        grid-template-columns: 1fr 1fr
    }

    .announcement-photo-actions .btn  {
        width: 100%;
        justify-content: center;
        padding-inline: 10px
    }
}

.announcement-body  {
    position: relative;
    z-index: 1;
    padding: 24px;
    background: #fff;
    display: flex;
    flex-direction: column;
    gap: 12px;
    flex: 1;
    color: var(--ink)
}

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

.announcement-type,
.announcement-date  {
    display: inline-flex;
    align-items: center;
    width: max-content;
    max-width: 100%;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 900;
    line-height: 1.2
}

.announcement-type  {
    padding: 7px 10px;
    background: #eaf5f0;
    color: var(--primary);
    text-transform: uppercase;
    letter-spacing: 0
}

.announcement-date  {
    padding: 7px 10px;
    background: #fff9d8;
    color: #6d5e00
}

.announcement-body h3  {
    margin: 0;
    color: var(--primary);
    line-height: 1.2;
    font-size: 22px
}

.announcement-body p  {
    margin: 0;
    color: var(--muted);
    overflow-wrap: anywhere
}

.announcement-fade  {
    color: var(--muted);
    font-weight: 900
}

.announcement-caption,
.announcement-caption-full  {
    color: var(--muted);
    line-height: 1.65;
    overflow-wrap: anywhere
}

.announcement-caption summary  {
    display: inline;
    cursor: pointer;
    color: var(--muted);
    list-style: none
}

.announcement-caption summary::-webkit-details-marker  {
    display: none
}

.announcement-caption summary b  {
    color: var(--gold)
}

.announcement-caption[open] summary  {
    display: none
}

.announcement-caption p,
.announcement-caption-full  {
    margin: 0;
    white-space: pre-line
}

.announcement-collapse  {
    display: inline;
    padding: 0;
    border: 0;
    background: transparent;
    color: var(--gold);
    font: inherit;
    font-weight: 900;
    cursor: pointer
}

.cta-card  {
    text-align: center
}

.cta-card .lead  {
    margin: 0 auto 24px
}

.center-actions  {
    justify-content: center
}

.featured-video  {
  
    display: grid;
  
    grid-template-columns: 1fr 1fr;
  
    gap: 28px;
  
    align-items: center;
  
    padding: 28px

}

.timeline  {
  
    display: grid;
  
    gap: 14px

}

.timeline div  {
  
    padding: 18px;
  
    border-left: 4px solid var(--primary);
  
    background: #fff;
  
    border-radius: 8px;
  
    border: 1px solid var(--line)

}

.contact  {
  
    display: grid;
  
    grid-template-columns: 1.1fr .9fr;
  
    gap: 28px

}

.contact-hub  {
    align-items: start
}

.contact-side  {
    gap: 18px
}

.form h2, .chat-panel h2  {
    margin: 4px 0 0;
    color: var(--primary);
    line-height: 1.2
}

.form p, .chat-panel p  {
    margin: 0;
    color: var(--muted)
}

.admin-chat-status  {
    display: grid;
    grid-template-columns: auto 1fr;
    column-gap: 10px;
    row-gap: 2px;
    align-items: center;
    padding: 10px 12px;
    border: 1px solid var(--line);
    border-radius: 8px;
    background: #fff
}

.admin-chat-status span  {
    width: 10px;
    height: 10px;
    border-radius: 999px;
    background: #9ca3af;
    grid-row: 1 / span 2
}

.admin-chat-status strong  {
    color: var(--ink);
    font-size: 14px
}

.admin-chat-status small  {
    color: var(--muted);
    font-size: 12px
}

.admin-chat-status.online  {
    background: #edf4f1;
    border-color: rgba(15, 77, 58, .18)
}

.admin-chat-status.online span  {
    background: #16a34a;
    box-shadow: 0 0 0 4px rgba(22, 163, 74, .14)
}

.admin-chat-status.offline span  {
    background: #f59e0b;
    box-shadow: 0 0 0 4px rgba(245, 158, 11, .14)
}

.chat-panel  {
    padding: 24px;
    display: grid;
    gap: 14px
}

.chat-feed  {
    height: 320px;
    overflow-y: auto;
    display: flex;
    flex-direction: column;
    gap: 12px;
    padding: 14px;
    border: 1px solid var(--line);
    border-radius: 8px;
    background: #f8fbfa
}

.chat-empty  {
    margin: auto;
    color: var(--muted);
    text-align: center
}

.chat-bubble  {
    width: min(88%, 420px);
    padding: 12px 14px;
    border-radius: 8px;
    border: 1px solid var(--line);
    background: #fff;
    color: var(--ink)
}

.chat-bubble.admin  {
    align-self: flex-start;
    background: #edf4f1;
    border-color: rgba(15, 77, 58, .16)
}

.chat-bubble.student  {
    align-self: flex-end;
    background: var(--primary);
    color: #fff;
    border-color: var(--primary)
}

.chat-bubble strong  {
    display: block;
    font-size: 13px
}

.chat-bubble p  {
    margin: 4px 0 6px;
    color: inherit;
    overflow-wrap: anywhere
}

.chat-bubble small  {
    opacity: .72
}

.chat-form  {
    display: grid;
    gap: 10px
}

.form  {
  
    display: grid;
  
    gap: 14px;
  
    padding: 26px

}

.textarea  {
  
    min-height: 140px;
  
    padding-top: 12px;
  
    resize: vertical

}

.map  {
  
    height: 280px;
  
    display: grid;
  
    place-items: center;
  
    color: var(--primary);
  
    font-weight: 900;
  
    background: linear-gradient(135deg, #fff, #edf4f1);
  
    border: 1px solid var(--line);
  
    border-radius: 8px

}

.map-card  {

    overflow: hidden;

    min-height: 0;

    height: auto;

    display: grid;

    text-align: left;

    background: #fff;

    color: var(--ink);

    box-shadow: 0 24px 60px rgba(15, 77, 58, .16)

}

.map-card iframe  {

    width: 100%;

    height: 390px;

    border: 0;

    filter: saturate(.96) contrast(.98)

}

.map-info  {

    padding: 22px;

    border-top: 1px solid var(--line);

    background: #fff

}

.map-info h3  {

    margin: 8px 0 10px;

    color: var(--primary);

    font-size: 24px;

    line-height: 1.2

}

.map-info p  {

    max-width: 440px;

    margin: 0 0 18px;

    font-weight: 600;

    line-height: 1.7

}

.avatar  {
  
    width: 140px;
  
    height: 140px;
  
    margin: 0 auto 18px;
  
    border-radius: 50%;
  
    display: grid;
  
    place-items: center;
  
    background: linear-gradient(135deg, var(--primary), #2a8f70);
  
    color: #fff;
  
    font-size: 42px;
  
    font-weight: 900

}

.span-2  {
  
    grid-column: 1 / -1;

}

.skills  {
  
    display: flex;
  
    gap: 10px;
  
    flex-wrap: wrap

}

.toast  {
  
    position: fixed;
  
    right: 18px;
  
    bottom: 18px;
  
    z-index: 3000;
  
    max-width: 360px;
  
    padding: 14px 16px;
  
    border-radius: 8px;
  
    background: #102a22;
  
    color: #fff;
  
    box-shadow: var(--shadow);
  
    opacity: 0;
  
    transform: translateY(20px);
  
    pointer-events: none;
  
    transition: .2s

}

.toast.show  {
  
    opacity: 1;
  
    transform: translateY(0)

}

.empty  {
  
    padding: 34px;
  
    text-align: center;
  
    color: var(--muted)

}

@media(max-width:960px)  {

    .g4, .g3  {
  
        grid-template-columns: repeat(2, 1fr)
    
}

    .featured-announcement  {

        grid-column: 1 / -1

}

    .student-guide-panel  {

        grid-template-columns: 1fr

}

    .hero-grid, .featured-video, .contact  {
  
        grid-template-columns: 1fr
    
}

    .visual  {
  
        min-height: 320px
    
}

}

@media(max-width:680px)  {
  
    html, body  {

        max-width: 100%;

        overflow-x: hidden

}

    .container  {
  
        width: min(100% - 28px, 1120px)
    
}

    .section  {
  
        padding: 58px 0
    
}

    .map-card iframe  {

        height: 340px

}

    .map-info  {

        padding: 16px

}

    .map-info h3  {

        font-size: 20px

}

    .g4, .g3, .g2  {
  
        grid-template-columns: 1fr
    
}

    .featured-announcement  {

        grid-template-columns: 1fr

}

    .featured-announcement .announcement-media.has-image  {

        min-height: 0;

        border-right: 0;

        border-bottom: 1px solid var(--line)

}

    .announcement-track  {

        gap: 14px

}

    .announcement-track .announcement-card  {

        flex-basis: min(88vw, 430px)

}

    .announcement-nav  {

        display: none

}

    .student-guide-panel article  {

        padding: 18px

}

    .pwa-install-hint  {

        left: 14px;

        right: 14px;

        bottom: 14px;

        width: auto

}

    .changelog-layout,
    .changelog-item  {

        grid-template-columns: 1fr

}

    .changelog-summary  {

        position: static

}

    .hero  {
  
        min-height: auto;
  
        padding: 56px 0
    
}

    .hero h1, .hero h2  {
  
        font-size: clamp(34px, 11vw, 42px);

        overflow-wrap: anywhere
    
}

    .title  {

        font-size: clamp(28px, 9vw, 40px);

        overflow-wrap: anywhere

}

    .lead  {

        font-size: 16px;

        line-height: 1.6

}

    .actions  {
  
        flex-direction: column;

        align-items: stretch
    
}

    .btn  {
  
        width: 100%
    
}

    .toolbar  {
  
        grid-template-columns: 1fr;

        gap: 10px
    
}

    input, select, textarea  {

        font-size: 16px

}

    .card,
    .quick,
    .resource-card,
    .video-body,
    .info,
    .faq,
    .profile  {

        min-width: 0

}

    .page-head  {
  
        padding: 54px 0 36px
    
}

    .mini  {
  
        grid-template-columns: 1fr
    
}

    .thumb  {
  
        height: 150px
    
}

}

.photo-avatar {
  
    overflow:hidden;
  
    padding:0;

}

.photo-avatar img {
  
    width:100%;
  
    height:100%;
  
    object-fit:cover;
  
    object-position:center;

}

.developer-desc {
  
    margin:20px 0;
  
    line-height:1.8;
  
    color:var(--muted);

}

.developer-role {
  
    margin: 8px 0 0;
  
    color: var(--primary);
  
    font-weight: 600;
  
    text-align: center;

}

.profile h2  {
  
    text-align: center;

}

.developer-contact {
  
    display:flex;
  
    justify-content: center;
  
    gap:14px;
  
    flex-wrap:wrap;
  
    margin-top:24px;

}

.developer-contact a {
  
    padding:10px 18px;
  
    border-radius:999px;
  
    background:var(--soft);
  
    color:var(--primary);
  
    font-weight:600;
  
    text-decoration:none;
  
    transition:.25s;

}

.developer-contact a:hover {
  
    background:var(--primary);
  
    color:#fff;

}

.developer-credit {

    grid-column: 1 / -1;

    padding: 16px 18px;

    border: 1px dashed rgba(15, 77, 58, .2);

    border-radius: 8px;

    background: #f9fcfb;

}

.developer-credit summary {

    width: max-content;

    cursor: pointer;

    color: var(--muted);

    font-size: 14px;

    font-weight: 800;

    list-style-position: inside;

}

.developer-credit summary:hover {

    color: var(--primary);

}

.developer-credit-grid {

    display: grid;

    grid-template-columns: repeat(2, minmax(0, 1fr));

    gap: 16px;

    margin-top: 16px;

}

.compact-profile {

    box-shadow: none;

}

.compact-profile .avatar {

    width: 86px;

    height: 86px;

}

.compact-profile h2 {

    font-size: 22px;

}

@media (max-width: 760px) {
  .developer-credit-grid {
    grid-template-columns: 1fr;
  }
}

/* ===== DARK MODE ===== */
html.dark {
  --primary: #4ade9a;
  --primary2: #38c785;
  --gold: #f0d93a;
  --ink: #e8f1ee;
  --muted: #93b0a7;
  --soft: #1a2e27;
  --line: #2a4038;
  --white: #111e1a;
  --shadow: 0 18px 44px rgba(0,0,0,.4);
}

html.dark body {
  background: #0e1a16;
  color: var(--ink);
}

html.dark .card,
html.dark .control,
html.dark .filter,
html.dark .pagination button,
html.dark .visual-panel,
html.dark .admin-chat-status,
html.dark .chat-bubble,
html.dark .timeline div,
html.dark .map-card,
html.dark .map-info,
html.dark .announcement-body,
html.dark .changelog-item,
html.dark .developer-credit,
html.dark .notice-card {
  background: #162520;
  border-color: var(--line);
  color: var(--ink);
}

html.dark .chat-bubble.admin {
  background: #1e3530;
  border-color: #2a4d42;
}

html.dark .chat-bubble.student {
  background: #0f4d3a;
  color: #fff;
}

html.dark .chat-feed {
  background: #0e1a16;
  border-color: var(--line);
}

html.dark .page-head {
  background: linear-gradient(90deg, #0e1a16, #132219);
  border-bottom-color: var(--line);
}

html.dark .hero {
  background: linear-gradient(90deg, rgba(14,26,22,.98), rgba(14,26,22,.9)), url('../assets/images/engineering-bg.png') center/cover;
}

html.dark .hero p {
  color: var(--muted);
}

html.dark .visual {
  background: linear-gradient(135deg, #162520, #1a2e27);
  border-color: var(--line);
}

html.dark .visual:before {
  background-image: linear-gradient(rgba(74,222,154,.07) 1px, transparent 1px), linear-gradient(90deg, rgba(74,222,154,.07) 1px, transparent 1px);
}

html.dark .btn-secondary,
html.dark .btn-ghost {
  background: #162520;
  color: var(--primary);
  border-color: var(--primary);
}

html.dark .btn-secondary:hover,
html.dark .btn-ghost:hover {
  background: var(--primary);
  color: #0e1a16;
}

html.dark .soft {
  background: #132219;
}

html.dark .mini span {
  background: #1a2e27;
  color: var(--muted);
}

html.dark .icon {
  background: #1a2e27;
}

html.dark .badge {
  background: #1a2e27;
  color: var(--primary);
}

html.dark .filter {
  background: #162520;
  color: var(--primary);
}

html.dark .filter.active,
html.dark .filter:hover {
  background: var(--primary);
  color: #0e1a16;
}

html.dark .btn-primary,
html.dark .primary-btn {
  background: var(--primary);
  color: #0e1a16;
}

html.dark .btn-primary:hover,
html.dark .primary-btn:hover {
  background: #38c785;
}

html.dark .stats {
  background: #0a1510;
}

html.dark .announcement-media.has-image {
  background: #132219;
}

html.dark .announcement-card {
  background: linear-gradient(180deg, #162520, #132219);
  border-color: var(--line);
  box-shadow: 0 16px 38px rgba(0,0,0,.3);
}

html.dark .announcement-type {
  background: #1a2e27;
  color: var(--primary);
}

html.dark .announcement-date {
  background: rgba(240, 217, 58, .14);
  color: var(--gold);
}

html.dark .admin-chat-status.online {
  background: #162520;
  border-color: rgba(74,222,154,.2);
}
