:root {
    --lnz-line-color: rgba(0, 0, 0, 0.15);
    --lnz-line-color-light: rgba(0, 0, 0, 0.08);
    --lnz-line-color-strong: rgba(0, 0, 0, 0.3);

    /* Color variants */
    --lnz-color-blue: rgba(59, 130, 246, 0.5);
    --lnz-color-blue-light: rgba(59, 130, 246, 0.25);
    --lnz-color-blue-strong: rgba(59, 130, 246, 0.8);

    --lnz-color-purple: rgba(147, 51, 234, 0.5);
    --lnz-color-purple-light: rgba(147, 51, 234, 0.25);
    --lnz-color-purple-strong: rgba(147, 51, 234, 0.8);

    --lnz-color-green: rgba(34, 197, 94, 0.5);
    --lnz-color-green-light: rgba(34, 197, 94, 0.25);
    --lnz-color-green-strong: rgba(34, 197, 94, 0.8);

    --lnz-color-red: rgba(239, 68, 68, 0.5);
    --lnz-color-red-light: rgba(239, 68, 68, 0.25);
    --lnz-color-red-strong: rgba(239, 68, 68, 0.8);
}

/* Diagonal Lines Pattern */
.lnz-diagonal {
    position: relative;
    overflow: hidden;
}

.lnz-diagonal::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-image: repeating-linear-gradient(
        45deg,
        transparent,
        transparent 20px,
        var(--lnz-line-color-light) 20px,
        var(--lnz-line-color-light) 21px
    );
    pointer-events: none;
    z-index: 0;
}

/* Ensure direct children are above the pattern */
.lnz-diagonal > * {
    position: relative;
    z-index: 1;
}

/* Diagonal direction variants */
.lnz-diagonal--reverse::before {
    background-image: repeating-linear-gradient(
        -45deg,
        transparent,
        transparent 20px,
        var(--lnz-line-color-light) 20px,
        var(--lnz-line-color-light) 21px
    );
}

.lnz-diagonal--both::before {
    background-image:
        repeating-linear-gradient(
            45deg,
            transparent,
            transparent 20px,
            var(--lnz-line-color-light) 20px,
            var(--lnz-line-color-light) 21px
        ),
        repeating-linear-gradient(
            -45deg,
            transparent,
            transparent 20px,
            var(--lnz-line-color-light) 20px,
            var(--lnz-line-color-light) 21px
        );
}

.lnz-diagonal--dense::before {
    background-image: repeating-linear-gradient(
        45deg,
        transparent,
        transparent 10px,
        var(--lnz-line-color-light) 10px,
        var(--lnz-line-color-light) 11px
    );
}

.lnz-diagonal--sparse::before {
    background-image: repeating-linear-gradient(
        45deg,
        transparent,
        transparent 40px,
        var(--lnz-line-color-light) 40px,
        var(--lnz-line-color-light) 42px
    );
}

/* Dot Patterns */
.lnz-dots {
    position: relative;
}

.lnz-dots::after {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-image: radial-gradient(
        circle at 2px 2px,
        var(--lnz-line-color) 1px,
        transparent 1px
    );
    background-size: 15px 15px;
    pointer-events: none;
    z-index: 0;
}

/* Ensure direct children are above the pattern */
.lnz-dots > * {
    position: relative;
    z-index: 1;
}

/* Dot density variations */
.lnz-dots--dense::after {
    background-size: 10px 10px;
}

.lnz-dots--sparse::after {
    background-size: 30px 30px;
}

.lnz-dots--tiny::after {
    background-image: radial-gradient(
        circle at 1px 1px,
        var(--lnz-line-color) 0.5px,
        transparent 0.5px
    );
    background-size: 8px 8px;
}

.lnz-dots--large::after {
    background-image: radial-gradient(
        circle at 3px 3px,
        var(--lnz-line-color) 2px,
        transparent 2px
    );
    background-size: 20px 20px;
}

