{"layers": [{"breakpoints": [], "visible": true, "aspectRatio": 1, "userDownsample": 1, "layerType": "effect", "type": "gradient", "usesPingPong": false, "speed": 0.25, "trackMouse": 0, "mouseMomentum": 0, "mouseSpring": 0, "trackAxes": "xy", "texture": false, "animating": false, "isMask": 0, "compiledFragmentShaders": ["#version 300 es\nprecision highp float;in vec2 vTextureCoord;uniform vec2 uMousePos;const float PI = 3.14159265359;vec2 rotate(vec2 coord, float angle) {\nfloat s = sin(angle);\nfloat c = cos(angle);\nreturn vec2(\ncoord.x * c - coord.y * s,\ncoord.x * s + coord.y * c\n);\n}out vec4 fragColor;vec3 getBgColor(vec2 uv) {return vec3(0, 0, 0);\n}void main() {vec2 uv = vTextureCoord;\nvec2 pos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000);\nuv -= pos;\nuv /= max(0.5000*2., 1e-5);\nuv = rotate(uv, (0.0000 - 0.5) * 2. * PI);\nvec4 color = vec4(getBgColor(uv), 1.0000);\nfragColor = color;\n}"], "compiledVertexShaders": ["#version 300 es\nprecision mediump float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvTextureCoord = aTextureCoord;\n}"], "data": {"downSample": 0.5, "depth": false, "uniforms": {}, "isBackground": true}, "id": "gradient"}, {"breakpoints": [{"max": null, "name": "Desktop", "min": 992, "props": {"top": 0.624, "width": 908, "left": 0.5, "rotation": 0.5, "trackMouse": 0.05}}, {"props": {"top": 0.6099609375, "rotation": 0.5, "trackMouse": 0, "left": 0.5, "width": 934}, "max": 991, "name": "Tablet", "min": 576}, {"max": 575, "name": "Mobile", "min": 0, "props": {"trackMouse": 0, "width": 840, "top": 0.609952606635071}}], "aspectRatio": 0.5605381165919282, "userDownsample": 1, "states": {"appear": [], "scroll": [], "hover": [], "mousemove": []}, "effects": [], "trackMouse": 0.05, "anchorPoint": 8, "mask": 0, "maskInvert": 0, "maskDepth": 0, "maskDepthLayer": 0, "layerType": "image", "width": 908, "widthMode": 1, "height": 1619.872, "heightMode": 2, "left": 0.5, "top": 0.624, "src": "/assets/us-textures/remix_download__83_-7f61c2.jfif", "imageNaturalSize": {"type": "Vec2", "_x": 375, "_y": 669}, "compiledFragmentShaders": ["#version 300 es\nprecision highp float;in vec2 vTextureCoord;\nin vec3 vVertexPosition;uniform sampler2D uSourceImage;\nuniform float uWidth;\nuniform float uLeft;\nuniform float uTop;\nuniform float uRotation;uniform vec2 uArtboardResolution;\nuniform vec2 uMousePos;\nuniform sampler2D uBgTexture;\nuniform float uTrackMouse;const float TAU = 6.28318530718;\nconst float PI = 3.14159265359;out vec4 fragColor;vec2 rotate2D(vec2 p, float angle) {\nfloat s = sin(angle);\nfloat c = cos(angle);\nreturn vec2(p.x * c - p.y * s, p.x * s + p.y * c);\n}vec2 getAnchorOffsets() {\nreturn vec2(0.5, 0.5);\n}vec4 sampleImage(vec2 canvasUV, vec2 mouseOffset, vec2 mouseRotOffset) {\nvec2 canvasPos = vec2(canvasUV.x * uArtboardResolution.x, (1.0 - canvasUV.y) * uArtboardResolution.y);\nvec2 imageUV;float absWidth = uWidth;\nfloat absHeight = 1619.8720 * uArtboardResolution.y;\nabsWidth = absWidth;\nabsHeight = (1 != 2 && 2 == 2) ? absWidth / 0.5605 : absHeight;vec2 elementSizePx = vec2(absWidth, absHeight);\nvec2 elementPosPx = vec2(uLeft, uTop) * uArtboardResolution - getAnchorOffsets() * elementSizePx;vec2 centerPos = elementPosPx + (elementSizePx * 0.5);\nvec2 relPos = canvasPos - centerPos + mouseOffset;\nvec2 unrotatedRelPos = rotate2D(relPos, uRotation * -TAU);\nvec2 elementPos = unrotatedRelPos + (elementSizePx * 0.5);\nimageUV = elementPos / elementSizePx;\nimageUV = clamp(imageUV, vec2(0.0), vec2(1.0));\nvec2 flippedUV = vec2(imageUV.x, 1.0 - imageUV.y);\nvec4 color = textureLod(uSourceImage, flippedUV, 0.0);\nreturn color;\n}vec4 getNormalOutput(vec4 color, vec4 background) {\nreturn mix(background, color + background * (1.0 - color.a), 1.0000);\n}vec4 getOutputByMode(vec4 color, vec4 background) {\nreturn getNormalOutput(color, background);\n}vec4 applyImageAdjustments(vec4 color) {color.rgb = clamp(color.rgb, 0.0, 1.0);\ncolor.rgb *= color.a;\nreturn color;\n}vec4 getCompositeOutput(vec2 uv, vec2 mouseOffsetPx, vec2 mouseRotOffset) {\nvec4 background = vec4(0);background = texture(uBgTexture, vTextureCoord);\nvec4 color = sampleImage(uv, mouseOffsetPx, mouseRotOffset);\ncolor = applyImageAdjustments(color);return getOutputByMode(color, background);\n}void main() {\nvec2 uv = vTextureCoord;\nvec2 mouseOffsetUV = (uMousePos - 0.5) * uTrackMouse;\nvec2 mouseOffsetPx = mouseOffsetUV;\nvec2 mouseRotOffset = (uMousePos - 0.5) * 0.0000 * PI * 0.5;\nuv -= mouseOffsetUV;\nfragColor = getCompositeOutput(uv, mouseOffsetPx, mouseRotOffset);\n}"], "compiledVertexShaders": ["#version 300 es\nprecision highp float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nuniform vec2 uMousePos;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\nfloat angleX = uMousePos.y * 0.5 - 0.25;\nfloat angleY = (1.-uMousePos.x) * 0.5 - 0.25;mat4 rotateX = mat4(1.0, 0.0, 0.0, 0.0,\n0.0, cos(angleX), -sin(angleX), 0.0,\n0.0, sin(angleX), cos(angleX), 0.0,\n0.0, 0.0, 0.0, 1.0);\nmat4 rotateY = mat4(cos(angleY), 0.0, sin(angleY), 0.0,\n0.0, 1.0, 0.0, 0.0,\n-sin(angleY), 0.0, cos(angleY), 0.0,\n0.0, 0.0, 0.0, 1.0);mat4 rotationMatrix = rotateX * rotateY;\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvVertexPosition = (rotationMatrix * vec4(aVertexPosition, 1.0)).xyz;\nvTextureCoord = (vec4(aTextureCoord, 0.0, 1.0)).xy;\n}"], "data": {"uniforms": {"artboardResolution": {"name": "uArtboardResolution", "type": "2f", "value": {"type": "Vec2", "_x": 1440, "_y": 900}}, "aspectRatio": {"name": "uAspectRatio", "type": "1f", "value": 0.5605381165919282}, "top": {"name": "uTop", "type": "1f", "value": 0}, "rotation": {"name": "uRotation", "type": "1f", "value": 0}, "trackMouse": {"name": "uTrackMouse", "type": "1f", "value": 0}, "left": {"name": "uLeft", "type": "1f", "value": 0}, "width": {"name": "uWidth", "type": "1f", "value": 512}}, "elementOpacity": 1}, "id": "image"}, {"breakpoints": [], "visible": true, "aspectRatio": 1, "userDownsample": 1, "layerType": "effect", "type": "bokeh_v2", "usesPingPong": false, "trackMouse": 0, "mouseMomentum": 0, "mouseSpring": 0, "trackAxes": "xy", "texture": false, "animating": false, "isMask": 0, "compiledFragmentShaders": ["#version 300 es\nprecision highp float;\nin vec3 vVertexPosition;\nin vec2 vTextureCoord;\nuniform sampler2D uTexture;uniform vec2 uMousePos;\nuniform vec2 uResolution;float ease (int easingFunc, float t) {\nreturn t;\n}uvec2 pcg2d(uvec2 v) {\nv = v * 1664525u + 1013904223u;\nv.x += v.y * v.y * 1664525u + 1013904223u;\nv.y += v.x * v.x * 1664525u + 1013904223u;\nv ^= v >> 16;\nv.x += v.y * v.y * 1664525u + 1013904223u;\nv.y += v.x * v.x * 1664525u + 1013904223u;\nreturn v;\n}float randFibo(vec2 p) {\nuvec2 v = floatBitsToUint(p);\nv = pcg2d(v);\nuint r = v.x ^ v.y;\nreturn float(r) / float(0xffffffffu);\n}const float PI = 3.14159265359;\nconst float TAU = 6.28318530718;\nconst int SAMPLES = 128;vec2 getDiskSample(int index) {\nswitch(index) {\ncase 0: return vec2(0.00000000000000000, 0.00000000000000000);\ncase 1: return vec2(-0.06492170970003651, 0.05947360417967210);\ncase 2: return vec2(0.01088577575710092, -0.12403780010609010);\ncase 3: return vec2(0.09278605643407495, 0.12102297998686459);\ncase 4: return vec2(-0.17339837612340661, -0.03067173121540595);\ncase 5: return vec2(0.16611416144540911, -0.10566823216922469);\ncase 6: return vec2(-0.05598770426615698, 0.20827146918860992);\ncase 7: return vec2(-0.10736617767533554, -0.20672704173102546);\ncase 8: return vec2(0.23391835821225004, 0.08542660924591633);\ncase 9: return vec2(-0.24415226479787791, 0.10078250569683228);\ncase 10: return vec2(0.11800848331026967, -0.25217727437612419);\ncase 11: return vec2(0.08739463852285076, 0.27862787905541259);\ncase 12: return vec2(-0.26388694504622179, -0.15292787858374876);\ncase 13: return vec2(0.31004678777075806, -0.06816291654179785);\ncase 14: return vec2(-0.18946751257952676, 0.26949803980710624);\ncase 15: return vec2(-0.04382178150217966, -0.33816966338425020);\ncase 16: return vec2(0.26929436042810040, 0.22696157206355075);\ncase 17: return vec2(-0.36270920969676085, 0.01499916456291074);\ncase 18: return vec2(0.26477875061803019, -0.26349022172005782);\ncase 19: return vec2(-0.01772733707341532, 0.38337000825013928);\ncase 20: return vec2(-0.25227897946338351, -0.30231453192136865);\ncase 21: return vec2(0.39987003894541051, 0.05380194818233323);\ncase 22: return vec2(-0.33898829192538021, 0.23585922410715243);\ncase 23: return vec2(0.09267588111279028, -0.41195358319036235);\ncase 24: return vec2(0.21444957012487900, 0.37424309412621304);\ncase 25: return vec2(-0.41939960956635097, -0.13379991445436534);\ncase 26: return vec2(0.40754705152412823, -0.18829707483359587);\ncase 27: return vec2(-0.17662128929171092, 0.42202754145947524);\ncase 28: return vec2(-0.15768181270533427, -0.43839560844955022);\ncase 29: return vec2(0.41970135065450231, 0.22058326729190977);\ncase 30: return vec2(-0.46631434426891061, 0.12291896462279359);\ncase 31: return vec2(0.26512640302868651, -0.41233247257092226);\ncase 32: return vec2(0.08435919923763628, 0.49086203867060324);\ncase 33: return vec2(-0.39988181545685969, -0.30969095426779603);\ncase 34: return vec2(0.51163381878338732, -0.04238781605598677);\ncase 35: return vec2(-0.35372005921181171, 0.38236101941562606);\ncase 36: return vec2(0.00257705012991769, -0.52826425797557830);\ncase 37: return vec2(0.35983305850647074, 0.39666342840276486);\ncase 38: return vec2(-0.54043032826921311, -0.05008696135406215);\ncase 39: return vec2(0.43798137039652346, -0.33241224493230115);\ncase 40: return vec2(-0.09966630062891649, 0.54785413012844153);\ncase 41: return vec2(-0.30026367570830820, -0.47714901489417016);\ncase 42: return vec2(0.55030533901612588, 0.15081587847167832);\ncase 43: return vec2(-0.51366062585557248, 0.26360215245516283);\ncase 44: return vec2(0.20301693359891926, -0.54760331992229694);\ncase 45: return vec2(0.22269060038372687, 0.54703391650158295);\ncase 46: return vec2(-0.53961887046647239, -0.25573545300429140);\ncase 47: return vec2(0.57681429169430498, -0.17783801103396046);\ncase 48: return vec2(-0.30842674514668511, 0.52627556102676454);\ncase 49: return vec2(-0.12939693366378796, -0.60257895316607213);\ncase 50: return vec2(0.50755064718924692, 0.36054020547309679);\ncase 51: return vec2(-0.62394081079747366, 0.07776054160493884);\ncase 52: return vec2(0.41152421715480708, -0.48347553597769721);\ncase 53: return vec2(0.02335930194178823, 0.64055214947035111);\ncase 54: return vec2(-0.45413579302740337, -0.46083113247062885);\ncase 55: return vec2(0.65210800648236278, 0.03334272077808673);\ncase 56: return vec2(-0.50792228220673430, 0.41967068323828094);\ncase 57: return vec2(0.09185189362867616, -0.65834921945203628);\ncase 58: return vec2(0.38027224255975223, 0.55227296207523335);\ncase 59: return vec2(-0.65906510929067352, -0.15164934157768004);\ncase 60: return vec2(0.59337734669208275, -0.33618388346622341);\ncase 61: return vec2(-0.21219553303106065, 0.65409576731234675);\ncase 62: return vec2(-0.28769854139809309, -0.63075328323851743);\ncase 63: return vec2(0.64333391998429934, 0.27293508462799543);\ncase 64: return vec2(-0.66394691865240341, 0.23515637397215214);\ncase 65: return vec2(0.33330174341254065, -0.62672634923897119);\ncase 66: return vec2(0.17894202910280943, 0.69253711611531232);\ncase 67: return vec2(-0.60427485070261500, -0.39272350295032343);\ncase 68: return vec2(0.71613961875617960, -0.11948150230680118);\ncase 69: return vec2(-0.45062780872745783, 0.57603671665243883);\ncase 70: return vec2(-0.05723860737265316, -0.73441092090243865);\ncase 71: return vec2(0.54212473499086711, 0.50644680728612268);\ncase 72: return vec2(-0.74705180988275366, -0.00728891175848209);\ncase 73: return vec2(0.55962259303437345, -0.50270670000876372);\ncase 74: return vec2(-0.07357359665334715, 0.75381054432012551);\ncase 75: return vec2(-0.45800443518059281, -0.60961240652738979);\ncase 76: return vec2(0.75448563804104352, 0.14106278322614005);\ncase 77: return vec2(-0.65589373826126673, 0.40829233266847215);\ncase 78: return vec2(0.20918336658817419, -0.74892822215051780);\ncase 79: return vec2(0.35389541858369788, 0.69796929264879770);\ncase 80: return vec2(-0.73704396146428142, -0.27734678225775183);\ncase 81: return vec2(0.73537176785946590, -0.29518695733285677);\ncase 82: return vec2(-0.34495416194597228, 0.71879450532459843);\ncase 83: return vec2(-0.23258561253207069, -0.76766840859596397);\ncase 84: return vec2(0.69419845682790271, 0.41140162036072836);\ncase 85: return vec2(-0.79446529063813598, 0.16655218597614618);\ncase 86: return vec2(0.47608562807331040, -0.66333184863136807);\ncase 87: return vec2(0.09758595996888125, 0.81541129809937918);\ncase 88: return vec2(-0.62632811775023856, -0.53840842448006165);\ncase 89: return vec2(0.83020175679399022, -0.02622067192745530);\ncase 90: return vec2(-0.59778342427541020, 0.58337757607420615);\ncase 91: return vec2(0.04697984646292885, -0.83858168988803161);\ncase 92: return vec2(0.53472637768626496, 0.65364057063509251);\ncase 93: return vec2(-0.84034866507833506, -0.12142633017265982);\ncase 94: return vec2(0.70543158849422050, -0.48067498842477380);\ncase 95: return vec2(-0.19650900365897886, 0.83535520589033696);\ncase 96: return vec2(-0.42157616745420784, -0.75263509189131594);\ncase 97: return vec2(0.82351074327800877, 0.27160272495287235);\ncase 98: return vec2(-0.79476150033318194, 0.35783247486606046);\ncase 99: return vec2(0.34607230820791979, -0.80478308751908967);\ncase 100: return vec2(0.28989332348405228, 0.83135772050843615);\ncase 101: return vec2(-0.77919940439516633, -0.41927798013290246);\ncase 102: return vec2(0.86201155143017782, -0.21825159706069167);\ncase 103: return vec2(-0.49058092432024442, 0.74684668379540609);\ncase 104: return vec2(-0.14343986089414099, -0.88635577320524417);\ncase 105: return vec2(0.70787169315152809, 0.55934886645713500);\ncase 106: return vec2(-0.90407188209370859, 0.06602619453011586);\ncase 107: return vec2(0.62496165277805438, -0.66248041246365019);\ncase 108: return vec2(-0.01339032038611396, 0.91489343731690342);\ncase 109: return vec2(-0.61093695207632348, -0.68681677389080220);\ncase 110: return vec2(0.91860898817335790, 0.09418442090756367);\ncase 111: return vec2(-0.74433478628701588, 0.55356195877438330);\ncase 112: return vec2(0.17570975319046836, -0.91506455340446358);\ncase 113: return vec2(0.49073052015231655, 0.79696458443214335);\ncase 114: return vec2(-0.90416562838801451, -0.25730419093801210);\ncase 115: return vec2(0.84418847731543434, -0.42286958153182719);\ncase 116: return vec2(-0.33829533812835338, 0.88587869959841203);\ncase 117: return vec2(-0.35045489392373419, -0.88552702472084421);\ncase 118: return vec2(0.86023224982555069, 0.41800617044562144);\ncase 119: return vec2(-0.92054359024488175, 0.27400751561609027);\ncase 120: return vec2(0.49576076837992039, -0.82731724185761146);\ncase 121: return vec2(0.19408989388749356, 0.94884857022328517);\ncase 122: return vec2(-0.78728707267001474, -0.57089009390180012);\ncase 123: return vec2(0.97010326022031101, -0.11130155705535714);\ncase 124: return vec2(-0.64273776195212984, 0.74035699458996584);\ncase 125: return vec2(-0.02627445054774453, -0.98402332356018363);\ncase 126: return vec2(0.68680300438457664, 0.71066575773343044);\ncase 127: return vec2(-0.99038182952039266, -0.06033204610194891);\ncase 128: return vec2(0.77406005094297514, -0.62696020571457534);\ndefault: return vec2(0.0);\n}\n}vec4 bokehBlur(vec2 uv, float blurRadius, float intensity) {\nfloat aspectRatio = uResolution.x / uResolution.y;\nvec3 accumulatedColor = vec3(0.0);\nvec3 accumulatedWeights = vec3(0.0);\nvec2 pixelSize = vec2(1.0 / aspectRatio, 1.0) * blurRadius * 0.075;\nfloat accumulatedAlpha = 0.;\nfloat noiseAngle = randFibo(uv);mat2 rotationMatrix = mat2(\ncos(noiseAngle), -sin(noiseAngle),\nsin(noiseAngle), cos(noiseAngle)\n);\nfor (int i = 0; i < 128; i++) {\nvec2 sampleOffset = rotationMatrix * getDiskSample(i) * pixelSize;\nvec4 colorSample = texture(uTexture, uv + sampleOffset);\nvec3 bokehWeight = vec3(5.0) + pow(colorSample.rgb, vec3(9.0)) * intensity;\naccumulatedAlpha += colorSample.a;\naccumulatedColor += colorSample.rgb * bokehWeight;\naccumulatedWeights += bokehWeight;\n}return vec4(accumulatedColor / accumulatedWeights, accumulatedAlpha / 128.0);\n}out vec4 fragColor;float getStrength(vec2 uv) {\nvec2 mPos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000);\nfloat aspectRatio = uResolution.x/uResolution.y;\nfloat dist = ease(0, max(0.,1.-distance(uv * vec2(aspectRatio, 1), mPos * vec2(aspectRatio, 1)) * 4. * (1. - 1.0000)));return dist;\n}vec4 blurPass(vec2 uv) {\nfloat strength = getStrength(uv);\nreturn bokehBlur(uv, 1.0000 * strength, 150.0);\n}vec4 getColor(vec2 uv) {\nreturn blurPass(uv);\n}void main() {\nvec2 uv = vTextureCoord;\nvec4 color = vec4(0);if(1.0000 == 0.) {\ncolor = texture(uTexture, uv);\nfragColor = color;return;\n}\ncolor = getColor(uv);\nfragColor = color;}", "#version 300 es\nprecision highp float;\nin vec3 vVertexPosition;\nin vec2 vTextureCoord;\nuniform sampler2D uTexture;\nuniform sampler2D uBgTexture;\nuniform sampler2D uBlueNoise;uniform vec2 uMousePos;\nuniform vec2 uResolution;float ease (int easingFunc, float t) {\nreturn t;\n}const float PI = 3.14159265359;\nconst float TAU = 6.28318530718;\nconst int SAMPLES = 128;float getBlueNoiseOffset(vec2 st) {\nivec2 texSize = ivec2(512, 512);\nvec4 blueNoise = texelFetch(uBlueNoise, ivec2(fract(st * (uResolution)/vec2(texSize) * vec2(texSize.x/texSize.y, 1.0)) * vec2(texSize)) % texSize, 0);\nreturn mod((blueNoise.r - 0.5) * TAU, TAU);\n}out vec4 fragColor;float getStrength(vec2 uv) {\nvec2 mPos = vec2(0.5, 0.5) + mix(vec2(0), (uMousePos-0.5), 0.0000);\nfloat aspectRatio = uResolution.x/uResolution.y;\nfloat dist = ease(0, max(0.,1.-distance(uv * vec2(aspectRatio, 1), mPos * vec2(aspectRatio, 1)) * 4. * (1. - 1.0000)));return dist;\n}vec4 composite(vec2 uv) {\nvec4 color = vec4(0.);\nfloat strength = getStrength(uv);\nvec4 bg = texture(uBgTexture, uv);if(1.0000 <= 0.001) {\nreturn bg;\n}if(strength <= 0.001) {\nreturn bg;\n}\nfloat blueNoiseOffset = getBlueNoiseOffset(uv);\nfloat blueNoiseStrength = 0.005 * 1.0000 * strength;\nvec2 offset = vec2(cos(blueNoiseOffset), sin(blueNoiseOffset)) * min(blueNoiseStrength, 0.01);vec2 pixelSize = vec2(1.0) / uResolution;\nvec4 s1 = texture(uTexture, uv + offset);\nvec4 s2 = texture(uTexture, uv + offset + pixelSize);\nvec4 s3 = texture(uTexture, uv + offset - pixelSize);\nvec4 s4 = texture(uTexture, uv + offset + vec2(-pixelSize.x, pixelSize.y));\nvec4 s5 = texture(uTexture, uv + offset + vec2(pixelSize.x, -pixelSize.y));return (s1 + s2 + s3 + s4 + s5) * 0.2;\n}vec4 getColor(vec2 uv) {\nreturn composite(uv);\n}void main() {\nvec2 uv = vTextureCoord;\nvec4 color = vec4(0);if(1.0000 == 0.) {\ncolor = texture(uTexture, uv);\nfragColor = color;return;\n}\ncolor = getColor(uv);\nfragColor = color;}"], "compiledVertexShaders": ["#version 300 es\nprecision mediump float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nuniform mat4 uTextureMatrix;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy;\n}"], "data": {"downSample": 0.5, "depth": false, "uniforms": {}, "isBackground": false, "passes": [{"prop": "pass", "value": 1, "includeBg": true}], "texture": {"src": "/assets/us-textures/blue_noise_med-3e976e.png", "sampler": "uBlueNoise"}}, "id": "bokeh"}, {"breakpoints": [{"props": {"pos": {"type": "Vec2", "_x": -0.446, "_y": 2.97}, "angle": 0, "frequency": 0.99, "speed": 0.45}, "name": "Desktop", "max": null, "min": 992}, {"name": "Tablet", "max": 991, "min": 576, "props": {"pos": {"type": "Vec2", "_x": 0.4628947480758848, "_y": 1.4169999999999998}, "angle": 0.25}}, {"props": {"frequency": 0.99, "speed": 0.55}, "max": 575, "name": "Mobile", "min": 0}], "visible": true, "aspectRatio": 1, "userDownsample": 1, "layerType": "effect", "type": "blinds", "usesPingPong": false, "speed": 0.45, "trackMouse": 0, "mouseMomentum": 0, "mouseSpring": 0, "trackAxes": "xy", "texture": false, "animating": true, "isMask": 0, "compiledFragmentShaders": ["#version 300 es\nprecision highp float;\nin vec2 vTextureCoord;uniform sampler2D uTexture;\nuniform float uFrequency;\nuniform vec2 uPos;\nuniform float uTime;\nuniform float uAngle;uniform vec2 uMousePos;\nuniform vec2 uResolution;float ease (int easingFunc, float t) {\nreturn t;\n}const float STEPS = 8.0;\nconst float PI = 3.14159265359;\nconst vec3 CH_R = vec3(1, 0, 0);\nconst vec3 CH_G = vec3(0, 1, 0);\nconst vec3 CH_B = vec3(0, 0, 1);mat2 rot(float a) {\nreturn mat2(cos(a),-sin(a),sin(a),cos(a));\n}vec2 scaleAspect(vec2 st) {\nreturn st * vec2(uResolution.x / uResolution.y, 1.0);\n}vec2 unscaleAspect(vec2 st) {\nreturn st * vec2(uResolution.y / uResolution.x, 1.0);\n}vec2 scaleAspect(vec2 st, float aspectRatio) {\nreturn st * vec2(aspectRatio, 1.0);\n}struct StructFunc {\nvec2 st;\nvec3 distort;\n};float smoothSegment(float s) {\nreturn mix(s, smoothstep(0.0, 0.5, s) - smoothstep(0.5, 1.0, s), 1.0000);\n}vec3 channelDistort(float segment) {\nreturn mix(mix(CH_R, CH_G, segment * 2.0), mix(CH_G, CH_B, (segment - 0.5) * 2.0), step(0.5, segment));\n}StructFunc applyStyle(vec2 st, vec2 pos, vec3 d, float dist, float amount, float angle) {\nst = rot(angle * 2. * PI) * (st - pos) + pos;\nst = unscaleAspect(st);\nreturn StructFunc(st, d);\n}StructFunc style5(vec2 st, vec2 pos, float divisions, float dist, float amount, float angle) {\nvec2 diff = st - pos;\nvec2 rotatedDiff = vec2(\ndiff.x * cos(-PI / 4.) - diff.y * sin(-PI / 4.),\ndiff.x * sin(-PI / 4.) + diff.y * cos(-PI / 4.)\n);\nfloat manhattanDist = abs(rotatedDiff.x) + abs(rotatedDiff.y);\nfloat segment = smoothSegment(fract(manhattanDist * divisions - uTime * 0.05));\nvec3 d = channelDistort(segment);\nst -= pow(d.r, dist) / 10. * amount * normalize(diff);\nst += pow(d.b, dist) / 10. * amount * normalize(diff);\nreturn applyStyle(st, pos, d, dist, amount, angle);\n}StructFunc getStyle(vec2 st, vec2 pos, float divisions, float dist, float amount, float angle) {\nreturn style5(st, pos, divisions, dist, amount, angle);\n}vec2 caUV;\nvec3 caDistort;\nfloat caDist;\nfloat caAmount;out vec4 fragColor;vec2 distortUV(vec2 uv) {\nfloat aspectRatio = uResolution.x / uResolution.y;vec2 mPos = uPos + mix(vec2(0), (uMousePos - 0.5), 0.0000);\nfloat mDist = ease(0, max(0., 1. - distance(uv * vec2(aspectRatio, 1), mPos * vec2(aspectRatio, 1)) * 4. * (1. - 1.0000)));vec2 pos = scaleAspect(mix(uPos, mPos, floor(1.0000)));\nvec2 st = scaleAspect(uv);\nst = rot(uAngle * -2.0 * PI) * (st - pos) + pos;float divisions = 2. + uFrequency * 60.;\nfloat dist = 1.0000 * 4. + 1.;\nfloat amount = 0.4500 * mDist;caDist = dist;\ncaAmount = amount;\ncaUV = uv;\ncaDistort = vec3(0.0);if (abs(amount) <= 0.001) return uv;vec2 texelX = dFdx(st) * 1.5;\nvec2 texelY = dFdy(st) * 1.5;StructFunc result = getStyle(st, pos, divisions, dist, amount, uAngle);\nStructFunc result1 = getStyle(st + texelX, pos, divisions, dist, amount, uAngle);\nStructFunc result2 = getStyle(st + texelY, pos, divisions, dist, amount, uAngle);\nStructFunc result3 = getStyle(st - texelX, pos, divisions, dist, amount, uAngle);\nStructFunc result4 = getStyle(st - texelY, pos, divisions, dist, amount, uAngle);caUV = result.st;\ncaDistort = result.distort;return (result.st + result1.st + result2.st + result3.st + result4.st) / 5.;\n}void main() {\nvec2 uv = vTextureCoord;\nuv = distortUV(uv);\nvec4 color = texture(uTexture, uv);\nfragColor = color;}"], "compiledVertexShaders": ["#version 300 es\nprecision mediump float;in vec3 aVertexPosition;\nin vec2 aTextureCoord;uniform mat4 uMVMatrix;\nuniform mat4 uPMatrix;\nuniform mat4 uTextureMatrix;out vec2 vTextureCoord;\nout vec3 vVertexPosition;void main() {\ngl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);\nvTextureCoord = (uTextureMatrix * vec4(aTextureCoord, 0.0, 1.0)).xy;\n}"], "data": {"depth": false, "uniforms": {"pos": {"name": "uPos", "type": "2f", "value": {"type": "Vec2", "_x": 0.5, "_y": 0.5}}, "angle": {"name": "uAngle", "type": "1f", "value": 0}, "frequency": {"name": "uFrequency", "type": "1f", "value": 0.975}}, "isBackground": false}, "id": "blinds"}], "options": {"name": "HIW doubled density", "fps": 60, "dpi": 1.5, "scale": 1, "includeLogo": false, "isProduction": false, "flatten": false, "freePlan": false}, "version": "2.1.6", "id": "dEgIk7gTgac92JHdIqzB-hiw"}