/* Shared session-opening presenter and speech primitives. */
    .nb-tutor-live { flex: 1; position: relative; min-height: 0; }
    /* ONE Zeno, two standing spots. left/bottom/width/height glide on one
       curve so a spot change reads as HIM stepping over, not the UI resizing
       him; the stride hop below rides the inner wrapper at the same time. */
    .nb-tutor-zeno-group {
        position: absolute; z-index: 10;
        transition: left 0.95s cubic-bezier(0.45, 0, 0.18, 1),
                    bottom 0.95s cubic-bezier(0.45, 0, 0.18, 1),
                    width 0.95s cubic-bezier(0.45, 0, 0.18, 1),
                    height 0.95s cubic-bezier(0.45, 0, 0.18, 1);
    }
    .nb-tutor-zeno-wrap { width: 100%; height: 100%; position: relative; transform-origin: 50% 92%; will-change: transform; }
    .nb-tutor-zeno { width: 100%; height: 100%; }
    /* His name, under his feet — shown only at the center spot, where he is
       the person being met; it fades once he is presenting. */
    .nb-tutor-zeno-name {
        position: absolute; left: 50%; transform: translateX(-50%); bottom: -22px;
        font-family: var(--font-mono); font-size: 9.5px; letter-spacing: 0.18em;
        text-transform: uppercase; color: var(--ink-3); white-space: nowrap;
        transition: opacity 0.4s ease;
    }
    @keyframes nbZenoStride {
        0% { transform: translateY(0); } 24% { transform: translateY(-9px); }
        48% { transform: translateY(0); } 72% { transform: translateY(-7px); }
        100% { transform: translateY(0); }
    }
    /* His words — a speech bubble anchored beside his head, riding the same
       glide curve he does (founder, 2026-08-18: an unboxed line was tried and
       ruled back the same day — his words keep their bubble). */
    .nb-tutor-tutor-line {
        position: absolute; z-index: 11; opacity: 0;
        transition: left 0.95s cubic-bezier(0.45, 0, 0.18, 1),
                    bottom 0.95s cubic-bezier(0.45, 0, 0.18, 1),
                    top 0.95s cubic-bezier(0.45, 0, 0.18, 1),
                    opacity 0.3s ease;
    }
    .nb-zeno-said {
        width: max-content; max-width: 100%;
        background: rgba(43, 93, 168, 0.04);
        border: 1px solid rgba(34, 48, 58, 0.22);
        border-radius: 16px 16px 16px 4px;
        padding: 13px 19px;
        font-family: var(--font-serif); font-size: 17px; line-height: 1.55;
        color: var(--ink-body);
    }

