terrazzo-terminal 0.2.7

A simple web-based terminal emulator built on Terrazzo.
div.pdf-viewer {
    position: relative;
    container-type: inline-size;
    box-sizing: border-box;
    overflow: hidden;
    background-color: rgb(38, 38, 38);

    > [data-layer="pages"] {
        position: absolute;
        inset: 0;
        box-sizing: border-box;
        display: flex;
        flex-direction: column;
        align-items: stretch;
        gap: calc(2 * var(--padding));
        overflow: auto;
        padding: calc(2 * var(--padding));
    }

    > [data-layer="pages"] > div[data-page-number] {
        position: relative;
        margin-inline: auto;
        background-color: white;
        box-shadow: 0 2px 12px rgba(0, 0, 0, 0.5);

        --scale-round-x: 1px;
        --scale-round-y: 1px;

        canvas {
            display: block;
            background-color: white;
        }

        [data-layer="text"] {
            position: absolute;
            inset: 0;
            overflow: clip;
            line-height: 1;
            text-align: initial;
            text-size-adjust: none;
            forced-color-adjust: none;
            transform-origin: 0 0;
            user-select: text;
            z-index: 1;

            --min-font-size: 1;
            --min-font-size-inv: calc(1 / var(--min-font-size));
            --text-scale-factor: calc(var(--total-scale-factor) * var(--min-font-size));

            :is(span, br) {
                position: absolute;
                color: transparent;
                white-space: pre;
                cursor: text;
                transform-origin: 0% 0%;
            }

            > :not([class~="markedContent"]),
            [class~="markedContent"] span:not([class~="markedContent"]) {
                z-index: 1;
                font-size: calc(var(--text-scale-factor) * var(--font-height));
                transform:
                    rotate(var(--rotate, 0deg))
                    scaleX(var(--scale-x, 1))
                    scale(var(--min-font-size-inv));
            }

            [class~="markedContent"] {
                display: contents;
            }

            span[role="img"] {
                user-select: none;
                cursor: default;
            }

            ::selection {
                background: rgba(0, 0, 255, 0.25);
            }

            br::selection {
                background: transparent;
            }
        }

        [data-layer="annotations"] {
            position: absolute;
            inset: 0;
            z-index: 2;
            pointer-events: none;

            a {
                position: absolute;
                display: block;
                pointer-events: auto;
                cursor: pointer;
            }
        }
    }

    > [data-control="zoom"] {
        position: absolute;
        right: calc(3 * var(--padding));
        bottom: calc(3 * var(--padding));
        z-index: 2;
        display: flex;
        align-items: center;
        gap: var(--padding);
        padding: calc(var(--padding) / 2) var(--padding);
        color: white;
        background-color: rgba(20, 20, 20, 0.86);
        border: 1px solid rgba(255, 255, 255, 0.24);
        border-radius: 4px;
        box-shadow: 0 2px 12px rgba(0, 0, 0, 0.35);

        input[type="range"] {
            width: 30cqw;
            accent-color: var(--link-color);
        }

        output {
            min-width: 4ch;
            text-align: right;
            font-variant-numeric: tabular-nums;
        }
    }
}

[class~="hiddenCanvasElement"] {
    position: absolute;
    top: 0;
    left: 0;
    display: none;
    width: 0;
    height: 0;
}