.journal {
    --accent: #a8c4aa
}

.journal-alpha {
    --accent: #ed939a
}

.journal-wrap {
    max-width: 1380px;
    margin-inline: auto;
    padding-inline: var(--pad)
}

.journal-opening {
    padding-top: 140px
}

.journal-back {
    display: inline-block;
    margin-bottom: 45px;
    font-size: 13px;
    text-decoration: underline;
    text-underline-offset: 6px
}

.journal .eyebrow {
    color: var(--accent)
}

.journal h1 {
    font-size: clamp(42px, 6.5vw, 92px);
    line-height: 1.05;
    letter-spacing: -.055em;
    font-weight: 400;
    max-width: 16ch;
    margin: 28px 0;
    white-space: normal
}

.journal-lead {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 25px;
    margin-bottom: 45px
}

.journal-lead>p {
    font-size: clamp(18px, 2vw, 25px);
    color: var(--muted);
    max-width: 30ch;
    line-height: 1.5
}

.journal-button {
    border: 1px solid var(--accent);
    padding: 15px 24px;
    border-radius: 30px;
    font-size: 13px;
    white-space: nowrap
}

.journal-button:hover {
    background: var(--accent);
    color: var(--navy)
}

.journal-pending {
    font-size: 12px;
    color: var(--muted)
}

.journal-facts {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 20px;
    padding-block: 24px;
    border-block: 1px solid #ffffff25;
    margin-bottom: 40px
}

.journal-facts dt {
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: .12em;
    color: var(--muted)
}

.journal-facts dd {
    font-size: 14px;
    margin: 10px 0 0
}

.journal-cover {
    margin-block: 0;
    padding-bottom: 65px
}

.journal-browser {
    border-radius: 10px;
    overflow: hidden;
    border: 1px solid #ffffff40
}

.journal-chrome {
    background: #e8e9ed;
    color: #64707c;
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 12px 18px;
    font-size: 11px;
    gap: 20px
}

.journal-chrome>span:first-child {
    color: #b25c53;
    letter-spacing: 3px
}

.journal-chrome>span:nth-child(2) {
    background: #fafafa;
    padding: 5px 20px;
    border-radius: 4px;
    width: 55%;
    text-align: center
}

.journal-browser>img {
    display: block;
    width: 100%;
    height: auto
}

.journal figcaption {
    font-size: 10px;
    letter-spacing: .08em;
    margin-top: 16px;
    color: var(--muted);
    display: flex;
    justify-content: space-between
}

.journal-paper {
    background: #f1eee6;
    color: #112331
}

.journal-paper .eyebrow {
    color: #64734f
}

.journal-alpha .journal-paper .eyebrow {
    color: #9d3944
}

.journal h2 {
    font-size: clamp(30px, 4vw, 54px);
    font-weight: 400;
    line-height: 1.12;
    letter-spacing: -.045em;
    margin: 22px 0
}

.journal h3 {
    font-size: 20px;
    font-weight: 500;
    margin: 0 0 12px
}

.journal-story {
    display: grid;
    grid-template-columns: 1fr 1.15fr;
    gap: clamp(30px, 7vw, 100px);
    padding-block: 85px
}

.journal-section-label {
    position: sticky;
    top: 35px;
    align-self: start
}

.journal-story-copy p,
.journal-detail-note p,
.journal-build-list p,
.journal-takeaway>p:last-child {
    font-size: 16px;
    line-height: 1.85;
    color: #5d6770;
    max-width: 52ch
}

.journal-story-copy h3:not(:first-child) {
    margin-top: 36px
}

.journal-closeup {
    padding-block: 35px 70px
}

.journal-closeup>h2 {
    max-width: 20ch;
    margin-bottom: 35px
}

.journal-detail-grid {
    display: grid;
    grid-template-columns: 1.5fr 1fr;
    gap: 45px;
    align-items: center
}

.journal-detail-grid figure {
    margin: 0
}

.journal-crop {
    overflow: hidden;
    aspect-ratio: 1.4;
    background: #ddd
}

.journal-crop img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: left center
}

.journal-paper figcaption {
    color: #657078
}

.journal-big-number {
    font-size: 70px;
    font-weight: 400;
    color: #b7bbb3;
    letter-spacing: -.06em
}

.journal-detail-note .journal-small {
    font-size: 11px
}

.journal-build-list article {
    display: flex;
    gap: 25px;
    padding: 25px 0;
    border-top: 1px solid #10203025
}

.journal-build-list article>span {
    font-size: 11px;
    color: #7f897f
}

.journal-build-list p {
    font-size: 14px;
    margin: 0
}

.journal-placeholder {
    font-style: italic
}

