/* ===========================================================================
   ASOIU Press
   One stylesheet, no framework, no build step.
   Colours are sampled from the banner artwork, so the design and the
   illustration are literally the same palette.
   =========================================================================== */

:root {
    /* Sampled from static/images/banner3.png */
    --navy:        #0d1326;   /* exact flat background of the banner art   */
    --navy-soft:   #18203c;
    --copper:      #d37d5e;   /* the wireframe building's line colour      */
    --copper-lift: #e99c77;
    --copper-ink:  #a3502f;   /* darkened for legible text on paper        */

    /* Paper */
    --paper:   #f7f5f1;
    --white:   #ffffff;
    --rule:    #e4e0d8;
    --ink:     #1b2135;
    --ink-soft:#5f6880;

    --maxw:    1200px;
    --gutter:  clamp(20px, 5vw, 48px);
    --section: clamp(56px, 8vw, 104px);

    --sans:  "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
    --serif: "Source Serif 4", "Iowan Old Style", Palatino, Georgia, "Times New Roman", serif;
}

*, *::before, *::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }

body {
    margin: 0;
    background: var(--paper);
    color: var(--ink);
    font-family: var(--sans);
    font-size: 17px;
    line-height: 1.6;
    -webkit-font-smoothing: antialiased;
}

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

h1, h2, h3 { font-family: var(--serif); line-height: 1.15; margin: 0; font-weight: 600; }

:focus-visible {
    outline: 3px solid var(--copper);
    outline-offset: 4px;
    border-radius: 3px;
}

@media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto; }
    *, *::before, *::after {
        animation-duration: .001ms !important;
        transition-duration: .001ms !important;
    }
}

.wrap {
    width: 100%;
    max-width: var(--maxw);
    margin-inline: auto;
    padding-inline: var(--gutter);
}

.skip-link {
    position: absolute; left: -9999px; top: 0; z-index: 50;
    background: var(--copper); color: #fff; font-weight: 600;
    padding: 12px 20px; text-decoration: none; border-radius: 0 0 8px 0;
}
.skip-link:focus { left: 0; }

/* === Masthead ==============================================================
   Solid navy that matches the banner's own background exactly, with the
   artwork flush along the bottom edge so the building rises out of it.
   =========================================================================== */

.masthead { background: var(--navy); color: #fff; }

.topbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
    padding-block: 22px;
}

.brand { display: inline-block; }
.brand img { width: 176px; }

.topnav { display: flex; gap: 4px; flex-wrap: wrap; }

.topnav a {
    color: rgba(255, 255, 255, .82);
    text-decoration: none;
    font-size: .94rem;
    font-weight: 500;
    padding: 8px 15px;
    border-radius: 999px;
    transition: background-color .2s, color .2s;
}

.topnav a:hover, .topnav a:focus-visible {
    background: rgba(255, 255, 255, .12);
    color: #fff;
}

.masthead-copy {
    padding-block: clamp(26px, 5vw, 58px) clamp(34px, 6vw, 72px);
    max-width: 52ch;
}

.masthead-copy h1 {
    font-size: clamp(2.1rem, 5.2vw, 3.35rem);
    letter-spacing: -.015em;
    margin-bottom: 16px;
}

.masthead-copy p {
    margin: 0;
    font-size: clamp(1rem, 1.5vw, 1.12rem);
    color: rgba(255, 255, 255, .74);
    max-width: 48ch;
}

/* The artwork. Same navy as the block above it, so there is no seam. */
.skyline {
    width: 100%;
    height: auto;
    margin-bottom: -1px; /* guards against sub-pixel rounding gaps */
}

/* === Sections ============================================================== */

.section { padding-block: var(--section); }
.section.on-white { background: var(--white); border-block: 1px solid var(--rule); }

.section-head { margin-bottom: clamp(32px, 4vw, 52px); max-width: 58ch; }

.section-head h2 {
    font-size: clamp(1.55rem, 3.4vw, 2.3rem);
    letter-spacing: -.01em;
    margin-bottom: 10px;
}

.section-head h2::after {
    content: "";
    display: block;
    width: 54px;
    height: 3px;
    background: var(--copper);
    margin-top: 16px;
    border-radius: 2px;
}

.section-head p { margin: 0; color: var(--ink-soft); }

/* === Journals ==============================================================
   No cards. The covers are already designed objects, so they are presented
   as objects: floating, with a real shadow, on paper.
   =========================================================================== */

.journals {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: clamp(28px, 4vw, 54px) clamp(22px, 3.5vw, 44px);
}

