/* ==========================================================================
   The LANTITE App on a laptop and a phone, mid-practice: the homepage hero's
   product shot. Literacy on the laptop (a reading question, answer B picked,
   cursor on Submit), numeracy on the phone (the answer being typed in), and
   a handwritten caption underneath: numeracy, literacy or both, on web and
   mobile, only at lantite.com.au.
   Markup: core/templates/core/landing_page/_devices.html

   Drawn in HTML rather than a screenshot, so it is sharp at any size, costs
   no image download, and the same markup renders the social images
   (marketing/social/devices/build.py).

   Scaling: .dv-stage's font-size is 1/64 of the width it is given and every
   size below is in em, so the scene scales like one picture. Each device
   sets its own font-size on top of that (the laptop is 60em wide, the phone
   20em) and so does each screen's UI, so a device can be resized by
   changing a single number.

   Motion: the base styles are the finished picture, which is what
   reduced-motion visitors and the social renders get (the build script
   renders with reduced motion). Everyone else gets a short intro on load,
   pure CSS so it never waits on a script: the cursor picks B and moves to
   Submit, the phone answer is typed, and both clocks keep ticking.

   The site sets font-family on `*`, so anything here that should not be
   Inter sets its font-family itself rather than inheriting it.
   ========================================================================== */

.dv {
    position: relative;
    width: 100%;
    container-type: inline-size;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
    line-height: 1.25;
    color: #0f172a;
    text-align: left;
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
    -webkit-user-select: none;
    user-select: none;
}
.dv *,
.dv *::before,
.dv *::after { box-sizing: border-box; }
.dv em { font-style: normal; }

.dv-stage {
    position: relative;
    width: 64em;
    height: 51.4em;
    font-size: min(10px, calc((100vw - 48px) / 64)); /* browsers without container units */
    font-size: calc(100cqi / 64);
}

.dv-glow {
    position: absolute;
    inset: 8% 2% 0 4%;
    background:
        radial-gradient(closest-side at 38% 45%, rgba(20, 184, 166, 0.22), transparent),
        radial-gradient(closest-side at 80% 70%, rgba(99, 102, 241, 0.26), transparent);
    filter: blur(2.2em);
    pointer-events: none;
}