.journal-takeaway {
    padding-block: 35px 85px
}

.journal-takeaway h2 {
    max-width: 23ch
}

.journal-next {
    display: grid;
    grid-template-columns: 1.5fr 1fr;
    align-items: center;
    gap: 45px;
    padding-block: 70px
}

.journal-next img {
    width: 100%;
    height: auto;
    border-radius: 4px
}

.journal-next h2 {
    font-size: clamp(28px, 3.5vw, 48px)
}

.journal-next:hover h2 {
    color: var(--accent)
}

@media(max-width:700px) {
    .journal-opening {
        padding-top: 115px
    }

    .journal-back {
        margin-bottom: 30px
    }

    .journal-lead {
        align-items: flex-start;
        flex-direction: column
    }

    .journal-facts {
        grid-template-columns: repeat(2, 1fr);
        row-gap: 24px
    }

    .journal-story,
    .journal-detail-grid,
    .journal-next {
        grid-template-columns: 1fr;
        gap: 25px
    }

    .journal-section-label {
        position: static
    }

    .journal-story {
        padding-block: 50px
    }

    .journal-detail-note {
        display: block
    }

    .journal-big-number {
        font-size: 44px
    }

    .journal-cover {
        padding-bottom: 40px
    }

    .journal-chrome {
        padding: 8px;
        font-size: 9px
    }

    .journal-chrome>span:nth-child(2) {
        width: 70%;
        padding: 5px
    }

    .journal figcaption {
        font-size: 9px;
        gap: 15px
    }

    .journal-takeaway {
        padding-bottom: 55px
    }

    .journal-next {
        padding-block: 45px
    }
}

@media(prefers-reduced-motion:no-preference) {
    .journal-opening {
        animation: journal-enter .9s ease both
    }

    @keyframes journal-enter {
        from {
            opacity: 0;
            transform: translateY(12px)
        }

        to {
            opacity: 1;
            transform: none
        }
    }
}

/* PJNH CMS case study. */
.journal-build-list small {
    display: block;
    margin-top: 13px;
    font-size: 11px;
    line-height: 1.7;
    color: #6a795d;
    letter-spacing: .01em
}

.journal-system {
    padding-block: 35px 75px
}

.system-intro {
    font-size: 17px;
    line-height: 1.85;
    color: #5d6770;
    max-width: 60ch;
    margin: 24px 0 40px
}

.cms-figure {
    margin: 0
}

.cms-figure .journal-browser {
    border-color: #10203025
}

.cms-figure img {
    width: 100%;
    height: auto;
    display: block
}

.cms-module-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: 38px;
    margin-top: 55px
}

.cms-module-grid h3 {
    margin-bottom: 20px
}

.cms-module-grid h4 {
    font-size: 22px;
    line-height: 1.3;
    font-weight: 500;
    letter-spacing: -.025em;
    margin: 26px 0 12px
}

.cms-module-grid article>p {
    font-size: 15px;
    line-height: 1.85;
    color: #5d6770;
    max-width: 49ch
}

.journal-architecture {
    padding-block: 30px 90px
}

.architecture-map {
    max-width: 940px;
    margin-top: 45px
}

.architecture-experiences {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 24px
}

.architecture-node {
    border: 1px solid #53654d40;
    padding: 28px;
    background: #ffffff55
}

.architecture-node>span {
    font-size: 10px;
    letter-spacing: .12em;
    color: #657455
}

.architecture-node h3 {
    margin: 16px 0 8px;
    font-size: 25px;
    font-weight: 400;
    letter-spacing: -.025em
}

.architecture-node p {
    margin: 0;
    font-size: 13px;
    line-height: 1.7;
    color: #5d6770
}

.architecture-connector {
    text-align: center;
    font-size: 24px;
    color: #6b7b60;
    padding: 12px
}

.architecture-core,
.architecture-data {
    max-width: 520px;
    margin-inline: auto;
    text-align: center
}

.architecture-core {
    background: #152d25;
    color: #f1eee6
}

.architecture-core>span,
.architecture-core p {
    color: #bfcfbc
}

@media(max-width:700px) {
    .cms-module-grid {
        grid-template-columns: 1fr;
        gap: 35px;
        margin-top: 35px
    }

    .journal-system {
        padding-bottom: 40px
    }

    .architecture-experiences {
        gap: 12px
    }

    .architecture-node {
        padding: 18px 14px
    }

    .architecture-node h3 {
        font-size: 21px
    }

    .architecture-node>span {
        font-size: 9px;
        letter-spacing: .06em
    }

    .journal-architecture {
        padding-bottom: 55px
    }
}