/* Gradient dots - fade from dense to sparse */
.lnz-dots--gradient::after {
    background-image: radial-gradient(
        circle at 2px 2px,
        var(--lnz-line-color) 1px,
        transparent 1px
    );
    background-size: 10px 10px;
    background-position:
        0 0,
        15px 15px;
    mask-image: linear-gradient(
        to bottom,
        black 0%,
        black 30%,
        transparent 100%
    );
    -webkit-mask-image: linear-gradient(
        to bottom,
        black 0%,
        black 30%,
        transparent 100%
    );
}

/* Combined container for easy use */
.lnz-container {
    position: relative;
    padding: 3rem;
    min-height: 200px;
}

/* Border lines */
.lnz-border {
    border: 2px solid var(--lnz-line-color);
}

.lnz-border--dashed {
    border-style: dashed;
}

.lnz-border--double {
    border-style: double;
    border-width: 4px;
}

/* Individual border sides */
.lnz-border-top {
    border-top: 2px solid var(--lnz-line-color);
}

.lnz-border-bottom {
    border-bottom: 2px solid var(--lnz-line-color);
}

.lnz-border-left {
    border-left: 2px solid var(--lnz-line-color);
}

.lnz-border-right {
    border-right: 2px solid var(--lnz-line-color);
}

/* Horizontal lines (top and bottom) */
.lnz-border-horizontal {
    border-top: 2px solid var(--lnz-line-color);
    border-bottom: 2px solid var(--lnz-line-color);
}

/* Vertical lines (left and right) */
.lnz-border-vertical {
    border-left: 2px solid var(--lnz-line-color);
    border-right: 2px solid var(--lnz-line-color);
}

/* Border thickness variations */
.lnz-border-thin {
    border-width: 1px;
}

.lnz-border-thick {
    border-width: 3px;
}

/* Apply thickness to individual sides */
.lnz-border-top.lnz-border-thin {
    border-top-width: 1px;
}

.lnz-border-top.lnz-border-thick {
    border-top-width: 3px;
}

.lnz-border-bottom.lnz-border-thin {
    border-bottom-width: 1px;
}

.lnz-border-bottom.lnz-border-thick {
    border-bottom-width: 3px;
}

.lnz-border-left.lnz-border-thin {
    border-left-width: 1px;
}

.lnz-border-left.lnz-border-thick {
    border-left-width: 3px;
}

.lnz-border-right.lnz-border-thin {
    border-right-width: 1px;
}

.lnz-border-right.lnz-border-thick {
    border-right-width: 3px;
}

/* Horizontal/Vertical with modifiers */
.lnz-border-horizontal.lnz-border-thin {
    border-top-width: 1px;
    border-bottom-width: 1px;
}

.lnz-border-horizontal.lnz-border-thick {
    border-top-width: 3px;
    border-bottom-width: 3px;
}

.lnz-border-vertical.lnz-border-thin {
    border-left-width: 1px;
    border-right-width: 1px;
}

.lnz-border-vertical.lnz-border-thick {
    border-left-width: 3px;
    border-right-width: 3px;
}

/* Simple grid lines */
.lnz-grid-lines {
    position: relative;
}

.lnz-grid-lines::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-image:
        linear-gradient(var(--lnz-line-color-light) 1px, transparent 1px),
        linear-gradient(90deg, var(--lnz-line-color-light) 1px, transparent 1px);
    background-size: 100px 100px;
    background-position: 0 0;
    pointer-events: none;
    z-index: 0;
}

/* Ensure direct children are above the pattern */
.lnz-grid-lines > * {
    position: relative;
    z-index: 1;
}

/* Grid line variations */
.lnz-grid-lines--dense::before {
    background-size: 50px 50px;
}

.lnz-grid-lines--sparse::before {
    background-size: 200px 200px;
}

.lnz-grid-lines--offset::before {
    background-position: -1px -1px;
}

/* Utility modifiers */
.lnz-light {
    --lnz-line-color: rgba(0, 0, 0, 0.08);
    --lnz-line-color-light: rgba(0, 0, 0, 0.04);
    --lnz-line-color-strong: rgba(0, 0, 0, 0.15);
}