/* ---------- Laptop ---------- */
.dv-laptop-pos {
    position: absolute;
    left: 0;
    top: 4.4em;
    width: 54em;
}
.dv-laptop {
    font-size: 0.9em;               /* 60em wide = the 54em slot */
    width: 60em;
}
.dv-lid {
    position: relative;
    width: 53em;
    margin: 0 auto;
    padding: 1.35em 1.1em 1.25em;
    border-radius: 1.9em 1.9em 0.55em 0.55em;
    background: linear-gradient(180deg, #252833 0%, #0c0e13 100%);
    box-shadow:
        0 0 0 0.2em #d4d8df,
        0 0 0 0.3em #a2a8b3,
        0 2.4em 3.8em -1.6em rgba(30, 27, 75, 0.5);
}
.dv-cam {
    position: absolute;
    top: 0.47em;
    left: 50%;
    width: 0.42em;
    height: 0.42em;
    margin-left: -0.21em;
    border-radius: 50%;
    background: radial-gradient(circle at 35% 35%, #5b6475 0%, #151821 65%);
}
.dv-screen {
    position: relative;
    height: 31.75em;                /* 16:10 of the 50.8em inside the bezel */
    border-radius: 0.3em;
    overflow: hidden;
    background: #f4f6f8;
}
.dv-glare {
    position: absolute;
    inset: 0;
    background: linear-gradient(115deg, rgba(255, 255, 255, 0.16) 0%, rgba(255, 255, 255, 0.04) 36%, transparent 36.3%);
    pointer-events: none;
}
.dv-deck {
    position: relative;
    height: 1.75em;
    border-radius: 0.2em 0.2em 2.4em 2.4em / 0.2em 0.2em 1.4em 1.4em;
    background: linear-gradient(180deg, #f4f5f8 0%, #dcdfe5 28%, #babfc8 70%, #8c939f 100%);
    box-shadow:
        inset 0 0.1em 0 rgba(255, 255, 255, 0.95),
        0 1.6em 2.2em -1em rgba(15, 23, 42, 0.45);
}
.dv-notch {
    position: absolute;
    top: 0;
    left: 50%;
    width: 9em;
    height: 0.6em;
    margin-left: -4.5em;
    border-radius: 0 0 0.9em 0.9em;
    background: linear-gradient(180deg, #a6acb6, #cdd1d8);
}

/* ---------- Clocks (laptop and phone) ----------
   The last two digits are windows onto strips of digits, so the intro can
   tick them over. Each strip starts at its resting digit (18:12, 02:07) so
   nothing is shifted at rest, and the cells are taller than the window so
   the next digit never shows at small sizes. */
.dv-clock {
    display: inline-flex;
    align-items: flex-start;        /* digit windows and "18:" share a top edge, so they line up */
    line-height: 1.2em;
    white-space: nowrap;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
}
.dv-clock .fas { align-self: center; }
.dv-d10,
.dv-d1 {
    display: block;
    height: 1.2em;
    overflow: hidden;
}
.dv-d10 > span,
.dv-d1 > span {
    display: flex;
    flex-direction: column;
}
.dv-d10 i,
.dv-d1 i {
    flex: none;
    font-style: normal;
    height: 1.5em;
    line-height: 1.2em;
}

/* ---------- Laptop screen: a literacy reading question ---------- */
.dv-ui {
    position: relative;
    font-size: 0.5em;               /* the screen is 101.6 x 63.5 of these */
    height: 100%;
    display: flex;
    flex-direction: column;
}
.dv-ui-bar {
    position: relative;
    flex: none;
    display: flex;
    align-items: center;
    gap: 9em;
    height: 7em;
    padding: 0 3em;
    background: linear-gradient(90deg, #ffffff 0%, #fdf4ff 55%, #eef2ff 100%);
}
.dv-ui-bar::after {
    content: '';
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 0.25em;
    background: linear-gradient(90deg, #a5b4fc, #f0abfc 55%, #99f6e4);
}
.dv-brand {
    display: flex;
    align-items: center;
    gap: 1.1em;
}
.dv-logo {
    display: grid;
    place-items: center;
    font-size: 2.5em;
    width: 1.72em;
    height: 1.72em;
    border-radius: 0.45em;
    font-weight: 800;
    color: #fff;
    background: linear-gradient(135deg, #6366f1, #8b5cf6);
}
.dv-brand-text {
    display: flex;
    flex-direction: column;
    line-height: 1.1;
}
.dv-brand-text b {
    font-size: 2.05em;
    font-weight: 800;
    letter-spacing: -0.02em;
    color: #1e1b4b;
}
.dv-brand-text b em {
    color: #7c3aed;
    background: linear-gradient(90deg, #6366f1, #a855f7);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
}
.dv-brand-text small {
    margin-top: 0.3em;
    font-size: 1.15em;
    font-weight: 800;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: #c2410c;
}
.dv-apps {
    display: flex;
    gap: 1.2em;
}
.dv-app {
    display: inline-flex;
    align-items: center;
    gap: 0.55em;
    font-size: 1.65em;
    font-weight: 600;
    padding: 0.4em 1em 0.4em 0.45em;
    border-radius: 99em;
    border: 0.08em solid;
}
.dv-app i {
    display: grid;
    place-items: center;
    font-size: 0.65em;
    width: 2.1em;
    height: 2.1em;
    border-radius: 50%;
    color: #fff;
}
.dv-app.is-num { color: #4338ca; background: #eef2ff; border-color: #c7d2fe; }
.dv-app.is-num i { background: #6366f1; }
.dv-app.is-lit {
    color: #0f766e;
    background: #ccfbf1;
    border-color: #5eead4;
    box-shadow: 0 0 0 0.18em rgba(20, 184, 166, 0.15);
}
.dv-app.is-lit i { background: #0d9488; }

.dv-lit-head {
    flex: none;
    display: flex;
    align-items: center;
    gap: 1.2em;
    height: 6.6em;
    padding: 0 3.2em;
    color: #fff;
    background: linear-gradient(100deg, #0f766e 0%, #0d9488 45%, #14b8a6 100%);
}
.dv-lit-ico {
    display: grid;
    place-items: center;
    flex: none;
    font-size: 1.6em;
    width: 2.3em;
    height: 2.3em;
    border-radius: 50%;
    color: #0d9488;
    background: #fff;
}
.dv-lit-title {
    font-size: 2.6em;
    font-weight: 800;
    letter-spacing: -0.02em;
}
.dv-lit-tag {
    font-size: 1.35em;
    font-weight: 700;
    padding: 0.3em 0.85em;
    border-radius: 99em;
    background: rgba(255, 255, 255, 0.2);
}
.dv-lit-count {
    margin-left: 0.8em;
    font-size: 1.55em;
    font-weight: 600;
    opacity: 0.92;
}
.dv-lit-head .dv-clock {
    font-size: 1.55em;
    padding: 0.35em 0.85em;
    border-radius: 99em;
    background: rgba(255, 255, 255, 0.18);
}
.dv-lit-head .dv-clock .fas { margin-right: 0.3em; }
.dv-lit-progress {
    flex: none;
    display: block;
    height: 0.55em;
    background: #ccfbf1;
}
.dv-lit-progress i {
    display: block;
    width: 18%;
    height: 100%;
    background: linear-gradient(90deg, #14b8a6, #0d9488);
    transform-origin: left center;
}

.dv-lit-body {
    flex: 1;
    min-height: 0;
    display: grid;
    grid-template-columns: minmax(0, 1.12fr) minmax(0, 1fr);
    gap: 2.4em;
    align-items: stretch;
    padding: 2.6em 3.2em 0;
}
.dv-passage,
.dv-litq {
    padding: 2.6em 2.8em;
    border-radius: 2em;
    background: #fff;
    box-shadow:
        0 0.2em 0.5em rgba(15, 23, 42, 0.04),
        0 1.2em 2.6em -1.6em rgba(13, 148, 136, 0.32);
}
.dv-label {
    display: block;
    margin-bottom: 1.1em;
    font-size: 1.25em;
    font-weight: 800;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: #0f766e;
}
.dv-passage p {
    margin: 0 0 0.8em;
    font-family: Georgia, 'Times New Roman', serif;
    font-size: 1.75em;
    line-height: 1.62;
    color: #334155;
}
.dv-dropcap {
    float: left;
    margin: 0.06em 0.1em 0 0;
    font-family: Georgia, 'Times New Roman', serif;
    font-size: 3.3em;
    font-weight: 700;
    line-height: 0.84;
    color: #0d9488;
}
.dv-passage mark {
    font-family: inherit;
    color: inherit;
    padding: 0 0.08em;
    border-radius: 0.15em;
    background: linear-gradient(transparent 14%, rgba(250, 204, 21, 0.5) 14%, rgba(250, 204, 21, 0.5) 90%, transparent 90%);
}
.dv-litq-text {
    margin: 0 0 1.4em;
    font-size: 2em;
    font-weight: 600;
    line-height: 1.4;
    color: #0f172a;
}
.dv-opts {
    display: flex;
    flex-direction: column;
    gap: 1em;
}
.dv-opt {
    display: flex;
    align-items: center;
    gap: 0.75em;
    font-size: 1.8em;
    font-weight: 600;
    color: #334155;
    padding: 0.55em 0.8em;
    border-radius: 0.7em;
    border: 0.1em solid #e2e8f0;
    background: #fff;
}
.dv-opt i {
    display: grid;
    place-items: center;
    flex: none;
    width: 1.6em;
    height: 1.6em;
    border-radius: 50%;
    font-size: 0.8em;
    font-style: normal;
    font-weight: 800;
    line-height: 1;
    color: #64748b;
    background: #f1f5f9;
}
.dv-opt.is-picked {
    color: #134e4a;
    border-color: #14b8a6;
    background: #f0fdfa;
    box-shadow: 0 0 0 0.16em rgba(20, 184, 166, 0.2);
}
.dv-opt.is-picked i {
    color: #fff;
    background: #0d9488;
}
.dv-litq-foot {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-top: 1.6em;
}
.dv-hint {
    display: inline-flex;
    align-items: center;
    gap: 0.4em;
    font-size: 1.6em;
    font-weight: 700;
    color: #b45309;
}
.dv-submit {
    display: inline-flex;
    align-items: center;
    gap: 0.5em;
    font-size: 1.8em;
    font-weight: 700;
    padding: 0.6em 1.25em;
    border-radius: 0.7em;
    color: #fff;
    background: linear-gradient(100deg, #0d9488, #14b8a6);
    box-shadow:
        0 0 0 0.2em rgba(20, 184, 166, 0.25),
        0 0.6em 1.2em -0.6em rgba(13, 148, 136, 0.8);
}
.dv-submit i { font-size: 0.8em; }

/* Mouse pointer, resting on Submit. Its tip is 0.67em in and 0.33em down
   from the corner of its box; left/top below put the tip on the button. */
.dv-cursor {
    position: absolute;
    left: 88.8em;
    top: 56.6em;
    width: 3.2em;
    height: 3.2em;
    z-index: 2;
    filter: drop-shadow(0 0.25em 0.35em rgba(15, 23, 42, 0.35));
}
/* Click ripple where the cursor picks B. Only visible during the intro. */
.dv-ripple {
    position: absolute;
    left: 68em;
    top: 38.9em;
    width: 5em;
    height: 5em;
    margin: -2.5em 0 0 -2.5em;
    border-radius: 50%;
    border: 0.35em solid rgba(13, 148, 136, 0.55);
    opacity: 0;
    pointer-events: none;
}

/* ---------- Sticky note on the lid ---------- */
.dv-sticky {
    position: absolute;
    left: 41.6em;
    top: 2.8em;
    width: 10.4em;
    padding: 1.5em 0.8em 1.3em;
    text-align: center;
    font-family: 'Caveat', cursive;
    font-weight: 700;
    line-height: 0.92;
    color: #422006;
    background: linear-gradient(180deg, #fef08a 0%, #fde047 100%);
    border-radius: 0.15em 0.15em 1.6em 0.15em / 0.15em 0.15em 0.9em 0.15em;
    box-shadow:
        0 0.15em 0.3em rgba(66, 32, 6, 0.10),
        0 1.2em 1.6em -0.9em rgba(66, 32, 6, 0.55);
    transform: rotate(5deg);
}
.dv-sticky::before {                /* a strip of tape */
    content: '';
    position: absolute;
    top: -0.75em;
    left: 50%;
    width: 4.8em;
    height: 1.5em;
    margin-left: -2.4em;
    background: rgba(255, 255, 255, 0.55);
    box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.08);
    transform: rotate(-4deg);
}
.dv-sticky span,
.dv-sticky b {
    display: block;
    font-family: 'Caveat', cursive;
    font-weight: 700;
}
.dv-sticky span {
    font-size: 1.75em;
    color: #a16207;
}
.dv-sticky b {
    margin-top: 0.12em;
    font-size: 2.35em;
}

/* ---------- Phone ---------- */
.dv-phone-pos {
    position: absolute;
    right: 0.4em;
    top: 17.4em;
    width: 15.6em;
    z-index: 2;
}
.dv-phone {
    position: relative;
    font-size: 0.78em;              /* 20em wide = the 15.6em slot */
    width: 20em;
    height: 41.2em;
    padding: 0.8em;
    border-radius: 3.3em;
    background: #0d0f14;
    box-shadow:
        0 0 0 0.16em #d6dae1,
        0 0 0 0.26em #9aa1ac,
        0 3em 4.4em -1.6em rgba(30, 27, 75, 0.55);
}
.dv-phone::after {                  /* side button */
    content: '';
    position: absolute;
    right: -0.5em;
    top: 10.5em;
    width: 0.3em;
    height: 5em;
    border-radius: 0.2em;
    background: linear-gradient(90deg, #c3c8d0, #8f96a2);
}
.dv-phone-screen {
    position: relative;
    height: 100%;
    border-radius: 2.55em;
    overflow: hidden;
    background: #f8fafc;
}
.dv-island {
    position: absolute;
    top: 1.5em;
    left: 50%;
    width: 5.6em;
    height: 1.65em;
    margin-left: -2.8em;
    border-radius: 1em;
    background: #050608;
}

/* ---------- Phone screen: a numeracy question, answer being typed ---------- */
.dv-pui {
    font-size: 0.5em;               /* the screen is 36.8 x 79.2 of these */
    height: 100%;
    display: flex;
    flex-direction: column;
}
.dv-q-top {
    flex: none;
    color: #fff;
    background: linear-gradient(100deg, #4f46e5 0%, #6366f1 45%, #8b5cf6 100%);
}
.dv-status {
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: 6.2em;
    padding: 0.8em 3.4em 0 4em;
}
.dv-status b {
    font-size: 1.9em;
    font-weight: 700;
}
.dv-status-r {
    display: flex;
    gap: 0.55em;
    font-size: 1.25em;
}
.dv-q-head {
    display: flex;
    align-items: center;
    gap: 1em;
    padding: 0.3em 2.4em 1.3em;
}
.dv-q-ico {
    display: grid;
    place-items: center;
    flex: none;
    font-size: 1.4em;
    width: 2.4em;
    height: 2.4em;
    border-radius: 50%;
    color: #4f46e5;
    background: #fff;
}
.dv-q-head b {
    flex: 1;
    font-size: 2.05em;
    font-weight: 800;
    letter-spacing: -0.02em;
    white-space: nowrap;
}
.dv-q-head .dv-clock {
    font-size: 1.4em;
    padding: 0.3em 0.7em;
    border-radius: 99em;
    background: rgba(255, 255, 255, 0.2);
}
.dv-q-progress {
    display: flex;
    align-items: center;
    gap: 1em;
    padding: 0 2.4em 1.6em;
}
.dv-q-progress > span {
    font-size: 1.35em;
    font-weight: 600;
    white-space: nowrap;
    opacity: 0.92;
}
.dv-q-progress i {
    display: block;
    flex: 1;
    height: 0.55em;
    border-radius: 99em;
    overflow: hidden;
    background: rgba(255, 255, 255, 0.25);
}
.dv-q-progress b {
    display: block;
    width: 27%;
    height: 100%;
    border-radius: inherit;
    background: #fff;
}
.dv-q-body {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
    gap: 1.5em;
    padding: 2.2em 2.4em 0;
}
.dv-q-text {
    margin: 0;
    font-size: 2.15em;
    font-weight: 500;
    line-height: 1.4;
    color: #1f2937;
}
.dv-q-boxes {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 1.2em;
    padding: 1.2em;
    border-radius: 1.5em;
    background: #f1f5f9;
    border: 0.12em solid #e2e8f0;
}
.dv-q-boxes span {
    display: flex;
    flex-direction: column;
    align-items: center;
    padding: 0.8em 0 0.75em;
    border-radius: 1.1em;
    border: 0.22em solid;
    line-height: 1;
}
.dv-q-boxes small {
    margin-bottom: 0.45em;
    font-size: 1.3em;
    font-weight: 600;
    color: #475569;
}
.dv-q-boxes b {
    font-size: 3.1em;
    font-weight: 800;
    letter-spacing: -0.02em;
}
.dv-q-boxes .is-blue { border-color: #3b82f6; background: #eff6ff; }
.dv-q-boxes .is-blue b { color: #1d4ed8; }
.dv-q-boxes .is-orange { border-color: #f97316; background: #fff7ed; }
.dv-q-boxes .is-orange b { color: #c2410c; }
.dv-q-input {
    display: flex;
    align-items: center;
    height: 5.4em;
    padding: 0 1.8em;
    border-radius: 1.3em;
    border: 0.24em solid #6366f1;
    background: #fff;
    box-shadow: 0 0 0 0.45em rgba(99, 102, 241, 0.18);
}
.dv-q-input b {
    display: inline-block;
    max-width: 1em;
    overflow: hidden;
    font-size: 2.6em;
    font-weight: 800;
    color: #1e1b4b;
}
.dv-caret {
    width: 0.22em;
    height: 3em;
    margin-left: 0.2em;
    border-radius: 0.1em;
    background: #4f46e5;
}
.dv-q-input small {
    margin-left: auto;
    font-size: 1.6em;
    font-weight: 600;
    color: #94a3b8;
}
.dv-q-check {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.5em;
    font-size: 1.9em;
    height: 2.8em;
    border-radius: 0.7em;
    font-weight: 700;
    color: #fff;
    background: linear-gradient(100deg, #4f46e5, #7c3aed);
    box-shadow: 0 0.5em 1em -0.5em rgba(79, 70, 229, 0.7);
}
.dv-q-check i { font-size: 0.8em; }

/* Number pad, iOS style; 9 has just been pressed. */
.dv-keys {
    position: relative;
    flex: none;
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 0.75em 0.8em;
    padding: 1.3em 1.1em 3.6em;
    background: #d1d5db;
}
.dv-keys::after {                   /* home indicator */
    content: '';
    position: absolute;
    left: 50%;
    bottom: 1.2em;
    width: 13em;
    height: 0.5em;
    margin-left: -6.5em;
    border-radius: 99em;
    background: #0f172a;
}
.dv-keys > span {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    font-size: 2.5em;
    height: 1.96em;
    border-radius: 0.32em;
    line-height: 1;
    font-weight: 500;
    color: #0f172a;
    background: #fff;
    box-shadow: 0 0.05em 0 rgba(15, 23, 42, 0.3);
}
.dv-keys > span small {
    margin-top: 0.15em;
    font-size: 0.36em;
    font-weight: 700;
    letter-spacing: 0.15em;
}
.dv-keys > span.is-flat {
    background: transparent;
    box-shadow: none;
}
.dv-keys > span.is-press { background: #b6bcc5; }
.dv-keys i { font-size: 0.75em; }

/* ---------- Handwritten labels ---------- */
.dv-note {
    position: absolute;
    display: flex;
    align-items: center;
    gap: 0.3em;
}
.dv-note--lit {
    left: 6.6em;
    top: 0;
    align-items: flex-start;
    color: #0d9488;
    transform: rotate(-3deg);
}
.dv-note--num {
    right: 17.4em;
    top: 39.8em;
    color: #6d28d9;
    transform: rotate(-4deg);
}
.dv-note-text {
    font-family: 'Caveat', cursive;
    font-size: 2.6em;
    font-weight: 700;
    line-height: 1;
    white-space: nowrap;
}
.dv-note-arrow {
    flex: none;
    width: 5.4em;
    height: 3.6em;
}
.dv-note--lit .dv-note-arrow {    /* drops between the logo and the app pills onto the LANTITE Literacy bar */
    width: 5em;
    height: 9.6em;
    margin-top: 0.9em;
}
.dv-note--num .dv-note-arrow { margin-top: -2.2em; }
.dv-note-arrow path {
    stroke-dasharray: 1;
    stroke-dashoffset: 0;
}

/* ---------- Caption under the devices ---------- */
.dv-caption {                       /* centred under the laptop, clear of the phone */
    position: absolute;
    left: 0;
    width: 54em;
    top: 44.8em;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.55em;
    text-align: center;
}
.dv-caption-main,
.dv-only,
.dv-only-url {
    font-family: 'Caveat', cursive;
    font-weight: 700;
    line-height: 1;
    white-space: nowrap;
}
.dv-caption-main {
    font-size: 2.55em;
    color: #4338ca;
}
.dv-only {
    font-size: 2.1em;
    color: #64748b;
}
.dv-only-url {
    position: relative;
    color: #0f766e;
}
.dv-only-line {                     /* hand-drawn underline */
    position: absolute;
    left: -0.1em;
    bottom: -0.3em;
    width: calc(100% + 0.2em);
    height: 0.4em;
    overflow: visible;
    color: #14b8a6;
}
.dv-only-line path {
    stroke-dasharray: 1;
    stroke-dashoffset: 0;
}

/* ---------- Intro ---------- */
@media (prefers-reduced-motion: no-preference) {
    .dv-ui-bar { animation: dv-rise 0.6s 0.3s cubic-bezier(0.2, 0.7, 0.2, 1) both; }
    .dv-lit-head { animation: dv-rise 0.6s 0.38s cubic-bezier(0.2, 0.7, 0.2, 1) both; }
    .dv-passage { animation: dv-rise 0.6s 0.5s cubic-bezier(0.2, 0.7, 0.2, 1) both; }
    .dv-litq { animation: dv-rise 0.6s 0.6s cubic-bezier(0.2, 0.7, 0.2, 1) both; }
    .dv-lit-progress i { animation: dv-grow 0.9s 0.8s cubic-bezier(0.3, 0.8, 0.2, 1) both; }

    /* The pick: the cursor leaves the passage, clicks B (2.25s), moves on to Submit. */
    .dv-cursor { animation: dv-cursor 3.4s 0.9s cubic-bezier(0.45, 0, 0.3, 1) both; }
    .dv-ripple { animation: dv-ripple 0.6s 2.25s ease-out both; }
    .dv-opt.is-picked { animation: dv-pick 0.25s 2.25s ease-out both; }
    .dv-opt.is-picked i { animation: dv-pick-letter 0.25s 2.25s ease-out both; }
    .dv-submit { animation: dv-hover 0.3s 3.5s ease-out both; }

    .dv-sticky { animation: dv-stick 0.6s 1.2s cubic-bezier(0.3, 0.9, 0.3, 1.2) both; }

    /* The phone: slides in, then 9 is tapped (2s) with the caret blinking. */
    .dv-phone-pos { animation: dv-phone-in 0.9s 0.45s cubic-bezier(0.2, 0.8, 0.2, 1) both; }
    .dv-phone { animation: dv-float 6s 1.6s ease-in-out infinite; }
    .dv-keys > span.is-press { animation: dv-press 0.5s 1.9s ease-out both; }
    .dv-q-input b { animation: dv-type 0.05s 2s both; }
    .dv-caret { animation: dv-blink 1.1s 1.4s steps(1) infinite; }
    .dv-q-check { animation: dv-ready 0.8s 2.3s ease-out both; }

    /* Both clocks keep running: 18:12 and 02:07 at the start. */
    .dv-d1 > span { animation: dv-digits 10s steps(10) infinite; }
    .dv-d10 > span { animation: dv-tens 60s steps(6) infinite; }
    .dv-lit-head .dv-d10 > span { animation-delay: -2s; }  /* tens turn over as 18:19 becomes 18:20 */
    .dv-q-head .dv-d10 > span { animation-delay: -7s; }    /* and as 02:09 becomes 02:10 */

    .dv-note--lit .dv-note-text { animation: dv-in 0.5s 1.5s both; }
    .dv-note--lit .dv-note-line { animation: dv-draw 0.55s 1.7s cubic-bezier(0.4, 0, 0.2, 1) both; }
    .dv-note--lit .dv-note-head { animation: dv-draw 0.25s 2.2s ease-out both; }
    .dv-note--num .dv-note-text { animation: dv-in 0.5s 2.6s both; }
    .dv-note--num .dv-note-line { animation: dv-draw 0.55s 2.8s cubic-bezier(0.4, 0, 0.2, 1) both; }
    .dv-note--num .dv-note-head { animation: dv-draw 0.25s 3.3s ease-out both; }
    .dv-caption-main { animation: dv-in 0.6s 3.5s both; }
    .dv-only { animation: dv-in 0.5s 3.9s both; }
    .dv-only-line path { animation: dv-draw 0.6s 4.2s cubic-bezier(0.4, 0, 0.2, 1) both; }
}

@keyframes dv-rise {
    from { opacity: 0; transform: translateY(1.2em); }
    to { opacity: 1; transform: none; }
}
@keyframes dv-grow {
    from { transform: scaleX(0); }
}
@keyframes dv-in {
    from { opacity: 0; }
}
@keyframes dv-draw {
    from { stroke-dashoffset: 1; }
}
/* Offsets are from the resting spot on Submit: it starts in the passage by
   the highlighted words, goes to B, clicks, then comes back down to Submit. */
@keyframes dv-cursor {
    0% { opacity: 0; transform: translate(-59.5em, -24em); }
    8% { opacity: 1; transform: translate(-59.5em, -24em); }
    36% { transform: translate(-21.5em, -18em); }
    39% { transform: translate(-21.5em, -18em) scale(0.86); }
    43% { transform: translate(-21.5em, -18em); }
    50% { transform: translate(-21.5em, -18em); }
    80% { transform: none; }
    100% { opacity: 1; transform: none; }
}
@keyframes dv-ripple {
    0% { opacity: 0.9; transform: scale(0.3); }
    100% { opacity: 0; transform: scale(1.5); }
}
@keyframes dv-pick {
    from { color: #334155; border-color: #e2e8f0; background-color: #fff; box-shadow: 0 0 0 0 rgba(20, 184, 166, 0); }
}
@keyframes dv-pick-letter {
    from { color: #64748b; background-color: #f1f5f9; }
}
@keyframes dv-hover {
    from { box-shadow: 0 0 0 0 rgba(20, 184, 166, 0), 0 0.6em 1.2em -0.6em rgba(13, 148, 136, 0.8); }
}
@keyframes dv-stick {
    0% { opacity: 0; transform: translate(1.5em, -1.5em) rotate(18deg) scale(1.15); }
    65% { opacity: 1; transform: rotate(3deg) scale(0.98); }
    100% { opacity: 1; transform: rotate(5deg); }
}
@keyframes dv-phone-in {
    from { opacity: 0; transform: translateY(6em) rotate(6deg); }
    to { opacity: 1; transform: none; }
}
@keyframes dv-float {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-0.6em); }
}
@keyframes dv-press {
    0% { background-color: #fff; }
    20% { background-color: #b6bcc5; }
    100% { background-color: #fff; }
}
@keyframes dv-type {
    from { max-width: 0; }
}
@keyframes dv-blink {
    0%, 100% { opacity: 1; }
    50% { opacity: 0; }
}
@keyframes dv-ready {
    0% { box-shadow: 0 0 0 0 rgba(99, 102, 241, 0.6), 0 0.5em 1em -0.5em rgba(79, 70, 229, 0.7); }
    100% { box-shadow: 0 0 0 0.6em rgba(99, 102, 241, 0), 0 0.5em 1em -0.5em rgba(79, 70, 229, 0.7); }
}
@keyframes dv-digits {
    from { transform: translateY(0); }
    to { transform: translateY(-15em); }
}
@keyframes dv-tens {
    from { transform: translateY(0); }
    to { transform: translateY(-9em); }
}