.journal { text-decoration: none; color: inherit; display: block; }

/* A fixed box keeps every title on the same baseline. The box is
   transparent and the image is `contain`, so covers of slightly different
   proportions simply float — there is no visible letterbox. */
.cover {
    display: grid;
    aspect-ratio: 1 / 1.414;
    margin-bottom: 18px;
}

.cover img {
    width: 100%;
    height: 100%;
    object-fit: contain;
    /* Covers vary between 1:1.31 and 1:1.45, so anchor them to a common
       bottom edge — they line up like books on a shelf. */
    object-position: bottom center;
    /* drop-shadow follows the painted pixels, unlike box-shadow */
    filter: drop-shadow(0 10px 18px rgba(13, 19, 38, .18))
            drop-shadow(0 2px 4px rgba(13, 19, 38, .12));
    transition: transform .25s ease, filter .25s ease;
}

.journal:hover .cover img,
.journal:focus-visible .cover img {
    transform: translateY(-7px);
    filter: drop-shadow(0 20px 30px rgba(13, 19, 38, .26))
            drop-shadow(0 4px 8px rgba(13, 19, 38, .14));
}

.journal .name {
    display: block;
    font-family: var(--serif);
    font-size: 1.08rem;
    font-weight: 600;
    line-height: 1.3;
    letter-spacing: -.005em;
    transition: color .2s;
}

.journal .name::after {
    content: "↗";
    font-family: var(--sans);
    font-size: .82em;
    margin-left: .4em;
    color: var(--copper-ink);
    opacity: 0;
    transition: opacity .2s, transform .2s;
    display: inline-block;
}

.journal:hover .name,
.journal:focus-visible .name { color: var(--copper-ink); }

.journal:hover .name::after,
.journal:focus-visible .name::after { opacity: 1; transform: translate(2px, -2px); }

.journal .issn {
    display: block;
    margin-top: 6px;
    font-size: .8rem;
    color: var(--ink-soft);
    font-variant-numeric: tabular-nums;
}

/* === Indexing ==============================================================
   Supporting information, so it stays quiet: no boxes, just logos.
   =========================================================================== */

.index-row {
    display: grid;
    grid-template-columns: repeat(6, 1fr);
    gap: clamp(14px, 2.5vw, 34px);
    align-items: center;
}

.index-row a {
    display: grid;
    place-items: center;
    padding: 14px 8px;
    border-radius: 8px;
    transition: background-color .2s;
}

.index-row a:hover { background: var(--paper); }

.index-row img {
    max-height: 46px;
    width: auto;
    max-width: 100%;
    object-fit: contain;
    filter: grayscale(1);
    opacity: .62;
    transition: filter .25s, opacity .25s;
}

.index-row a:hover img,
.index-row a:focus-visible img { filter: grayscale(0); opacity: 1; }

/* === Footer ================================================================ */

.site-footer {
    background: var(--navy);
    color: rgba(255, 255, 255, .7);
    padding-block: clamp(40px, 6vw, 60px) 28px;
}

.footer-top {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 32px;
    flex-wrap: wrap;
}

.footer-brand img { width: 158px; margin-bottom: 14px; }
.footer-brand p { margin: 0; max-width: 40ch; font-size: .92rem; }

.footer-links { display: flex; flex-direction: column; gap: 9px; }

.footer-links a {
    color: rgba(255, 255, 255, .78);
    text-decoration: none;
    font-size: .92rem;
}
.footer-links a:hover, .footer-links a:focus-visible { color: #fff; text-decoration: underline; }

.footer-bottom {
    margin-top: 34px;
    padding-top: 20px;
    border-top: 1px solid rgba(255, 255, 255, .12);
    font-size: .85rem;
    color: rgba(255, 255, 255, .5);
}
.footer-bottom p { margin: 0; }

/* === Responsive ============================================================ */

@media (max-width: 900px) {
    .journals { grid-template-columns: repeat(2, 1fr); }
    .index-row { grid-template-columns: repeat(3, 1fr); }
}

@media (max-width: 560px) {
    body { font-size: 16px; }
    .topbar { padding-block: 16px; }
    .brand img { width: 148px; }
    .topnav a { padding: 7px 12px; font-size: .9rem; }
    .journals { gap: 26px 18px; }
    .journal .name { font-size: .98rem; }
    .index-row { grid-template-columns: repeat(2, 1fr); gap: 10px; }
    .index-row img { max-height: 38px; }
    .footer-top { flex-direction: column; gap: 24px; }
}