/* Compact CMS showcase and connected application diagram. */
.journal-pjnh .journal-system {
    background: var(--navy);
    color: var(--cream);
    padding-block: 65px
}

.journal-pjnh .journal-system .eyebrow {
    color: var(--accent)
}

.journal-system .system-intro,
.journal-system .cms-module-grid article>p {
    color: var(--muted)
}

.journal-system .cms-figure figcaption {
    color: var(--muted)
}

.journal-system .journal-wrap>.cms-figure {
    max-width: 850px;
    margin: 35px auto 0
}

.journal-system .cms-module-grid {
    max-width: 980px;
    margin: 45px auto 0;
    gap: 32px
}

.journal-system .journal-browser {
    border-color: #ffffff30
}

.journal-system .cms-figure img {
    display: block;
    width: 100%;
    height: auto;
    max-height: none;
    aspect-ratio: auto;
    background: #132332
}

.journal-system .cms-module-grid img {
    max-height: 260px
}

.journal-pjnh .journal-architecture {
    padding-block: 75px 85px;
    display: grid;
    grid-template-columns: 1fr 1.25fr;
    gap: 55px;
    align-items: center
}

.connect-intro .system-intro {
    font-size: 15px;
    margin-bottom: 0;
    max-width: 42ch
}

.connect-diagram {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 28px minmax(0, 1fr) 28px minmax(0, 1fr);
    grid-template-rows: auto 40px auto;
    align-items: center
}

.connect-node {
    border: 1px solid #11233130;
    border-radius: 12px;
    padding: 22px 10px;
    min-height: 145px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    text-align: center;
    background: #ffffff30
}

.connect-node svg {
    width: 32px;
    height: 32px;
    margin-bottom: 12px
}

.connect-node h3 {
    font-size: 13px;
    line-height: 1.35;
    font-weight: 600;
    margin: 0 0 5px;
    letter-spacing: -.025em
}

.connect-node p {
    font-size: 11px;
    line-height: 1.5;
    margin: 0;
    color: #55636d
}

.connect-cms {
    grid-column: 1;
    grid-row: 1
}

.connect-app {
    grid-column: 3;
    grid-row: 1
}

.connect-web {
    grid-column: 5;
    grid-row: 1
}

.connect-app svg {
    color: #ef4b48
}

.connect-arrow {
    font-size: 27px;
    text-align: center;
    line-height: 1
}

.connect-right-one {
    grid-column: 2;
    grid-row: 1
}

.connect-right-two {
    grid-column: 4;
    grid-row: 1
}

.connect-down {
    grid-column: 3;
    grid-row: 2
}

.connect-db {
    grid-column: 2/5;
    grid-row: 3;
    justify-self: center;
    min-height: 82px;
    width: max-content;
    max-width: 100%;
    flex-direction: row;
    gap: 12px;
    padding: 16px;
    text-align: left
}

.connect-db svg {
    flex-shrink: 0;
    margin: 0
}

@media(max-width:1000px) {
    .journal-pjnh .journal-architecture {
        grid-template-columns: 1fr;
        gap: 35px
    }

    .connect-diagram {
        max-width: 650px;
        width: 100%;
        margin-inline: auto
    }
}

@media(max-width:700px) {
    .journal-pjnh .journal-system {
        padding-block: 45px
    }

    .journal-system .cms-module-grid {
        grid-template-columns: 1fr;
        max-width: 470px
    }

    .journal-pjnh .journal-architecture {
        padding-block: 50px
    }

    .connect-diagram {
        grid-template-columns: minmax(0, 1fr) 24px minmax(0, 1fr) 24px minmax(0, 1fr)
    }

    .connect-node {
        padding: 15px 5px;
        min-height: 122px;
        border-radius: 9px
    }

    .connect-node svg {
        width: 27px;
        height: 27px;
        margin-bottom: 9px
    }

    .connect-node h3 {
        font-size: 11px
    }

    .connect-node p {
        font-size: 10px
    }

    .connect-db {
        padding: 14px;
        min-height: 75px
    }

    .connect-db svg {
        margin: 0
    }

    .connect-arrow {
        font-size: 24px
    }
}

@media(prefers-reduced-motion:no-preference) {
    .journal-reveal {
        opacity: 0;
        transform: translateY(18px);
        transition: opacity 850ms ease, transform 950ms cubic-bezier(.22, 1, .36, 1)
    }

    .journal-reveal.journal-visible {
        opacity: 1;
        transform: none
    }
}

@media print {
    .journal-reveal {
        opacity: 1 !important;
        transform: none !important
    }
}

/* Content flow: CMS → application → website; database exchange. */
.connect-node {
    transition: background-color .45s, border-color .45s, box-shadow .45s
}