.lnz-strong {
    --lnz-line-color: rgba(0, 0, 0, 0.3);
    --lnz-line-color-light: rgba(0, 0, 0, 0.15);
    --lnz-line-color-strong: rgba(0, 0, 0, 0.5);
}

/* Color modifiers */
.lnz-blue {
    --lnz-line-color: var(--lnz-color-blue);
    --lnz-line-color-light: var(--lnz-color-blue-light);
    --lnz-line-color-strong: var(--lnz-color-blue-strong);
}

.lnz-purple {
    --lnz-line-color: var(--lnz-color-purple);
    --lnz-line-color-light: var(--lnz-color-purple-light);
    --lnz-line-color-strong: var(--lnz-color-purple-strong);
}

.lnz-green {
    --lnz-line-color: var(--lnz-color-green);
    --lnz-line-color-light: var(--lnz-color-green-light);
    --lnz-line-color-strong: var(--lnz-color-green-strong);
}

.lnz-red {
    --lnz-line-color: var(--lnz-color-red);
    --lnz-line-color-light: var(--lnz-color-red-light);
    --lnz-line-color-strong: var(--lnz-color-red-strong);
}

/* Gradient Patterns */
.lnz-gradient {
    position: relative;
}

.lnz-gradient::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image: radial-gradient(
        circle,
        rgba(0, 0, 0, 0.08),
        rgba(0, 0, 0, 0.02) 50%
    );
    pointer-events: none;
    z-index: 0;
}

/* Gradient variations */
.lnz-gradient--light::after {
    background-image: radial-gradient(
        circle,
        rgba(0, 0, 0, 0.05),
        rgba(0, 0, 0, 0.01) 50%
    );
}

.lnz-gradient--strong::after {
    background-image: radial-gradient(
        circle,
        rgba(0, 0, 0, 0.15),
        rgba(0, 0, 0, 0.04) 60%
    );
}

.lnz-gradient--corner::after {
    background-image: radial-gradient(
        circle at top left,
        rgba(0, 0, 0, 0.1),
        transparent 70%
    );
}

.lnz-gradient--center::after {
    background-image: radial-gradient(
        circle at center,
        rgba(0, 0, 0, 0.1),
        transparent 70%
    );
}

/* Colored gradients */
.lnz-gradient--blue::after {
    background-image: radial-gradient(
        circle,
        rgba(59, 130, 246, 0.15),
        rgba(59, 130, 246, 0.02) 60%
    );
}

.lnz-gradient--purple::after {
    background-image: radial-gradient(
        circle,
        rgba(147, 51, 234, 0.15),
        rgba(147, 51, 234, 0.02) 60%
    );
}

.lnz-gradient--green::after {
    background-image: radial-gradient(
        circle,
        rgba(34, 197, 94, 0.15),
        rgba(34, 197, 94, 0.02) 60%
    );
}

.lnz-gradient--red::after {
    background-image: radial-gradient(
        circle,
        rgba(239, 68, 68, 0.15),
        rgba(239, 68, 68, 0.02) 60%
    );
}

.lnz-gradient--blue-corner::after {
    background-image: radial-gradient(
        circle at top left,
        rgba(59, 130, 246, 0.2),
        transparent 70%
    );
}

.lnz-gradient--purple-corner::after {
    background-image: radial-gradient(
        circle at top right,
        rgba(147, 51, 234, 0.2),
        transparent 70%
    );
}

/* Noise Pattern */
.lnz-noise {
    position: relative;
}

.lnz-noise::after {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: inherit;
    background-image: url("noise.png");
    background-size: 200px 200px;
    background-repeat: repeat;
    pointer-events: none;
}

/* Helper spacing classes */
.lnz-p-none {
    padding: 0;
}
.lnz-p-small {
    padding: 1rem;
}
.lnz-p-medium {
    padding: 2rem;
}
.lnz-p-large {
    padding: 4rem;
}