.connect-diagram.flow-playing .connect-cms {
    animation: connect-glow 7s ease-in-out infinite
}

.connect-diagram.flow-playing .connect-app {
    animation: connect-app-glow 7s ease-in-out infinite
}

.connect-diagram.flow-playing .connect-web {
    animation: connect-glow 7s ease-in-out 4.4s infinite
}

.connect-diagram.flow-playing .connect-db {
    animation: connect-glow 7s ease-in-out 1.7s infinite
}

.connect-arrow {
    position: relative
}

/* Three dots travel through each connector; no arrow glyphs. */
.connect-arrow {
    display: block;
    height: 28px;
    overflow: hidden
}

.connect-down {
    height: 40px
}

.connect-arrow i {
    position: absolute;
    display: block;
    width: 5px;
    height: 5px;
    border-radius: 50%;
    background: #64844c;
    opacity: .25;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%)
}

.connect-arrow i:nth-child(1) {
    left: 25%
}

.connect-arrow i:nth-child(3) {
    left: 75%
}

.connect-down i {
    left: 50% !important;
    top: 50%
}

.connect-down i:nth-child(1) {
    top: 25%
}

.connect-down i:nth-child(3) {
    top: 75%
}

.connect-diagram.flow-playing .connect-arrow i {
    animation: connector-dot-right 7s ease-in-out infinite;
    animation-delay: calc(var(--flow-delay) + var(--dot-delay))
}

.connect-right-one {
    --flow-delay: .3s
}

.connect-right-two {
    --flow-delay: 3.3s
}

.connect-down {
    --flow-delay: 1.8s
}

.connect-arrow i:nth-child(1) {
    --dot-delay: 0s
}

.connect-arrow i:nth-child(2) {
    --dot-delay: .18s
}

.connect-arrow i:nth-child(3) {
    --dot-delay: .36s
}

.connect-diagram.flow-playing .connect-down i {
    animation-name: connector-dot-up
}

@keyframes connector-dot-right {
    0% {
        left: 5%;
        opacity: 0
    }

    3% {
        opacity: 1
    }

    14% {
        left: 95%;
        opacity: 1
    }

    18%,
    100% {
        left: 95%;
        opacity: 0
    }
}

@keyframes connector-dot-up {
    0% {
        top: 95%;
        opacity: 0
    }

    3% {
        opacity: 1
    }

    14% {
        top: 5%;
        opacity: 1
    }

    18%,
    100% {
        top: 5%;
        opacity: 0
    }
}

@keyframes connect-glow {

    0%,
    24%,
    100% {
        background-color: #ffffff30;
        border-color: #11233130;
        box-shadow: none
    }

    8%,
    16% {
        background-color: #e3eadb;
        border-color: #6e8c56;
        box-shadow: 0 0 0 3px #6e8c5612
    }
}


.connect-motion-toggle {
    display: block;
    margin: 18px auto 0;
    padding: 6px 0;
    background: none;
    border: 0;
    border-bottom: 1px solid #65745555;
    color: #657455;
    font: inherit;
    font-size: 11px;
    cursor: pointer
}

.connect-motion-toggle:hover {
    color: #112331;
    border-color: currentColor
}

.connect-motion-toggle:focus-visible {
    outline: 2px solid #657455;
    outline-offset: 5px
}

@media(prefers-reduced-motion:reduce) {

    .connect-diagram .connect-node,
    .connect-diagram .connect-arrow i {
        animation: none !important
    }

    .connect-motion-toggle {
        display: none
    }
}

@keyframes connect-app-glow {

    0%,
    12%,
    27%,
    38%,
    57%,
    100% {
        background-color: #ffffff30;
        border-color: #11233130;
        box-shadow: none
    }

    18%,
    23%,
    44%,
    51% {
        background-color: #e3eadb;
        border-color: #6e8c56;
        box-shadow: 0 0 0 3px #6e8c5612
    }
}

.journal-alpha .journal-build-list small {
    color: #92565d
}

/* Let the dashboard retain its natural proportions at the full frame width. */
.journal-system .cms-dashboard img {
    display: block;
    width: 100%;
    height: auto;
    max-height: none;
    aspect-ratio: auto
}

.journal-facts .stack-tags {
    display: flex;
    flex-wrap: wrap;
    gap: 7px;
    margin-top: 10px
}

.stack-tags span {
    display: inline-block;
    padding: 5px 9px;
    border: 1px solid #a8c4aa55;
    border-radius: 5px;
    background: #a8c4aa08;
    color: var(--cream);
    font-size: 11px;
    line-height: 1.4;
    white-space: nowrap
}