@sula-tech/webcomponents 0.24.0 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/sula-avatar_32.cjs.entry.js +46 -15
- package/dist/cjs/sula-avatar_32.cjs.entry.js.map +1 -1
- package/dist/cjs/sula-workbench-menu.cjs.entry.js +29 -5
- package/dist/cjs/sula-workbench-menu.cjs.entry.js.map +1 -1
- package/dist/cjs/sula-workbench-menu.entry.cjs.js.map +1 -1
- package/dist/cjs/webcomponents.cjs.js +1 -1
- package/dist/collection/components/sula-button/sula-button.css +1 -1
- package/dist/collection/components/sula-icon/sula-icon.css +1 -1
- package/dist/collection/components/sula-loader/sula-loader.css +1 -1
- package/dist/collection/components/sula-modal/sula-modal.css +1 -1
- package/dist/collection/components/sula-modal/sula-modal.js +142 -11
- package/dist/collection/components/sula-modal/sula-modal.js.map +1 -1
- package/dist/collection/components/sula-modal/sula-modal.stories.js +48 -0
- package/dist/collection/components/sula-modal/sula-modal.stories.js.map +1 -1
- package/dist/collection/components/sula-workbench-menu/sula-workbench-menu.js +48 -4
- package/dist/collection/components/sula-workbench-menu/sula-workbench-menu.js.map +1 -1
- package/dist/collection/components/sula-workbench-menu/sula-workbench-menu.stories.js +40 -0
- package/dist/collection/components/sula-workbench-menu/sula-workbench-menu.stories.js.map +1 -1
- package/dist/components/{p-KitH8bea.js → p-BSlKsiiN.js} +3 -3
- package/dist/components/{p-KitH8bea.js.map → p-BSlKsiiN.js.map} +1 -1
- package/dist/components/{p-BORy1230.js → p-BlRYoc3b.js} +3 -3
- package/dist/components/{p-BORy1230.js.map → p-BlRYoc3b.js.map} +1 -1
- package/dist/components/{p-DK8hW-Cd.js → p-CNJmyTBM.js} +3 -3
- package/dist/components/{p-DK8hW-Cd.js.map → p-CNJmyTBM.js.map} +1 -1
- package/dist/components/{p-B_WIoxzn.js → p-Chv1iPo7.js} +4 -4
- package/dist/components/{p-B_WIoxzn.js.map → p-Chv1iPo7.js.map} +1 -1
- package/dist/components/{p-CGpfhGAG.js → p-CkBDMANF.js} +3 -3
- package/dist/components/{p-CGpfhGAG.js.map → p-CkBDMANF.js.map} +1 -1
- package/dist/components/{p-CWTfj4TV.js → p-Ckrg2kct.js} +3 -3
- package/dist/components/{p-CWTfj4TV.js.map → p-Ckrg2kct.js.map} +1 -1
- package/dist/components/{p-GEr9Dmhq.js → p-CqrWuXvX.js} +3 -3
- package/dist/components/{p-GEr9Dmhq.js.map → p-CqrWuXvX.js.map} +1 -1
- package/dist/components/{p-DwZCdDhF.js → p-DOhCUb27.js} +3 -3
- package/dist/components/{p-DwZCdDhF.js.map → p-DOhCUb27.js.map} +1 -1
- package/dist/components/{p-BssyNhpP.js → p-ej3XWtzq.js} +5 -5
- package/dist/components/{p-BssyNhpP.js.map → p-ej3XWtzq.js.map} +1 -1
- package/dist/components/sula-avatar.js +1 -1
- package/dist/components/sula-badge.js +1 -1
- package/dist/components/sula-breadcrumb.js +1 -1
- package/dist/components/sula-button.js +1 -1
- package/dist/components/sula-calendar.js +2 -2
- package/dist/components/sula-checkbox.js +1 -1
- package/dist/components/sula-chip.js +2 -2
- package/dist/components/sula-dropdown.js +1 -1
- package/dist/components/sula-icon-picker.js +4 -4
- package/dist/components/sula-icon.js +1 -1
- package/dist/components/sula-loader.js +1 -1
- package/dist/components/sula-menu-select-list.js +1 -1
- package/dist/components/sula-menu.js +1 -1
- package/dist/components/sula-modal.js +51 -15
- package/dist/components/sula-modal.js.map +1 -1
- package/dist/components/sula-profile-menu.js +1 -1
- package/dist/components/sula-progress-bar.js +1 -1
- package/dist/components/sula-search-bar.js +1 -1
- package/dist/components/sula-segmented-control.js +1 -1
- package/dist/components/sula-tag.js +1 -1
- package/dist/components/sula-textfield.js +1 -1
- package/dist/components/sula-tiles.js +1 -1
- package/dist/components/sula-timeline-list.js +1 -1
- package/dist/components/sula-toast-stack.js +2 -2
- package/dist/components/sula-toast.js +1 -1
- package/dist/components/sula-toggle.js +1 -1
- package/dist/components/sula-tooltip.js +1 -1
- package/dist/components/sula-workbench-menu.js +34 -8
- package/dist/components/sula-workbench-menu.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/sula-avatar_32.entry.js +46 -15
- package/dist/esm/sula-avatar_32.entry.js.map +1 -1
- package/dist/esm/sula-workbench-menu.entry.js +29 -5
- package/dist/esm/sula-workbench-menu.entry.js.map +1 -1
- package/dist/esm/webcomponents.js +1 -1
- package/dist/types/components/sula-modal/sula-modal.d.ts +21 -0
- package/dist/types/components/sula-modal/sula-modal.stories.d.ts +22 -0
- package/dist/types/components/sula-workbench-menu/sula-workbench-menu.d.ts +7 -0
- package/dist/types/components/sula-workbench-menu/sula-workbench-menu.stories.d.ts +23 -0
- package/dist/types/components.d.ts +58 -0
- package/dist/webcomponents/{p-907588e9.entry.js → p-28e25fac.entry.js} +52 -19
- package/dist/webcomponents/p-28e25fac.entry.js.map +1 -0
- package/dist/webcomponents/{p-68a6d489.entry.js → p-50ad82d0.entry.js} +26 -6
- package/dist/webcomponents/p-50ad82d0.entry.js.map +1 -0
- package/dist/webcomponents/sula-workbench-menu.entry.esm.js.map +1 -1
- package/dist/webcomponents/webcomponents.esm.js +10 -3
- package/package.json +1 -1
- package/dist/webcomponents/p-68a6d489.entry.js.map +0 -1
- package/dist/webcomponents/p-907588e9.entry.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["SulaAvatarSize","sulaAvatarCss","SulaAvatar","constructor","hostRef","this","size","Medium","render","h","Host","key","class","Small","Large","Display","imageUrl","src","alt","text","icon","SulaBadgeStatus","SulaBadgeSize","SulaBadgeType","sulaBadgeCss","SulaBadge","status","Default","type","Text","hasSlotContent","componentDidLoad","checkSlotContent","slotRef","assignedNodes","hasContent","some","node","nodeType","Node","TEXT_NODE","textContent","trim","getSizeClass","sizeStyles","getPaddingByType","paddingStyles","Dot","getTextPaddingBySize","Icon","getStatusClass","statusStyles","Error","Info","Success","Warning","customClass","ref","el","sulaBreadcrumbCss","SulaBreadcrumb","items","handleItemClick","item","isActive","path","breadcrumbItemClicked","emit","map","index","length","hasPath","href","undefined","onClick","e","preventDefault","title","SulaButtonAppearance","SulaButtonSize","SulaButtonStatus","SulaButtonType","SulaLoaderSize","sulaButtonCss","SulaButton","appearance","Primary","loading","buttonDisabled","fullWidth","handleClick","buttonClicked","getAppearanceClass","appearanceStyles","getDefaultButtonStyles","Secondary","getSecondaryButtonStyles","getTextButtonStyles","getButtonDisabledClass","Danger","Negative","getTextTypeSizeClass","sizeClasses","getButtonSizeByTypeClass","getArrowIconContainerClass","getBaseButtonClass","Object","assign","disabled","renderIconContent","id","renderTextContent","renderArrowIcon","getLoadingSize","leftIcon","rightIcon","SulaTextfieldType","SulaTextfieldStatus","sulaCalendarCss","DATE_PATTERN","DAYS_IN_WEEK","FALLBACK_LOCALE","SulaCalendar","value","SulaCalendarStatus","locale","range","allowTyping","inline","compact","firstDayOfWeek","closeOnSelect","showCalendar","openUpward","hoverDate","handleFieldClick","open","handleCompactClick","event","stopPropagation","close","handleFieldKeydown","handleInputChanged","typedValue","_a","detail","start","end","getRange","getTime","rangeSelected","formatDate","valueChanged","handleRangeInputChanged","part","startText","endText","getRangeTexts","typed","nextStart","nextEnd","handlePreviousMonth","changeMonth","handleNextMonth","handleSelectDay","day","isDisabled","selectRangeDay","date","formatted","dateSelected","handleGridLeave","handleValueChange","selectedDate","syncViewWithValue","handleDocumentClick","composedPath","includes","handleDocumentKeydown","componentWillLoad","componentDidRender","calculatePanelPosition","parseDate","split","reference","Date","viewMonth","getMonth","viewYear","getFullYear","match","exec","Number","month","year","isValid","getDate","padStart","capitalize","charAt","toUpperCase","slice","isSameDay","first","second","isOutOfRange","min","max","weekStart","Math","trunc","isFinite","createFormatter","options","Intl","DateTimeFormat","isDual","getMonthLabel","offset","format","replace","getWeekdays","shortFormatter","weekday","longFormatter","Array","from","_","short","long","getWeeks","today","monthDate","previewEnd","rangeEnd","hasRange","to","firstOfMonth","minDate","maxDate","weekOffset","getDay","daysInMonth","totalCells","ceil","weeks","cell","isCurrentMonth","isSelected","isRangeStart","isRangeEnd","isInRange","isRangePreview","isToday","push","rect","getBoundingClientRect","panelHeight","_b","panelNode","offsetHeight","spaceBelow","window","innerHeight","bottom","spaceAbove","top","calendarOpened","calendarClosed","getCompactLabel","placeholder","label","step","monthChanged","handleDayHover","isRangeInverted","getTextfieldStatus","renderHeader","showPrevious","showNext","renderMonth","role","onMouseLeave","week","renderDay","renderRangeInputs","maskPattern","onValueChanged","helpText","onMouseEnter","renderPanel","relative","onKeyDown","readOnly","SulaCheckboxType","sulaCheckboxCss","SulaCheckbox","checked","isFocus","toggle","handleFocus","focusedOn","handleBlur","focusedOut","getIconColor","List","onFocus","onBlur","tabIndex","subTitle","SulaChipAppearance","SulaChipItemsPlacement","sulaChipCss","SulaChip","itemsPlacement","Bottom","selected","isFocused","showItems","itemClicked","handleItemSelected","menuItemSelected","clickInside","getIconClass","getLeadingIconClass","Top","onItemSelected","sulaDropdownCss","SulaDropdown","hasError","menuMaxHeight","contentMaxHeight","showContent","searchTerm","filteredItems","dropdownClicked","customContent","searchable","searchInputRef","focus","selectedItem","setTimeout","filterItems","term","toLowerCase","filter","handleSearchInput","target","dropdownFocused","dropdownFocusedOut","handleShowContentChange","newValue","handleWindowResize","calculateMenuPosition","viewportHeight","buffer","requiredSpace","onInput","style","maxHeight","itemsToShow","showNoResults","selectedValue","sulaIconCss","SulaIcon","sulaIconPickerCss","MAX_VISIBLE_ICONS","ALL_ICONS","iconsData","icons","aliases","String","properties","name","alias","Boolean","ligatures","code","className","SulaIconPicker","required","showSearch","searchPlaceholder","maxVisibleIcons","handleDropdownClicked","pickerClicked","handleDropdownFocused","pickerFocused","handleDropdownFocusedOut","pickerFocusedOut","handleSearchChange","handleSelectIcon","selectedIcon","iconSelected","dropdownEl","handleContentClick","findIconByValue","handleIconsChange","iconsList","find","filterIcons","filteredIcons","dropdownValue","dropdownLabel","error","onDropdownClicked","onDropdownFocused","onDropdownFocusedOut","gridTemplateColumns","_c","document","navigator","global","factory","module","exports","svgNS","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","flag","getWebWorker","setLocationHref","getLocationHref","createTag","createElement","extendPrototype","sources","destination","i","len","sourcePrototype","prototype","attr","hasOwnProperty","call","getDescriptor","object","prop","getOwnPropertyDescriptor","createProxyFunction","ProxyFunction","audioControllerFactory","AudioController","audioFactory","audios","_volume","_isMuted","addAudio","audio","pause","resume","setRate","rateValue","createAudio","assetPath","Howl","isPlaying","play","seek","playing","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","volume","createTypedArray","createRegularArray","arr","createTypedArrayFactory","Float32Array","Int16Array","Uint8ClampedArray","createSizedArray","apply","_typeof$6","o","Symbol","iterator","subframeEnabled","expressionsPlugin","expressionsInterfaces","idPrefix$1","isSafari","test","userAgent","bmPow","pow","bmSqrt","sqrt","bmFloor","floor","bmMax","bmMin","BMMath","propertyNames","random","abs","val","tOfVal","absArr","defaultCurveSegments","degToRads","PI","roundCorner","styleDiv","element","position","left","display","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","currentTime","totalTime","frameMultiplier","direction","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","totalFrames","BMDestroyEvent","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","createElementID","_count","createID","HSVtoRGB","s","v","r","g","b","f","p","q","t","RGBtoHSV","d","addSaturationToRGB","color","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","colorMap","hex","toString","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setExpressionInterfaces","getExpressionInterfaces","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","createNS","createElementNS","_typeof$5","dataManager","_counterId","processes","workerFn","workerInstance","workerProxy","onmessage","postMessage","data","_workerSelf","createWorker","fn","Worker","Blob","blob","url","URL","createObjectURL","setupWorker","workerStart","dataFunctionManager","completeLayers","layers","comps","layerData","j","jLen","k","kLen","completed","hasMask","maskProps","masksProperties","pt","convertPathsToAbsoluteValues","ty","findCompLayers","refId","completeShapes","shapes","completeChars","chars","assets","findComp","comp","__used","JSON","parse","stringify","ks","it","checkVersion","minimum","animVersionString","animVersion","checkText","minimumVersion","updateTextLayer","textLayer","documentData","iterateLayers","animationData","checkChars","charData","ip","op","st","sr","a","sk","sa","checkPathProperties","pathData","checkColors","iterateShapes","c","checkShapes","completeClosingShapes","closed","cl","completeData","__complete","moduleOb","assetLoader","formatResponse","xhr","contentTypeHeader","getResponseHeader","responseType","indexOf","response","responseText","loadAsset","fullPath","callback","errorCallback","XMLHttpRequest","err","onreadystatechange","readyState","join","send","load","payload","animation","process","onComplete","onError","createProcess","loadAnimation","processId","location","origin","pathname","loadData","completeAnimation","anim","ImagePreloader","proxyImage","canvas","width","height","ctx","getContext","fillStyle","fillRect","imageLoaded","loadedAssets","totalImages","loadedFootagesCount","totalFootages","imagesLoadedCb","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","u","testImageLoaded","img","intervalId","setInterval","box","getBBox","_imageLoaded","clearInterval","bind","createImageData","addEventListener","ob","setAttributeNS","_elementHelper","append","appendChild","createImgData","crossOrigin","createFootageData","footageData","_footageLoaded","loadAssets","cb","images","_createImageData","setPath","setAssetsPath","getAsset","destroy","loadedImages","loadedFootages","setCacheType","elementHelper","ImagePreloaderFactory","BaseEvent","triggerEvent","eventName","args","_cbs","callbacks","removeEventListener","splice","markerParser","parsePayloadLines","lines","keys","line","keysCount","_markers","markers","_marker","markerData","time","tm","duration","dr","cm","__","ProjectInterface","registerComposition","compositions","_thisProjectFunction","nm","prepareFrame","xt","currentFrame","compInterface","renderers","registerRenderer","getRenderer","getRegisteredRenderer","_typeof$4","AnimationItem","isLoaded","currentRawFrame","frameRate","frameMult","playSpeed","playDirection","playCount","isPaused","autoplay","loop","renderer","animationID","timeCompleted","segmentPos","isSubframeEnabled","segments","_idle","_completedLoop","projectInterface","imagePreloader","audioController","configAnimation","onSetupError","onSegmentComplete","drawnFrameEvent","setParams","params","wrapper","container","animType","RendererClass","rendererSettings","globalData","defs","setProjectInterface","parseInt","autoloadSegments","initialSegment","setupAnimation","lastIndexOf","substr","fileName","trigger","setData","wrapperAttributes","attributes","getNamedItem","prerender","includeLayers","newLayers","fonts","fontManager","addChars","addFonts","initExpressions","loadNextSegment","segment","shift","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","animData","round","fr","searchExtraCompositions","updaFrameModifier","waitForFontsLoaded","triggerConfigError","rendererType","initItems","gotoFrame","resize","_width","_height","updateContainerSize","setSubframe","renderFrame","resetFrame","triggerRenderFrameError","togglePause","stop","setCurrentRawFrameValue","getMarkerData","markerName","marker","goToAndStop","isFrame","numValue","isNaN","frameModifier","goToAndPlay","playSegments","advanceTime","nextValue","_isComplete","checkSegments","adjustSegment","setSpeed","setDirection","setSegment","init","pendingFrame","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onSegmentStart","onDestroy","setLoop","isLooping","getPath","getAssetData","hide","show","getDuration","updateDocumentData","getElementByPath","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","subtractPlayingCount","registerAnimation","elem","getRegisteredAnimations","lenAnims","animations","addPlayingCount","activate","nowTime","elapsedTime","requestAnimationFrame","searchAnimations","standalone","animElements","concat","getElementsByClassName","setAttribute","body","getElementsByTagName","innerText","div","freeze","unfreeze","BezierFactory","getBezierEasing","beziers","str","bezEasing","BezierEasing","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","newtonRaphsonIterate","aGuessT","currentSlope","points","_p","_mSampleValues","_precomputed","get","x","mY1","mY2","_precompute","_getTForX","_calcSampleValues","mSampleValues","intervalStart","currentSample","lastSample","dist","guessForT","initialSlope","pooling","_double","double","poolFactory","initialLength","_create","_release","_length","_maxLength","pool","newElement","release","bezierLengthPool","create","addedLength","percents","lengths","segmentsLengthPool","totalLength","bezFunction","math","pointOnLine2D","x1","y1","x2","y2","x3","y3","det1","pointOnLine3D","z1","z2","z3","dist1","dist2","dist3","diffDist","getBezierLength","pt1","pt2","pt3","pt4","curveSegments","ptCoord","perc","ptDistance","point","lastPoint","lengthData","getSegmentsLength","shapeData","segmentsLength","pathV","pathO","pathI","BezierData","segmentLength","PointData","partial","partialLength","buildBezierData","storedData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","dir","getPointInSegment","percent","t1","u1","ptX","ptY","bezierSegmentPoints","getNewSegment","startPerc","endPerc","t0","u0","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","bez","initFrame","mathAbs","interpolateValue","frameNum","caching","offsetTime","propType","pv","iterationIndex","lastIndex","keyframes","keyData","nextKeyData","keyframeMetadata","keyframesMetadata","fnc","nextKeyTime","keyTime","endValue","ti","ind","__fnct","y","n","distanceInLine","segmentPerc","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","sh","quatStart","createQuaternion","quatEnd","quaternionToEuler","slerp","out","ax","ay","az","aw","bx","by","bz","bw","omega","cosom","sinom","scale0","scale1","acos","sin","quat","qx","qy","qz","qw","heading","atan2","attitude","asin","bank","values","c1","cos","c2","c3","s1","s2","s3","w","z","getValueAtCurrentTime","renderedFrame","endTime","_caching","renderResult","setVValue","multipliedValue","mult","_mdf","processEffectsSequence","frameId","effectsSequence","lock","_isFirstFrame","finalValue","kf","addEffect","effectFunction","addDynamicProperty","ValueProperty","vel","getValue","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","arrLen","PropertyFactory","getProp","sid","slotManager","DynamicPropertyContainer","dynamicProperties","_isAnimated","iterateDynamicProperties","initDynamicPropertyContainer","pointPool","ShapePath","setPathData","setLength","doubleArrayLength","setXYAt","pos","setTripleAt","vX","vY","oX","oY","iX","iY","reverse","newPath","vertices","outPoints","inPoints","cnt","shapePool","shapePath","clone","shape","cloned","ShapeCollection","addShape","releaseShapes","shapeCollectionPool","newShapeCollection","shapeCollection","ShapePropertyFactory","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","paths","localShapeCollection","shapesEqual","shape1","shape2","ShapeProperty","reset","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","p0","p1","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","sy","ir","is","convertToPath","convertStarToPath","convertPolygonToPath","or","os","numPts","angle","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","rad","roundness","perimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","convertRectToPath","v0","v1","getShapeProp","dataProp","getConstructorFunction","getKeyframedConstructorFunction","Matrix","_cos","_sin","_tan","tan","_rnd","props","rotate","mCos","mSin","_t","rotateX","rotateY","rotateZ","shear","sx","skew","skewFromAxis","scale","sz","setTransform","l","m","translate","tx","tz","transform","a2","b2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","_identityCalculated","a1","b1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","multiply","matrix","matrixProps","isIdentity","_identity","equals","matr","cloneFromProps","applyToPoint","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointStringified","toCSS","cssValue","roundMatrixProperty","to2dCSS","_d","_e","_f","_typeof$3","lottie","setLocation","setSubframeRendering","setPrefix","prefix","setQuality","inBrowser","installPlugin","plugin","getFactory","useWebWorker","setIDPrefix","__getFactory","version","checkReady","readyStateCheckInterval","getQueryVariable","variable","vars","queryString","pair","decodeURIComponent","scripts","myScript","bodymovin","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","initModifierProperties","addShapeToModifier","setAsAnimated","processKeys","TrimModifier","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","shapeSegments","segmentOb","shapeS","shapeE","releasePathsData","processShapes","_s","shapePaths","totalShapeLength","edges","newShapesData","addShapes","lastShapeInCollection","lastShape","pop","addPaths","newPaths","addSegment","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","PuckerAndBloatModifier","amount","processPath","centerPoint","pathLength","clonedPath","TransformPropertyFactory","defaultVector","applyToMatrix","mat","rz","ry","rx","px","py","pz","forceRender","_isDirty","precalculateMatrix","pre","appliedTransformations","autoOriented","v2","getValueAtTime","autoOrient","_addDynamicProperty","TransformProperty","getTransformProperty","RepeaterModifier","tr","so","eo","pMatrix","rMatrix","sMatrix","tMatrix","applyTransforms","inv","scaleX","scaleY","elemsData","_currentCopies","_elements","_groups","unshift","resetElements","elements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","_render","itemsTransform","cont","hasReloaded","copies","group","ix","reloadShapes","elems","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","iteration","mProps","RoundCornersModifier","rd","currentV","currentI","currentO","closerV","distance","newPosPerc","floatEqual","floatZero","lerp","lerpPoint","quadRoots","singleRoot","delta","polynomialCoefficients","p3","singlePoint","PolynomialBezier","linearize","pointEqual","coeffx","coeffy","derivative","tangentAngle","normalAngle","inflectionPoints","denom","tcusp","square","root","p10","p11","p20","p21","extrema","bounds","boundingBox","right","cx","cy","intersectData","t2","splitData","boxIntersect","intersectsImpl","depth","tolerance","intersections","maxRecursion","d1s","d2s","other","nextIndex","shapeSegmentInverted","crossProduct","lineIntersection","start1","end1","start2","end2","v3","v4","polarOffset","pointDistance","hypot","ZigZagModifier","amplitude","frequency","pointsType","setPoint","outputBezier","outAmplitude","inAmplitude","angO","angI","getPerpendicularVector","vector","rot","rotatedVector","getProjectingAngle","cur","prevIndex","prevPoint","nextPoint","pVector","zigZagCorner","pointType","prevDist","nextDist","zigZagSegment","count","linearOffset","offsetSegment","p1a","p1b","p2b","p2a","joinLines","seg1","seg2","lineJoin","miterLimit","angleOut","angleIn","center","radius","intersection","getIntersection","intersect","pruneSegmentIntersection","outa","outb","pruneIntersections","offsetSegmentSplit","flex","mid","OffsetPathModifier","ml","lj","inputBezier","multiSegments","lastSeg","multiSegment","getFontProperties","fontData","styles","fStyle","fWeight","styleName","weight","FontManager","maxWaitingTime","emptyChar","combinedCharacters","BLACK_FLAG_CODE_POINT","CANCEL_TAG_CODE_POINT","A_TAG_CODE_POINT","Z_TAG_CODE_POINT","VARIATION_SELECTOR_16_CODE_POINT","ZERO_WIDTH_JOINER_CODE_POINT","REGIONAL_CHARACTER_A_CODE_POINT","REGIONAL_CHARACTER_Z_CODE_POINT","surrogateModifiers","trimFontOptions","font","familyArray","enabledFamilies","setUpNode","family","parentNode","fontFamily","fontSize","fontVariant","fontStyle","fontWeight","letterSpacing","offsetWidth","parent","checkLoadedFonts","loadedCount","loaded","fOrigin","monoCase","sansCase","removeChild","now","checkLoadedFontsBinded","setIsLoadedBinded","createHelper","def","engine","helper","fontProps","tHelper","fFamily","fClass","tCanvasHelper","OffscreenCanvas","measure","getComputedTextLength","measureText","list","forEach","cache","fontArr","_pendingFonts","shouldLoadFont","loadedSelector","fPath","querySelectorAll","rel","sc","found","ch","getCharData","_char","charCodeAt","console","warn","_warned","_char2","fontName","getFontByName","doubleSize","singleSize","fName","getCodePoint","string","codePoint","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","charCode","isVariationSelector","isRegionalCode","isFlagEmoji","isCombinedCharacter","_char3","isRegionalFlag","setIsLoaded","Font","typekitLoaded","fontPrototype","SlotManager","slots","slotFactory","RenderableElement","initRenderable","hidden","isTransparent","renderableComponents","addRenderableComponent","component","removeRenderableComponent","prepareRenderableFrame","num","checkLayerLimits","checkTransparency","finalTransform","mProp","renderConfig","hideOnTransparent","renderRenderable","sourceRectAtTime","getLayerSize","textData","getBlendMode","blendModeEnums","mode","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","EffectsManager","effects","ef","effectElements","effectItem","GroupEffect","eff","BaseElement","checkMasks","LayerExpressionInterface","EffectsExpressionInterface","ShapeExpressionInterface","TextExpressionInterface","CompExpressionInterface","layerInterface","maskManager","registerMaskInterface","effectsInterface","createEffectsInterface","registerEffectsInterface","shapeInterface","shapesData","itemsData","content","textInterface","setBlendMode","blendModeValue","bm","baseElement","layerElement","initBaseData","layerId","effectsManager","getType","FrameElement","prepareProperties","isVisible","_isParent","FootageElement","imageLoader","getBaseElement","FootageInterface","getFootageData","AudioElement","_isPlaying","_canPlay","_currentTime","_volumeMultiplier","_previousVolume","_placeholder","lv","au","timeRemapped","totalVolume","volumeValue","BaseRenderer","checkLayers","buildItem","checkPendingElements","createItem","layer","createImage","createComp","createSolid","createNull","createShape","createText","createCamera","createFootage","buildAllItems","pInterface","progressiveLoad","buildElementParenting","parentName","hierarchy","addPendingElement","setAsParent","setHierarchy","pendingElements","getElementById","pathValue","setupGlobalData","fontsContainer","animationItem","compSize","effectTypes","TRANSFORM_EFFECT","TransformElement","initTransform","_matMdf","_localMatMdf","_opMdf","localMat","localOpacity","ao","renderTransform","finalMat","localTransforms","renderLocalTransform","lmat","localOp","opacity","searchEffectTransforms","renderableEffectsManager","transformEffects","getEffects","globalToLocal","transforms","ptNew","mHelper","MaskElement","maskElement","viewData","solidPath","currentMasks","expansor","feMorph","maskType","maskRef","lastPath","filterID","expan","lastOperator","filterId","lastRadius","mask","createLayerSolidPath","invRect","drawPath","maskedElement","getMaskProperty","isFirstFrame","getMaskelement","pathNodes","pathString","pathShapeValue","filtersFactory","createFilter","createAlphaToLuminanceFilter","filId","skipCoordinates","fil","feColorMatrix","featureSupport","svgLumaHidden","offscreenCanvas","registeredEffects$1","idPrefix","SVGEffects","source","filters","filterManager","Effect","effect","countsAsEffect","registerEffect$1","SVGBaseElement","initRendererElement","createContainerElements","matteElement","transformedElement","_sizeChanged","layerElementParent","td","matteMasks","gg","tt","ln","hd","cp","clipId","cpGroup","renderElement","destroyBaseElement","createRenderableComponents","getMatte","matteType","useElement","masker","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","setMatte","HierarchyElement","initHierarchy","checkParenting","RenderableDOMElement","_prototype","initElement","createContent","renderInnerContent","innerElem","IImageElement","sourceRect","pr","imagePreserveAspectRatio","ProcessedElement","IShapeElement","addShapeToModifiers","shapeModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","shouldBreakProcess","searchProcessedElement","processedElements","addProcessedElement","lineCapEnum","lineJoinEnum","SVGShapeData","transformers","level","caches","lStr","lvl","SVGStyleData","pElem","msElem","DashProperty","dataProps","dashStr","dashArray","dashoffset","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGNoStyleData","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","comparePoints","diff","SVGGradientFillStyleData","initGradientData","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","gf","cst","opacityId","maskId","opFill","lc","of","ms","ost","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","SVGTransformData","buildShapeString","_o","_i","shapeString","SVGElementsRenderer","_identityMatrix","_matrixHelper","createRenderFunction","renderFill","renderGradient","renderGradientStroke","renderStroke","renderPath","renderContentTransform","renderNoop","styleData","itemData","pathStringTransformed","redraw","lLen","iterations","styleElem","hasOpacity","attr1","attr2","cValues","oValues","ang","SVGShapeElement","stylesList","animatedContents","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","createStyleElement","elementData","GradientConstructor","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","shapeProperty","setElementStyles","ownStyles","ownModifiers","currentTransform","modifier","processedPos","renderShape","animatedContent","LetterProps","sw","fc","update","updated","TextProperty","_frameId","keysIndex","canResize","minimumFontSize","currentData","ascent","boxWidth","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","searchProperty","completeTextData","obj","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentValue","currentIndex","textKeys","buildFinalText","charactersArray","shouldCombine","shouldCombineNext","currentChars","letters","newLineFlag","anchorGrouping","currentSize","currentPos","currentLine","lineWidth","maxLineWidth","trackingOffset","boxHeight","currentHeight","lastSpaceIndex","uncollapsedSpaces","currentChar","an","add","anIndexes","animatorJustifyOffset","extra","animators","animatorData","letterData","based","indexes","fh","fs","fb","rn","totalChars","currentInd","newInd","newData","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","TextSelectorProp","TextSelectorPropFactory","_currentTextLength","finalS","finalE","xe","ne","sm","getMult","textProperty","easer","tot","smoothness","threshold","newCharsFlag","divisor","getTextSelectorProp","TextAnimatorDataProperty","animatorProps","defaultData","textAnimatorAnimatables","TextAnimatorProperty","renderType","_hasMaskedPath","_textData","_renderType","_elem","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","searchProperties","getMeasures","matrixHelper","renderedLettersCount","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","tanAngle","tLength","pi","yOff","firstLine","animatorSelector","letterValue","offf","xPathPos","yPathPos","initPathPos","initSegmentInd","initPointInd","elemOpacity","letterSw","letterSc","letterFc","letterM","letterP","defaultPropsArray","letterO","animatorFirstCharOffset","justifyOffsetMult","isNewLine","animatorOffset","atan","ITextElement","textAnimator","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","validateText","buildNewText","emptyShapeData","SVGTextLottieElement","textSpans","singleShape","textContainer","buildTextContents","textArray","textContents","currentTextContent","fromCharCode","buildShapeData","shapeItem","usesGlyphs","tSpan","tElement","justify","span","glyph","cachedSpansLength","childSpan","glyphElement","SVGCompElement","_debug","textBox","bbox","renderedLetter","textSpan","ISolidElement","NullElement","SVGRendererBase","svgElement","viewBoxSize","viewBoxOnly","contentVisibility","focusable","preserveAspectRatio","destroyed","findIndexByInd","appendElementInPos","elementIndex","tp","matteMask","nextElement","insertBefore","ICompElement","setElements","getElements","destroyElements","supports3d","SVGRenderer","config","ariaLabel","titleElement","titleId","description","descElement","descId","filterSize","runExpressions","ShapeTransformManager","sequences","sequenceList","transform_key_count","addTransformSequence","sequence","processSequence","processSequences","getNewKey","lumaLoader","lumaBuffer","lumaBufferCtx","svg","createLumaSvgFilter","_svg","loadLuma","getLuma","createCanvas","loadLumaCanvas","getLumaCanvas","registeredEffects","CVEffects","registerEffect","CVMaskElement","hasMasks","canvasContext","beginPath","moveTo","lineTo","bezierCurveTo","save","clip","CVBaseElement","operationsMap","createElements","buffers","bufferCanvas","bufferCanvas2","_isProxy","transformCanvas","blendMode","globalCompositeOperation","hideElement","showElement","clearCanvas","clearRect","prepareLayer","bufferCtx","drawImage","getTransform","exitLayer","forceRealStack","ctxTransform","ctxOpacity","restore","CVShapeData","transformsManager","styledShapes","styledShape","trNodes","CVShapeElement","transformHelper","dashResetter","preTransforms","co","wi","da","addTransformToStyleList","removeTransformFromStyleList","closeStyles","shouldRender","ownTransforms","_shouldRender","renderShapeTransform","parentTransform","groupTransform","drawLayer","nodes","currentStyle","coOp","currentGlobalAlpha","ctxStrokeStyle","grd","ctxLineWidth","ctxLineCap","ctxLineJoin","ctxMiterLimit","ctxFillStyle","setLineDash","lineDashOffset","closePath","ctxStroke","ctxFill","isMain","renderGradientFill","renderStyledShape","shapeNodes","groupTransformMat","createLinearGradient","createRadialGradient","addColorStop","CVTextElement","stroke","fill","currentRender","sWidth","fValue","hasFill","hasStroke","commands","pathArr","commandsCounter","lastFill","lastStroke","lastStrokeW","CVImageElement","imgW","imgH","imgRel","canvasRel","widthCrop","heightCrop","par","CVSolidElement","ctxFillRect","CanvasRendererBase","globalAlpha","strokeStyle","lineCap","rule","contextData","actionFlag","containerStyle","mozTransformOrigin","context","setContext","isDashed","elementWidth","elementHeight","dpr","elementRel","animationRel","fillType","CanvasContext","CVContextData","stack","cArrPos","cTr","nativeContext","transformMat","currentOpacity","currentFillStyle","appliedFillStyle","currentStrokeStyle","appliedStrokeStyle","currentLineWidth","appliedLineWidth","currentLineCap","appliedLineCap","currentLineJoin","appliedLineJoin","appliedMiterLimit","currentMiterLimit","duplicate","newLength","forceRestore","currentContext","prevStack","saveOnNativeFlag","currentStack","newStack","setOpacity","trProps","CVCompElement","CanvasRenderer","devicePixelRatio","HBaseElement","checkBlendMode","tg","transformedElementStyle","matrixValue","webkitTransform","addEffects","HSolidElement","backgroundColor","HShapeElement","shapesContainer","currentBBox","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","getBoundsOfCurve","shapeBoundingBox","xMax","yMax","tempBoundingBox","b2ac","calculateF","calculateBoundingBox","expandStrokeBoundingBox","widthProperty","kfw","currentBoxContains","changed","shapeStyle","shapeTransform","HTextElement","textPaths","isMasked","compW","compH","innerElemStyle","textColor","strokeWidth","lineHeight","tParent","tCont","children","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","translation","textPath","margin","svgTransform","HCameraElement","pe","_prevMat","setup","threeDElements","perspectiveStyle","perspectiveElem","perspective","webkitPerspective","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","HImageElement","Image","imageElem","HybridRendererBase","camera","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","tmpDOMElement","getThreeDContainerByPos","startPos","endPos","createThreeDContainer","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","overflow","cWidth","cHeight","floatingContainer","HCompElement","_createBaseContainerElements","HybridRenderer","_thisLayerFunction","defineProperty","pixelAspect","frameDuration","displayStartTime","numLayers","_typeof$2","seedRandom","chunks","digits","rngname","startdenom","significance","seedrandom","seed","entropy","shortseed","mixkey","flatten","tostring","autoseed","arc4","ARC4","prng","int32","quick","S","pass","is_math_call","state","copy","keylen","me","result","typ","stringseed","smear","Uint8Array","crypto","msCrypto","getRandomValues","browser","plugins","screen","initialize$2","propTypes","SHAPE","_typeof$1","ExpressionManager","fetch","frames","_lottieGlobal","$bm_isInstanceOfArray","isNumerable","tOfV","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","tOfB","lenB","sub","mul","mod","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","clamp","mm","radiansToDegrees","radians_to_degrees","degreesToRadians","degrees_to_radians","helperLengthArray","arr1","arr2","normalize","vec","rgbToHsl","hue2rgb","hslToRgb","linear","tMin","tMax","value1","value2","_tMin","rnd","rndm","createPath","inTangents","outTangents","arrPlaceholder","inVertexPoint","outVertexPoint","initiateExpression","property","noOp","_value","needsVelocity","_needsRandom","elemType","$bm_transform","thisProperty","_name","valueAtTime","inPoint","outPoint","loopIn","loop_in","loopOut","loop_out","smooth","toWorld","fromWorld","fromComp","toComp","fromCompToSurface","rotation","anchorPoint","thisLayer","thisComp","velocityAtTime","scoped_bm_rt","expression_function","eval","numKeys","active","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","loopInDuration","loopOutDuration","getVelocityAtTime","lookAt","elem1","elem2","fVec","pitch","yaw","easeOut","val1","val2","applyEase","easeIn","ease","iKey","lenKey","nearestKey","obKey","framesToTime","fps","timeToFrames","randSeed","substring","posterizeTime","framesPerSecond","velocity","textIndex","textTotal","selectorValue","executeExpression","frameExpressionId","__preventDeadCodeRemoval","Expressions","stackCount","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","MaskManagerInterface","MaskInterface","_mask","_data","MaskManager","_masksInterfaces","maskFunction","ExpressionPropertyInterface","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","valueProp","speedAtTime","getSpeedAtTime","propertyGroup","UnidimensionalPropertyInterface","MultidimensionalPropertyInterface","arrValue","defaultGetter","TransformExpressionInterface","_thisFunction","xRotation","yRotation","xPosition","yPosition","zPosition","_px","_py","_pz","_transformFactory","getMatrix","toWorldMat","propMatrix","toWorldVec","applyPoint","fromWorldVec","invertPoint","sampleImage","transformInterface","_registerMaskInterface","_registerEffectsInterface","anchorPointDescriptor","defineProperties","hasParent","anchor_point","startTime","propertyGroupFactory","interfaceFunction","parentPropertyGroup","PropertyInterface","propertyName","_propertyGroup","effectsData","createGroupInterface","groupInterface","mn","createValueInterface","numProperties","np","enabled","en","expressionProperty","setGroupProperty","ShapePathInterface","pathInterfaceFactory","view","propertyIndex","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","defaultInterfaceFactory","contentsInterfaceFactory","interfaces","_interfaceFunction","transformInterfaceFactory","cix","startPoint","endPoint","_dashPropertyGroup","dashOb","addPropertyToDashOb","dash","skewAxis","outerRadius","outerRoundness","innerRadius","innerRoundness","parentGroupWrapper","_sourceText","sourceText","stringValue","fillColor","_typeof","outlineInterfaceFactory","currentPropertyName","currentProperty","propertyNameIndex","dataInterfaceFactory","outlineInterface","dataInterface","footage","getInterface","expressionHelpers","searchExpressions","_cachingAtTime","speed","getStaticValueAtTime","addPropertyDecorator","durationFlag","lastKeyFrame","cycleDuration","firstKeyFrame","ret","initV","endV","current","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","endFrame","sampleFrequency","sampleValue","getTransformValueAtTime","_transformCachingAtTime","anchor","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","getShapeValueAtTime","shapeValue","lastTime","ShapePropertyConstructorFunction","KeyframedShapePropertyConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","endIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","unitVector","tangentOnPath","normalOnPath","propertyGetShapeProp","trims","initialize$1","addDecorator","calculateExpression","getExpressionValue","isKeyframed","hasExpressions","initialize","SVGComposableEffect","createMergeNode","resultId","ins","feMerge","feMergeNode","linearFilterValue","SVGTintFilter","linearFilter","matrixFilter","colorBlack","colorWhite","SVGFillFilter","SVGStrokeEffect","initialized","elemChildren","childNodes","groupPath","removeAttribute","pathMasker","dasharrayValue","getTotalLength","lineLength","units","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","color1","color2","color3","tableR","tableG","tableB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","getTableValue","inputBlack","inputWhite","gamma","outputBlack","outputWhite","table","colorValue","outputDelta","inputDelta","SVGDropShadowEffect","globalFilterSize","feGaussianBlur","feOffset","feFlood","feComposite","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","findSymbol","replaceInParent","symbolId","nextChild","useElem","setElementAsMask","symbol","SVGGaussianBlurEffect","kBlurrinessToSigma","sigma","dimensions","sigmaX","sigmaY","edgeMode","TransformEffect","forceFrame","isUniformScale","scaleHeight","scaleWidth","SVGTransformEffect","CVTransformEffect","sulaLoaderCss","SulaLoader","animationInstance","connectedCallback","tryInitLottie","disconnectedCallback","destroyAnimation","containerRef","loaderAnimation","initLottie","getDimensions","sizes","small","medium","large","sulaMenuCss","SulaMenu","menuTitle","image","density","SulaMenuDensity","labelOverflow","SulaMenuLabelOverflow","Wrap","collapsed","previewExpanded","normalizedWidth","hostStyleVariables","syncSelectedItemFromItems","nextSelectedItem","findSelectedLeaf","containsSelectedItem","getVisibleItems","getVisibleSubItems","getVisibleGrandchildren","hasVisibleSubItems","hasVisibleGrandchildren","visibleItems","parentItemId","parentChildId","child","grandchild","visibleChildren","selectedGrandchild","isMainItemSelected","itemId","hasSelectedChild","isSelectedSubItem","childId","hasSelectedGrandchild","isSelectedGrandchild","grandchildId","isItemActive","expanded","isSubItemActive","isItemFaded","clickedItem","itemSelected","handleSubItemClick","clickedChild","handleGrandchildClick","clickedGrandchild","getItemIconClass","getSubItemIconClass","getSubItemCaretIconClass","getCaretIconClass","toggleMenu","menuToggled","handleMenuMouseEnter","handleMenuMouseLeave","renderSubmenuItems","parentItem","expandedView","childHasChildren","childExpanded","childActive","childFaded","submenu","grandchildActive","grandchildFaded","Compact","Comfortable","itemHasChildren","itemActive","itemFaded","Truncate","sulaMenuSelectListCss","SulaMenuSelectList","SulaModalType","SulaModalSlotOverflow","sulaModalCss","SulaModal","opened","blockBodyScroll","closeOnClickOutside","Custom","headerIcon","modalTitle","promoImage","primaryButtonText","secondaryButtonText","slotOverflow","Auto","isAnimating","handleOpenedChange","closeTimeout","handleParentOverflow","clearTimeout","hostElement","parentElement","closeModal","modalClosed","handleClickOutside","currentTarget","handlePrimaryButtonClick","primaryButtonClicked","handleSecondaryButtonClick","secondaryButtonClicked","isAlertOrCustomOrPromo","Alert","Promo","isListOrCustomFull","CustomFull","isSideModal","Side","SpecialSide","isPromoOrSpecialSide","hasHeaderIcon","hasButtons","getOverlayClasses","getWrapperClasses","getContentClasses","getHeaderClasses","getCloseButtonClasses","getTitleContainerClasses","getTitleClasses","getSlotClasses","Hidden","getButtonContainerClasses","renderPromoImage","imageClasses","renderHeaderIcon","renderCloseButton","renderTitleSection","renderSlot","renderButtons","onButtonClicked","SulaProgressBarAppearance","SulaProgressBarState","sulaProgressBarCss","SulaProgressBar","showProgress","validateProgress","handleProgress","progress","getProgressBarStyle","OnPrimary","getProgressBarStateElement","topLabel","bottomLabel","sulaRadioButtonCss","SulaRadioButton","radioIsFocus","handleFocusOut","SulaSearchBarStyle","sulaSearchBarCss","SulaSearchBar","searchBarStyle","textValue","handleInputFocus","inputElement","handleInputBlur","blur","handleRightIconClick","rightIconClicked","handleValueChanges","getStyleClass","Highlight","onMouseDown","SulaSegmentedControlType","SulaSegmentedControlSize","SulaSegmentedControlColor","sulaSegmentedControlCss","SulaSegmentedControl","White","handleItemHover","hoveredItem","itemHovered","handleItemBlur","blurredItem","itemBlur","Gray","addChevron","SulaSwitchType","sulaSwitchCss","SulaSwitch","responsive","SulaTableDensity","sulaTableCss","SulaTable","equalWidth","replaceHostWithRenderedElement","host","selector","nativeElement","querySelector","classList","hostStyle","getAttribute","nativeStyle","sulaTableBodyCss","SulaTableBody","sulaTableCellCss","SulaTableCell","tableDensity","closest","Spaced","Confortable","sulaTableHeadCellCss","SulaTableHeadCell","scope","sulaTableHeaderCss","SulaTableHeader","sulaTableRowCss","SulaTableRow","SulaTagSize","SulaTagIconStatus","SulaTagAppearance","SulaTagFontWeight","sulaTagCss","SulaTag","iconStatus","Bordered","Normal","Brand","LightBlue","LightBrand","OpacityGrey","OpacityWhite","getTextColorClass","getTextWeightClass","fontWeightStyles","Bold","getIconStatusClass","iconStatusStyles","SulaTextareaStatus","sulaTextareaCss","SulaTextarea","rows","textareaIsFocused","labelPadding","handleTextareaClick","setLabelUp","focusOnTextarea","handleTextareaChanges","setLabelDown","handleTextareaFocus","watchValueHandler","textareaElement","cursorPosition","selectionStart","newPosition","setSelectionRange","contains","updateLabelPadding","changeElementsStyle","activeLabelElement","labelHeight","labelElement","containerHeight","maxLength","paddingTop","DIGIT","ALPHA","ALPHANUM","BY_PASS_KEYS","isAllowedKeyCode","keyCode","mergeMoneyOptions","opts","delimiter","lastOutput","precision","separator","showSignal","suffixUnit","unit","zeroCents","moneyPrecision","addPlaceholdersToOutput","output","VanillaMasker","unbindElementToMask","onkeyup","onkeydown","bindElementToMask","that","onType","srcElement","VMasker","maskMoney","maskNumber","maskAlphaNum","pattern","unMask","toMoney","zeroMatcher","zeroRegExp","RegExp","digitsLength","lastDigitLength","number","clearDelimiter","clearSeparator","money","masked","cents","signal","startsWith","beginCents","centsValue","centsLength","centsSliced","toPattern","patternChars","charsValues","outputLength","toNumber","toAlphaNumeric","sulaTextfieldCss","SulaTextfield","inputIsOpen","showPassword","inputIsFocused","handleInputClick","toggleOptions","handleInputChanges","valueToPersist","hasMaskPatternConfigured","handleInputMask","valueChangedWithoutMask","handleIconClick","Password","handlePasswordIconClicked","normalizedValue","watchMaskPatternHandler","syncMaskState","watchMaskPatternSwitchMaxLengthHandler","inputContainer","inputValue","valueWithoutMask","getMaskPatternByValueLength","getMaskPatterns","isArray","rawInputValue","patterns","currentValueLength","providedSwitchLengths","normalizeProvidedSwitchLengths","getMaskPatternByAutoInference","capacities","eligibleCapacities","capacity","selectedCapacity","candidateIndexes","rawLiterals","candidateIndex","patternLiterals","maskPatternSwitchMaxLength","sort","inputType","getInputIcon","SulaTilesType","SulaTilesSize","sulaTilesCss","SulaTiles","Rounded","ellipsis","subText","TILE_SIZES","BASE_CLASSES","roundedContainer","squareContainer","interactiveBackground","disabledBackground","iconContainer","roundedIcon","ellipsisText","tileClicked","isRounded","isSquare","Square","hasSubText","isInteractive","getRoundedTileSize","getContainerClasses","getIconContainerClasses","getTextContainerClasses","getTextClasses","isPrimary","getIconClasses","baseClass","colorClass","getTabIndex","condition","renderIcon","renderText","SulaTimelineListItemIconStatus","sulaTimelineListCss","SulaTimelineList","sulaTimelineList","hasLink","getIconBackgroundColorByStatus","iconColorByStatus","getIconByStatus","iconByStatus","getIconColorByStatus","isLastItem","weekdayText","message","sulaToggleCss","SulaToggle","toggleClicked","getIconName","getIconColorClass","getButtonClass","base","auto","basePlacements","clippingParents","viewport","popper","variationPlacements","reduce","acc","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","nodeName","getWindow","ownerDocument","defaultView","isElement","OwnElement","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","applyStyles","_ref","_ref2","initialStyles","strategy","arrow","styleProperties","attribute","applyStyles$1","phase","requires","getBasePlacement","getUAString","uaData","userAgentData","brands","brand","isLayoutViewport","includeScale","isFixedStrategy","clientRect","visualViewport","addVisualOffsets","offsetLeft","offsetTop","getLayoutRect","rootNode","getRootNode","next","isSameNode","getComputedStyle","isTableElement","getDocumentElement","documentElement","getParentNode","assignedSlot","getTrueOffsetParent","offsetParent","getContainingBlock","isFirefox","isIE","elementCss","currentNode","css","contain","willChange","getOffsetParent","getMainAxisFromPlacement","within","mathMax","mathMin","withinMaxClamp","getFreshSideObject","mergePaddingObject","paddingObject","expandToHashMap","hashMap","toPaddingObject","padding","rects","_state$modifiersData$","arrowElement","popperOffsets","modifiersData","basePlacement","axis","isVertical","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","clientHeight","clientWidth","centerToReference","axisProp","centerOffset","_options$element","arrow$1","requiresIfExists","getVariation","unsetSides","roundOffsetsByDPR","win","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","heightProp","widthProp","offsetY","offsetX","commonStyles","_ref4","_Object$assign","computeStyles","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","computeStyles$1","passive","instance","_options$scroll","scroll","_options$resize","scrollParents","scrollParent","eventListeners","hash","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","pageXOffset","scrollTop","pageYOffset","getWindowScrollBarX","getViewportRect","html","layoutViewport","getDocumentRect","_element$ownerDocumen","winScroll","scrollWidth","scrollHeight","isScrollParent","_getComputedStyle","overflowX","overflowY","getScrollParent","listScrollParents","isBody","updatedList","rectToClientRect","getInnerBoundingClientRect","clientTop","clientLeft","getClientRectFromMixedType","clippingParent","getClippingParents","canEscapeClipping","clipperElement","getClippingRect","boundary","rootBoundary","mainClippingParents","firstClippingParent","clippingRect","accRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","contextElement","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","getExpandedFallbackPlacements","oppositePlacement","flip","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","preferredPlacement","isBasePlacement","referenceRect","checksMap","Map","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","mainVariationSide","altVariationSide","checks","every","check","set","numberOfChecks","_loop","fittingPlacement","_ret","flip$1","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","hide$1","distanceAndSkiddingToXY","invertDistance","skidding","_options$offset","_data$state$placement","offset$1","popperOffsets$1","getAltAxis","_options$tether","tether","_options$tetherOffset","tetherOffset","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMin","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","preventOverflow$1","getHTMLElementScroll","getNodeScroll","isElementScaled","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","order","visited","Set","dep","has","depModifier","orderModifiers","orderedModifiers","debounce","pending","Promise","resolve","then","mergeByName","merged","existing","DEFAULT_OPTIONS","areValidElements","arguments","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","createPopper","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","runModifierEffects","forceUpdate","_state$elements","_state$orderedModifie","_state$orderedModifie2","onFirstUpdate","_ref$options","cleanupFn","noopFn","SulaTooltipPosition","SulaTooltipTrigger","sulaTooltipCss","MAX_TEXT_LENGTH","SulaTooltip","iconClass","focused","appendToBody","parentEl","hintEl","triggerEl","arrowEl","popperInstance","portalHost","portalShadow","hintTextNode","handleMouseEnter","syncPortalVisibility","handleMouseLeave","mount","Parent","createPortalHint","initPopper","destroyPortalHint","handleTextChange","displayText","attachShadow","copyStylesInto","getHintClasses","createTextNode","sourceRoot","shadowRoot","adopted","adoptedStyleSheets","cloneNode","remove","baseClasses","visibilityClasses","isParentMode","hostClass"],"sources":["src/components/sula-avatar/model/sula-avatar.model.ts","src/components/sula-avatar/sula-avatar.scss?tag=sula-avatar&encapsulation=shadow","src/components/sula-avatar/sula-avatar.tsx","src/components/sula-badge/model/sula-badge.model.ts","src/components/sula-badge/sula-badge.scss?tag=sula-badge&encapsulation=shadow","src/components/sula-badge/sula-badge.tsx","src/components/sula-breadcrumb/sula-breadcrumb.scss?tag=sula-breadcrumb&encapsulation=shadow","src/components/sula-breadcrumb/sula-breadcrumb.tsx","src/components/sula-button/model/sula-button.model.ts","src/components/sula-loader/model/sula-loader.model.ts","src/components/sula-button/sula-button.scss?tag=sula-button&encapsulation=shadow","src/components/sula-button/sula-button.tsx","src/components/sula-textfield/model/sula-textfield.model.ts","src/components/sula-calendar/sula-calendar.scss?tag=sula-calendar&encapsulation=shadow","src/components/sula-calendar/sula-calendar.tsx","src/components/sula-checkbox/model/sula-checkbox.model.ts","src/components/sula-checkbox/sula-checkbox.scss?tag=sula-checkbox&encapsulation=shadow","src/components/sula-checkbox/sula-checkbox.tsx","src/components/sula-chip/model/sula-chip.model.ts","src/components/sula-chip/sula-chip.scss?tag=sula-chip&encapsulation=shadow","src/components/sula-chip/sula-chip.tsx","src/components/sula-dropdown/sula-dropdown.scss?tag=sula-dropdown&encapsulation=shadow","src/components/sula-dropdown/sula-dropdown.tsx","src/components/sula-icon/sula-icon.scss?tag=sula-icon","src/components/sula-icon/sula-icon.tsx","src/components/sula-icon-picker/sula-icon-picker.scss?tag=sula-icon-picker&encapsulation=shadow","src/components/sula-icon-picker/sula-icon-picker.tsx","node_modules/.pnpm/lottie-web@5.13.0/node_modules/lottie-web/build/player/lottie.js","src/components/sula-loader/sula-loader.scss?tag=sula-loader&encapsulation=shadow","src/components/sula-loader/sula-loader.tsx","src/components/sula-menu/sula-menu.scss?tag=sula-menu&encapsulation=shadow","src/components/sula-menu/sula-menu.tsx","src/components/sula-menu-select-list/sula-menu-select-list.scss?tag=sula-menu-select-list&encapsulation=shadow","src/components/sula-menu-select-list/sula-menu-select-list.tsx","src/components/sula-modal/model/sula-modal.model.ts","src/components/sula-modal/sula-modal.scss?tag=sula-modal&encapsulation=shadow","src/components/sula-modal/sula-modal.tsx","src/components/sula-progress-bar/model/sula-progress-bar.model.ts","src/components/sula-progress-bar/sula-progress-bar.scss?tag=sula-progress-bar&encapsulation=shadow","src/components/sula-progress-bar/sula-progress-bar.tsx","src/components/sula-radio-button/sula-radio-button.scss?tag=sula-radio-button&encapsulation=shadow","src/components/sula-radio-button/sula-radio-button.tsx","src/components/sula-search-bar/model/sula-search.bar-model.ts","src/components/sula-search-bar/sula-search-bar.scss?tag=sula-search-bar&encapsulation=shadow","src/components/sula-search-bar/sula-search-bar.tsx","src/components/sula-segmented-control/model/sula-segmented-control.model.ts","src/components/sula-segmented-control/sula-segmented-control.scss?tag=sula-segmented-control&encapsulation=shadow","src/components/sula-segmented-control/sula-segmented-control.tsx","src/components/sula-switch/model/sula-switch.model.ts","src/components/sula-switch/sula-switch.scss?tag=sula-switch&encapsulation=shadow","src/components/sula-switch/sula-switch.tsx","src/components/sula-table/model/sula-table.model.ts","src/components/sula-table/sula-table.scss?tag=sula-table","src/components/sula-table/sula-table.tsx","src/utils/replace-host-with-rendered-element.ts","src/components/sula-table-body/sula-table-body.scss?tag=sula-table-body","src/components/sula-table-body/sula-table-body.tsx","src/components/sula-table-cell/sula-table-cell.scss?tag=sula-table-cell","src/components/sula-table-cell/sula-table-cell.tsx","src/components/sula-table-head-cell/sula-table-head-cell.scss?tag=sula-table-head-cell","src/components/sula-table-head-cell/sula-table-head-cell.tsx","src/components/sula-table-header/sula-table-header.scss?tag=sula-table-header","src/components/sula-table-header/sula-table-header.tsx","src/components/sula-table-row/sula-table-row.scss?tag=sula-table-row","src/components/sula-table-row/sula-table-row.tsx","src/components/sula-tag/model/sula-tag.model.ts","src/components/sula-tag/sula-tag.scss?tag=sula-tag&encapsulation=shadow","src/components/sula-tag/sula-tag.tsx","src/components/sula-textarea/model/sula-textarea.model.ts","src/components/sula-textarea/sula-textarea.scss?tag=sula-textarea&encapsulation=shadow","src/components/sula-textarea/sula-textarea.tsx","node_modules/.pnpm/vanilla-masker@1.2.0/node_modules/vanilla-masker/lib/vanilla-masker.js","src/components/sula-textfield/sula-textfield.scss?tag=sula-textfield&encapsulation=shadow","src/components/sula-textfield/sula-textfield.tsx","src/components/sula-tiles/model/sula-tiles.model.ts","src/components/sula-tiles/sula-tiles.scss?tag=sula-tiles&encapsulation=shadow","src/components/sula-tiles/sula-tiles.tsx","src/components/sula-timeline-list/model/sula-timeline-list.model.ts","src/components/sula-timeline-list/sula-timeline-list.scss?tag=sula-timeline-list&encapsulation=shadow","src/components/sula-timeline-list/sula-timeline-list.tsx","src/components/sula-toggle/sula-toggle.scss?tag=sula-toggle&encapsulation=shadow","src/components/sula-toggle/sula-toggle.tsx","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/enums.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getWindow.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/modifiers/applyStyles.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/getBasePlacement.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/math.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/userAgent.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/contains.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/within.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/expandToHashMap.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/modifiers/arrow.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/getVariation.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/modifiers/computeStyles.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/modifiers/eventListeners.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/rectToClientRect.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/computeOffsets.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/detectOverflow.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/modifiers/flip.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/modifiers/hide.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/modifiers/offset.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/getAltAxis.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/orderModifiers.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/debounce.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/utils/mergeByName.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/createPopper.js","node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/popper.js","src/components/sula-tooltip/model/sula-tooltip.model.ts","src/components/sula-tooltip/sula-tooltip.scss?tag=sula-tooltip&encapsulation=shadow","src/components/sula-tooltip/sula-tooltip.tsx"],"sourcesContent":["export enum SulaAvatarSize {\n Small = 'small',\n Medium = 'medium',\n Large = 'large',\n Display = 'display',\n}\n",":host {\n display: block;\n}\n","import { Component, Host, Prop, h } from '@stencil/core';\nimport { SulaAvatarSize } from './model/sula-avatar.model';\n\n@Component({\n tag: 'sula-avatar',\n styleUrl: 'sula-avatar.scss',\n shadow: true,\n})\nexport class SulaAvatar {\n /**\n * Avatar size\n */\n @Prop()\n size: SulaAvatarSize = SulaAvatarSize.Medium;\n\n /**\n * Avatar image url\n */\n @Prop()\n imageUrl?: string;\n\n /**\n * Text to display when image is not available\n */\n @Prop()\n text?: string;\n\n /**\n * Icon to displaywhen image is not set\n */\n @Prop()\n icon?: string;\n\n render() {\n return (\n <Host>\n <div\n class={{\n 'flex justify-center items-center rounded-xxl bg-surface-on-body font-bold text-text-primary': true,\n 'w-[44px] h-[44px] text-2xl': this.size === SulaAvatarSize.Small,\n 'w-[56px] h-[56px] text-3xl': this.size === SulaAvatarSize.Medium,\n 'w-[96px] h-[96px] text-5xl': this.size === SulaAvatarSize.Large,\n 'w-[240px] h-[240px] text-5xl': this.size === SulaAvatarSize.Display,\n }}\n >\n <div>{this.imageUrl && <img class=\"rounded-full\" src={this.imageUrl} alt={this.text} />}</div>\n <div>{this.icon && !this.imageUrl && <sula-icon icon={this.icon} />}</div>\n <div>{this.text && !this.imageUrl && !this.icon && <span>{this.text}</span>}</div>\n </div>\n </Host>\n );\n }\n}\n","export enum SulaBadgeStatus {\n Default = 'default',\n Money = 'money',\n Info = 'info',\n Error = 'error',\n Success = 'success',\n Warning = 'warning',\n}\n\nexport enum SulaBadgeSize {\n Small = 'small',\n Medium = 'medium',\n Large = 'large',\n Display = 'display',\n} \n\nexport enum SulaBadgeType {\n Text = 'text',\n Icon = 'icon',\n Dot = 'dot',\n}\n ",":host {\n display: block;\n}\n","import { Component, Host, Prop, h, Element, State } from '@stencil/core';\nimport { SulaBadgeSize, SulaBadgeStatus, SulaBadgeType } from './model/sula-badge.model';\n\n@Component({\n tag: 'sula-badge',\n styleUrl: 'sula-badge.scss',\n shadow: true,\n})\nexport class SulaBadge {\n @Element() hostElement: HTMLElement;\n\n /**\n * Badge status\n */\n @Prop({ mutable: true }) status: SulaBadgeStatus = SulaBadgeStatus.Default;\n\n /**\n * Badge size\n */\n @Prop({ mutable: true }) size: SulaBadgeSize = SulaBadgeSize.Medium;\n\n /**\n * Badge type\n */\n @Prop({ mutable: true }) type: SulaBadgeType = SulaBadgeType.Text;\n\n /**\n * Badge text\n */\n @Prop({ mutable: true }) text: string = '';\n\n /**\n * Badge icon\n */\n @Prop({ mutable: true }) icon: string = '';\n\n slotRef?: HTMLSlotElement;\n\n @State()\n hasSlotContent: boolean = false;\n\n componentDidLoad() {\n this.checkSlotContent();\n }\n\n checkSlotContent() {\n if (this.slotRef) {\n const assignedNodes = this.slotRef.assignedNodes();\n\n const hasContent = assignedNodes.some(node => {\n if (node.nodeType === Node.TEXT_NODE) {\n return node.textContent.trim() !== '';\n }\n return true;\n });\n\n this.hasSlotContent = hasContent;\n }\n }\n\n getSizeClass() {\n const sizeStyles = {\n [SulaBadgeSize.Small]: 'min-w-12 h-12',\n [SulaBadgeSize.Medium]: 'min-w-[20px] h-[20px]',\n [SulaBadgeSize.Large]: 'min-w-[24px] h-[24px]',\n [SulaBadgeSize.Display]: 'min-w-[32px] h-[32px]',\n };\n\n return sizeStyles[this.size];\n }\n\n getPaddingByType() {\n const paddingStyles = {\n [SulaBadgeType.Dot]: 'p-0',\n [SulaBadgeType.Text]: this.getTextPaddingBySize(),\n [SulaBadgeType.Icon]: 'p-4',\n };\n return paddingStyles[this.type];\n }\n\n getTextPaddingBySize() {\n const paddingStyles = {\n [SulaBadgeSize.Small]: 'p-4',\n [SulaBadgeSize.Medium]: 'p-4',\n [SulaBadgeSize.Large]: 'px-8 py-2',\n [SulaBadgeSize.Display]: 'px-8 py-2',\n };\n\n return paddingStyles[this.size];\n }\n\n getStatusClass() {\n const statusStyles = {\n [SulaBadgeStatus.Default]: 'bg-brand-primary',\n [SulaBadgeStatus.Error]: 'bg-feedback-error',\n [SulaBadgeStatus.Info]: 'bg-feedback-informational',\n [SulaBadgeStatus.Success]: 'bg-feedback-success',\n [SulaBadgeStatus.Warning]: 'bg-feedback-alert',\n };\n\n return statusStyles[this.status];\n }\n\n render() {\n return (\n <Host>\n <div class=\"relative flex w-fit\">\n <div\n class={{\n 'absolute top-0 right-0': (this.type === SulaBadgeType.Dot || this.type === SulaBadgeType.Icon) && this.hasSlotContent,\n 'absolute bottom-[-8px] flex w-full justify-center items-center': this.type === SulaBadgeType.Text && this.hasSlotContent,\n }}\n >\n <div\n class={{\n [this.getSizeClass()]: true,\n [this.getStatusClass()]: true,\n [this.getPaddingByType()]: true,\n 'rounded-full flex justify-center items-center': true,\n }}\n >\n {this.icon && <sula-icon icon={this.icon} customClass=\"text-base text-negative-negative-1\"></sula-icon>}\n {this.text && <div class=\"font-bold text-base leading-4 text-negative-negative-1\">{this.text}</div>}\n </div>\n </div>\n <slot ref={el => (this.slotRef = el as HTMLSlotElement)}></slot>\n </div>\n </Host>\n );\n }\n}\n",":host {\n display: block;\n}\n","import { Component, Event, EventEmitter, Host, Prop, h } from '@stencil/core';\nimport { SulaMenuBreadcrumb } from './model/sula-breadcrumb.model';\n\n@Component({\n tag: 'sula-breadcrumb',\n styleUrl: 'sula-breadcrumb.scss',\n shadow: true,\n})\nexport class SulaBreadcrumb {\n /**\n * Breadcrumb items list\n */\n @Prop({ mutable: true })\n items: SulaMenuBreadcrumb[] = [];\n\n /**\n * Event emitted when a breadcrumb item is clicked\n */\n @Event()\n breadcrumbItemClicked: EventEmitter<SulaMenuBreadcrumb>;\n\n private handleItemClick(item: SulaMenuBreadcrumb, isActive: boolean) {\n if (isActive || !item.path) return;\n this.breadcrumbItemClicked.emit(item);\n }\n\n render() {\n return (\n <Host>\n <nav class=\"flex items-center\" aria-label=\"Breadcrumb\">\n <ol class=\"flex items-center\">\n {this.items.map((item, index) => {\n const isActive = index === this.items.length - 1;\n const hasPath = !!item.path && !isActive;\n\n return (\n <li class=\"flex items-center\">\n <a\n class={{\n 'text-paragraph-medium-bold align-middle transition-colors duration-200': true,\n 'tracking-[-0.01em]': true,\n 'no-underline': true,\n 'text-text-secondary cursor-default': !isActive,\n 'text-brand-primary cursor-default': isActive,\n 'cursor-pointer hover:text-text-primary hover:underline hover:decoration-solid hover:decoration-1 focus:outline focus:outline-2 focus:outline-feedback-informational focus:outline-offset-2 focus:rounded': hasPath,\n 'active:text-text-secondary active:underline active:decoration-solid active:decoration-1 active:decoration-skip-ink-auto': hasPath && !isActive,\n }}\n href={hasPath ? item.path : undefined}\n aria-current={isActive ? 'page' : undefined}\n onClick={e => {\n e.preventDefault();\n this.handleItemClick(item, isActive);\n }}\n >\n {item.title}\n </a>\n\n {!isActive && (\n <span class=\"inline-flex items-center px-12\">\n <sula-icon icon=\"ph-bold ph-caret-right\" customClass=\"text-brand-primary w-[9px] h-[5.25px] flex items-center justify-center\"></sula-icon>\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n </Host>\n );\n }\n}\n","export enum SulaButtonAppearance {\n Default = 'default',\n Secondary = 'secondary',\n Text = 'text',\n}\n\nexport enum SulaButtonSize {\n Large = 'large',\n Default = 'default',\n Cta = 'cta',\n}\n\nexport enum SulaButtonStatus {\n Primary = 'primary',\n Danger = 'danger',\n Negative = 'negative',\n}\n\nexport enum SulaButtonType {\n Icon = 'icon',\n Text = 'text',\n}\n","export enum SulaLoaderSize {\n Small = 'small',\n Medium = 'medium',\n Large = 'large',\n}\n",":host {\n display: block;\n}\n\nbutton {\n &:focus {\n outline: 2px solid var(--color-feedback-informational) !important;\n outline-offset: 2px !important;\n }\n}\n","import { Component, Event, EventEmitter, Host, Prop, h } from '@stencil/core';\nimport { SulaButtonAppearance, SulaButtonSize, SulaButtonStatus, SulaButtonType } from './model/sula-button.model';\nimport { SulaLoaderSize } from '../sula-loader/model/sula-loader.model';\n\n@Component({\n tag: 'sula-button',\n styleUrl: 'sula-button.scss',\n shadow: true,\n})\nexport class SulaButton {\n /**\n * Button text when is text type\n */\n @Prop({ mutable: true }) text: string;\n\n /**\n * Button icon when is Icon type\n */\n @Prop({ mutable: true }) icon: string;\n\n /**\n * Button left icon\n */\n @Prop({ mutable: true }) leftIcon: string;\n\n /**\n * Button right icon\n */\n @Prop({ mutable: true }) rightIcon: string;\n\n /**\n * Button appearance\n */\n @Prop({ mutable: true }) appearance: SulaButtonAppearance = SulaButtonAppearance.Default;\n\n /**\n * Button type\n */\n @Prop({ mutable: true }) type: SulaButtonType = SulaButtonType.Text;\n\n /**\n * Button size\n */\n @Prop({ mutable: true }) size: SulaButtonSize = SulaButtonSize.Default;\n\n /**\n * Button status\n */\n @Prop({ mutable: true }) status: SulaButtonStatus = SulaButtonStatus.Primary;\n\n /**\n * Is button loading\n */\n @Prop({ mutable: true }) loading: boolean = false;\n\n /**\n * Is button disabled\n */\n @Prop({ mutable: true }) buttonDisabled: boolean = false;\n\n /**\n * If true, button will take the full width of its container\n */\n @Prop({ mutable: true, attribute: 'full-width' }) fullWidth: boolean = false;\n\n /**\n * Event emitted when button is clicked.\n * @note If button is disabled event won't be emitted\n */\n @Event()\n buttonClicked: EventEmitter<void>;\n\n private getAppearanceClass() {\n if (this.loading) return;\n const appearanceStyles = {\n [SulaButtonAppearance.Default]: this.getDefaultButtonStyles(),\n [SulaButtonAppearance.Secondary]: `border ${this.getSecondaryButtonStyles()}`,\n [SulaButtonAppearance.Text]: `flex items-center space-x-8 ${this.getTextButtonStyles()}`,\n };\n\n return appearanceStyles[this.appearance];\n }\n\n private getButtonDisabledClass() {\n return this.appearance === SulaButtonAppearance.Text ? 'text-text-disabled' : 'bg-states-bg-disabled text-text-disabled border-none';\n }\n\n private getDefaultButtonStyles() {\n if (this.buttonDisabled) {\n return this.getButtonDisabledClass();\n }\n\n const statusStyles = {\n [SulaButtonStatus.Primary]: 'bg-brand-primary text-white hover:bg-states-primary-hover active:bg-states-primary-pressed',\n [SulaButtonStatus.Danger]: 'bg-feedback-error text-white hover:bg-states-danger-hover active:bg-opacity-85 active:bg-states-danger-pressed',\n [SulaButtonStatus.Negative]: 'bg-negative-negative-1 text-negative-negative-2 hover:bg-states-negative-hover active:bg-states-negative-pressed',\n };\n\n return statusStyles[this.status];\n }\n\n private getSecondaryButtonStyles() {\n if (this.buttonDisabled) {\n return this.getButtonDisabledClass();\n }\n\n const statusStyles = {\n [SulaButtonStatus.Primary]: 'border-brand-primary text-brand-primary hover:bg-states-empty-bg-hover bg-white active:bg-states-empty-bg-pressed',\n [SulaButtonStatus.Danger]: 'border-feedback-error text-feedback-error hover:bg-states-empty-bg-hover bg-white active:bg-states-empty-bg-pressed',\n [SulaButtonStatus.Negative]: 'border-negative-negative-1 text-negative-negative-1 bg-transparent hover:bg-states-empty-bg-hover active:bg-states-empty-bg-pressed',\n };\n\n return statusStyles[this.status];\n }\n\n private getTextButtonStyles() {\n if (this.buttonDisabled) {\n return this.getButtonDisabledClass();\n }\n\n const statusStyles = {\n [SulaButtonStatus.Primary]: 'text-brand-primary',\n [SulaButtonStatus.Danger]: 'text-feedback-error',\n [SulaButtonStatus.Negative]: 'text-negative-negative-1',\n };\n\n return statusStyles[this.status];\n }\n\n private getTextTypeSizeClass() {\n const sizeClasses = {\n [SulaButtonSize.Default]: 'py-4 h-[40px]',\n [SulaButtonSize.Large]: 'py-4 h-[56px]',\n };\n\n return sizeClasses[this.size];\n }\n\n private getButtonSizeByTypeClass() {\n if (this.loading) {\n if (this.type === SulaButtonType.Icon) {\n return {\n 'w-[40px] h-[40px] p-8': this.size === SulaButtonSize.Default,\n 'w-[56px] h-[56px] p-16': this.size === SulaButtonSize.Large,\n };\n }\n\n return {\n 'w-[56px] h-[44px]': this.size === SulaButtonSize.Default,\n 'w-[64px] h-[56px]': this.size === SulaButtonSize.Large,\n };\n }\n if (this.type === SulaButtonType.Text) {\n return this.appearance === SulaButtonAppearance.Text\n ? { [this.getTextTypeSizeClass()]: true }\n : {\n ['px-16 py-4 min-w-[120px] h-[40px]']: this.size === SulaButtonSize.Default,\n ['px-16 py-4 min-w-[120px] h-[56px]']: this.size === SulaButtonSize.Large,\n };\n }\n\n return {\n 'flex justify-center items-center': true,\n ['p-8 h-[40px] min-w-[40px]']: this.size === SulaButtonSize.Default,\n ['p-16 py-4 min-w-[56px] h-[56px]']: this.size === SulaButtonSize.Large,\n };\n }\n\n private getArrowIconContainerClass() {\n return {\n 'flex items-center justify-center w-24 h-24 rounded-xxl': true,\n 'group-hover:bg-states-empty-bg-hover': !this.buttonDisabled && this.type === SulaButtonType.Text,\n 'text-icon-primary': !this.buttonDisabled,\n 'text-icon-disabled': this.buttonDisabled,\n };\n }\n\n private getBaseButtonClass() {\n return {\n [this.getAppearanceClass()]: true,\n ...this.getButtonSizeByTypeClass(),\n 'rounded-xxl': this.appearance !== SulaButtonAppearance.Text,\n 'rounded-xs focus:bg-states-empty-bg-hover': this.appearance === SulaButtonAppearance.Text,\n 'font-bold text-base group': true,\n 'disabled': this.buttonDisabled,\n 'bg-states-empty-bg-pressed flex justify-center items-center': this.loading,\n 'w-full': this.fullWidth,\n };\n }\n\n private renderIconContent() {\n if (this.type === SulaButtonType.Icon) {\n return <sula-icon id=\"button-icon\" icon={this.icon} customClass=\"text-2xl\" class=\"flex leading-6\"></sula-icon>;\n }\n return null;\n }\n\n private renderTextContent() {\n if (this.text && this.type === SulaButtonType.Text) {\n return <div id=\"button-text\">{this.text}</div>;\n }\n return null;\n }\n\n private renderArrowIcon() {\n if (this.appearance === SulaButtonAppearance.Text) {\n return (\n <div class={this.getArrowIconContainerClass()}>\n <sula-icon icon=\"ph-bold ph-caret-right\" customClass=\"text-lg\"></sula-icon>\n </div>\n );\n }\n return null;\n }\n\n getLoadingSize() {\n if (this.type === SulaButtonType.Icon || this.size === SulaButtonSize.Default) {\n return SulaLoaderSize.Small;\n }\n\n return SulaLoaderSize.Medium;\n }\n\n handleClick = () => {\n if (!this.buttonDisabled && !this.loading) {\n this.buttonClicked.emit();\n }\n };\n\n render() {\n return (\n <Host>\n <button id=\"button-container\" class={this.getBaseButtonClass()} disabled={this.buttonDisabled || this.loading} onClick={this.handleClick}>\n {this.loading && (\n <div>\n <sula-loader size={this.getLoadingSize()}></sula-loader>\n </div>\n )}\n {!this.loading && (\n <div class=\"flex w-full justify-center items-center\">\n {this.leftIcon && <sula-icon icon={this.leftIcon} customClass=\"text-lg mr-8\"></sula-icon>}\n {this.renderIconContent()}\n {this.renderTextContent()}\n {this.renderArrowIcon()}\n {this.rightIcon && <sula-icon icon={this.rightIcon} customClass=\"text-lg ml-8\"></sula-icon>}\n </div>\n )}\n </button>\n </Host>\n );\n }\n}\n","export enum SulaTextfieldType {\n Text = 'text',\n Password = 'password',\n}\n\nexport enum SulaTextfieldStatus {\n Default = 'default',\n Error = 'error',\n}\n",":host {\n display: block;\n}\n\n.calendar-panel {\n box-shadow: 0px 4px 19.7px 0px var(--color-box-shadow-shadow-color-2);\n}\n\n.calendar-panel.calendar-panel--compact {\n width: 356px;\n max-width: calc(100vw - 16px);\n}\n","import { Component, Event, EventEmitter, Host, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport { SulaTextfieldStatus } from '../sula-textfield/model/sula-textfield.model';\nimport { SulaCalendarDay, SulaCalendarMonthChange, SulaCalendarRange, SulaCalendarStatus, SulaCalendarWeekday } from './model/sula-calendar.model';\n\nconst DATE_PATTERN = /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/;\nconst DAYS_IN_WEEK = 7;\nconst FALLBACK_LOCALE = 'pt-BR';\n\n@Component({\n tag: 'sula-calendar',\n styleUrl: 'sula-calendar.scss',\n shadow: true,\n})\nexport class SulaCalendar {\n /**\n * The calendar field label\n */\n @Prop() label: string;\n\n /**\n * Selected date in the `DD/MM/YYYY` format. In range mode the format is `DD/MM/YYYY - DD/MM/YYYY`\n */\n @Prop({ mutable: true }) value: string = '';\n\n /**\n * The calendar field placeholder\n */\n @Prop() placeholder?: string;\n\n /**\n * The calendar is disabled\n */\n @Prop() disabled: boolean = false;\n\n /**\n * The help text displayed below the field\n */\n @Prop() helpText?: string;\n\n /**\n * The calendar field status\n */\n @Prop() status: SulaCalendarStatus = SulaCalendarStatus.Default;\n\n /**\n * Locale used to format month and weekday names\n */\n @Prop() locale: string = 'pt-BR';\n\n /**\n * Earliest selectable date in the `DD/MM/YYYY` format\n */\n @Prop() minDate?: string;\n\n /**\n * Latest selectable date in the `DD/MM/YYYY` format\n */\n @Prop() maxDate?: string;\n\n /**\n * Enables selecting a date range (start and end dates) instead of a single date\n */\n @Prop() range: boolean = false;\n\n /**\n * Allows typing the date directly in the field. When false, the date can only be picked in the calendar\n */\n @Prop() allowTyping: boolean = true;\n\n /**\n * Renders only the calendar panel, without the input field\n */\n @Prop() inline: boolean = false;\n\n /**\n * Renders a smaller chip-like trigger showing only the selected date (`DD/MM/YY`), instead of the input field\n */\n @Prop() compact: boolean = false;\n\n /**\n * First day of the week, where 0 is Sunday and 6 is Saturday\n */\n @Prop() firstDayOfWeek: number = 0;\n\n /**\n * Closes the calendar panel after a date is selected\n */\n @Prop() closeOnSelect: boolean = true;\n\n /**\n * Event emitted when a date is selected, with the date in the `DD/MM/YYYY` format\n */\n @Event() dateSelected: EventEmitter<string>;\n\n /**\n * Event emitted in range mode when both the start and end dates are selected, either by picking or by typing. In range mode `valueChanged` is not emitted\n */\n @Event() rangeSelected: EventEmitter<SulaCalendarRange>;\n\n /**\n * Event emitted when the value changes, either by typing or by selecting a date. Not emitted in range mode, use `rangeSelected` instead\n */\n @Event() valueChanged: EventEmitter<string>;\n\n /**\n * Event emitted when the displayed month changes\n */\n @Event() monthChanged: EventEmitter<SulaCalendarMonthChange>;\n\n /**\n * Event emitted when the calendar panel is opened\n */\n @Event() calendarOpened: EventEmitter<void>;\n\n /**\n * Event emitted when the calendar panel is closed\n */\n @Event() calendarClosed: EventEmitter<void>;\n\n @State() showCalendar: boolean = false;\n\n @State() openUpward: boolean = false;\n\n @State() viewMonth: number;\n\n @State() viewYear: number;\n\n @State() hoverDate: Date | null = null;\n\n node?: HTMLElement;\n\n panelNode?: HTMLElement;\n\n @Watch('value')\n handleValueChange() {\n this.hoverDate = null;\n\n // keeps the view on the current month while an incomplete date is being typed\n if (this.selectedDate) {\n this.syncViewWithValue();\n }\n }\n\n @Listen('click', { target: 'document' })\n handleDocumentClick(event: Event) {\n if (!this.showCalendar || !this.node) return;\n\n if (!event.composedPath().includes(this.node)) {\n this.close();\n }\n }\n\n @Listen('keydown', { target: 'document' })\n handleDocumentKeydown(event: KeyboardEvent) {\n if (this.showCalendar && event.key === 'Escape') {\n this.close();\n }\n }\n\n componentWillLoad() {\n this.syncViewWithValue();\n }\n\n componentDidRender() {\n if (this.showCalendar) {\n this.calculatePanelPosition();\n }\n }\n\n get selectedDate(): Date | null {\n return this.getRange().start;\n }\n\n private getRange(): { start: Date | null; end: Date | null } {\n if (!this.range) {\n return { start: this.parseDate(this.value), end: null };\n }\n\n const [startText, endText] = (this.value ?? '').split('-');\n\n return { start: this.parseDate(startText), end: this.parseDate(endText) };\n }\n\n private syncViewWithValue() {\n const reference = this.selectedDate ?? new Date();\n\n this.viewMonth = reference.getMonth();\n this.viewYear = reference.getFullYear();\n }\n\n private parseDate(value?: string): Date | null {\n const match = DATE_PATTERN.exec((value ?? '').trim());\n if (!match) return null;\n\n const day = Number(match[1]);\n const month = Number(match[2]);\n const year = Number(match[3]);\n const date = new Date(year, month - 1, day, 0, 0, 0, 0);\n\n const isValid = date.getDate() === day && date.getMonth() === month - 1 && date.getFullYear() === year;\n\n return isValid ? date : null;\n }\n\n private formatDate(date: Date): string {\n const day = `${date.getDate()}`.padStart(2, '0');\n const month = `${date.getMonth() + 1}`.padStart(2, '0');\n\n return `${day}/${month}/${date.getFullYear()}`;\n }\n\n private capitalize(text: string): string {\n return text.charAt(0).toUpperCase() + text.slice(1);\n }\n\n private isSameDay(first: Date, second: Date): boolean {\n return first.getDate() === second.getDate() && first.getMonth() === second.getMonth() && first.getFullYear() === second.getFullYear();\n }\n\n private isOutOfRange(date: Date, min: Date | null, max: Date | null): boolean {\n return (!!min && date.getTime() < min.getTime()) || (!!max && date.getTime() > max.getTime());\n }\n\n private get weekStart(): number {\n const value = Math.trunc(Number(this.firstDayOfWeek));\n\n return Number.isFinite(value) ? ((value % DAYS_IN_WEEK) + DAYS_IN_WEEK) % DAYS_IN_WEEK : 0;\n }\n\n // an invalid `locale` would make Intl throw and break the whole render\n private createFormatter(options: Intl.DateTimeFormatOptions): Intl.DateTimeFormat {\n try {\n return new Intl.DateTimeFormat(this.locale, options);\n } catch {\n return new Intl.DateTimeFormat(FALLBACK_LOCALE, options);\n }\n }\n\n // compact range with typing shows two months and one input per date\n private get isDual(): boolean {\n return this.range && this.allowTyping && this.compact;\n }\n\n getMonthLabel(offset: number = 0): string {\n const date = new Date(this.viewYear, this.viewMonth + offset, 1);\n const month = this.createFormatter({ month: 'short' }).format(date).replace(/\\./g, '');\n\n return `${this.capitalize(month)} ${this.viewYear}`;\n }\n\n getWeekdays(): SulaCalendarWeekday[] {\n const shortFormatter = this.createFormatter({ weekday: 'short' });\n const longFormatter = this.createFormatter({ weekday: 'long' });\n\n return Array.from({ length: DAYS_IN_WEEK }, (_, index) => {\n // 2024-01-07 is a Sunday, used as a stable reference to build the weekday sequence\n const date = new Date(2024, 0, 7 + ((index + this.weekStart) % DAYS_IN_WEEK));\n\n return {\n short: this.capitalize(shortFormatter.format(date).replace(/\\./g, '')),\n long: this.capitalize(longFormatter.format(date)),\n };\n });\n }\n\n getWeeks(offset: number = 0): SulaCalendarDay[][] {\n const today = new Date();\n const monthDate = new Date(this.viewYear, this.viewMonth + offset, 1);\n const month = monthDate.getMonth();\n const year = monthDate.getFullYear();\n const { start, end } = this.getRange();\n const previewEnd = this.range && !!start && !end ? this.hoverDate : null;\n const rangeEnd = end ?? previewEnd;\n const hasRange = this.range && !!start && !!rangeEnd;\n const from = hasRange && start.getTime() > rangeEnd.getTime() ? rangeEnd : start;\n const to = hasRange && start.getTime() > rangeEnd.getTime() ? start : rangeEnd;\n const firstOfMonth = monthDate;\n const min = this.parseDate(this.minDate);\n const max = this.parseDate(this.maxDate);\n const weekOffset = (firstOfMonth.getDay() - this.weekStart + DAYS_IN_WEEK) % DAYS_IN_WEEK;\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const totalCells = Math.ceil((weekOffset + daysInMonth) / DAYS_IN_WEEK) * DAYS_IN_WEEK;\n const weeks: SulaCalendarDay[][] = [];\n\n for (let cell = 0; cell < totalCells; cell++) {\n const date = new Date(year, month, cell - weekOffset + 1);\n\n const day: SulaCalendarDay = {\n date,\n day: date.getDate(),\n isCurrentMonth: date.getMonth() === month && date.getFullYear() === year,\n isSelected: (!!start && this.isSameDay(date, start)) || (this.range && !!end && this.isSameDay(date, end)),\n isRangeStart: hasRange && this.isSameDay(date, from),\n isRangeEnd: hasRange && this.isSameDay(date, to),\n isInRange: hasRange && date.getTime() > from.getTime() && date.getTime() < to.getTime(),\n isRangePreview: !!previewEnd && this.isSameDay(date, previewEnd) && !this.isSameDay(date, start),\n isToday: this.isSameDay(date, today),\n isDisabled: this.isOutOfRange(date, min, max),\n };\n\n if (cell % DAYS_IN_WEEK === 0) weeks.push([]);\n weeks[weeks.length - 1].push(day);\n }\n\n return weeks;\n }\n\n calculatePanelPosition() {\n if (!this.node || this.inline) return;\n\n const rect = this.node.getBoundingClientRect();\n const panelHeight = this.panelNode?.offsetHeight ?? 0;\n const spaceBelow = window.innerHeight - rect.bottom;\n const spaceAbove = rect.top;\n\n this.openUpward = spaceBelow < panelHeight && spaceAbove > spaceBelow;\n }\n\n open() {\n if (this.disabled || this.showCalendar) return;\n\n this.showCalendar = true;\n this.calendarOpened.emit();\n }\n\n close() {\n if (!this.showCalendar) return;\n\n this.showCalendar = false;\n this.hoverDate = null;\n this.calendarClosed.emit();\n }\n\n handleFieldClick = () => {\n this.open();\n };\n\n getCompactLabel(): string {\n const { start, end } = this.getRange();\n const short = (date: Date) => this.formatDate(date).replace(/\\/\\d{2}(\\d{2})$/, '/$1');\n\n if (!start) return this.placeholder || this.label || '';\n\n return this.range && end ? `${short(start)} - ${short(end)}` : short(start);\n }\n\n handleCompactClick = (event: MouseEvent) => {\n event.stopPropagation();\n\n if (this.showCalendar) {\n this.close();\n } else {\n this.open();\n }\n };\n\n handleFieldKeydown = (event: KeyboardEvent) => {\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.open();\n }\n };\n\n handleInputChanged = (event: CustomEvent<string>) => {\n event.stopPropagation();\n\n const typedValue = event.detail ?? '';\n\n this.value = typedValue;\n\n if (this.range) {\n const { start, end } = this.getRange();\n\n if (start && end && start.getTime() <= end.getTime()) {\n this.rangeSelected.emit({ start: this.formatDate(start), end: this.formatDate(end) });\n }\n\n return;\n }\n\n this.valueChanged.emit(typedValue);\n };\n\n private getRangeTexts(): [string, string] {\n const [startText = '', endText = ''] = (this.value ?? '').split('-');\n\n return [startText.trim(), endText.trim()];\n }\n\n handleRangeInputChanged = (part: 'start' | 'end', event: CustomEvent<string>) => {\n event.stopPropagation();\n\n const [startText, endText] = this.getRangeTexts();\n const typed = event.detail ?? '';\n const nextStart = part === 'start' ? typed : startText;\n const nextEnd = part === 'end' ? typed : endText;\n\n this.value = nextStart || nextEnd ? `${nextStart} - ${nextEnd}` : '';\n\n const { start, end } = this.getRange();\n\n if (start && end && start.getTime() <= end.getTime()) {\n this.rangeSelected.emit({ start: this.formatDate(start), end: this.formatDate(end) });\n }\n };\n\n handlePreviousMonth = (event: MouseEvent) => {\n event.stopPropagation();\n this.changeMonth(-1);\n };\n\n handleNextMonth = (event: MouseEvent) => {\n event.stopPropagation();\n this.changeMonth(1);\n };\n\n changeMonth(step: number) {\n const date = new Date(this.viewYear, this.viewMonth + step, 1);\n\n this.viewMonth = date.getMonth();\n this.viewYear = date.getFullYear();\n\n this.monthChanged.emit({ month: this.viewMonth, year: this.viewYear });\n }\n\n handleSelectDay = (event: MouseEvent, day: SulaCalendarDay) => {\n event.stopPropagation();\n\n if (day.isDisabled || this.disabled) return;\n\n if (this.range) {\n this.selectRangeDay(day.date);\n return;\n }\n\n const formatted = this.formatDate(day.date);\n\n this.value = formatted;\n this.dateSelected.emit(formatted);\n this.valueChanged.emit(formatted);\n\n if (this.closeOnSelect && !this.inline) {\n this.close();\n }\n };\n\n selectRangeDay(date: Date) {\n const { start, end } = this.getRange();\n\n // first click, or a click after a complete range, starts a new range\n if (!start || end) {\n this.value = this.formatDate(date);\n return;\n }\n\n const [from, to] = date.getTime() < start.getTime() ? [date, start] : [start, date];\n const range: SulaCalendarRange = { start: this.formatDate(from), end: this.formatDate(to) };\n\n this.value = `${range.start} - ${range.end}`;\n this.rangeSelected.emit(range);\n\n if (this.closeOnSelect && !this.inline) {\n this.close();\n }\n }\n\n handleDayHover(day: SulaCalendarDay) {\n if (!this.range || day.isDisabled) return;\n\n this.hoverDate = day.date;\n }\n\n handleGridLeave = () => {\n this.hoverDate = null;\n };\n\n private get isRangeInverted(): boolean {\n if (!this.range) return false;\n\n const { start, end } = this.getRange();\n\n return !!start && !!end && start.getTime() > end.getTime();\n }\n\n getTextfieldStatus(): SulaTextfieldStatus {\n return this.status === SulaCalendarStatus.Error || this.isRangeInverted ? SulaTextfieldStatus.Error : SulaTextfieldStatus.Default;\n }\n\n renderHeader(offset: number = 0, showPrevious: boolean = true, showNext: boolean = true) {\n return (\n <div class=\"flex h-28 w-full flex-row items-center justify-between gap-12 px-4\">\n {showPrevious ? (\n <button\n type=\"button\"\n class=\"flex h-28 w-28 items-center justify-center rounded-xs hover:bg-states-empty-bg-hover\"\n aria-label=\"Mês anterior\"\n onClick={this.handlePreviousMonth}\n >\n <sula-icon icon=\"ph ph-caret-left\" customClass=\"text-base text-text-secondary\"></sula-icon>\n </button>\n ) : (\n <span class=\"h-28 w-28\"></span>\n )}\n\n <span class=\"text-label-medium-regular text-text-primary\" aria-live=\"polite\">\n {this.getMonthLabel(offset)}\n </span>\n\n {showNext ? (\n <button\n type=\"button\"\n class=\"flex h-28 w-28 items-center justify-center rounded-xs hover:bg-states-empty-bg-hover\"\n aria-label=\"Próximo mês\"\n onClick={this.handleNextMonth}\n >\n <sula-icon icon=\"ph ph-caret-right\" customClass=\"text-base text-text-secondary\"></sula-icon>\n </button>\n ) : (\n <span class=\"h-28 w-28\"></span>\n )}\n </div>\n );\n }\n\n renderMonth(offset: number, showPrevious: boolean, showNext: boolean) {\n return (\n <div class=\"flex w-full flex-col items-center gap-24\">\n {this.renderHeader(offset, showPrevious, showNext)}\n\n <div class=\"flex w-full flex-col\" role=\"grid\">\n <div class=\"grid grid-cols-7\" role=\"row\">\n {this.getWeekdays().map(weekday => (\n <div role=\"columnheader\" title={weekday.long} class=\"flex h-22 w-full items-center justify-center text-label-small-regular text-text-secondary\">\n {weekday.short}\n </div>\n ))}\n </div>\n\n <div role=\"rowgroup\" class=\"grid gap-y-8 pt-8\" onMouseLeave={this.handleGridLeave}>\n {this.getWeeks(offset).map(week => (\n <div class=\"grid grid-cols-7\" role=\"row\">\n {week.map(day => this.renderDay(day))}\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n }\n\n renderRangeInputs() {\n const [startText, endText] = this.getRangeTexts();\n\n return (\n <div class=\"grid w-full grid-cols-2 gap-24\">\n <sula-textfield\n label=\"Data inicial\"\n status={this.getTextfieldStatus()}\n value={startText}\n placeholder=\"DD/MM/AAAA\"\n icon=\"ph ph-calendar-blank\"\n maskPattern=\"99/99/9999\"\n onValueChanged={(event: CustomEvent<string>) => this.handleRangeInputChanged('start', event)}\n ></sula-textfield>\n <sula-textfield\n label=\"Data final\"\n status={this.getTextfieldStatus()}\n helpText={this.isRangeInverted ? 'A data final deve ser posterior à data inicial' : undefined}\n value={endText}\n placeholder=\"DD/MM/AAAA\"\n icon=\"ph ph-calendar-blank\"\n maskPattern=\"99/99/9999\"\n onValueChanged={(event: CustomEvent<string>) => this.handleRangeInputChanged('end', event)}\n ></sula-textfield>\n </div>\n );\n }\n\n renderDay(day: SulaCalendarDay) {\n return (\n <div\n role=\"gridcell\"\n aria-selected={day.isSelected ? 'true' : 'false'}\n aria-disabled={day.isDisabled ? 'true' : null}\n aria-current={day.isToday ? 'date' : null}\n class=\"relative flex w-full items-center justify-center\"\n onMouseEnter={() => this.handleDayHover(day)}\n >\n {(day.isInRange || day.isRangeStart !== day.isRangeEnd) && (\n <span\n data-range-background\n aria-hidden=\"true\"\n class={{\n 'absolute inset-y-0 bg-surface-on-body-brand': true,\n 'inset-x-0': day.isInRange,\n 'right-0 w-1/2': day.isRangeStart && !day.isRangeEnd,\n 'left-0 w-1/2': day.isRangeEnd && !day.isRangeStart,\n }}\n ></span>\n )}\n <button\n type=\"button\"\n disabled={day.isDisabled}\n aria-label={this.formatDate(day.date)}\n onClick={(event: MouseEvent) => this.handleSelectDay(event, day)}\n class={{\n 'relative flex h-36 w-36 items-center justify-center rounded-xxl text-label-small-regular transition-colors': true,\n 'bg-brand-primary text-neutral-neutral-1': day.isSelected,\n 'border border-brand-primary text-text-primary': day.isRangePreview && !day.isSelected,\n 'text-text-primary hover:bg-states-empty-bg-hover': !day.isSelected && day.isCurrentMonth && !day.isDisabled,\n 'text-text-secondary opacity-50 hover:bg-states-empty-bg-hover': !day.isSelected && !day.isCurrentMonth && !day.isDisabled,\n 'cursor-not-allowed text-text-disabled line-through': day.isDisabled,\n }}\n >\n {day.day}\n </button>\n </div>\n );\n }\n\n renderPanel() {\n return (\n <div\n ref={node => (this.panelNode = node)}\n role={this.inline ? 'group' : 'dialog'}\n aria-label=\"Calendário\"\n class={{\n 'calendar-panel flex flex-col items-center rounded-lg border border-line-general bg-surface-body p-24': true,\n 'w-full': (!this.compact || this.inline) && !(this.isDual && !this.inline),\n 'w-max': this.isDual && !this.inline,\n 'absolute left-0 z-50': !this.inline,\n 'calendar-panel--compact': this.compact && !this.inline && !this.isDual,\n 'bottom-full mb-8': !this.inline && this.openUpward,\n 'top-full mt-8': !this.inline && !this.openUpward,\n }}\n >\n {this.isDual ? (\n <div class=\"flex w-full flex-col gap-24\">\n {this.renderRangeInputs()}\n <div class=\"grid grid-cols-2 gap-24\">\n {this.renderMonth(0, true, false)}\n {this.renderMonth(1, false, true)}\n </div>\n </div>\n ) : (\n this.renderMonth(0, true, true)\n )}\n </div>\n );\n }\n\n render() {\n return (\n <Host ref={node => (this.node = node)}>\n <div class={{ 'relative': true, 'w-full': !this.compact || this.inline, 'inline-block': this.compact && !this.inline }}>\n {!this.inline && this.compact && (\n <button\n type=\"button\"\n disabled={this.disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={this.showCalendar ? 'true' : 'false'}\n aria-label={this.label}\n onClick={this.handleCompactClick}\n class={{\n 'flex h-40 items-center justify-center gap-8 rounded-xxl bg-surface-on-body px-16 py-2 text-label-medium-bold text-text-primary': true,\n 'cursor-not-allowed opacity-50': this.disabled,\n }}\n >\n <sula-icon icon=\"ph ph-calendar-dots\" customClass=\"text-2xl text-text-secondary\"></sula-icon>\n <span class=\"whitespace-nowrap\">{this.getCompactLabel()}</span>\n <sula-icon icon={this.showCalendar ? 'ph ph-caret-up' : 'ph ph-caret-down'} customClass=\"text-base text-text-primary\"></sula-icon>\n </button>\n )}\n\n {!this.inline && !this.compact && (\n <div onClick={this.handleFieldClick} onKeyDown={this.handleFieldKeydown}>\n <sula-textfield\n label={this.label}\n value={this.value}\n placeholder={this.placeholder}\n disabled={this.disabled}\n helpText={this.isRangeInverted ? 'A data final deve ser posterior à data inicial' : this.helpText}\n status={this.getTextfieldStatus()}\n icon=\"ph ph-calendar-blank\"\n maskPattern={this.range ? '99/99/9999 - 99/99/9999' : '99/99/9999'}\n readOnly={!this.allowTyping}\n onValueChanged={this.handleInputChanged}\n ></sula-textfield>\n </div>\n )}\n\n {(this.inline || this.showCalendar) && this.renderPanel()}\n </div>\n </Host>\n );\n }\n}\n","export enum SulaCheckboxType {\n Default = 'default',\n List = 'list',\n}\n",":host {\n display: block;\n}\n\n.checkbox-focus {\n outline: 2px solid var(--color-feedback-informational) !important;\n outline-offset: 2px !important;\n}\n\n.container-focus {\n outline: 2px solid var(--color-feedback-informational) !important;\n outline-offset: 2px !important;\n}\n","import { Component, Event, EventEmitter, Host, Prop, State, h } from '@stencil/core';\nimport { SulaCheckboxType } from './model/sula-checkbox.model';\n\n@Component({\n tag: 'sula-checkbox',\n styleUrl: 'sula-checkbox.scss',\n shadow: true,\n})\nexport class SulaCheckbox {\n /**\n * Checkbox type\n */\n @Prop({ mutable: true }) type: SulaCheckboxType = SulaCheckboxType.Default;\n\n /**\n * Checkbox label\n */\n @Prop({ mutable: true }) label?: string;\n\n /**\n * Checkbox sub title (avaible when is `list` type)\n */\n @Prop({ mutable: true }) subTitle?: string;\n\n /**\n * Is checbox disabled\n */\n @Prop({ mutable: true }) disabled: boolean = false;\n\n /**\n * Is checkbox checked\n */\n @Prop({ mutable: true }) checked: boolean = false;\n\n /**\n * Event emitted when checkbox value changes.\n */\n @Event()\n valueChanged: EventEmitter<boolean>;\n\n /**\n * Event emitted when checkbox is focused.\n */\n @Event()\n focusedOn: EventEmitter<void>;\n\n /**\n * Event emitted when checkbox is focused out.\n */\n @Event()\n focusedOut: EventEmitter<void>;\n\n @State()\n isFocus: boolean = false;\n\n toggle = () => {\n if (!this.disabled) {\n this.checked = !this.checked;\n this.valueChanged.emit(this.checked);\n }\n };\n\n handleFocus = () => {\n if (!this.disabled) {\n this.isFocus = true;\n this.focusedOn.emit();\n }\n };\n\n handleBlur = () => {\n if (!this.disabled) {\n this.focusedOut.emit();\n this.isFocus = false;\n }\n };\n\n getIconColor() {\n if (this.disabled) {\n return 'text-icon-disabled';\n }\n\n return 'text-negative-negative-1';\n }\n\n render() {\n return (\n <Host>\n <div\n class={{\n 'outline-none': true,\n 'flex items-center space-x-12': !!this.label && this.type === SulaCheckboxType.Default,\n 'flex items-center justify-between bg-surface-on-body rounded-md w-[280px] min-h-[85px] px-24 py-16': this.type === SulaCheckboxType.List,\n 'hover:bg-states-empty-bg-hover active:bg-states-empty-bg-pressed cursor-pointer': this.type === SulaCheckboxType.List && !this.disabled,\n 'container-focus': this.isFocus && this.type === SulaCheckboxType.List,\n }}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n onClick={this.toggle}\n tabIndex={0}\n >\n {this.type === SulaCheckboxType.List && (\n <div class=\"flex flex-col flex-1 mr-16 overflow-hidden\">\n {!!this.label && <label class=\"text-text-primary font-bold text-base cursor-pointer break-words\">{this.label}</label>}\n {!!this.subTitle && <span class=\"text-text-secondary text-base break-words\">{this.subTitle}</span>}\n </div>\n )}\n\n <div\n tabIndex={0}\n class={{\n 'flex justify-center items-center rounded-xs w-[27px] h-[27px] border outline-none flex-shrink-0': true,\n 'checkbox-focus': this.isFocus && this.type === SulaCheckboxType.Default,\n 'cursor-pointer active:bg-states-empty-bg-pressed': !this.disabled,\n 'bg-states-bg-disabled border-states-bg-disabled': this.disabled,\n 'bg-brand-primary border-brand-primary': this.checked,\n 'bg-surface-body border-line-input': !this.checked,\n }}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n >\n {this.checked && (\n <div class=\"flex justify-center items-center\">\n <sula-icon icon=\"ph-bold ph-check\" customClass={`${this.getIconColor()} text-xl`}></sula-icon>\n </div>\n )}\n </div>\n {!!this.label && this.type === SulaCheckboxType.Default && <label class=\"text-text-secondary text-base cursor-pointer break-words\">{this.label}</label>}\n </div>\n </Host>\n );\n }\n}\n","export enum SulaChipAppearance {\n Default = 'default',\n Negative = 'negative',\n}\n\nexport enum SulaChipItemsPlacement {\n Bottom = 'bottom',\n Top = 'top',\n}\n",":host {\n display: block;\n}\n\n.chip-focus {\n outline: 2px solid var(--color-feedback-informational) !important;\n outline-offset: 2px !important;\n}\n\n.chip-opened {\n box-shadow: 0px 0px 0px 2px #1414141a;\n}\n","import { Component, Event, EventEmitter, Host, Listen, Prop, State, h } from '@stencil/core';\nimport { SulaMenuListItem } from '../sula-menu-select-list/model/sula-menu-select-list.model';\nimport { SulaChipAppearance, SulaChipItemsPlacement } from './model/sula-chip.model';\nimport { SulaMenuSelectListCustomEvent } from '../../components';\n\n@Component({\n tag: 'sula-chip',\n styleUrl: 'sula-chip.scss',\n shadow: true,\n})\nexport class SulaChip {\n /**\n * Chip text\n */\n @Prop({ mutable: true })\n text: string = '';\n\n /**\n * Chip appearance\n */\n @Prop({ mutable: true })\n appearance: SulaChipAppearance = SulaChipAppearance.Default;\n\n /**\n * Chip is disabled\n */\n @Prop({ mutable: true })\n disabled: boolean = false;\n\n /**\n * Icon class displayed before the text, e.g. `ph ph-download-simple`\n */\n @Prop()\n icon?: string;\n\n /**\n * Items for list\n */\n @Prop({ mutable: true })\n items: SulaMenuListItem[] = [];\n\n /**\n * Where the items list opens relative to the chip\n */\n @Prop({ mutable: true })\n itemsPlacement: SulaChipItemsPlacement = SulaChipItemsPlacement.Bottom;\n\n /**\n * Chip is selected\n */\n @Prop({ mutable: true })\n selected: boolean = false;\n\n /**\n * Event emitted when chip is clicked\n */\n @Event()\n itemClicked: EventEmitter<void>;\n\n /**\n * Event emitted when item is selected\n */\n @Event()\n menuItemSelected: EventEmitter<SulaMenuListItem>;\n\n @State()\n isFocused = false;\n\n @State()\n showItems = false;\n\n node?: HTMLElement;\n\n @Listen('click', { target: 'document' })\n handleDocumentClick(event: Event) {\n if (!this.node) return;\n\n // event.target is retargeted to the outer host when the chip lives inside another shadow root\n const clickInside = event.composedPath().includes(this.node);\n\n if (!clickInside) {\n this.showItems = false;\n }\n }\n\n handleFocus = () => {\n if (this.disabled) return;\n this.isFocused = true;\n };\n\n handleBlur = () => {\n if (this.disabled) return;\n this.isFocused = false;\n };\n\n handleClick = () => {\n if (this.disabled) return;\n\n this.itemClicked.emit();\n\n if (this.items.length > 0) {\n this.showItems = !this.showItems;\n this.isFocused = false;\n }\n };\n\n handleItemSelected = (item: SulaMenuSelectListCustomEvent<SulaMenuListItem>) => {\n this.menuItemSelected.emit(item.detail);\n this.showItems = false;\n };\n\n getIconClass() {\n if (this.disabled) return 'text-text-disabled';\n\n if (this.appearance === SulaChipAppearance.Default) {\n return 'text-text-primary';\n } else {\n return 'text-negative-negative-2';\n }\n }\n\n getLeadingIconClass() {\n if (this.disabled) return 'text-text-disabled';\n if (this.selected) return 'text-negative-negative-1';\n\n return this.appearance === SulaChipAppearance.Default ? 'text-text-primary' : 'text-negative-negative-2';\n }\n\n render() {\n return (\n <Host ref={node => (this.node = node)}>\n <div class=\"w-fit relative\">\n <div\n class={{\n 'flex justify-center items-center px-16 py-2 rounded-xxl min-h-40 w-fit outline-none': true,\n 'bg-surface-on-body hover:bg-states-empty-bg-hover active:bg-states-empty-bg-pressed':\n this.appearance === SulaChipAppearance.Default && !this.disabled && !this.selected,\n 'bg-brand-primary': this.selected && !this.disabled,\n 'bg-negative-negative-1 hover:bg-states-negative-hover active:bg-states-negative-pressed':\n this.appearance === SulaChipAppearance.Negative && !this.disabled && !this.selected,\n 'bg-states-bg-disabled cursor-not-allowed': this.disabled,\n 'cursor-pointer': !this.disabled,\n 'border border-line-input chip-opened': !this.disabled && this.showItems,\n 'chip-focus': this.isFocused,\n }}\n tabIndex={0}\n onClick={this.handleClick}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n >\n {this.icon && (\n <div class={{ 'flex items-center justify-center leading-4': true, 'mr-8': !!this.text }} data-chip-icon>\n <sula-icon icon={this.icon} customClass={`text-xl ${this.getLeadingIconClass()}`}></sula-icon>\n </div>\n )}\n <span\n class={{\n 'text-base font-bold leading-4': true,\n 'text-text-primary': this.appearance === SulaChipAppearance.Default && !this.disabled && !this.selected,\n 'text-negative-negative-2': this.appearance === SulaChipAppearance.Negative && !this.disabled && !this.selected,\n 'text-negative-negative-1': this.selected && !this.disabled,\n 'text-text-disabled': this.disabled,\n }}\n >\n {this.text}\n </span>\n\n {this.items.length > 0 && (\n <div class=\"flex items-center justify-center ml-8 leading-4\">\n <sula-icon icon={`ph-bold ph-caret-${this.showItems ? 'up' : 'down'}`} customClass={this.getIconClass()}></sula-icon>\n </div>\n )}\n </div>\n {this.showItems && (\n <div\n class={{\n 'absolute z-50 left-0': true,\n 'top-40': this.itemsPlacement !== SulaChipItemsPlacement.Top,\n 'bottom-40': this.itemsPlacement === SulaChipItemsPlacement.Top,\n }}\n >\n <sula-menu-select-list items={this.items} onItemSelected={this.handleItemSelected}></sula-menu-select-list>\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n",":host {\n display: block;\n}\n\n.dropdown-focus {\n outline: 2px solid var(--color-feedback-informational) !important;\n outline-offset: 2px !important;\n}\n\n.dropdown-error {\n outline: 2px solid var(--color-feedback-error) !important;\n outline-offset: 2px !important;\n}\n","import { Component, Event, EventEmitter, Host, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport { SulaMenuListItem, SulaMenuSelectListCustomEvent } from '../../components';\n\n@Component({\n tag: 'sula-dropdown',\n styleUrl: 'sula-dropdown.scss',\n shadow: true,\n})\nexport class SulaDropdown {\n /**\n * Dropdown label\n */\n @Prop({ mutable: true })\n label: string;\n\n /**\n * Dropdown is disabled\n */\n @Prop({ mutable: true })\n disabled: boolean = false;\n\n /**\n * Shows the error state, highlighting the dropdown border in red\n */\n @Prop({ mutable: true, reflect: true })\n hasError: boolean = false;\n\n /**\n * Items for list\n */\n @Prop({ mutable: true })\n items: SulaMenuListItem[] = [];\n\n /**\n * Value for dropdown\n */\n @Prop({ mutable: true })\n value?: SulaMenuListItem;\n\n /**\n * Enable search/filter functionality in dropdown\n */\n @Prop({ reflect: true })\n searchable?: boolean;\n\n /**\n * Maximum height for dropdown menu in pixels\n */\n @Prop()\n menuMaxHeight: number = 260;\n\n /**\n * Maximum height for custom content area in pixels\n */\n @Prop()\n contentMaxHeight: number = 260;\n\n /**\n * Enable custom content via slot instead of items list\n */\n @Prop({ reflect: true })\n customContent?: boolean;\n\n /**\n * Close dropdown when an item is selected or content is clicked\n */\n @Prop()\n closeOnSelect: boolean = true;\n\n /**\n * Show or hide dropdown content\n */\n @Prop({ mutable: true, reflect: true })\n showContent = false;\n\n /**\n * Event emitted when dropdown is clicked\n */\n @Event()\n dropdownClicked: EventEmitter<void>;\n\n /**\n * Event emitted when dropdown is focused\n */\n @Event()\n dropdownFocused: EventEmitter<void>;\n\n /**\n * Event emitted when dropdown is focused out\n */\n @Event()\n dropdownFocusedOut: EventEmitter<void>;\n\n /**\n * Event emitted when item is selected\n */\n @Event()\n menuItemSelected: EventEmitter<SulaMenuListItem>;\n\n @State()\n selectedItem?: SulaMenuListItem;\n\n @State()\n isFocused = false;\n\n @State()\n searchTerm: string = '';\n\n @State()\n filteredItems: SulaMenuListItem[] = [];\n\n @State()\n openUpward: boolean = false;\n\n node?: HTMLElement;\n searchInputRef?: HTMLInputElement;\n\n @Watch('value')\n handleValueChange() {\n if (this.value) {\n this.selectedItem = this.value;\n }\n }\n\n @Watch('showContent')\n handleShowContentChange(newValue: boolean) {\n if (!newValue) {\n this.searchTerm = '';\n this.filteredItems = [];\n }\n }\n\n @Listen('click', { target: 'document' })\n handleDocumentClick(event: Event) {\n if (!this.node) return;\n\n const path = event.composedPath();\n const clickInside = path.some(el => el === this.node);\n\n if (!clickInside) {\n this.showContent = false;\n }\n }\n\n @Listen('resize', { target: 'window' })\n handleWindowResize() {\n if (this.showContent) {\n this.calculateMenuPosition();\n }\n }\n\n calculateMenuPosition() {\n if (!this.node) return;\n\n const rect = this.node.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const spaceBelow = viewportHeight - rect.bottom;\n const spaceAbove = rect.top;\n const buffer = 60;\n const requiredSpace = (this.customContent ? this.contentMaxHeight : this.menuMaxHeight) + buffer;\n\n this.openUpward = spaceBelow < requiredSpace && (spaceAbove > requiredSpace || spaceAbove > spaceBelow);\n }\n\n componentWillLoad() {\n if (this.value) {\n this.selectedItem = this.value;\n }\n }\n\n componentDidRender() {\n if (this.showContent) {\n this.calculateMenuPosition();\n\n if (this.searchable && this.searchInputRef) {\n this.searchInputRef.focus();\n }\n }\n }\n\n handleClick = () => {\n if (this.disabled) return;\n\n this.dropdownClicked.emit();\n\n if (this.customContent || this.items.length > 0) {\n this.showContent = !this.showContent;\n }\n\n if (this.searchable && this.showContent && this.searchInputRef) {\n this.searchInputRef.focus();\n }\n };\n\n handleItemSelected = (item: SulaMenuSelectListCustomEvent<SulaMenuListItem>) => {\n this.selectedItem = item.detail;\n this.searchTerm = '';\n this.menuItemSelected.emit(item.detail);\n\n if (this.closeOnSelect) {\n setTimeout(() => {\n this.showContent = false;\n }, 0);\n }\n };\n\n filterItems = () => {\n if (!this.searchTerm.trim()) {\n return this.items;\n }\n const term = this.searchTerm.toLowerCase();\n return this.items.filter(item => item.title.toLowerCase().includes(term));\n };\n\n handleSearchInput = (event: Event) => {\n const target = event.target as HTMLInputElement;\n this.searchTerm = target.value;\n this.filteredItems = this.filterItems();\n };\n\n getIconClass() {\n if (this.disabled) return 'text-icon-disabled';\n\n return 'text-text-primary';\n }\n\n handleFocus = () => {\n if (this.disabled) return;\n\n this.isFocused = true;\n this.dropdownFocused.emit();\n };\n\n handleBlur = () => {\n if (this.disabled) return;\n\n this.isFocused = false;\n this.dropdownFocusedOut.emit();\n };\n\n render() {\n return (\n <Host ref={node => (this.node = node)}>\n <div\n class={{\n 'flex justify-between items-center border border-line-input h-[72px] px-16 rounded-xl relative': true,\n 'bg-surface-body cursor-pointer': !this.disabled,\n 'bg-states-bg-disabled': this.disabled,\n 'dropdown-focus': this.isFocused && !this.hasError,\n 'dropdown-error': this.hasError && !this.disabled,\n }}\n onClick={this.handleClick}\n tabIndex={0}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n >\n <div class=\"flex flex-col w-full\">\n <label\n class={{\n 'text-base leading-4': !this.selectedItem && !(this.searchable && this.showContent),\n 'text-sm leading-4 font-bold': !!this.selectedItem || (this.searchable && this.showContent),\n 'text-text-primary': !this.disabled,\n 'text-text-disabled': this.disabled,\n }}\n >\n {this.label}\n </label>\n\n {this.searchable && this.showContent ? (\n <input\n ref={el => (this.searchInputRef = el)}\n type=\"text\"\n value={this.searchTerm}\n onInput={this.handleSearchInput}\n placeholder={this.selectedItem?.title || ''}\n class=\"w-full text-base text-text-primary bg-transparent border-none outline-none placeholder:text-text-secondary p-0 m-0 leading-4 pt-4\"\n />\n ) : (\n !!this.selectedItem && (\n <span\n class={{\n 'flex items-center gap-8 text-base leading-4 pt-4': true,\n 'text-text-primary': !this.disabled,\n 'text-text-disabled': this.disabled,\n }}\n >\n {this.selectedItem.icon && <sula-icon icon={this.selectedItem.icon} customClass=\"text-lg\"></sula-icon>}\n {this.selectedItem.title}\n </span>\n )\n )}\n </div>\n <div class=\"flex items-center justify-center ml-8 leading-6 text-2xl\">\n <sula-icon icon={`ph ph-caret-${this.showContent ? 'up' : 'down'}`} customClass={`${this.getIconClass()} text-2xl`}></sula-icon>\n </div>\n\n {this.showContent && (\n <div\n class={{\n 'absolute z-50 left-0 w-full transition-all duration-200 ease-in-out': true,\n 'bottom-[72px]': this.openUpward,\n 'top-[72px]': !this.openUpward,\n }}\n onClick={!this.closeOnSelect ? (e: Event) => e.stopPropagation() : undefined}\n >\n {this.customContent ? (\n <div class=\"bg-surface-body border border-line-general rounded-sm overflow-auto\" style={{ maxHeight: `${this.contentMaxHeight}px` }}>\n <slot></slot>\n </div>\n ) : (\n (() => {\n const itemsToShow = this.searchable && this.searchTerm.trim() ? this.filteredItems : this.items;\n const showNoResults = this.searchable && this.searchTerm.trim() && itemsToShow.length === 0;\n\n if (showNoResults) {\n return <div class=\"bg-surface-body border border-line-general rounded-sm py-16 px-24 text-base text-text-secondary\">Nenhum resultado encontrado</div>;\n }\n\n return (\n <sula-menu-select-list\n items={itemsToShow}\n fullWidth={true}\n maxHeight={this.menuMaxHeight}\n selectedValue={this.selectedItem}\n onItemSelected={this.handleItemSelected}\n ></sula-menu-select-list>\n );\n })()\n )}\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n","\n\n.ph {\n font-family: 'Phosphor' !important;\n}\n\n.ph-bold {\n font-family: 'Phosphor-Bold' !important;\n}\n\n.ph-duotone {\n font-family: 'Phosphor-Duotone' !important;\n}\n\n.ph-fill {\n font-family: 'Phosphor-Fill' !important;\n}\n\n.ph-light {\n font-family: 'Phosphor-Light' !important;\n}\n\n.ph-thin {\n font-family: 'Phosphor-Thin' !important;\n}\n\n.sula-icon {\n speak: never;\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n line-height: 1;\n letter-spacing: 0;\n -webkit-font-feature-settings: 'liga';\n -moz-font-feature-settings: 'liga=1';\n -moz-font-feature-settings: 'liga';\n -ms-font-feature-settings: 'liga' 1;\n font-feature-settings: 'liga';\n -webkit-font-variant-ligatures: discretionary-ligatures;\n font-variant-ligatures: discretionary-ligatures;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.sula-icon.ph-acorn:before {\n content: '\\eb9a';\n}\n.sula-icon.ph-address-book:before {\n content: '\\e6f8';\n}\n.sula-icon.ph-address-book-tabs:before {\n content: '\\ee4e';\n}\n.sula-icon.ph-air-traffic-control:before {\n content: '\\ecd8';\n}\n.sula-icon.ph-airplane:before {\n content: '\\e002';\n}\n.sula-icon.ph-airplane-in-flight:before {\n content: '\\e4fe';\n}\n.sula-icon.ph-airplane-landing:before {\n content: '\\e502';\n}\n.sula-icon.ph-airplane-takeoff:before {\n content: '\\e504';\n}\n.sula-icon.ph-airplane-taxiing:before {\n content: '\\e500';\n}\n.sula-icon.ph-airplane-tilt:before {\n content: '\\e5d6';\n}\n.sula-icon.ph-airplay:before {\n content: '\\e004';\n}\n.sula-icon.ph-alarm:before {\n content: '\\e006';\n}\n.sula-icon.ph-alien:before {\n content: '\\e8a6';\n}\n.sula-icon.ph-align-bottom:before {\n content: '\\e506';\n}\n.sula-icon.ph-align-bottom-simple:before {\n content: '\\eb0c';\n}\n.sula-icon.ph-align-center-horizontal:before {\n content: '\\e50a';\n}\n.sula-icon.ph-align-center-horizontal-simple:before {\n content: '\\eb0e';\n}\n.sula-icon.ph-align-center-vertical:before {\n content: '\\e50c';\n}\n.sula-icon.ph-align-center-vertical-simple:before {\n content: '\\eb10';\n}\n.sula-icon.ph-align-left:before {\n content: '\\e50e';\n}\n.sula-icon.ph-align-left-simple:before {\n content: '\\eaee';\n}\n.sula-icon.ph-align-right:before {\n content: '\\e510';\n}\n.sula-icon.ph-align-right-simple:before {\n content: '\\eb12';\n}\n.sula-icon.ph-align-top:before {\n content: '\\e512';\n}\n.sula-icon.ph-align-top-simple:before {\n content: '\\eb14';\n}\n.sula-icon.ph-amazon-logo:before {\n content: '\\e96c';\n}\n.sula-icon.ph-ambulance:before {\n content: '\\e572';\n}\n.sula-icon.ph-anchor:before {\n content: '\\e514';\n}\n.sula-icon.ph-anchor-simple:before {\n content: '\\e5d8';\n}\n.sula-icon.ph-android-logo:before {\n content: '\\e008';\n}\n.sula-icon.ph-angle:before {\n content: '\\e7bc';\n}\n.sula-icon.ph-angular-logo:before {\n content: '\\eb80';\n}\n.sula-icon.ph-aperture:before {\n content: '\\e00a';\n}\n.sula-icon.ph-app-store-logo:before {\n content: '\\e974';\n}\n.sula-icon.ph-app-window:before {\n content: '\\e5da';\n}\n.sula-icon.ph-apple-logo:before {\n content: '\\e516';\n}\n.sula-icon.ph-apple-podcasts-logo:before {\n content: '\\eb96';\n}\n.sula-icon.ph-approximate-equals:before {\n content: '\\edaa';\n}\n.sula-icon.ph-archive:before {\n content: '\\e00c';\n}\n.sula-icon.ph-armchair:before {\n content: '\\e012';\n}\n.sula-icon.ph-arrow-arc-left:before {\n content: '\\e014';\n}\n.sula-icon.ph-arrow-arc-right:before {\n content: '\\e016';\n}\n.sula-icon.ph-arrow-bend-double-up-left:before {\n content: '\\e03a';\n}\n.sula-icon.ph-arrow-bend-double-up-right:before {\n content: '\\e03c';\n}\n.sula-icon.ph-arrow-bend-down-left:before {\n content: '\\e018';\n}\n.sula-icon.ph-arrow-bend-down-right:before {\n content: '\\e01a';\n}\n.sula-icon.ph-arrow-bend-left-down:before {\n content: '\\e01c';\n}\n.sula-icon.ph-arrow-bend-left-up:before {\n content: '\\e01e';\n}\n.sula-icon.ph-arrow-bend-right-down:before {\n content: '\\e020';\n}\n.sula-icon.ph-arrow-bend-right-up:before {\n content: '\\e022';\n}\n.sula-icon.ph-arrow-bend-up-left:before {\n content: '\\e024';\n}\n.sula-icon.ph-arrow-bend-up-right:before {\n content: '\\e026';\n}\n.sula-icon.ph-arrow-circle-down:before {\n content: '\\e028';\n}\n.sula-icon.ph-arrow-circle-down-left:before {\n content: '\\e02a';\n}\n.sula-icon.ph-arrow-circle-down-right:before {\n content: '\\e02c';\n}\n.sula-icon.ph-arrow-circle-left:before {\n content: '\\e05a';\n}\n.sula-icon.ph-arrow-circle-right:before {\n content: '\\e02e';\n}\n.sula-icon.ph-arrow-circle-up:before {\n content: '\\e030';\n}\n.sula-icon.ph-arrow-circle-up-left:before {\n content: '\\e032';\n}\n.sula-icon.ph-arrow-circle-up-right:before {\n content: '\\e034';\n}\n.sula-icon.ph-arrow-clockwise:before {\n content: '\\e036';\n}\n.sula-icon.ph-arrow-counter-clockwise:before {\n content: '\\e038';\n}\n.sula-icon.ph-arrow-down:before {\n content: '\\e03e';\n}\n.sula-icon.ph-arrow-down-left:before {\n content: '\\e040';\n}\n.sula-icon.ph-arrow-down-right:before {\n content: '\\e042';\n}\n.sula-icon.ph-arrow-elbow-down-left:before {\n content: '\\e044';\n}\n.sula-icon.ph-arrow-elbow-down-right:before {\n content: '\\e046';\n}\n.sula-icon.ph-arrow-elbow-left:before {\n content: '\\e048';\n}\n.sula-icon.ph-arrow-elbow-left-down:before {\n content: '\\e04a';\n}\n.sula-icon.ph-arrow-elbow-left-up:before {\n content: '\\e04c';\n}\n.sula-icon.ph-arrow-elbow-right:before {\n content: '\\e04e';\n}\n.sula-icon.ph-arrow-elbow-right-down:before {\n content: '\\e050';\n}\n.sula-icon.ph-arrow-elbow-right-up:before {\n content: '\\e052';\n}\n.sula-icon.ph-arrow-elbow-up-left:before {\n content: '\\e054';\n}\n.sula-icon.ph-arrow-elbow-up-right:before {\n content: '\\e056';\n}\n.sula-icon.ph-arrow-fat-down:before {\n content: '\\e518';\n}\n.sula-icon.ph-arrow-fat-left:before {\n content: '\\e51a';\n}\n.sula-icon.ph-arrow-fat-line-down:before {\n content: '\\e51c';\n}\n.sula-icon.ph-arrow-fat-line-left:before {\n content: '\\e51e';\n}\n.sula-icon.ph-arrow-fat-line-right:before {\n content: '\\e520';\n}\n.sula-icon.ph-arrow-fat-line-up:before {\n content: '\\e522';\n}\n.sula-icon.ph-arrow-fat-lines-down:before {\n content: '\\e524';\n}\n.sula-icon.ph-arrow-fat-lines-left:before {\n content: '\\e526';\n}\n.sula-icon.ph-arrow-fat-lines-right:before {\n content: '\\e528';\n}\n.sula-icon.ph-arrow-fat-lines-up:before {\n content: '\\e52a';\n}\n.sula-icon.ph-arrow-fat-right:before {\n content: '\\e52c';\n}\n.sula-icon.ph-arrow-fat-up:before {\n content: '\\e52e';\n}\n.sula-icon.ph-arrow-left:before {\n content: '\\e058';\n}\n.sula-icon.ph-arrow-line-down:before {\n content: '\\e05c';\n}\n.sula-icon.ph-arrow-line-down-left:before {\n content: '\\e05e';\n}\n.sula-icon.ph-arrow-line-down-right:before {\n content: '\\e060';\n}\n.sula-icon.ph-arrow-line-left:before {\n content: '\\e062';\n}\n.sula-icon.ph-arrow-line-right:before {\n content: '\\e064';\n}\n.sula-icon.ph-arrow-line-up:before {\n content: '\\e066';\n}\n.sula-icon.ph-arrow-line-up-left:before {\n content: '\\e068';\n}\n.sula-icon.ph-arrow-line-up-right:before {\n content: '\\e06a';\n}\n.sula-icon.ph-arrow-right:before {\n content: '\\e06c';\n}\n.sula-icon.ph-arrow-square-down:before {\n content: '\\e06e';\n}\n.sula-icon.ph-arrow-square-down-left:before {\n content: '\\e070';\n}\n.sula-icon.ph-arrow-square-down-right:before {\n content: '\\e072';\n}\n.sula-icon.ph-arrow-square-in:before {\n content: '\\e5dc';\n}\n.sula-icon.ph-arrow-square-left:before {\n content: '\\e074';\n}\n.sula-icon.ph-arrow-square-out:before {\n content: '\\e5de';\n}\n.sula-icon.ph-arrow-square-right:before {\n content: '\\e076';\n}\n.sula-icon.ph-arrow-square-up:before {\n content: '\\e078';\n}\n.sula-icon.ph-arrow-square-up-left:before {\n content: '\\e07a';\n}\n.sula-icon.ph-arrow-square-up-right:before {\n content: '\\e07c';\n}\n.sula-icon.ph-arrow-u-down-left:before {\n content: '\\e07e';\n}\n.sula-icon.ph-arrow-u-down-right:before {\n content: '\\e080';\n}\n.sula-icon.ph-arrow-u-left-down:before {\n content: '\\e082';\n}\n.sula-icon.ph-arrow-u-left-up:before {\n content: '\\e084';\n}\n.sula-icon.ph-arrow-u-right-down:before {\n content: '\\e086';\n}\n.sula-icon.ph-arrow-u-right-up:before {\n content: '\\e088';\n}\n.sula-icon.ph-arrow-u-up-left:before {\n content: '\\e08a';\n}\n.sula-icon.ph-arrow-u-up-right:before {\n content: '\\e08c';\n}\n.sula-icon.ph-arrow-up:before {\n content: '\\e08e';\n}\n.sula-icon.ph-arrow-up-left:before {\n content: '\\e090';\n}\n.sula-icon.ph-arrow-up-right:before {\n content: '\\e092';\n}\n.sula-icon.ph-arrows-clockwise:before {\n content: '\\e094';\n}\n.sula-icon.ph-arrows-counter-clockwise:before {\n content: '\\e096';\n}\n.sula-icon.ph-arrows-down-up:before {\n content: '\\e098';\n}\n.sula-icon.ph-arrows-horizontal:before {\n content: '\\eb06';\n}\n.sula-icon.ph-arrows-in:before {\n content: '\\e09a';\n}\n.sula-icon.ph-arrows-in-cardinal:before {\n content: '\\e09c';\n}\n.sula-icon.ph-arrows-in-line-horizontal:before {\n content: '\\e530';\n}\n.sula-icon.ph-arrows-in-line-vertical:before {\n content: '\\e532';\n}\n.sula-icon.ph-arrows-in-simple:before {\n content: '\\e09e';\n}\n.sula-icon.ph-arrows-left-right:before {\n content: '\\e0a0';\n}\n.sula-icon.ph-arrows-merge:before {\n content: '\\ed3e';\n}\n.sula-icon.ph-arrows-out:before {\n content: '\\e0a2';\n}\n.sula-icon.ph-arrows-out-cardinal:before {\n content: '\\e0a4';\n}\n.sula-icon.ph-arrows-out-line-horizontal:before {\n content: '\\e534';\n}\n.sula-icon.ph-arrows-out-line-vertical:before {\n content: '\\e536';\n}\n.sula-icon.ph-arrows-out-simple:before {\n content: '\\e0a6';\n}\n.sula-icon.ph-arrows-split:before {\n content: '\\ed3c';\n}\n.sula-icon.ph-arrows-vertical:before {\n content: '\\eb04';\n}\n.sula-icon.ph-article:before {\n content: '\\e0a8';\n}\n.sula-icon.ph-article-medium:before {\n content: '\\e5e0';\n}\n.sula-icon.ph-article-ny-times:before {\n content: '\\e5e2';\n}\n.sula-icon.ph-asclepius:before {\n content: '\\ee34';\n}\n.sula-icon.ph-caduceus:before {\n content: '\\ee34';\n}\n.sula-icon.ph-asterisk:before {\n content: '\\e0aa';\n}\n.sula-icon.ph-asterisk-simple:before {\n content: '\\e832';\n}\n.sula-icon.ph-at:before {\n content: '\\e0ac';\n}\n.sula-icon.ph-atom:before {\n content: '\\e5e4';\n}\n.sula-icon.ph-avocado:before {\n content: '\\ee04';\n}\n.sula-icon.ph-axe:before {\n content: '\\e9fc';\n}\n.sula-icon.ph-baby:before {\n content: '\\e774';\n}\n.sula-icon.ph-baby-carriage:before {\n content: '\\e818';\n}\n.sula-icon.ph-backpack:before {\n content: '\\e922';\n}\n.sula-icon.ph-backspace:before {\n content: '\\e0ae';\n}\n.sula-icon.ph-bag:before {\n content: '\\e0b0';\n}\n.sula-icon.ph-bag-simple:before {\n content: '\\e5e6';\n}\n.sula-icon.ph-balloon:before {\n content: '\\e76c';\n}\n.sula-icon.ph-bandaids:before {\n content: '\\e0b2';\n}\n.sula-icon.ph-bank:before {\n content: '\\e0b4';\n}\n.sula-icon.ph-barbell:before {\n content: '\\e0b6';\n}\n.sula-icon.ph-barcode:before {\n content: '\\e0b8';\n}\n.sula-icon.ph-barn:before {\n content: '\\ec72';\n}\n.sula-icon.ph-barricade:before {\n content: '\\e948';\n}\n.sula-icon.ph-baseball:before {\n content: '\\e71a';\n}\n.sula-icon.ph-baseball-cap:before {\n content: '\\ea28';\n}\n.sula-icon.ph-baseball-helmet:before {\n content: '\\ee4a';\n}\n.sula-icon.ph-basket:before {\n content: '\\e964';\n}\n.sula-icon.ph-basketball:before {\n content: '\\e724';\n}\n.sula-icon.ph-bathtub:before {\n content: '\\e81e';\n}\n.sula-icon.ph-battery-charging:before {\n content: '\\e0ba';\n}\n.sula-icon.ph-battery-charging-vertical:before {\n content: '\\e0bc';\n}\n.sula-icon.ph-battery-empty:before {\n content: '\\e0be';\n}\n.sula-icon.ph-battery-full:before {\n content: '\\e0c0';\n}\n.sula-icon.ph-battery-high:before {\n content: '\\e0c2';\n}\n.sula-icon.ph-battery-low:before {\n content: '\\e0c4';\n}\n.sula-icon.ph-battery-medium:before {\n content: '\\e0c6';\n}\n.sula-icon.ph-battery-plus:before {\n content: '\\e808';\n}\n.sula-icon.ph-battery-plus-vertical:before {\n content: '\\ec50';\n}\n.sula-icon.ph-battery-vertical-empty:before {\n content: '\\e7c6';\n}\n.sula-icon.ph-battery-vertical-full:before {\n content: '\\e7c4';\n}\n.sula-icon.ph-battery-vertical-high:before {\n content: '\\e7c2';\n}\n.sula-icon.ph-battery-vertical-low:before {\n content: '\\e7be';\n}\n.sula-icon.ph-battery-vertical-medium:before {\n content: '\\e7c0';\n}\n.sula-icon.ph-battery-warning:before {\n content: '\\e0c8';\n}\n.sula-icon.ph-battery-warning-vertical:before {\n content: '\\e0ca';\n}\n.sula-icon.ph-beach-ball:before {\n content: '\\ed24';\n}\n.sula-icon.ph-beanie:before {\n content: '\\ea2a';\n}\n.sula-icon.ph-bed:before {\n content: '\\e0cc';\n}\n.sula-icon.ph-beer-bottle:before {\n content: '\\e7b0';\n}\n.sula-icon.ph-beer-stein:before {\n content: '\\eb62';\n}\n.sula-icon.ph-behance-logo:before {\n content: '\\e7f4';\n}\n.sula-icon.ph-bell:before {\n content: '\\e0ce';\n}\n.sula-icon.ph-bell-ringing:before {\n content: '\\e5e8';\n}\n.sula-icon.ph-bell-simple:before {\n content: '\\e0d0';\n}\n.sula-icon.ph-bell-simple-ringing:before {\n content: '\\e5ea';\n}\n.sula-icon.ph-bell-simple-slash:before {\n content: '\\e0d2';\n}\n.sula-icon.ph-bell-simple-z:before {\n content: '\\e5ec';\n}\n.sula-icon.ph-bell-slash:before {\n content: '\\e0d4';\n}\n.sula-icon.ph-bell-z:before {\n content: '\\e5ee';\n}\n.sula-icon.ph-belt:before {\n content: '\\ea2c';\n}\n.sula-icon.ph-bezier-curve:before {\n content: '\\eb00';\n}\n.sula-icon.ph-bicycle:before {\n content: '\\e0d6';\n}\n.sula-icon.ph-binary:before {\n content: '\\ee60';\n}\n.sula-icon.ph-binoculars:before {\n content: '\\ea64';\n}\n.sula-icon.ph-biohazard:before {\n content: '\\e9e0';\n}\n.sula-icon.ph-bird:before {\n content: '\\e72c';\n}\n.sula-icon.ph-blueprint:before {\n content: '\\eda0';\n}\n.sula-icon.ph-bluetooth:before {\n content: '\\e0da';\n}\n.sula-icon.ph-bluetooth-connected:before {\n content: '\\e0dc';\n}\n.sula-icon.ph-bluetooth-slash:before {\n content: '\\e0de';\n}\n.sula-icon.ph-bluetooth-x:before {\n content: '\\e0e0';\n}\n.sula-icon.ph-boat:before {\n content: '\\e786';\n}\n.sula-icon.ph-bomb:before {\n content: '\\ee0a';\n}\n.sula-icon.ph-bone:before {\n content: '\\e7f2';\n}\n.sula-icon.ph-book:before {\n content: '\\e0e2';\n}\n.sula-icon.ph-book-bookmark:before {\n content: '\\e0e4';\n}\n.sula-icon.ph-book-open:before {\n content: '\\e0e6';\n}\n.sula-icon.ph-book-open-text:before {\n content: '\\e8f2';\n}\n.sula-icon.ph-book-open-user:before {\n content: '\\ede0';\n}\n.sula-icon.ph-bookmark:before {\n content: '\\e0e8';\n}\n.sula-icon.ph-bookmark-simple:before {\n content: '\\e0ea';\n}\n.sula-icon.ph-bookmarks:before {\n content: '\\e0ec';\n}\n.sula-icon.ph-bookmarks-simple:before {\n content: '\\e5f0';\n}\n.sula-icon.ph-books:before {\n content: '\\e758';\n}\n.sula-icon.ph-boot:before {\n content: '\\ecca';\n}\n.sula-icon.ph-boules:before {\n content: '\\e722';\n}\n.sula-icon.ph-bounding-box:before {\n content: '\\e6ce';\n}\n.sula-icon.ph-bowl-food:before {\n content: '\\eaa4';\n}\n.sula-icon.ph-bowl-steam:before {\n content: '\\e8e4';\n}\n.sula-icon.ph-bowling-ball:before {\n content: '\\ea34';\n}\n.sula-icon.ph-box-arrow-down:before {\n content: '\\e00e';\n}\n.sula-icon.ph-archive-box:before {\n content: '\\e00e';\n}\n.sula-icon.ph-box-arrow-up:before {\n content: '\\ee54';\n}\n.sula-icon.ph-boxing-glove:before {\n content: '\\ea36';\n}\n.sula-icon.ph-brackets-angle:before {\n content: '\\e862';\n}\n.sula-icon.ph-brackets-curly:before {\n content: '\\e860';\n}\n.sula-icon.ph-brackets-round:before {\n content: '\\e864';\n}\n.sula-icon.ph-brackets-square:before {\n content: '\\e85e';\n}\n.sula-icon.ph-brain:before {\n content: '\\e74e';\n}\n.sula-icon.ph-brandy:before {\n content: '\\e6b4';\n}\n.sula-icon.ph-bread:before {\n content: '\\e81c';\n}\n.sula-icon.ph-bridge:before {\n content: '\\ea68';\n}\n.sula-icon.ph-briefcase:before {\n content: '\\e0ee';\n}\n.sula-icon.ph-briefcase-metal:before {\n content: '\\e5f2';\n}\n.sula-icon.ph-broadcast:before {\n content: '\\e0f2';\n}\n.sula-icon.ph-broom:before {\n content: '\\ec54';\n}\n.sula-icon.ph-browser:before {\n content: '\\e0f4';\n}\n.sula-icon.ph-browsers:before {\n content: '\\e0f6';\n}\n.sula-icon.ph-bug:before {\n content: '\\e5f4';\n}\n.sula-icon.ph-bug-beetle:before {\n content: '\\e5f6';\n}\n.sula-icon.ph-bug-droid:before {\n content: '\\e5f8';\n}\n.sula-icon.ph-building:before {\n content: '\\e100';\n}\n.sula-icon.ph-building-apartment:before {\n content: '\\e0fe';\n}\n.sula-icon.ph-building-office:before {\n content: '\\e0ff';\n}\n.sula-icon.ph-buildings:before {\n content: '\\e102';\n}\n.sula-icon.ph-bulldozer:before {\n content: '\\ec6c';\n}\n.sula-icon.ph-bus:before {\n content: '\\e106';\n}\n.sula-icon.ph-butterfly:before {\n content: '\\ea6e';\n}\n.sula-icon.ph-cable-car:before {\n content: '\\e49c';\n}\n.sula-icon.ph-cactus:before {\n content: '\\e918';\n}\n.sula-icon.ph-cake:before {\n content: '\\e780';\n}\n.sula-icon.ph-calculator:before {\n content: '\\e538';\n}\n.sula-icon.ph-calendar:before {\n content: '\\e108';\n}\n.sula-icon.ph-calendar-blank:before {\n content: '\\e10a';\n}\n.sula-icon.ph-calendar-check:before {\n content: '\\e712';\n}\n.sula-icon.ph-calendar-dot:before {\n content: '\\e7b2';\n}\n.sula-icon.ph-calendar-dots:before {\n content: '\\e7b4';\n}\n.sula-icon.ph-calendar-heart:before {\n content: '\\e8b0';\n}\n.sula-icon.ph-calendar-minus:before {\n content: '\\ea14';\n}\n.sula-icon.ph-calendar-plus:before {\n content: '\\e714';\n}\n.sula-icon.ph-calendar-slash:before {\n content: '\\ea12';\n}\n.sula-icon.ph-calendar-star:before {\n content: '\\e8b2';\n}\n.sula-icon.ph-calendar-x:before {\n content: '\\e10c';\n}\n.sula-icon.ph-call-bell:before {\n content: '\\e7de';\n}\n.sula-icon.ph-camera:before {\n content: '\\e10e';\n}\n.sula-icon.ph-camera-plus:before {\n content: '\\ec58';\n}\n.sula-icon.ph-camera-rotate:before {\n content: '\\e7a4';\n}\n.sula-icon.ph-camera-slash:before {\n content: '\\e110';\n}\n.sula-icon.ph-campfire:before {\n content: '\\e9d8';\n}\n.sula-icon.ph-car:before {\n content: '\\e112';\n}\n.sula-icon.ph-car-battery:before {\n content: '\\ee30';\n}\n.sula-icon.ph-car-profile:before {\n content: '\\e8cc';\n}\n.sula-icon.ph-car-simple:before {\n content: '\\e114';\n}\n.sula-icon.ph-cardholder:before {\n content: '\\e5fa';\n}\n.sula-icon.ph-cards:before {\n content: '\\e0f8';\n}\n.sula-icon.ph-cards-three:before {\n content: '\\ee50';\n}\n.sula-icon.ph-caret-circle-double-down:before {\n content: '\\e116';\n}\n.sula-icon.ph-caret-circle-double-left:before {\n content: '\\e118';\n}\n.sula-icon.ph-caret-circle-double-right:before {\n content: '\\e11a';\n}\n.sula-icon.ph-caret-circle-double-up:before {\n content: '\\e11c';\n}\n.sula-icon.ph-caret-circle-down:before {\n content: '\\e11e';\n}\n.sula-icon.ph-caret-circle-left:before {\n content: '\\e120';\n}\n.sula-icon.ph-caret-circle-right:before {\n content: '\\e122';\n}\n.sula-icon.ph-caret-circle-up:before {\n content: '\\e124';\n}\n.sula-icon.ph-caret-circle-up-down:before {\n content: '\\e13e';\n}\n.sula-icon.ph-caret-double-down:before {\n content: '\\e126';\n}\n.sula-icon.ph-caret-double-left:before {\n content: '\\e128';\n}\n.sula-icon.ph-caret-double-right:before {\n content: '\\e12a';\n}\n.sula-icon.ph-caret-double-up:before {\n content: '\\e12c';\n}\n.sula-icon.ph-caret-down:before {\n content: '\\e136';\n}\n.sula-icon.ph-caret-left:before {\n content: '\\e138';\n}\n.sula-icon.ph-caret-line-down:before {\n content: '\\e134';\n}\n.sula-icon.ph-caret-line-left:before {\n content: '\\e132';\n}\n.sula-icon.ph-caret-line-right:before {\n content: '\\e130';\n}\n.sula-icon.ph-caret-line-up:before {\n content: '\\e12e';\n}\n.sula-icon.ph-caret-right:before {\n content: '\\e13a';\n}\n.sula-icon.ph-caret-up:before {\n content: '\\e13c';\n}\n.sula-icon.ph-caret-up-down:before {\n content: '\\e140';\n}\n.sula-icon.ph-carrot:before {\n content: '\\ed38';\n}\n.sula-icon.ph-cash-register:before {\n content: '\\ed80';\n}\n.sula-icon.ph-cassette-tape:before {\n content: '\\ed2e';\n}\n.sula-icon.ph-castle-turret:before {\n content: '\\e9d0';\n}\n.sula-icon.ph-cat:before {\n content: '\\e748';\n}\n.sula-icon.ph-cell-signal-full:before {\n content: '\\e142';\n}\n.sula-icon.ph-cell-signal-high:before {\n content: '\\e144';\n}\n.sula-icon.ph-cell-signal-low:before {\n content: '\\e146';\n}\n.sula-icon.ph-cell-signal-medium:before {\n content: '\\e148';\n}\n.sula-icon.ph-cell-signal-none:before {\n content: '\\e14a';\n}\n.sula-icon.ph-cell-signal-slash:before {\n content: '\\e14c';\n}\n.sula-icon.ph-cell-signal-x:before {\n content: '\\e14e';\n}\n.sula-icon.ph-cell-tower:before {\n content: '\\ebaa';\n}\n.sula-icon.ph-certificate:before {\n content: '\\e766';\n}\n.sula-icon.ph-chair:before {\n content: '\\e950';\n}\n.sula-icon.ph-chalkboard:before {\n content: '\\e5fc';\n}\n.sula-icon.ph-chalkboard-simple:before {\n content: '\\e5fe';\n}\n.sula-icon.ph-chalkboard-teacher:before {\n content: '\\e600';\n}\n.sula-icon.ph-champagne:before {\n content: '\\eaca';\n}\n.sula-icon.ph-charging-station:before {\n content: '\\e8d0';\n}\n.sula-icon.ph-chart-bar:before {\n content: '\\e150';\n}\n.sula-icon.ph-chart-bar-horizontal:before {\n content: '\\e152';\n}\n.sula-icon.ph-chart-donut:before {\n content: '\\eaa6';\n}\n.sula-icon.ph-chart-line:before {\n content: '\\e154';\n}\n.sula-icon.ph-chart-line-down:before {\n content: '\\e8b6';\n}\n.sula-icon.ph-chart-line-up:before {\n content: '\\e156';\n}\n.sula-icon.ph-chart-pie:before {\n content: '\\e158';\n}\n.sula-icon.ph-chart-pie-slice:before {\n content: '\\e15a';\n}\n.sula-icon.ph-chart-polar:before {\n content: '\\eaa8';\n}\n.sula-icon.ph-chart-scatter:before {\n content: '\\eaac';\n}\n.sula-icon.ph-chat:before {\n content: '\\e15c';\n}\n.sula-icon.ph-chat-centered:before {\n content: '\\e160';\n}\n.sula-icon.ph-chat-centered-dots:before {\n content: '\\e164';\n}\n.sula-icon.ph-chat-centered-slash:before {\n content: '\\e162';\n}\n.sula-icon.ph-chat-centered-text:before {\n content: '\\e166';\n}\n.sula-icon.ph-chat-circle:before {\n content: '\\e168';\n}\n.sula-icon.ph-chat-circle-dots:before {\n content: '\\e16c';\n}\n.sula-icon.ph-chat-circle-slash:before {\n content: '\\e16a';\n}\n.sula-icon.ph-chat-circle-text:before {\n content: '\\e16e';\n}\n.sula-icon.ph-chat-dots:before {\n content: '\\e170';\n}\n.sula-icon.ph-chat-slash:before {\n content: '\\e15e';\n}\n.sula-icon.ph-chat-teardrop:before {\n content: '\\e172';\n}\n.sula-icon.ph-chat-teardrop-dots:before {\n content: '\\e176';\n}\n.sula-icon.ph-chat-teardrop-slash:before {\n content: '\\e174';\n}\n.sula-icon.ph-chat-teardrop-text:before {\n content: '\\e178';\n}\n.sula-icon.ph-chat-text:before {\n content: '\\e17a';\n}\n.sula-icon.ph-chats:before {\n content: '\\e17c';\n}\n.sula-icon.ph-chats-circle:before {\n content: '\\e17e';\n}\n.sula-icon.ph-chats-teardrop:before {\n content: '\\e180';\n}\n.sula-icon.ph-check:before {\n content: '\\e182';\n}\n.sula-icon.ph-check-circle:before {\n content: '\\e184';\n}\n.sula-icon.ph-check-fat:before {\n content: '\\eba6';\n}\n.sula-icon.ph-check-square:before {\n content: '\\e186';\n}\n.sula-icon.ph-check-square-offset:before {\n content: '\\e188';\n}\n.sula-icon.ph-checkerboard:before {\n content: '\\e8c4';\n}\n.sula-icon.ph-checks:before {\n content: '\\e53a';\n}\n.sula-icon.ph-cheers:before {\n content: '\\ea4a';\n}\n.sula-icon.ph-cheese:before {\n content: '\\e9fe';\n}\n.sula-icon.ph-chef-hat:before {\n content: '\\ed8e';\n}\n.sula-icon.ph-cherries:before {\n content: '\\e830';\n}\n.sula-icon.ph-church:before {\n content: '\\ecea';\n}\n.sula-icon.ph-cigarette:before {\n content: '\\ed90';\n}\n.sula-icon.ph-cigarette-slash:before {\n content: '\\ed92';\n}\n.sula-icon.ph-circle:before {\n content: '\\e18a';\n}\n.sula-icon.ph-circle-dashed:before {\n content: '\\e602';\n}\n.sula-icon.ph-circle-half:before {\n content: '\\e18c';\n}\n.sula-icon.ph-circle-half-tilt:before {\n content: '\\e18e';\n}\n.sula-icon.ph-circle-notch:before {\n content: '\\eb44';\n}\n.sula-icon.ph-circles-four:before {\n content: '\\e190';\n}\n.sula-icon.ph-circles-three:before {\n content: '\\e192';\n}\n.sula-icon.ph-circles-three-plus:before {\n content: '\\e194';\n}\n.sula-icon.ph-circuitry:before {\n content: '\\e9c2';\n}\n.sula-icon.ph-city:before {\n content: '\\ea6a';\n}\n.sula-icon.ph-clipboard:before {\n content: '\\e196';\n}\n.sula-icon.ph-clipboard-text:before {\n content: '\\e198';\n}\n.sula-icon.ph-clock:before {\n content: '\\e19a';\n}\n.sula-icon.ph-clock-afternoon:before {\n content: '\\e19c';\n}\n.sula-icon.ph-clock-clockwise:before {\n content: '\\e19e';\n}\n.sula-icon.ph-clock-countdown:before {\n content: '\\ed2c';\n}\n.sula-icon.ph-clock-counter-clockwise:before {\n content: '\\e1a0';\n}\n.sula-icon.ph-clock-user:before {\n content: '\\edec';\n}\n.sula-icon.ph-closed-captioning:before {\n content: '\\e1a4';\n}\n.sula-icon.ph-cloud:before {\n content: '\\e1aa';\n}\n.sula-icon.ph-cloud-arrow-down:before {\n content: '\\e1ac';\n}\n.sula-icon.ph-cloud-arrow-up:before {\n content: '\\e1ae';\n}\n.sula-icon.ph-cloud-check:before {\n content: '\\e1b0';\n}\n.sula-icon.ph-cloud-fog:before {\n content: '\\e53c';\n}\n.sula-icon.ph-cloud-lightning:before {\n content: '\\e1b2';\n}\n.sula-icon.ph-cloud-moon:before {\n content: '\\e53e';\n}\n.sula-icon.ph-cloud-rain:before {\n content: '\\e1b4';\n}\n.sula-icon.ph-cloud-slash:before {\n content: '\\e1b6';\n}\n.sula-icon.ph-cloud-snow:before {\n content: '\\e1b8';\n}\n.sula-icon.ph-cloud-sun:before {\n content: '\\e540';\n}\n.sula-icon.ph-cloud-warning:before {\n content: '\\ea98';\n}\n.sula-icon.ph-cloud-x:before {\n content: '\\ea96';\n}\n.sula-icon.ph-clover:before {\n content: '\\edc8';\n}\n.sula-icon.ph-club:before {\n content: '\\e1ba';\n}\n.sula-icon.ph-coat-hanger:before {\n content: '\\e7fe';\n}\n.sula-icon.ph-coda-logo:before {\n content: '\\e7ce';\n}\n.sula-icon.ph-code:before {\n content: '\\e1bc';\n}\n.sula-icon.ph-code-block:before {\n content: '\\eafe';\n}\n.sula-icon.ph-code-simple:before {\n content: '\\e1be';\n}\n.sula-icon.ph-codepen-logo:before {\n content: '\\e978';\n}\n.sula-icon.ph-codesandbox-logo:before {\n content: '\\ea06';\n}\n.sula-icon.ph-coffee:before {\n content: '\\e1c2';\n}\n.sula-icon.ph-coffee-bean:before {\n content: '\\e1c0';\n}\n.sula-icon.ph-coin:before {\n content: '\\e60e';\n}\n.sula-icon.ph-coin-vertical:before {\n content: '\\eb48';\n}\n.sula-icon.ph-coins:before {\n content: '\\e78e';\n}\n.sula-icon.ph-columns:before {\n content: '\\e546';\n}\n.sula-icon.ph-columns-plus-left:before {\n content: '\\e544';\n}\n.sula-icon.ph-columns-plus-right:before {\n content: '\\e542';\n}\n.sula-icon.ph-command:before {\n content: '\\e1c4';\n}\n.sula-icon.ph-compass:before {\n content: '\\e1c8';\n}\n.sula-icon.ph-compass-rose:before {\n content: '\\e1c6';\n}\n.sula-icon.ph-compass-tool:before {\n content: '\\ea0e';\n}\n.sula-icon.ph-computer-tower:before {\n content: '\\e548';\n}\n.sula-icon.ph-confetti:before {\n content: '\\e81a';\n}\n.sula-icon.ph-contactless-payment:before {\n content: '\\ed42';\n}\n.sula-icon.ph-control:before {\n content: '\\eca6';\n}\n.sula-icon.ph-cookie:before {\n content: '\\e6ca';\n}\n.sula-icon.ph-cooking-pot:before {\n content: '\\e764';\n}\n.sula-icon.ph-copy:before {\n content: '\\e1ca';\n}\n.sula-icon.ph-copy-simple:before {\n content: '\\e1cc';\n}\n.sula-icon.ph-copyleft:before {\n content: '\\e86a';\n}\n.sula-icon.ph-copyright:before {\n content: '\\e54a';\n}\n.sula-icon.ph-corners-in:before {\n content: '\\e1ce';\n}\n.sula-icon.ph-corners-out:before {\n content: '\\e1d0';\n}\n.sula-icon.ph-couch:before {\n content: '\\e7f6';\n}\n.sula-icon.ph-court-basketball:before {\n content: '\\ee36';\n}\n.sula-icon.ph-cow:before {\n content: '\\eabe';\n}\n.sula-icon.ph-cowboy-hat:before {\n content: '\\ed12';\n}\n.sula-icon.ph-cpu:before {\n content: '\\e610';\n}\n.sula-icon.ph-crane:before {\n content: '\\ed48';\n}\n.sula-icon.ph-crane-tower:before {\n content: '\\ed49';\n}\n.sula-icon.ph-credit-card:before {\n content: '\\e1d2';\n}\n.sula-icon.ph-cricket:before {\n content: '\\ee12';\n}\n.sula-icon.ph-crop:before {\n content: '\\e1d4';\n}\n.sula-icon.ph-cross:before {\n content: '\\e8a0';\n}\n.sula-icon.ph-crosshair:before {\n content: '\\e1d6';\n}\n.sula-icon.ph-crosshair-simple:before {\n content: '\\e1d8';\n}\n.sula-icon.ph-crown:before {\n content: '\\e614';\n}\n.sula-icon.ph-crown-cross:before {\n content: '\\ee5e';\n}\n.sula-icon.ph-crown-simple:before {\n content: '\\e616';\n}\n.sula-icon.ph-cube:before {\n content: '\\e1da';\n}\n.sula-icon.ph-cube-focus:before {\n content: '\\ed0a';\n}\n.sula-icon.ph-cube-transparent:before {\n content: '\\ec7c';\n}\n.sula-icon.ph-currency-btc:before {\n content: '\\e618';\n}\n.sula-icon.ph-currency-circle-dollar:before {\n content: '\\e54c';\n}\n.sula-icon.ph-currency-cny:before {\n content: '\\e54e';\n}\n.sula-icon.ph-currency-dollar:before {\n content: '\\e550';\n}\n.sula-icon.ph-currency-dollar-simple:before {\n content: '\\e552';\n}\n.sula-icon.ph-currency-eth:before {\n content: '\\eada';\n}\n.sula-icon.ph-currency-eur:before {\n content: '\\e554';\n}\n.sula-icon.ph-currency-gbp:before {\n content: '\\e556';\n}\n.sula-icon.ph-currency-inr:before {\n content: '\\e558';\n}\n.sula-icon.ph-currency-jpy:before {\n content: '\\e55a';\n}\n.sula-icon.ph-currency-krw:before {\n content: '\\e55c';\n}\n.sula-icon.ph-currency-kzt:before {\n content: '\\ec4c';\n}\n.sula-icon.ph-currency-ngn:before {\n content: '\\eb52';\n}\n.sula-icon.ph-currency-rub:before {\n content: '\\e55e';\n}\n.sula-icon.ph-cursor:before {\n content: '\\e1dc';\n}\n.sula-icon.ph-cursor-click:before {\n content: '\\e7c8';\n}\n.sula-icon.ph-cursor-text:before {\n content: '\\e7d8';\n}\n.sula-icon.ph-cylinder:before {\n content: '\\e8fc';\n}\n.sula-icon.ph-database:before {\n content: '\\e1de';\n}\n.sula-icon.ph-desk:before {\n content: '\\ed16';\n}\n.sula-icon.ph-desktop:before {\n content: '\\e560';\n}\n.sula-icon.ph-desktop-tower:before {\n content: '\\e562';\n}\n.sula-icon.ph-detective:before {\n content: '\\e83e';\n}\n.sula-icon.ph-dev-to-logo:before {\n content: '\\ed0e';\n}\n.sula-icon.ph-device-mobile:before {\n content: '\\e1e0';\n}\n.sula-icon.ph-device-mobile-camera:before {\n content: '\\e1e2';\n}\n.sula-icon.ph-device-mobile-slash:before {\n content: '\\ee46';\n}\n.sula-icon.ph-device-mobile-speaker:before {\n content: '\\e1e4';\n}\n.sula-icon.ph-device-rotate:before {\n content: '\\edf2';\n}\n.sula-icon.ph-device-tablet:before {\n content: '\\e1e6';\n}\n.sula-icon.ph-device-tablet-camera:before {\n content: '\\e1e8';\n}\n.sula-icon.ph-device-tablet-speaker:before {\n content: '\\e1ea';\n}\n.sula-icon.ph-devices:before {\n content: '\\eba4';\n}\n.sula-icon.ph-diamond:before {\n content: '\\e1ec';\n}\n.sula-icon.ph-diamonds-four:before {\n content: '\\e8f4';\n}\n.sula-icon.ph-dice-five:before {\n content: '\\e1ee';\n}\n.sula-icon.ph-dice-four:before {\n content: '\\e1f0';\n}\n.sula-icon.ph-dice-one:before {\n content: '\\e1f2';\n}\n.sula-icon.ph-dice-six:before {\n content: '\\e1f4';\n}\n.sula-icon.ph-dice-three:before {\n content: '\\e1f6';\n}\n.sula-icon.ph-dice-two:before {\n content: '\\e1f8';\n}\n.sula-icon.ph-disc:before {\n content: '\\e564';\n}\n.sula-icon.ph-disco-ball:before {\n content: '\\ed98';\n}\n.sula-icon.ph-discord-logo:before {\n content: '\\e61a';\n}\n.sula-icon.ph-divide:before {\n content: '\\e1fa';\n}\n.sula-icon.ph-dna:before {\n content: '\\e924';\n}\n.sula-icon.ph-dog:before {\n content: '\\e74a';\n}\n.sula-icon.ph-door:before {\n content: '\\e61c';\n}\n.sula-icon.ph-door-open:before {\n content: '\\e7e6';\n}\n.sula-icon.ph-dot:before {\n content: '\\ecde';\n}\n.sula-icon.ph-dot-outline:before {\n content: '\\ece0';\n}\n.sula-icon.ph-dots-nine:before {\n content: '\\e1fc';\n}\n.sula-icon.ph-dots-six:before {\n content: '\\e794';\n}\n.sula-icon.ph-dots-six-vertical:before {\n content: '\\eae2';\n}\n.sula-icon.ph-dots-three:before {\n content: '\\e1fe';\n}\n.sula-icon.ph-dots-three-circle:before {\n content: '\\e200';\n}\n.sula-icon.ph-dots-three-circle-vertical:before {\n content: '\\e202';\n}\n.sula-icon.ph-dots-three-outline:before {\n content: '\\e204';\n}\n.sula-icon.ph-dots-three-outline-vertical:before {\n content: '\\e206';\n}\n.sula-icon.ph-dots-three-vertical:before {\n content: '\\e208';\n}\n.sula-icon.ph-download:before {\n content: '\\e20a';\n}\n.sula-icon.ph-download-simple:before {\n content: '\\e20c';\n}\n.sula-icon.ph-dress:before {\n content: '\\ea7e';\n}\n.sula-icon.ph-dresser:before {\n content: '\\e94e';\n}\n.sula-icon.ph-dribbble-logo:before {\n content: '\\e20e';\n}\n.sula-icon.ph-drone:before {\n content: '\\ed74';\n}\n.sula-icon.ph-drop:before {\n content: '\\e210';\n}\n.sula-icon.ph-drop-half:before {\n content: '\\e566';\n}\n.sula-icon.ph-drop-half-bottom:before {\n content: '\\eb40';\n}\n.sula-icon.ph-drop-simple:before {\n content: '\\ee32';\n}\n.sula-icon.ph-drop-slash:before {\n content: '\\e954';\n}\n.sula-icon.ph-dropbox-logo:before {\n content: '\\e7d0';\n}\n.sula-icon.ph-ear:before {\n content: '\\e70c';\n}\n.sula-icon.ph-ear-slash:before {\n content: '\\e70e';\n}\n.sula-icon.ph-egg:before {\n content: '\\e812';\n}\n.sula-icon.ph-egg-crack:before {\n content: '\\eb64';\n}\n.sula-icon.ph-eject:before {\n content: '\\e212';\n}\n.sula-icon.ph-eject-simple:before {\n content: '\\e6ae';\n}\n.sula-icon.ph-elevator:before {\n content: '\\ecc0';\n}\n.sula-icon.ph-empty:before {\n content: '\\edbc';\n}\n.sula-icon.ph-engine:before {\n content: '\\ea80';\n}\n.sula-icon.ph-envelope:before {\n content: '\\e214';\n}\n.sula-icon.ph-envelope-open:before {\n content: '\\e216';\n}\n.sula-icon.ph-envelope-simple:before {\n content: '\\e218';\n}\n.sula-icon.ph-envelope-simple-open:before {\n content: '\\e21a';\n}\n.sula-icon.ph-equalizer:before {\n content: '\\ebbc';\n}\n.sula-icon.ph-equals:before {\n content: '\\e21c';\n}\n.sula-icon.ph-eraser:before {\n content: '\\e21e';\n}\n.sula-icon.ph-escalator-down:before {\n content: '\\ecba';\n}\n.sula-icon.ph-escalator-up:before {\n content: '\\ecbc';\n}\n.sula-icon.ph-exam:before {\n content: '\\e742';\n}\n.sula-icon.ph-exclamation-mark:before {\n content: '\\ee44';\n}\n.sula-icon.ph-exclude:before {\n content: '\\e882';\n}\n.sula-icon.ph-exclude-square:before {\n content: '\\e880';\n}\n.sula-icon.ph-export:before {\n content: '\\eaf0';\n}\n.sula-icon.ph-eye:before {\n content: '\\e220';\n}\n.sula-icon.ph-eye-closed:before {\n content: '\\e222';\n}\n.sula-icon.ph-eye-slash:before {\n content: '\\e224';\n}\n.sula-icon.ph-eyedropper:before {\n content: '\\e568';\n}\n.sula-icon.ph-eyedropper-sample:before {\n content: '\\eac4';\n}\n.sula-icon.ph-eyeglasses:before {\n content: '\\e7ba';\n}\n.sula-icon.ph-eyes:before {\n content: '\\ee5c';\n}\n.sula-icon.ph-face-mask:before {\n content: '\\e56a';\n}\n.sula-icon.ph-facebook-logo:before {\n content: '\\e226';\n}\n.sula-icon.ph-factory:before {\n content: '\\e760';\n}\n.sula-icon.ph-faders:before {\n content: '\\e228';\n}\n.sula-icon.ph-faders-horizontal:before {\n content: '\\e22a';\n}\n.sula-icon.ph-fallout-shelter:before {\n content: '\\e9de';\n}\n.sula-icon.ph-fan:before {\n content: '\\e9f2';\n}\n.sula-icon.ph-farm:before {\n content: '\\ec70';\n}\n.sula-icon.ph-fast-forward:before {\n content: '\\e6a6';\n}\n.sula-icon.ph-fast-forward-circle:before {\n content: '\\e22c';\n}\n.sula-icon.ph-feather:before {\n content: '\\e9c0';\n}\n.sula-icon.ph-fediverse-logo:before {\n content: '\\ed66';\n}\n.sula-icon.ph-figma-logo:before {\n content: '\\e22e';\n}\n.sula-icon.ph-file:before {\n content: '\\e230';\n}\n.sula-icon.ph-file-archive:before {\n content: '\\eb2a';\n}\n.sula-icon.ph-file-arrow-down:before {\n content: '\\e232';\n}\n.sula-icon.ph-file-arrow-up:before {\n content: '\\e61e';\n}\n.sula-icon.ph-file-audio:before {\n content: '\\ea20';\n}\n.sula-icon.ph-file-c:before {\n content: '\\eb32';\n}\n.sula-icon.ph-file-c-sharp:before {\n content: '\\eb30';\n}\n.sula-icon.ph-file-cloud:before {\n content: '\\e95e';\n}\n.sula-icon.ph-file-code:before {\n content: '\\e914';\n}\n.sula-icon.ph-file-cpp:before {\n content: '\\eb2e';\n}\n.sula-icon.ph-file-css:before {\n content: '\\eb34';\n}\n.sula-icon.ph-file-csv:before {\n content: '\\eb1c';\n}\n.sula-icon.ph-file-dashed:before {\n content: '\\e704';\n}\n.sula-icon.ph-file-dotted:before {\n content: '\\e704';\n}\n.sula-icon.ph-file-doc:before {\n content: '\\eb1e';\n}\n.sula-icon.ph-file-html:before {\n content: '\\eb38';\n}\n.sula-icon.ph-file-image:before {\n content: '\\ea24';\n}\n.sula-icon.ph-file-ini:before {\n content: '\\eb33';\n}\n.sula-icon.ph-file-jpg:before {\n content: '\\eb1a';\n}\n.sula-icon.ph-file-js:before {\n content: '\\eb24';\n}\n.sula-icon.ph-file-jsx:before {\n content: '\\eb3a';\n}\n.sula-icon.ph-file-lock:before {\n content: '\\e95c';\n}\n.sula-icon.ph-file-magnifying-glass:before {\n content: '\\e238';\n}\n.sula-icon.ph-file-search:before {\n content: '\\e238';\n}\n.sula-icon.ph-file-md:before {\n content: '\\ed50';\n}\n.sula-icon.ph-file-minus:before {\n content: '\\e234';\n}\n.sula-icon.ph-file-pdf:before {\n content: '\\e702';\n}\n.sula-icon.ph-file-plus:before {\n content: '\\e236';\n}\n.sula-icon.ph-file-png:before {\n content: '\\eb18';\n}\n.sula-icon.ph-file-ppt:before {\n content: '\\eb20';\n}\n.sula-icon.ph-file-py:before {\n content: '\\eb2c';\n}\n.sula-icon.ph-file-rs:before {\n content: '\\eb28';\n}\n.sula-icon.ph-file-sql:before {\n content: '\\ed4e';\n}\n.sula-icon.ph-file-svg:before {\n content: '\\ed08';\n}\n.sula-icon.ph-file-text:before {\n content: '\\e23a';\n}\n.sula-icon.ph-file-ts:before {\n content: '\\eb26';\n}\n.sula-icon.ph-file-tsx:before {\n content: '\\eb3c';\n}\n.sula-icon.ph-file-txt:before {\n content: '\\eb35';\n}\n.sula-icon.ph-file-video:before {\n content: '\\ea22';\n}\n.sula-icon.ph-file-vue:before {\n content: '\\eb3e';\n}\n.sula-icon.ph-file-x:before {\n content: '\\e23c';\n}\n.sula-icon.ph-file-xls:before {\n content: '\\eb22';\n}\n.sula-icon.ph-file-zip:before {\n content: '\\e958';\n}\n.sula-icon.ph-files:before {\n content: '\\e710';\n}\n.sula-icon.ph-film-reel:before {\n content: '\\e8c0';\n}\n.sula-icon.ph-film-script:before {\n content: '\\eb50';\n}\n.sula-icon.ph-film-slate:before {\n content: '\\e8c2';\n}\n.sula-icon.ph-film-strip:before {\n content: '\\e792';\n}\n.sula-icon.ph-fingerprint:before {\n content: '\\e23e';\n}\n.sula-icon.ph-fingerprint-simple:before {\n content: '\\e240';\n}\n.sula-icon.ph-finn-the-human:before {\n content: '\\e56c';\n}\n.sula-icon.ph-fire:before {\n content: '\\e242';\n}\n.sula-icon.ph-fire-extinguisher:before {\n content: '\\e9e8';\n}\n.sula-icon.ph-fire-simple:before {\n content: '\\e620';\n}\n.sula-icon.ph-fire-truck:before {\n content: '\\e574';\n}\n.sula-icon.ph-first-aid:before {\n content: '\\e56e';\n}\n.sula-icon.ph-first-aid-kit:before {\n content: '\\e570';\n}\n.sula-icon.ph-fish:before {\n content: '\\e728';\n}\n.sula-icon.ph-fish-simple:before {\n content: '\\e72a';\n}\n.sula-icon.ph-flag:before {\n content: '\\e244';\n}\n.sula-icon.ph-flag-banner:before {\n content: '\\e622';\n}\n.sula-icon.ph-flag-banner-fold:before {\n content: '\\ecf2';\n}\n.sula-icon.ph-flag-checkered:before {\n content: '\\ea38';\n}\n.sula-icon.ph-flag-pennant:before {\n content: '\\ecf0';\n}\n.sula-icon.ph-flame:before {\n content: '\\e624';\n}\n.sula-icon.ph-flashlight:before {\n content: '\\e246';\n}\n.sula-icon.ph-flask:before {\n content: '\\e79e';\n}\n.sula-icon.ph-flip-horizontal:before {\n content: '\\ed6a';\n}\n.sula-icon.ph-flip-vertical:before {\n content: '\\ed6c';\n}\n.sula-icon.ph-floppy-disk:before {\n content: '\\e248';\n}\n.sula-icon.ph-floppy-disk-back:before {\n content: '\\eaf4';\n}\n.sula-icon.ph-flow-arrow:before {\n content: '\\e6ec';\n}\n.sula-icon.ph-flower:before {\n content: '\\e75e';\n}\n.sula-icon.ph-flower-lotus:before {\n content: '\\e6cc';\n}\n.sula-icon.ph-flower-tulip:before {\n content: '\\eacc';\n}\n.sula-icon.ph-flying-saucer:before {\n content: '\\eb4a';\n}\n.sula-icon.ph-folder:before {\n content: '\\e24a';\n}\n.sula-icon.ph-folder-notch:before {\n content: '\\e24a';\n}\n.sula-icon.ph-folder-dashed:before {\n content: '\\e8f8';\n}\n.sula-icon.ph-folder-dotted:before {\n content: '\\e8f8';\n}\n.sula-icon.ph-folder-lock:before {\n content: '\\ea3c';\n}\n.sula-icon.ph-folder-minus:before {\n content: '\\e254';\n}\n.sula-icon.ph-folder-notch-minus:before {\n content: '\\e254';\n}\n.sula-icon.ph-folder-open:before {\n content: '\\e256';\n}\n.sula-icon.ph-folder-notch-open:before {\n content: '\\e256';\n}\n.sula-icon.ph-folder-plus:before {\n content: '\\e258';\n}\n.sula-icon.ph-folder-notch-plus:before {\n content: '\\e258';\n}\n.sula-icon.ph-folder-simple:before {\n content: '\\e25a';\n}\n.sula-icon.ph-folder-simple-dashed:before {\n content: '\\ec2a';\n}\n.sula-icon.ph-folder-simple-dotted:before {\n content: '\\ec2a';\n}\n.sula-icon.ph-folder-simple-lock:before {\n content: '\\eb5e';\n}\n.sula-icon.ph-folder-simple-minus:before {\n content: '\\e25c';\n}\n.sula-icon.ph-folder-simple-plus:before {\n content: '\\e25e';\n}\n.sula-icon.ph-folder-simple-star:before {\n content: '\\ec2e';\n}\n.sula-icon.ph-folder-simple-user:before {\n content: '\\eb60';\n}\n.sula-icon.ph-folder-star:before {\n content: '\\ea86';\n}\n.sula-icon.ph-folder-user:before {\n content: '\\eb46';\n}\n.sula-icon.ph-folders:before {\n content: '\\e260';\n}\n.sula-icon.ph-football:before {\n content: '\\e718';\n}\n.sula-icon.ph-football-helmet:before {\n content: '\\ee4c';\n}\n.sula-icon.ph-footprints:before {\n content: '\\ea88';\n}\n.sula-icon.ph-fork-knife:before {\n content: '\\e262';\n}\n.sula-icon.ph-four-k:before {\n content: '\\ea5c';\n}\n.sula-icon.ph-frame-corners:before {\n content: '\\e626';\n}\n.sula-icon.ph-framer-logo:before {\n content: '\\e264';\n}\n.sula-icon.ph-function:before {\n content: '\\ebe4';\n}\n.sula-icon.ph-funnel:before {\n content: '\\e266';\n}\n.sula-icon.ph-funnel-simple:before {\n content: '\\e268';\n}\n.sula-icon.ph-funnel-simple-x:before {\n content: '\\e26a';\n}\n.sula-icon.ph-funnel-x:before {\n content: '\\e26c';\n}\n.sula-icon.ph-game-controller:before {\n content: '\\e26e';\n}\n.sula-icon.ph-garage:before {\n content: '\\ecd6';\n}\n.sula-icon.ph-gas-can:before {\n content: '\\e8ce';\n}\n.sula-icon.ph-gas-pump:before {\n content: '\\e768';\n}\n.sula-icon.ph-gauge:before {\n content: '\\e628';\n}\n.sula-icon.ph-gavel:before {\n content: '\\ea32';\n}\n.sula-icon.ph-gear:before {\n content: '\\e270';\n}\n.sula-icon.ph-gear-fine:before {\n content: '\\e87c';\n}\n.sula-icon.ph-gear-six:before {\n content: '\\e272';\n}\n.sula-icon.ph-gender-female:before {\n content: '\\e6e0';\n}\n.sula-icon.ph-gender-intersex:before {\n content: '\\e6e6';\n}\n.sula-icon.ph-gender-male:before {\n content: '\\e6e2';\n}\n.sula-icon.ph-gender-neuter:before {\n content: '\\e6ea';\n}\n.sula-icon.ph-gender-nonbinary:before {\n content: '\\e6e4';\n}\n.sula-icon.ph-gender-transgender:before {\n content: '\\e6e8';\n}\n.sula-icon.ph-ghost:before {\n content: '\\e62a';\n}\n.sula-icon.ph-gif:before {\n content: '\\e274';\n}\n.sula-icon.ph-gift:before {\n content: '\\e276';\n}\n.sula-icon.ph-git-branch:before {\n content: '\\e278';\n}\n.sula-icon.ph-git-commit:before {\n content: '\\e27a';\n}\n.sula-icon.ph-git-diff:before {\n content: '\\e27c';\n}\n.sula-icon.ph-git-fork:before {\n content: '\\e27e';\n}\n.sula-icon.ph-git-merge:before {\n content: '\\e280';\n}\n.sula-icon.ph-git-pull-request:before {\n content: '\\e282';\n}\n.sula-icon.ph-github-logo:before {\n content: '\\e576';\n}\n.sula-icon.ph-gitlab-logo:before {\n content: '\\e694';\n}\n.sula-icon.ph-gitlab-logo-simple:before {\n content: '\\e696';\n}\n.sula-icon.ph-globe:before {\n content: '\\e288';\n}\n.sula-icon.ph-globe-hemisphere-east:before {\n content: '\\e28a';\n}\n.sula-icon.ph-globe-hemisphere-west:before {\n content: '\\e28c';\n}\n.sula-icon.ph-globe-simple:before {\n content: '\\e28e';\n}\n.sula-icon.ph-globe-simple-x:before {\n content: '\\e284';\n}\n.sula-icon.ph-globe-stand:before {\n content: '\\e290';\n}\n.sula-icon.ph-globe-x:before {\n content: '\\e286';\n}\n.sula-icon.ph-goggles:before {\n content: '\\ecb4';\n}\n.sula-icon.ph-golf:before {\n content: '\\ea3e';\n}\n.sula-icon.ph-goodreads-logo:before {\n content: '\\ed10';\n}\n.sula-icon.ph-google-cardboard-logo:before {\n content: '\\e7b6';\n}\n.sula-icon.ph-google-chrome-logo:before {\n content: '\\e976';\n}\n.sula-icon.ph-google-drive-logo:before {\n content: '\\e8f6';\n}\n.sula-icon.ph-google-logo:before {\n content: '\\e292';\n}\n.sula-icon.ph-google-photos-logo:before {\n content: '\\eb92';\n}\n.sula-icon.ph-google-play-logo:before {\n content: '\\e294';\n}\n.sula-icon.ph-google-podcasts-logo:before {\n content: '\\eb94';\n}\n.sula-icon.ph-gps:before {\n content: '\\edd8';\n}\n.sula-icon.ph-gps-fix:before {\n content: '\\edd6';\n}\n.sula-icon.ph-gps-slash:before {\n content: '\\edd4';\n}\n.sula-icon.ph-gradient:before {\n content: '\\eb42';\n}\n.sula-icon.ph-graduation-cap:before {\n content: '\\e62c';\n}\n.sula-icon.ph-grains:before {\n content: '\\ec68';\n}\n.sula-icon.ph-grains-slash:before {\n content: '\\ec6a';\n}\n.sula-icon.ph-graph:before {\n content: '\\eb58';\n}\n.sula-icon.ph-graphics-card:before {\n content: '\\e612';\n}\n.sula-icon.ph-greater-than:before {\n content: '\\edc4';\n}\n.sula-icon.ph-greater-than-or-equal:before {\n content: '\\eda2';\n}\n.sula-icon.ph-grid-four:before {\n content: '\\e296';\n}\n.sula-icon.ph-grid-nine:before {\n content: '\\ec8c';\n}\n.sula-icon.ph-guitar:before {\n content: '\\ea8a';\n}\n.sula-icon.ph-hair-dryer:before {\n content: '\\ea66';\n}\n.sula-icon.ph-hamburger:before {\n content: '\\e790';\n}\n.sula-icon.ph-hammer:before {\n content: '\\e80e';\n}\n.sula-icon.ph-hand:before {\n content: '\\e298';\n}\n.sula-icon.ph-hand-arrow-down:before {\n content: '\\ea4e';\n}\n.sula-icon.ph-hand-arrow-up:before {\n content: '\\ee5a';\n}\n.sula-icon.ph-hand-coins:before {\n content: '\\ea8c';\n}\n.sula-icon.ph-hand-deposit:before {\n content: '\\ee82';\n}\n.sula-icon.ph-hand-eye:before {\n content: '\\ea4c';\n}\n.sula-icon.ph-hand-fist:before {\n content: '\\e57a';\n}\n.sula-icon.ph-hand-grabbing:before {\n content: '\\e57c';\n}\n.sula-icon.ph-hand-heart:before {\n content: '\\e810';\n}\n.sula-icon.ph-hand-palm:before {\n content: '\\e57e';\n}\n.sula-icon.ph-hand-peace:before {\n content: '\\e7cc';\n}\n.sula-icon.ph-hand-pointing:before {\n content: '\\e29a';\n}\n.sula-icon.ph-hand-soap:before {\n content: '\\e630';\n}\n.sula-icon.ph-hand-swipe-left:before {\n content: '\\ec94';\n}\n.sula-icon.ph-hand-swipe-right:before {\n content: '\\ec92';\n}\n.sula-icon.ph-hand-tap:before {\n content: '\\ec90';\n}\n.sula-icon.ph-hand-waving:before {\n content: '\\e580';\n}\n.sula-icon.ph-hand-withdraw:before {\n content: '\\ee80';\n}\n.sula-icon.ph-handbag:before {\n content: '\\e29c';\n}\n.sula-icon.ph-handbag-simple:before {\n content: '\\e62e';\n}\n.sula-icon.ph-hands-clapping:before {\n content: '\\e6a0';\n}\n.sula-icon.ph-hands-praying:before {\n content: '\\ecc8';\n}\n.sula-icon.ph-handshake:before {\n content: '\\e582';\n}\n.sula-icon.ph-hard-drive:before {\n content: '\\e29e';\n}\n.sula-icon.ph-hard-drives:before {\n content: '\\e2a0';\n}\n.sula-icon.ph-hard-hat:before {\n content: '\\ed46';\n}\n.sula-icon.ph-hash:before {\n content: '\\e2a2';\n}\n.sula-icon.ph-hash-straight:before {\n content: '\\e2a4';\n}\n.sula-icon.ph-head-circuit:before {\n content: '\\e7d4';\n}\n.sula-icon.ph-headlights:before {\n content: '\\e6fe';\n}\n.sula-icon.ph-headphones:before {\n content: '\\e2a6';\n}\n.sula-icon.ph-headset:before {\n content: '\\e584';\n}\n.sula-icon.ph-heart:before {\n content: '\\e2a8';\n}\n.sula-icon.ph-heart-break:before {\n content: '\\ebe8';\n}\n.sula-icon.ph-heart-half:before {\n content: '\\ec48';\n}\n.sula-icon.ph-heart-straight:before {\n content: '\\e2aa';\n}\n.sula-icon.ph-heart-straight-break:before {\n content: '\\eb98';\n}\n.sula-icon.ph-heartbeat:before {\n content: '\\e2ac';\n}\n.sula-icon.ph-hexagon:before {\n content: '\\e2ae';\n}\n.sula-icon.ph-high-definition:before {\n content: '\\ea8e';\n}\n.sula-icon.ph-high-heel:before {\n content: '\\e8e8';\n}\n.sula-icon.ph-highlighter:before {\n content: '\\ec76';\n}\n.sula-icon.ph-highlighter-circle:before {\n content: '\\e632';\n}\n.sula-icon.ph-hockey:before {\n content: '\\ec86';\n}\n.sula-icon.ph-hoodie:before {\n content: '\\ecd0';\n}\n.sula-icon.ph-horse:before {\n content: '\\e2b0';\n}\n.sula-icon.ph-hospital:before {\n content: '\\e844';\n}\n.sula-icon.ph-hourglass:before {\n content: '\\e2b2';\n}\n.sula-icon.ph-hourglass-high:before {\n content: '\\e2b4';\n}\n.sula-icon.ph-hourglass-low:before {\n content: '\\e2b6';\n}\n.sula-icon.ph-hourglass-medium:before {\n content: '\\e2b8';\n}\n.sula-icon.ph-hourglass-simple:before {\n content: '\\e2ba';\n}\n.sula-icon.ph-hourglass-simple-high:before {\n content: '\\e2bc';\n}\n.sula-icon.ph-hourglass-simple-low:before {\n content: '\\e2be';\n}\n.sula-icon.ph-hourglass-simple-medium:before {\n content: '\\e2c0';\n}\n.sula-icon.ph-house:before {\n content: '\\e2c2';\n}\n.sula-icon.ph-house-line:before {\n content: '\\e2c4';\n}\n.sula-icon.ph-house-simple:before {\n content: '\\e2c6';\n}\n.sula-icon.ph-hurricane:before {\n content: '\\e88e';\n}\n.sula-icon.ph-ice-cream:before {\n content: '\\e804';\n}\n.sula-icon.ph-identification-badge:before {\n content: '\\e6f6';\n}\n.sula-icon.ph-identification-card:before {\n content: '\\e2c8';\n}\n.sula-icon.ph-image:before {\n content: '\\e2ca';\n}\n.sula-icon.ph-image-broken:before {\n content: '\\e7a8';\n}\n.sula-icon.ph-image-square:before {\n content: '\\e2cc';\n}\n.sula-icon.ph-images:before {\n content: '\\e836';\n}\n.sula-icon.ph-images-square:before {\n content: '\\e834';\n}\n.sula-icon.ph-infinity:before {\n content: '\\e634';\n}\n.sula-icon.ph-lemniscate:before {\n content: '\\e634';\n}\n.sula-icon.ph-info:before {\n content: '\\e2ce';\n}\n.sula-icon.ph-instagram-logo:before {\n content: '\\e2d0';\n}\n.sula-icon.ph-intersect:before {\n content: '\\e2d2';\n}\n.sula-icon.ph-intersect-square:before {\n content: '\\e87a';\n}\n.sula-icon.ph-intersect-three:before {\n content: '\\ecc4';\n}\n.sula-icon.ph-intersection:before {\n content: '\\edba';\n}\n.sula-icon.ph-invoice:before {\n content: '\\ee42';\n}\n.sula-icon.ph-island:before {\n content: '\\ee06';\n}\n.sula-icon.ph-jar:before {\n content: '\\e7e0';\n}\n.sula-icon.ph-jar-label:before {\n content: '\\e7e1';\n}\n.sula-icon.ph-jeep:before {\n content: '\\e2d4';\n}\n.sula-icon.ph-joystick:before {\n content: '\\ea5e';\n}\n.sula-icon.ph-kanban:before {\n content: '\\eb54';\n}\n.sula-icon.ph-key:before {\n content: '\\e2d6';\n}\n.sula-icon.ph-key-return:before {\n content: '\\e782';\n}\n.sula-icon.ph-keyboard:before {\n content: '\\e2d8';\n}\n.sula-icon.ph-keyhole:before {\n content: '\\ea78';\n}\n.sula-icon.ph-knife:before {\n content: '\\e636';\n}\n.sula-icon.ph-ladder:before {\n content: '\\e9e4';\n}\n.sula-icon.ph-ladder-simple:before {\n content: '\\ec26';\n}\n.sula-icon.ph-lamp:before {\n content: '\\e638';\n}\n.sula-icon.ph-lamp-pendant:before {\n content: '\\ee2e';\n}\n.sula-icon.ph-laptop:before {\n content: '\\e586';\n}\n.sula-icon.ph-lasso:before {\n content: '\\edc6';\n}\n.sula-icon.ph-lastfm-logo:before {\n content: '\\e842';\n}\n.sula-icon.ph-layout:before {\n content: '\\e6d6';\n}\n.sula-icon.ph-leaf:before {\n content: '\\e2da';\n}\n.sula-icon.ph-lectern:before {\n content: '\\e95a';\n}\n.sula-icon.ph-lego:before {\n content: '\\e8c6';\n}\n.sula-icon.ph-lego-smiley:before {\n content: '\\e8c7';\n}\n.sula-icon.ph-less-than:before {\n content: '\\edac';\n}\n.sula-icon.ph-less-than-or-equal:before {\n content: '\\eda4';\n}\n.sula-icon.ph-letter-circle-h:before {\n content: '\\ebf8';\n}\n.sula-icon.ph-letter-circle-p:before {\n content: '\\ec08';\n}\n.sula-icon.ph-letter-circle-v:before {\n content: '\\ec14';\n}\n.sula-icon.ph-lifebuoy:before {\n content: '\\e63a';\n}\n.sula-icon.ph-lightbulb:before {\n content: '\\e2dc';\n}\n.sula-icon.ph-lightbulb-filament:before {\n content: '\\e63c';\n}\n.sula-icon.ph-lighthouse:before {\n content: '\\e9f6';\n}\n.sula-icon.ph-lightning:before {\n content: '\\e2de';\n}\n.sula-icon.ph-lightning-a:before {\n content: '\\ea84';\n}\n.sula-icon.ph-lightning-slash:before {\n content: '\\e2e0';\n}\n.sula-icon.ph-line-segment:before {\n content: '\\e6d2';\n}\n.sula-icon.ph-line-segments:before {\n content: '\\e6d4';\n}\n.sula-icon.ph-line-vertical:before {\n content: '\\ed70';\n}\n.sula-icon.ph-link:before {\n content: '\\e2e2';\n}\n.sula-icon.ph-link-break:before {\n content: '\\e2e4';\n}\n.sula-icon.ph-link-simple:before {\n content: '\\e2e6';\n}\n.sula-icon.ph-link-simple-break:before {\n content: '\\e2e8';\n}\n.sula-icon.ph-link-simple-horizontal:before {\n content: '\\e2ea';\n}\n.sula-icon.ph-link-simple-horizontal-break:before {\n content: '\\e2ec';\n}\n.sula-icon.ph-linkedin-logo:before {\n content: '\\e2ee';\n}\n.sula-icon.ph-linktree-logo:before {\n content: '\\edee';\n}\n.sula-icon.ph-linux-logo:before {\n content: '\\eb02';\n}\n.sula-icon.ph-list:before {\n content: '\\e2f0';\n}\n.sula-icon.ph-list-bullets:before {\n content: '\\e2f2';\n}\n.sula-icon.ph-list-checks:before {\n content: '\\eadc';\n}\n.sula-icon.ph-list-dashes:before {\n content: '\\e2f4';\n}\n.sula-icon.ph-list-heart:before {\n content: '\\ebde';\n}\n.sula-icon.ph-list-magnifying-glass:before {\n content: '\\ebe0';\n}\n.sula-icon.ph-list-numbers:before {\n content: '\\e2f6';\n}\n.sula-icon.ph-list-plus:before {\n content: '\\e2f8';\n}\n.sula-icon.ph-list-star:before {\n content: '\\ebdc';\n}\n.sula-icon.ph-lock:before {\n content: '\\e2fa';\n}\n.sula-icon.ph-lock-key:before {\n content: '\\e2fe';\n}\n.sula-icon.ph-lock-key-open:before {\n content: '\\e300';\n}\n.sula-icon.ph-lock-laminated:before {\n content: '\\e302';\n}\n.sula-icon.ph-lock-laminated-open:before {\n content: '\\e304';\n}\n.sula-icon.ph-lock-open:before {\n content: '\\e306';\n}\n.sula-icon.ph-lock-simple:before {\n content: '\\e308';\n}\n.sula-icon.ph-lock-simple-open:before {\n content: '\\e30a';\n}\n.sula-icon.ph-lockers:before {\n content: '\\ecb8';\n}\n.sula-icon.ph-log:before {\n content: '\\ed82';\n}\n.sula-icon.ph-magic-wand:before {\n content: '\\e6b6';\n}\n.sula-icon.ph-magnet:before {\n content: '\\e680';\n}\n.sula-icon.ph-magnet-straight:before {\n content: '\\e682';\n}\n.sula-icon.ph-magnifying-glass:before {\n content: '\\e30c';\n}\n.sula-icon.ph-magnifying-glass-minus:before {\n content: '\\e30e';\n}\n.sula-icon.ph-magnifying-glass-plus:before {\n content: '\\e310';\n}\n.sula-icon.ph-mailbox:before {\n content: '\\ec1e';\n}\n.sula-icon.ph-map-pin:before {\n content: '\\e316';\n}\n.sula-icon.ph-map-pin-area:before {\n content: '\\ee3a';\n}\n.sula-icon.ph-map-pin-line:before {\n content: '\\e318';\n}\n.sula-icon.ph-map-pin-plus:before {\n content: '\\e314';\n}\n.sula-icon.ph-map-pin-simple:before {\n content: '\\ee3e';\n}\n.sula-icon.ph-map-pin-simple-area:before {\n content: '\\ee3c';\n}\n.sula-icon.ph-map-pin-simple-line:before {\n content: '\\ee38';\n}\n.sula-icon.ph-map-trifold:before {\n content: '\\e31a';\n}\n.sula-icon.ph-markdown-logo:before {\n content: '\\e508';\n}\n.sula-icon.ph-marker-circle:before {\n content: '\\e640';\n}\n.sula-icon.ph-martini:before {\n content: '\\e31c';\n}\n.sula-icon.ph-mask-happy:before {\n content: '\\e9f4';\n}\n.sula-icon.ph-mask-sad:before {\n content: '\\eb9e';\n}\n.sula-icon.ph-mastodon-logo:before {\n content: '\\ed68';\n}\n.sula-icon.ph-math-operations:before {\n content: '\\e31e';\n}\n.sula-icon.ph-matrix-logo:before {\n content: '\\ed64';\n}\n.sula-icon.ph-medal:before {\n content: '\\e320';\n}\n.sula-icon.ph-medal-military:before {\n content: '\\ecfc';\n}\n.sula-icon.ph-medium-logo:before {\n content: '\\e322';\n}\n.sula-icon.ph-megaphone:before {\n content: '\\e324';\n}\n.sula-icon.ph-megaphone-simple:before {\n content: '\\e642';\n}\n.sula-icon.ph-member-of:before {\n content: '\\edc2';\n}\n.sula-icon.ph-memory:before {\n content: '\\e9c4';\n}\n.sula-icon.ph-messenger-logo:before {\n content: '\\e6d8';\n}\n.sula-icon.ph-meta-logo:before {\n content: '\\ed02';\n}\n.sula-icon.ph-meteor:before {\n content: '\\e9ba';\n}\n.sula-icon.ph-metronome:before {\n content: '\\ec8e';\n}\n.sula-icon.ph-microphone:before {\n content: '\\e326';\n}\n.sula-icon.ph-microphone-slash:before {\n content: '\\e328';\n}\n.sula-icon.ph-microphone-stage:before {\n content: '\\e75c';\n}\n.sula-icon.ph-microscope:before {\n content: '\\ec7a';\n}\n.sula-icon.ph-microsoft-excel-logo:before {\n content: '\\eb6c';\n}\n.sula-icon.ph-microsoft-outlook-logo:before {\n content: '\\eb70';\n}\n.sula-icon.ph-microsoft-powerpoint-logo:before {\n content: '\\eace';\n}\n.sula-icon.ph-microsoft-teams-logo:before {\n content: '\\eb66';\n}\n.sula-icon.ph-microsoft-word-logo:before {\n content: '\\eb6a';\n}\n.sula-icon.ph-minus:before {\n content: '\\e32a';\n}\n.sula-icon.ph-minus-circle:before {\n content: '\\e32c';\n}\n.sula-icon.ph-minus-square:before {\n content: '\\ed4c';\n}\n.sula-icon.ph-money:before {\n content: '\\e588';\n}\n.sula-icon.ph-money-wavy:before {\n content: '\\ee68';\n}\n.sula-icon.ph-monitor:before {\n content: '\\e32e';\n}\n.sula-icon.ph-monitor-arrow-up:before {\n content: '\\e58a';\n}\n.sula-icon.ph-monitor-play:before {\n content: '\\e58c';\n}\n.sula-icon.ph-moon:before {\n content: '\\e330';\n}\n.sula-icon.ph-moon-stars:before {\n content: '\\e58e';\n}\n.sula-icon.ph-moped:before {\n content: '\\e824';\n}\n.sula-icon.ph-moped-front:before {\n content: '\\e822';\n}\n.sula-icon.ph-mosque:before {\n content: '\\ecee';\n}\n.sula-icon.ph-motorcycle:before {\n content: '\\e80a';\n}\n.sula-icon.ph-mountains:before {\n content: '\\e7ae';\n}\n.sula-icon.ph-mouse:before {\n content: '\\e33a';\n}\n.sula-icon.ph-mouse-left-click:before {\n content: '\\e334';\n}\n.sula-icon.ph-mouse-middle-click:before {\n content: '\\e338';\n}\n.sula-icon.ph-mouse-right-click:before {\n content: '\\e336';\n}\n.sula-icon.ph-mouse-scroll:before {\n content: '\\e332';\n}\n.sula-icon.ph-mouse-simple:before {\n content: '\\e644';\n}\n.sula-icon.ph-music-note:before {\n content: '\\e33c';\n}\n.sula-icon.ph-music-note-simple:before {\n content: '\\e33e';\n}\n.sula-icon.ph-music-notes:before {\n content: '\\e340';\n}\n.sula-icon.ph-music-notes-minus:before {\n content: '\\ee0c';\n}\n.sula-icon.ph-music-notes-plus:before {\n content: '\\eb7c';\n}\n.sula-icon.ph-music-notes-simple:before {\n content: '\\e342';\n}\n.sula-icon.ph-navigation-arrow:before {\n content: '\\eade';\n}\n.sula-icon.ph-needle:before {\n content: '\\e82e';\n}\n.sula-icon.ph-network:before {\n content: '\\edde';\n}\n.sula-icon.ph-network-slash:before {\n content: '\\eddc';\n}\n.sula-icon.ph-network-x:before {\n content: '\\edda';\n}\n.sula-icon.ph-newspaper:before {\n content: '\\e344';\n}\n.sula-icon.ph-newspaper-clipping:before {\n content: '\\e346';\n}\n.sula-icon.ph-not-equals:before {\n content: '\\eda6';\n}\n.sula-icon.ph-not-member-of:before {\n content: '\\edae';\n}\n.sula-icon.ph-not-subset-of:before {\n content: '\\edb0';\n}\n.sula-icon.ph-not-superset-of:before {\n content: '\\edb2';\n}\n.sula-icon.ph-notches:before {\n content: '\\ed3a';\n}\n.sula-icon.ph-note:before {\n content: '\\e348';\n}\n.sula-icon.ph-note-blank:before {\n content: '\\e34a';\n}\n.sula-icon.ph-note-pencil:before {\n content: '\\e34c';\n}\n.sula-icon.ph-notebook:before {\n content: '\\e34e';\n}\n.sula-icon.ph-notepad:before {\n content: '\\e63e';\n}\n.sula-icon.ph-notification:before {\n content: '\\e6fa';\n}\n.sula-icon.ph-notion-logo:before {\n content: '\\e9a0';\n}\n.sula-icon.ph-nuclear-plant:before {\n content: '\\ed7c';\n}\n.sula-icon.ph-number-circle-eight:before {\n content: '\\e352';\n}\n.sula-icon.ph-number-circle-five:before {\n content: '\\e358';\n}\n.sula-icon.ph-number-circle-four:before {\n content: '\\e35e';\n}\n.sula-icon.ph-number-circle-nine:before {\n content: '\\e364';\n}\n.sula-icon.ph-number-circle-one:before {\n content: '\\e36a';\n}\n.sula-icon.ph-number-circle-seven:before {\n content: '\\e370';\n}\n.sula-icon.ph-number-circle-six:before {\n content: '\\e376';\n}\n.sula-icon.ph-number-circle-three:before {\n content: '\\e37c';\n}\n.sula-icon.ph-number-circle-two:before {\n content: '\\e382';\n}\n.sula-icon.ph-number-circle-zero:before {\n content: '\\e388';\n}\n.sula-icon.ph-number-eight:before {\n content: '\\e350';\n}\n.sula-icon.ph-number-five:before {\n content: '\\e356';\n}\n.sula-icon.ph-number-four:before {\n content: '\\e35c';\n}\n.sula-icon.ph-number-nine:before {\n content: '\\e362';\n}\n.sula-icon.ph-number-one:before {\n content: '\\e368';\n}\n.sula-icon.ph-number-seven:before {\n content: '\\e36e';\n}\n.sula-icon.ph-number-six:before {\n content: '\\e374';\n}\n.sula-icon.ph-number-square-eight:before {\n content: '\\e354';\n}\n.sula-icon.ph-number-square-five:before {\n content: '\\e35a';\n}\n.sula-icon.ph-number-square-four:before {\n content: '\\e360';\n}\n.sula-icon.ph-number-square-nine:before {\n content: '\\e366';\n}\n.sula-icon.ph-number-square-one:before {\n content: '\\e36c';\n}\n.sula-icon.ph-number-square-seven:before {\n content: '\\e372';\n}\n.sula-icon.ph-number-square-six:before {\n content: '\\e378';\n}\n.sula-icon.ph-number-square-three:before {\n content: '\\e37e';\n}\n.sula-icon.ph-number-square-two:before {\n content: '\\e384';\n}\n.sula-icon.ph-number-square-zero:before {\n content: '\\e38a';\n}\n.sula-icon.ph-number-three:before {\n content: '\\e37a';\n}\n.sula-icon.ph-number-two:before {\n content: '\\e380';\n}\n.sula-icon.ph-number-zero:before {\n content: '\\e386';\n}\n.sula-icon.ph-numpad:before {\n content: '\\e3c8';\n}\n.sula-icon.ph-nut:before {\n content: '\\e38c';\n}\n.sula-icon.ph-ny-times-logo:before {\n content: '\\e646';\n}\n.sula-icon.ph-octagon:before {\n content: '\\e38e';\n}\n.sula-icon.ph-office-chair:before {\n content: '\\ea46';\n}\n.sula-icon.ph-onigiri:before {\n content: '\\ee2c';\n}\n.sula-icon.ph-open-ai-logo:before {\n content: '\\e7d2';\n}\n.sula-icon.ph-option:before {\n content: '\\e8a8';\n}\n.sula-icon.ph-orange:before {\n content: '\\ee40';\n}\n.sula-icon.ph-orange-slice:before {\n content: '\\ed36';\n}\n.sula-icon.ph-oven:before {\n content: '\\ed8c';\n}\n.sula-icon.ph-package:before {\n content: '\\e390';\n}\n.sula-icon.ph-paint-brush:before {\n content: '\\e6f0';\n}\n.sula-icon.ph-paint-brush-broad:before {\n content: '\\e590';\n}\n.sula-icon.ph-paint-brush-household:before {\n content: '\\e6f2';\n}\n.sula-icon.ph-paint-bucket:before {\n content: '\\e392';\n}\n.sula-icon.ph-paint-roller:before {\n content: '\\e6f4';\n}\n.sula-icon.ph-palette:before {\n content: '\\e6c8';\n}\n.sula-icon.ph-panorama:before {\n content: '\\eaa2';\n}\n.sula-icon.ph-pants:before {\n content: '\\ec88';\n}\n.sula-icon.ph-paper-plane:before {\n content: '\\e394';\n}\n.sula-icon.ph-paper-plane-right:before {\n content: '\\e396';\n}\n.sula-icon.ph-paper-plane-tilt:before {\n content: '\\e398';\n}\n.sula-icon.ph-paperclip:before {\n content: '\\e39a';\n}\n.sula-icon.ph-paperclip-horizontal:before {\n content: '\\e592';\n}\n.sula-icon.ph-parachute:before {\n content: '\\ea7c';\n}\n.sula-icon.ph-paragraph:before {\n content: '\\e960';\n}\n.sula-icon.ph-parallelogram:before {\n content: '\\ecc6';\n}\n.sula-icon.ph-park:before {\n content: '\\ecb2';\n}\n.sula-icon.ph-password:before {\n content: '\\e752';\n}\n.sula-icon.ph-path:before {\n content: '\\e39c';\n}\n.sula-icon.ph-patreon-logo:before {\n content: '\\e98a';\n}\n.sula-icon.ph-pause:before {\n content: '\\e39e';\n}\n.sula-icon.ph-pause-circle:before {\n content: '\\e3a0';\n}\n.sula-icon.ph-paw-print:before {\n content: '\\e648';\n}\n.sula-icon.ph-paypal-logo:before {\n content: '\\e98c';\n}\n.sula-icon.ph-peace:before {\n content: '\\e3a2';\n}\n.sula-icon.ph-pen:before {\n content: '\\e3aa';\n}\n.sula-icon.ph-pen-nib:before {\n content: '\\e3ac';\n}\n.sula-icon.ph-pen-nib-straight:before {\n content: '\\e64a';\n}\n.sula-icon.ph-pencil:before {\n content: '\\e3ae';\n}\n.sula-icon.ph-pencil-circle:before {\n content: '\\e3b0';\n}\n.sula-icon.ph-pencil-line:before {\n content: '\\e3b2';\n}\n.sula-icon.ph-pencil-ruler:before {\n content: '\\e906';\n}\n.sula-icon.ph-pencil-simple:before {\n content: '\\e3b4';\n}\n.sula-icon.ph-pencil-simple-line:before {\n content: '\\ebc6';\n}\n.sula-icon.ph-pencil-simple-slash:before {\n content: '\\ecf6';\n}\n.sula-icon.ph-pencil-slash:before {\n content: '\\ecf8';\n}\n.sula-icon.ph-pentagon:before {\n content: '\\ec7e';\n}\n.sula-icon.ph-pentagram:before {\n content: '\\ec5c';\n}\n.sula-icon.ph-pepper:before {\n content: '\\e94a';\n}\n.sula-icon.ph-percent:before {\n content: '\\e3b6';\n}\n.sula-icon.ph-person:before {\n content: '\\e3a8';\n}\n.sula-icon.ph-person-arms-spread:before {\n content: '\\ecfe';\n}\n.sula-icon.ph-person-simple:before {\n content: '\\e72e';\n}\n.sula-icon.ph-person-simple-bike:before {\n content: '\\e734';\n}\n.sula-icon.ph-person-simple-circle:before {\n content: '\\ee58';\n}\n.sula-icon.ph-person-simple-hike:before {\n content: '\\ed54';\n}\n.sula-icon.ph-person-simple-run:before {\n content: '\\e730';\n}\n.sula-icon.ph-person-simple-ski:before {\n content: '\\e71c';\n}\n.sula-icon.ph-person-simple-snowboard:before {\n content: '\\e71e';\n}\n.sula-icon.ph-person-simple-swim:before {\n content: '\\e736';\n}\n.sula-icon.ph-person-simple-tai-chi:before {\n content: '\\ed5c';\n}\n.sula-icon.ph-person-simple-throw:before {\n content: '\\e732';\n}\n.sula-icon.ph-person-simple-walk:before {\n content: '\\e73a';\n}\n.sula-icon.ph-perspective:before {\n content: '\\ebe6';\n}\n.sula-icon.ph-phone:before {\n content: '\\e3b8';\n}\n.sula-icon.ph-phone-call:before {\n content: '\\e3ba';\n}\n.sula-icon.ph-phone-disconnect:before {\n content: '\\e3bc';\n}\n.sula-icon.ph-phone-incoming:before {\n content: '\\e3be';\n}\n.sula-icon.ph-phone-list:before {\n content: '\\e3cc';\n}\n.sula-icon.ph-phone-outgoing:before {\n content: '\\e3c0';\n}\n.sula-icon.ph-phone-pause:before {\n content: '\\e3ca';\n}\n.sula-icon.ph-phone-plus:before {\n content: '\\ec56';\n}\n.sula-icon.ph-phone-slash:before {\n content: '\\e3c2';\n}\n.sula-icon.ph-phone-transfer:before {\n content: '\\e3c6';\n}\n.sula-icon.ph-phone-x:before {\n content: '\\e3c4';\n}\n.sula-icon.ph-phosphor-logo:before {\n content: '\\e3ce';\n}\n.sula-icon.ph-pi:before {\n content: '\\ec80';\n}\n.sula-icon.ph-piano-keys:before {\n content: '\\e9c8';\n}\n.sula-icon.ph-picnic-table:before {\n content: '\\ee26';\n}\n.sula-icon.ph-picture-in-picture:before {\n content: '\\e64c';\n}\n.sula-icon.ph-piggy-bank:before {\n content: '\\ea04';\n}\n.sula-icon.ph-pill:before {\n content: '\\e700';\n}\n.sula-icon.ph-ping-pong:before {\n content: '\\ea42';\n}\n.sula-icon.ph-pint-glass:before {\n content: '\\edd0';\n}\n.sula-icon.ph-pinterest-logo:before {\n content: '\\e64e';\n}\n.sula-icon.ph-pinwheel:before {\n content: '\\eb9c';\n}\n.sula-icon.ph-pipe:before {\n content: '\\ed86';\n}\n.sula-icon.ph-pipe-wrench:before {\n content: '\\ed88';\n}\n.sula-icon.ph-pix-logo:before {\n content: '\\ecc2';\n}\n.sula-icon.ph-pizza:before {\n content: '\\e796';\n}\n.sula-icon.ph-placeholder:before {\n content: '\\e650';\n}\n.sula-icon.ph-planet:before {\n content: '\\e652';\n}\n.sula-icon.ph-plant:before {\n content: '\\ebae';\n}\n.sula-icon.ph-play:before {\n content: '\\e3d0';\n}\n.sula-icon.ph-play-circle:before {\n content: '\\e3d2';\n}\n.sula-icon.ph-play-pause:before {\n content: '\\e8be';\n}\n.sula-icon.ph-playlist:before {\n content: '\\e6aa';\n}\n.sula-icon.ph-plug:before {\n content: '\\e946';\n}\n.sula-icon.ph-plug-charging:before {\n content: '\\eb5c';\n}\n.sula-icon.ph-plugs:before {\n content: '\\eb56';\n}\n.sula-icon.ph-plugs-connected:before {\n content: '\\eb5a';\n}\n.sula-icon.ph-plus:before {\n content: '\\e3d4';\n}\n.sula-icon.ph-plus-circle:before {\n content: '\\e3d6';\n}\n.sula-icon.ph-plus-minus:before {\n content: '\\e3d8';\n}\n.sula-icon.ph-plus-square:before {\n content: '\\ed4a';\n}\n.sula-icon.ph-poker-chip:before {\n content: '\\e594';\n}\n.sula-icon.ph-police-car:before {\n content: '\\ec4a';\n}\n.sula-icon.ph-polygon:before {\n content: '\\e6d0';\n}\n.sula-icon.ph-popcorn:before {\n content: '\\eb4e';\n}\n.sula-icon.ph-popsicle:before {\n content: '\\ebbe';\n}\n.sula-icon.ph-potted-plant:before {\n content: '\\ec22';\n}\n.sula-icon.ph-power:before {\n content: '\\e3da';\n}\n.sula-icon.ph-prescription:before {\n content: '\\e7a2';\n}\n.sula-icon.ph-presentation:before {\n content: '\\e654';\n}\n.sula-icon.ph-presentation-chart:before {\n content: '\\e656';\n}\n.sula-icon.ph-printer:before {\n content: '\\e3dc';\n}\n.sula-icon.ph-prohibit:before {\n content: '\\e3de';\n}\n.sula-icon.ph-prohibit-inset:before {\n content: '\\e3e0';\n}\n.sula-icon.ph-projector-screen:before {\n content: '\\e658';\n}\n.sula-icon.ph-projector-screen-chart:before {\n content: '\\e65a';\n}\n.sula-icon.ph-pulse:before {\n content: '\\e000';\n}\n.sula-icon.ph-activity:before {\n content: '\\e000';\n}\n.sula-icon.ph-push-pin:before {\n content: '\\e3e2';\n}\n.sula-icon.ph-push-pin-simple:before {\n content: '\\e65c';\n}\n.sula-icon.ph-push-pin-simple-slash:before {\n content: '\\e65e';\n}\n.sula-icon.ph-push-pin-slash:before {\n content: '\\e3e4';\n}\n.sula-icon.ph-puzzle-piece:before {\n content: '\\e596';\n}\n.sula-icon.ph-qr-code:before {\n content: '\\e3e6';\n}\n.sula-icon.ph-question:before {\n content: '\\e3e8';\n}\n.sula-icon.ph-question-mark:before {\n content: '\\e3e9';\n}\n.sula-icon.ph-queue:before {\n content: '\\e6ac';\n}\n.sula-icon.ph-quotes:before {\n content: '\\e660';\n}\n.sula-icon.ph-rabbit:before {\n content: '\\eac2';\n}\n.sula-icon.ph-racquet:before {\n content: '\\ee02';\n}\n.sula-icon.ph-radical:before {\n content: '\\e3ea';\n}\n.sula-icon.ph-radio:before {\n content: '\\e77e';\n}\n.sula-icon.ph-radio-button:before {\n content: '\\eb08';\n}\n.sula-icon.ph-radioactive:before {\n content: '\\e9dc';\n}\n.sula-icon.ph-rainbow:before {\n content: '\\e598';\n}\n.sula-icon.ph-rainbow-cloud:before {\n content: '\\e59a';\n}\n.sula-icon.ph-ranking:before {\n content: '\\ed62';\n}\n.sula-icon.ph-read-cv-logo:before {\n content: '\\ed0c';\n}\n.sula-icon.ph-receipt:before {\n content: '\\e3ec';\n}\n.sula-icon.ph-receipt-x:before {\n content: '\\ed40';\n}\n.sula-icon.ph-record:before {\n content: '\\e3ee';\n}\n.sula-icon.ph-rectangle:before {\n content: '\\e3f0';\n}\n.sula-icon.ph-rectangle-dashed:before {\n content: '\\e3f2';\n}\n.sula-icon.ph-recycle:before {\n content: '\\e75a';\n}\n.sula-icon.ph-reddit-logo:before {\n content: '\\e59c';\n}\n.sula-icon.ph-repeat:before {\n content: '\\e3f6';\n}\n.sula-icon.ph-repeat-once:before {\n content: '\\e3f8';\n}\n.sula-icon.ph-replit-logo:before {\n content: '\\eb8a';\n}\n.sula-icon.ph-resize:before {\n content: '\\ed6e';\n}\n.sula-icon.ph-rewind:before {\n content: '\\e6a8';\n}\n.sula-icon.ph-rewind-circle:before {\n content: '\\e3fa';\n}\n.sula-icon.ph-road-horizon:before {\n content: '\\e838';\n}\n.sula-icon.ph-robot:before {\n content: '\\e762';\n}\n.sula-icon.ph-rocket:before {\n content: '\\e3fc';\n}\n.sula-icon.ph-rocket-launch:before {\n content: '\\e3fe';\n}\n.sula-icon.ph-rows:before {\n content: '\\e5a2';\n}\n.sula-icon.ph-rows-plus-bottom:before {\n content: '\\e59e';\n}\n.sula-icon.ph-rows-plus-top:before {\n content: '\\e5a0';\n}\n.sula-icon.ph-rss:before {\n content: '\\e400';\n}\n.sula-icon.ph-rss-simple:before {\n content: '\\e402';\n}\n.sula-icon.ph-rug:before {\n content: '\\ea1a';\n}\n.sula-icon.ph-ruler:before {\n content: '\\e6b8';\n}\n.sula-icon.ph-sailboat:before {\n content: '\\e78a';\n}\n.sula-icon.ph-scales:before {\n content: '\\e750';\n}\n.sula-icon.ph-scan:before {\n content: '\\ebb6';\n}\n.sula-icon.ph-scan-smiley:before {\n content: '\\ebb4';\n}\n.sula-icon.ph-scissors:before {\n content: '\\eae0';\n}\n.sula-icon.ph-scooter:before {\n content: '\\e820';\n}\n.sula-icon.ph-screencast:before {\n content: '\\e404';\n}\n.sula-icon.ph-screwdriver:before {\n content: '\\e86e';\n}\n.sula-icon.ph-scribble:before {\n content: '\\e806';\n}\n.sula-icon.ph-scribble-loop:before {\n content: '\\e662';\n}\n.sula-icon.ph-scroll:before {\n content: '\\eb7a';\n}\n.sula-icon.ph-seal:before {\n content: '\\e604';\n}\n.sula-icon.ph-circle-wavy:before {\n content: '\\e604';\n}\n.sula-icon.ph-seal-check:before {\n content: '\\e606';\n}\n.sula-icon.ph-circle-wavy-check:before {\n content: '\\e606';\n}\n.sula-icon.ph-seal-percent:before {\n content: '\\e60a';\n}\n.sula-icon.ph-seal-question:before {\n content: '\\e608';\n}\n.sula-icon.ph-circle-wavy-question:before {\n content: '\\e608';\n}\n.sula-icon.ph-seal-warning:before {\n content: '\\e60c';\n}\n.sula-icon.ph-circle-wavy-warning:before {\n content: '\\e60c';\n}\n.sula-icon.ph-seat:before {\n content: '\\eb8e';\n}\n.sula-icon.ph-seatbelt:before {\n content: '\\edfe';\n}\n.sula-icon.ph-security-camera:before {\n content: '\\eca4';\n}\n.sula-icon.ph-selection:before {\n content: '\\e69a';\n}\n.sula-icon.ph-selection-all:before {\n content: '\\e746';\n}\n.sula-icon.ph-selection-background:before {\n content: '\\eaf8';\n}\n.sula-icon.ph-selection-foreground:before {\n content: '\\eaf6';\n}\n.sula-icon.ph-selection-inverse:before {\n content: '\\e744';\n}\n.sula-icon.ph-selection-plus:before {\n content: '\\e69c';\n}\n.sula-icon.ph-selection-slash:before {\n content: '\\e69e';\n}\n.sula-icon.ph-shapes:before {\n content: '\\ec5e';\n}\n.sula-icon.ph-share:before {\n content: '\\e406';\n}\n.sula-icon.ph-share-fat:before {\n content: '\\ed52';\n}\n.sula-icon.ph-share-network:before {\n content: '\\e408';\n}\n.sula-icon.ph-shield:before {\n content: '\\e40a';\n}\n.sula-icon.ph-shield-check:before {\n content: '\\e40c';\n}\n.sula-icon.ph-shield-checkered:before {\n content: '\\e708';\n}\n.sula-icon.ph-shield-chevron:before {\n content: '\\e40e';\n}\n.sula-icon.ph-shield-plus:before {\n content: '\\e706';\n}\n.sula-icon.ph-shield-slash:before {\n content: '\\e410';\n}\n.sula-icon.ph-shield-star:before {\n content: '\\ec34';\n}\n.sula-icon.ph-shield-warning:before {\n content: '\\e412';\n}\n.sula-icon.ph-shipping-container:before {\n content: '\\e78c';\n}\n.sula-icon.ph-shirt-folded:before {\n content: '\\ea92';\n}\n.sula-icon.ph-shooting-star:before {\n content: '\\ecfa';\n}\n.sula-icon.ph-shopping-bag:before {\n content: '\\e416';\n}\n.sula-icon.ph-shopping-bag-open:before {\n content: '\\e418';\n}\n.sula-icon.ph-shopping-cart:before {\n content: '\\e41e';\n}\n.sula-icon.ph-shopping-cart-simple:before {\n content: '\\e420';\n}\n.sula-icon.ph-shovel:before {\n content: '\\e9e6';\n}\n.sula-icon.ph-shower:before {\n content: '\\e776';\n}\n.sula-icon.ph-shrimp:before {\n content: '\\eab4';\n}\n.sula-icon.ph-shuffle:before {\n content: '\\e422';\n}\n.sula-icon.ph-shuffle-angular:before {\n content: '\\e424';\n}\n.sula-icon.ph-shuffle-simple:before {\n content: '\\e426';\n}\n.sula-icon.ph-sidebar:before {\n content: '\\eab6';\n}\n.sula-icon.ph-sidebar-simple:before {\n content: '\\ec24';\n}\n.sula-icon.ph-sigma:before {\n content: '\\eab8';\n}\n.sula-icon.ph-sign-in:before {\n content: '\\e428';\n}\n.sula-icon.ph-sign-out:before {\n content: '\\e42a';\n}\n.sula-icon.ph-signature:before {\n content: '\\ebac';\n}\n.sula-icon.ph-signpost:before {\n content: '\\e89c';\n}\n.sula-icon.ph-sim-card:before {\n content: '\\e664';\n}\n.sula-icon.ph-siren:before {\n content: '\\e9b8';\n}\n.sula-icon.ph-sketch-logo:before {\n content: '\\e42c';\n}\n.sula-icon.ph-skip-back:before {\n content: '\\e5a4';\n}\n.sula-icon.ph-skip-back-circle:before {\n content: '\\e42e';\n}\n.sula-icon.ph-skip-forward:before {\n content: '\\e5a6';\n}\n.sula-icon.ph-skip-forward-circle:before {\n content: '\\e430';\n}\n.sula-icon.ph-skull:before {\n content: '\\e916';\n}\n.sula-icon.ph-skype-logo:before {\n content: '\\e8dc';\n}\n.sula-icon.ph-slack-logo:before {\n content: '\\e5a8';\n}\n.sula-icon.ph-sliders:before {\n content: '\\e432';\n}\n.sula-icon.ph-sliders-horizontal:before {\n content: '\\e434';\n}\n.sula-icon.ph-slideshow:before {\n content: '\\ed32';\n}\n.sula-icon.ph-smiley:before {\n content: '\\e436';\n}\n.sula-icon.ph-smiley-angry:before {\n content: '\\ec62';\n}\n.sula-icon.ph-smiley-blank:before {\n content: '\\e438';\n}\n.sula-icon.ph-smiley-meh:before {\n content: '\\e43a';\n}\n.sula-icon.ph-smiley-melting:before {\n content: '\\ee56';\n}\n.sula-icon.ph-smiley-nervous:before {\n content: '\\e43c';\n}\n.sula-icon.ph-smiley-sad:before {\n content: '\\e43e';\n}\n.sula-icon.ph-smiley-sticker:before {\n content: '\\e440';\n}\n.sula-icon.ph-smiley-wink:before {\n content: '\\e666';\n}\n.sula-icon.ph-smiley-x-eyes:before {\n content: '\\e442';\n}\n.sula-icon.ph-snapchat-logo:before {\n content: '\\e668';\n}\n.sula-icon.ph-sneaker:before {\n content: '\\e80c';\n}\n.sula-icon.ph-sneaker-move:before {\n content: '\\ed60';\n}\n.sula-icon.ph-snowflake:before {\n content: '\\e5aa';\n}\n.sula-icon.ph-soccer-ball:before {\n content: '\\e716';\n}\n.sula-icon.ph-sock:before {\n content: '\\ecce';\n}\n.sula-icon.ph-solar-panel:before {\n content: '\\ed7a';\n}\n.sula-icon.ph-solar-roof:before {\n content: '\\ed7b';\n}\n.sula-icon.ph-sort-ascending:before {\n content: '\\e444';\n}\n.sula-icon.ph-sort-descending:before {\n content: '\\e446';\n}\n.sula-icon.ph-soundcloud-logo:before {\n content: '\\e8de';\n}\n.sula-icon.ph-spade:before {\n content: '\\e448';\n}\n.sula-icon.ph-sparkle:before {\n content: '\\e6a2';\n}\n.sula-icon.ph-speaker-hifi:before {\n content: '\\ea08';\n}\n.sula-icon.ph-speaker-high:before {\n content: '\\e44a';\n}\n.sula-icon.ph-speaker-low:before {\n content: '\\e44c';\n}\n.sula-icon.ph-speaker-none:before {\n content: '\\e44e';\n}\n.sula-icon.ph-speaker-simple-high:before {\n content: '\\e450';\n}\n.sula-icon.ph-speaker-simple-low:before {\n content: '\\e452';\n}\n.sula-icon.ph-speaker-simple-none:before {\n content: '\\e454';\n}\n.sula-icon.ph-speaker-simple-slash:before {\n content: '\\e456';\n}\n.sula-icon.ph-speaker-simple-x:before {\n content: '\\e458';\n}\n.sula-icon.ph-speaker-slash:before {\n content: '\\e45a';\n}\n.sula-icon.ph-speaker-x:before {\n content: '\\e45c';\n}\n.sula-icon.ph-speedometer:before {\n content: '\\ee74';\n}\n.sula-icon.ph-sphere:before {\n content: '\\ee66';\n}\n.sula-icon.ph-spinner:before {\n content: '\\e66a';\n}\n.sula-icon.ph-spinner-ball:before {\n content: '\\ee28';\n}\n.sula-icon.ph-spinner-gap:before {\n content: '\\e66c';\n}\n.sula-icon.ph-spiral:before {\n content: '\\e9fa';\n}\n.sula-icon.ph-split-horizontal:before {\n content: '\\e872';\n}\n.sula-icon.ph-split-vertical:before {\n content: '\\e876';\n}\n.sula-icon.ph-spotify-logo:before {\n content: '\\e66e';\n}\n.sula-icon.ph-spray-bottle:before {\n content: '\\e7e4';\n}\n.sula-icon.ph-square:before {\n content: '\\e45e';\n}\n.sula-icon.ph-square-half:before {\n content: '\\e462';\n}\n.sula-icon.ph-square-half-bottom:before {\n content: '\\eb16';\n}\n.sula-icon.ph-square-logo:before {\n content: '\\e690';\n}\n.sula-icon.ph-square-split-horizontal:before {\n content: '\\e870';\n}\n.sula-icon.ph-square-split-vertical:before {\n content: '\\e874';\n}\n.sula-icon.ph-squares-four:before {\n content: '\\e464';\n}\n.sula-icon.ph-stack:before {\n content: '\\e466';\n}\n.sula-icon.ph-stack-minus:before {\n content: '\\edf4';\n}\n.sula-icon.ph-stack-overflow-logo:before {\n content: '\\eb78';\n}\n.sula-icon.ph-stack-plus:before {\n content: '\\edf6';\n}\n.sula-icon.ph-stack-simple:before {\n content: '\\e468';\n}\n.sula-icon.ph-stairs:before {\n content: '\\e8ec';\n}\n.sula-icon.ph-stamp:before {\n content: '\\ea48';\n}\n.sula-icon.ph-standard-definition:before {\n content: '\\ea90';\n}\n.sula-icon.ph-star:before {\n content: '\\e46a';\n}\n.sula-icon.ph-star-and-crescent:before {\n content: '\\ecf4';\n}\n.sula-icon.ph-star-four:before {\n content: '\\e6a4';\n}\n.sula-icon.ph-star-half:before {\n content: '\\e70a';\n}\n.sula-icon.ph-star-of-david:before {\n content: '\\e89e';\n}\n.sula-icon.ph-steam-logo:before {\n content: '\\ead4';\n}\n.sula-icon.ph-steering-wheel:before {\n content: '\\e9ac';\n}\n.sula-icon.ph-steps:before {\n content: '\\ecbe';\n}\n.sula-icon.ph-stethoscope:before {\n content: '\\e7ea';\n}\n.sula-icon.ph-sticker:before {\n content: '\\e5ac';\n}\n.sula-icon.ph-stool:before {\n content: '\\ea44';\n}\n.sula-icon.ph-stop:before {\n content: '\\e46c';\n}\n.sula-icon.ph-stop-circle:before {\n content: '\\e46e';\n}\n.sula-icon.ph-storefront:before {\n content: '\\e470';\n}\n.sula-icon.ph-strategy:before {\n content: '\\ea3a';\n}\n.sula-icon.ph-stripe-logo:before {\n content: '\\e698';\n}\n.sula-icon.ph-student:before {\n content: '\\e73e';\n}\n.sula-icon.ph-subset-of:before {\n content: '\\edc0';\n}\n.sula-icon.ph-subset-proper-of:before {\n content: '\\edb6';\n}\n.sula-icon.ph-subtitles:before {\n content: '\\e1a8';\n}\n.sula-icon.ph-subtitles-slash:before {\n content: '\\e1a6';\n}\n.sula-icon.ph-subtract:before {\n content: '\\ebd6';\n}\n.sula-icon.ph-subtract-square:before {\n content: '\\ebd4';\n}\n.sula-icon.ph-subway:before {\n content: '\\e498';\n}\n.sula-icon.ph-suitcase:before {\n content: '\\e5ae';\n}\n.sula-icon.ph-suitcase-rolling:before {\n content: '\\e9b0';\n}\n.sula-icon.ph-suitcase-simple:before {\n content: '\\e5b0';\n}\n.sula-icon.ph-sun:before {\n content: '\\e472';\n}\n.sula-icon.ph-sun-dim:before {\n content: '\\e474';\n}\n.sula-icon.ph-sun-horizon:before {\n content: '\\e5b6';\n}\n.sula-icon.ph-sunglasses:before {\n content: '\\e816';\n}\n.sula-icon.ph-superset-of:before {\n content: '\\edb8';\n}\n.sula-icon.ph-superset-proper-of:before {\n content: '\\edb4';\n}\n.sula-icon.ph-swap:before {\n content: '\\e83c';\n}\n.sula-icon.ph-swatches:before {\n content: '\\e5b8';\n}\n.sula-icon.ph-swimming-pool:before {\n content: '\\ecb6';\n}\n.sula-icon.ph-sword:before {\n content: '\\e5ba';\n}\n.sula-icon.ph-synagogue:before {\n content: '\\ecec';\n}\n.sula-icon.ph-syringe:before {\n content: '\\e968';\n}\n.sula-icon.ph-t-shirt:before {\n content: '\\e670';\n}\n.sula-icon.ph-table:before {\n content: '\\e476';\n}\n.sula-icon.ph-tabs:before {\n content: '\\e778';\n}\n.sula-icon.ph-tag:before {\n content: '\\e478';\n}\n.sula-icon.ph-tag-chevron:before {\n content: '\\e672';\n}\n.sula-icon.ph-tag-simple:before {\n content: '\\e47a';\n}\n.sula-icon.ph-target:before {\n content: '\\e47c';\n}\n.sula-icon.ph-taxi:before {\n content: '\\e902';\n}\n.sula-icon.ph-tea-bag:before {\n content: '\\e8e6';\n}\n.sula-icon.ph-telegram-logo:before {\n content: '\\e5bc';\n}\n.sula-icon.ph-television:before {\n content: '\\e754';\n}\n.sula-icon.ph-television-simple:before {\n content: '\\eae6';\n}\n.sula-icon.ph-tennis-ball:before {\n content: '\\e720';\n}\n.sula-icon.ph-tent:before {\n content: '\\e8ba';\n}\n.sula-icon.ph-terminal:before {\n content: '\\e47e';\n}\n.sula-icon.ph-terminal-window:before {\n content: '\\eae8';\n}\n.sula-icon.ph-test-tube:before {\n content: '\\e7a0';\n}\n.sula-icon.ph-text-a-underline:before {\n content: '\\ed34';\n}\n.sula-icon.ph-text-aa:before {\n content: '\\e6ee';\n}\n.sula-icon.ph-text-align-center:before {\n content: '\\e480';\n}\n.sula-icon.ph-text-align-justify:before {\n content: '\\e482';\n}\n.sula-icon.ph-text-align-left:before {\n content: '\\e484';\n}\n.sula-icon.ph-text-align-right:before {\n content: '\\e486';\n}\n.sula-icon.ph-text-b:before {\n content: '\\e5be';\n}\n.sula-icon.ph-text-bolder:before {\n content: '\\e5be';\n}\n.sula-icon.ph-text-columns:before {\n content: '\\ec96';\n}\n.sula-icon.ph-text-h:before {\n content: '\\e6ba';\n}\n.sula-icon.ph-text-h-five:before {\n content: '\\e6c4';\n}\n.sula-icon.ph-text-h-four:before {\n content: '\\e6c2';\n}\n.sula-icon.ph-text-h-one:before {\n content: '\\e6bc';\n}\n.sula-icon.ph-text-h-six:before {\n content: '\\e6c6';\n}\n.sula-icon.ph-text-h-three:before {\n content: '\\e6c0';\n}\n.sula-icon.ph-text-h-two:before {\n content: '\\e6be';\n}\n.sula-icon.ph-text-indent:before {\n content: '\\ea1e';\n}\n.sula-icon.ph-text-italic:before {\n content: '\\e5c0';\n}\n.sula-icon.ph-text-outdent:before {\n content: '\\ea1c';\n}\n.sula-icon.ph-text-strikethrough:before {\n content: '\\e5c2';\n}\n.sula-icon.ph-text-subscript:before {\n content: '\\ec98';\n}\n.sula-icon.ph-text-superscript:before {\n content: '\\ec9a';\n}\n.sula-icon.ph-text-t:before {\n content: '\\e48a';\n}\n.sula-icon.ph-text-t-slash:before {\n content: '\\e488';\n}\n.sula-icon.ph-text-underline:before {\n content: '\\e5c4';\n}\n.sula-icon.ph-textbox:before {\n content: '\\eb0a';\n}\n.sula-icon.ph-thermometer:before {\n content: '\\e5c6';\n}\n.sula-icon.ph-thermometer-cold:before {\n content: '\\e5c8';\n}\n.sula-icon.ph-thermometer-hot:before {\n content: '\\e5ca';\n}\n.sula-icon.ph-thermometer-simple:before {\n content: '\\e5cc';\n}\n.sula-icon.ph-threads-logo:before {\n content: '\\ed9e';\n}\n.sula-icon.ph-three-d:before {\n content: '\\ea5a';\n}\n.sula-icon.ph-thumbs-down:before {\n content: '\\e48c';\n}\n.sula-icon.ph-thumbs-up:before {\n content: '\\e48e';\n}\n.sula-icon.ph-ticket:before {\n content: '\\e490';\n}\n.sula-icon.ph-tidal-logo:before {\n content: '\\ed1c';\n}\n.sula-icon.ph-tiktok-logo:before {\n content: '\\eaf2';\n}\n.sula-icon.ph-tilde:before {\n content: '\\eda8';\n}\n.sula-icon.ph-timer:before {\n content: '\\e492';\n}\n.sula-icon.ph-tip-jar:before {\n content: '\\e7e2';\n}\n.sula-icon.ph-tipi:before {\n content: '\\ed30';\n}\n.sula-icon.ph-tire:before {\n content: '\\edd2';\n}\n.sula-icon.ph-toggle-left:before {\n content: '\\e674';\n}\n.sula-icon.ph-toggle-right:before {\n content: '\\e676';\n}\n.sula-icon.ph-toilet:before {\n content: '\\e79a';\n}\n.sula-icon.ph-toilet-paper:before {\n content: '\\e79c';\n}\n.sula-icon.ph-toolbox:before {\n content: '\\eca0';\n}\n.sula-icon.ph-tooth:before {\n content: '\\e9cc';\n}\n.sula-icon.ph-tornado:before {\n content: '\\e88c';\n}\n.sula-icon.ph-tote:before {\n content: '\\e494';\n}\n.sula-icon.ph-tote-simple:before {\n content: '\\e678';\n}\n.sula-icon.ph-towel:before {\n content: '\\ede6';\n}\n.sula-icon.ph-tractor:before {\n content: '\\ec6e';\n}\n.sula-icon.ph-trademark:before {\n content: '\\e9f0';\n}\n.sula-icon.ph-trademark-registered:before {\n content: '\\e3f4';\n}\n.sula-icon.ph-traffic-cone:before {\n content: '\\e9a8';\n}\n.sula-icon.ph-traffic-sign:before {\n content: '\\e67a';\n}\n.sula-icon.ph-traffic-signal:before {\n content: '\\e9aa';\n}\n.sula-icon.ph-train:before {\n content: '\\e496';\n}\n.sula-icon.ph-train-regional:before {\n content: '\\e49e';\n}\n.sula-icon.ph-train-simple:before {\n content: '\\e4a0';\n}\n.sula-icon.ph-tram:before {\n content: '\\e9ec';\n}\n.sula-icon.ph-translate:before {\n content: '\\e4a2';\n}\n.sula-icon.ph-trash:before {\n content: '\\e4a6';\n}\n.sula-icon.ph-trash-simple:before {\n content: '\\e4a8';\n}\n.sula-icon.ph-tray:before {\n content: '\\e4aa';\n}\n.sula-icon.ph-tray-arrow-down:before {\n content: '\\e010';\n}\n.sula-icon.ph-archive-tray:before {\n content: '\\e010';\n}\n.sula-icon.ph-tray-arrow-up:before {\n content: '\\ee52';\n}\n.sula-icon.ph-treasure-chest:before {\n content: '\\ede2';\n}\n.sula-icon.ph-tree:before {\n content: '\\e6da';\n}\n.sula-icon.ph-tree-evergreen:before {\n content: '\\e6dc';\n}\n.sula-icon.ph-tree-palm:before {\n content: '\\e91a';\n}\n.sula-icon.ph-tree-structure:before {\n content: '\\e67c';\n}\n.sula-icon.ph-tree-view:before {\n content: '\\ee48';\n}\n.sula-icon.ph-trend-down:before {\n content: '\\e4ac';\n}\n.sula-icon.ph-trend-up:before {\n content: '\\e4ae';\n}\n.sula-icon.ph-triangle:before {\n content: '\\e4b0';\n}\n.sula-icon.ph-triangle-dashed:before {\n content: '\\e4b2';\n}\n.sula-icon.ph-trolley:before {\n content: '\\e5b2';\n}\n.sula-icon.ph-trolley-suitcase:before {\n content: '\\e5b4';\n}\n.sula-icon.ph-trophy:before {\n content: '\\e67e';\n}\n.sula-icon.ph-truck:before {\n content: '\\e4b4';\n}\n.sula-icon.ph-truck-trailer:before {\n content: '\\e4b6';\n}\n.sula-icon.ph-tumblr-logo:before {\n content: '\\e8d4';\n}\n.sula-icon.ph-twitch-logo:before {\n content: '\\e5ce';\n}\n.sula-icon.ph-twitter-logo:before {\n content: '\\e4ba';\n}\n.sula-icon.ph-umbrella:before {\n content: '\\e684';\n}\n.sula-icon.ph-umbrella-simple:before {\n content: '\\e686';\n}\n.sula-icon.ph-union:before {\n content: '\\edbe';\n}\n.sula-icon.ph-unite:before {\n content: '\\e87e';\n}\n.sula-icon.ph-unite-square:before {\n content: '\\e878';\n}\n.sula-icon.ph-upload:before {\n content: '\\e4be';\n}\n.sula-icon.ph-upload-simple:before {\n content: '\\e4c0';\n}\n.sula-icon.ph-usb:before {\n content: '\\e956';\n}\n.sula-icon.ph-user:before {\n content: '\\e4c2';\n}\n.sula-icon.ph-user-check:before {\n content: '\\eafa';\n}\n.sula-icon.ph-user-circle:before {\n content: '\\e4c4';\n}\n.sula-icon.ph-user-circle-check:before {\n content: '\\ec38';\n}\n.sula-icon.ph-user-circle-dashed:before {\n content: '\\ec36';\n}\n.sula-icon.ph-user-circle-gear:before {\n content: '\\e4c6';\n}\n.sula-icon.ph-user-circle-minus:before {\n content: '\\e4c8';\n}\n.sula-icon.ph-user-circle-plus:before {\n content: '\\e4ca';\n}\n.sula-icon.ph-user-focus:before {\n content: '\\e6fc';\n}\n.sula-icon.ph-user-gear:before {\n content: '\\e4cc';\n}\n.sula-icon.ph-user-list:before {\n content: '\\e73c';\n}\n.sula-icon.ph-user-minus:before {\n content: '\\e4ce';\n}\n.sula-icon.ph-user-plus:before {\n content: '\\e4d0';\n}\n.sula-icon.ph-user-rectangle:before {\n content: '\\e4d2';\n}\n.sula-icon.ph-user-sound:before {\n content: '\\eca8';\n}\n.sula-icon.ph-user-square:before {\n content: '\\e4d4';\n}\n.sula-icon.ph-user-switch:before {\n content: '\\e756';\n}\n.sula-icon.ph-users:before {\n content: '\\e4d6';\n}\n.sula-icon.ph-users-four:before {\n content: '\\e68c';\n}\n.sula-icon.ph-users-three:before {\n content: '\\e68e';\n}\n.sula-icon.ph-van:before {\n content: '\\e826';\n}\n.sula-icon.ph-vault:before {\n content: '\\e76e';\n}\n.sula-icon.ph-vector-three:before {\n content: '\\ee62';\n}\n.sula-icon.ph-vector-two:before {\n content: '\\ee64';\n}\n.sula-icon.ph-vibrate:before {\n content: '\\e4d8';\n}\n.sula-icon.ph-video:before {\n content: '\\e740';\n}\n.sula-icon.ph-video-camera:before {\n content: '\\e4da';\n}\n.sula-icon.ph-video-camera-slash:before {\n content: '\\e4dc';\n}\n.sula-icon.ph-video-conference:before {\n content: '\\edce';\n}\n.sula-icon.ph-vignette:before {\n content: '\\eba2';\n}\n.sula-icon.ph-vinyl-record:before {\n content: '\\ecac';\n}\n.sula-icon.ph-virtual-reality:before {\n content: '\\e7b8';\n}\n.sula-icon.ph-virus:before {\n content: '\\e7d6';\n}\n.sula-icon.ph-visor:before {\n content: '\\ee2a';\n}\n.sula-icon.ph-voicemail:before {\n content: '\\e4de';\n}\n.sula-icon.ph-volleyball:before {\n content: '\\e726';\n}\n.sula-icon.ph-wall:before {\n content: '\\e688';\n}\n.sula-icon.ph-wallet:before {\n content: '\\e68a';\n}\n.sula-icon.ph-warehouse:before {\n content: '\\ecd4';\n}\n.sula-icon.ph-warning:before {\n content: '\\e4e0';\n}\n.sula-icon.ph-warning-circle:before {\n content: '\\e4e2';\n}\n.sula-icon.ph-warning-diamond:before {\n content: '\\e7fc';\n}\n.sula-icon.ph-warning-octagon:before {\n content: '\\e4e4';\n}\n.sula-icon.ph-washing-machine:before {\n content: '\\ede8';\n}\n.sula-icon.ph-watch:before {\n content: '\\e4e6';\n}\n.sula-icon.ph-wave-sawtooth:before {\n content: '\\ea9c';\n}\n.sula-icon.ph-wave-sine:before {\n content: '\\ea9a';\n}\n.sula-icon.ph-wave-square:before {\n content: '\\ea9e';\n}\n.sula-icon.ph-wave-triangle:before {\n content: '\\eaa0';\n}\n.sula-icon.ph-waveform:before {\n content: '\\e802';\n}\n.sula-icon.ph-waveform-slash:before {\n content: '\\e800';\n}\n.sula-icon.ph-waves:before {\n content: '\\e6de';\n}\n.sula-icon.ph-webcam:before {\n content: '\\e9b2';\n}\n.sula-icon.ph-webcam-slash:before {\n content: '\\ecdc';\n}\n.sula-icon.ph-webhooks-logo:before {\n content: '\\ecae';\n}\n.sula-icon.ph-wechat-logo:before {\n content: '\\e8d2';\n}\n.sula-icon.ph-whatsapp-logo:before {\n content: '\\e5d0';\n}\n.sula-icon.ph-wheelchair:before {\n content: '\\e4e8';\n}\n.sula-icon.ph-wheelchair-motion:before {\n content: '\\e89a';\n}\n.sula-icon.ph-wifi-high:before {\n content: '\\e4ea';\n}\n.sula-icon.ph-wifi-low:before {\n content: '\\e4ec';\n}\n.sula-icon.ph-wifi-medium:before {\n content: '\\e4ee';\n}\n.sula-icon.ph-wifi-none:before {\n content: '\\e4f0';\n}\n.sula-icon.ph-wifi-slash:before {\n content: '\\e4f2';\n}\n.sula-icon.ph-wifi-x:before {\n content: '\\e4f4';\n}\n.sula-icon.ph-wind:before {\n content: '\\e5d2';\n}\n.sula-icon.ph-windmill:before {\n content: '\\e9f8';\n}\n.sula-icon.ph-windows-logo:before {\n content: '\\e692';\n}\n.sula-icon.ph-wine:before {\n content: '\\e6b2';\n}\n.sula-icon.ph-wrench:before {\n content: '\\e5d4';\n}\n.sula-icon.ph-x:before {\n content: '\\e4f6';\n}\n.sula-icon.ph-x-circle:before {\n content: '\\e4f8';\n}\n.sula-icon.ph-x-logo:before {\n content: '\\e4bc';\n}\n.sula-icon.ph-x-square:before {\n content: '\\e4fa';\n}\n.sula-icon.ph-yarn:before {\n content: '\\ed9a';\n}\n.sula-icon.ph-yin-yang:before {\n content: '\\e92a';\n}\n.sula-icon.ph-youtube-logo:before {\n content: '\\e4fc';\n}\n\n.ph-duotone.ph-acorn:before {\n content: '\\eb9a';\n opacity: 0.2;\n}\n.ph-duotone.ph-acorn:after {\n content: '\\eb9b';\n margin-left: -1em;\n}\n.ph-duotone.ph-address-book:before {\n content: '\\e6f8';\n opacity: 0.2;\n}\n.ph-duotone.ph-address-book:after {\n content: '\\e6f9';\n margin-left: -1em;\n}\n.ph-duotone.ph-address-book-tabs:before {\n content: '\\ee4e';\n opacity: 0.2;\n}\n.ph-duotone.ph-address-book-tabs:after {\n content: '\\ee4f';\n margin-left: -1em;\n}\n.ph-duotone.ph-air-traffic-control:before {\n content: '\\ecd8';\n opacity: 0.2;\n}\n.ph-duotone.ph-air-traffic-control:after {\n content: '\\ecd9';\n margin-left: -1em;\n}\n.ph-duotone.ph-airplane:before {\n content: '\\e002';\n opacity: 0.2;\n}\n.ph-duotone.ph-airplane:after {\n content: '\\e003';\n margin-left: -1em;\n}\n.ph-duotone.ph-airplane-in-flight:before {\n content: '\\e4fe';\n opacity: 0.2;\n}\n.ph-duotone.ph-airplane-in-flight:after {\n content: '\\e4ff';\n margin-left: -1em;\n}\n.ph-duotone.ph-airplane-landing:before {\n content: '\\e502';\n opacity: 0.2;\n}\n.ph-duotone.ph-airplane-landing:after {\n content: '\\e503';\n margin-left: -1em;\n}\n.ph-duotone.ph-airplane-takeoff:before {\n content: '\\e504';\n opacity: 0.2;\n}\n.ph-duotone.ph-airplane-takeoff:after {\n content: '\\e505';\n margin-left: -1em;\n}\n.ph-duotone.ph-airplane-taxiing:before {\n content: '\\e500';\n opacity: 0.2;\n}\n.ph-duotone.ph-airplane-taxiing:after {\n content: '\\e501';\n margin-left: -1em;\n}\n.ph-duotone.ph-airplane-tilt:before {\n content: '\\e5d6';\n opacity: 0.2;\n}\n.ph-duotone.ph-airplane-tilt:after {\n content: '\\e5d7';\n margin-left: -1em;\n}\n.ph-duotone.ph-airplay:before {\n content: '\\e004';\n opacity: 0.2;\n}\n.ph-duotone.ph-airplay:after {\n content: '\\e005';\n margin-left: -1em;\n}\n.ph-duotone.ph-alarm:before {\n content: '\\e006';\n opacity: 0.2;\n}\n.ph-duotone.ph-alarm:after {\n content: '\\e007';\n margin-left: -1em;\n}\n.ph-duotone.ph-alien:before {\n content: '\\e8a6';\n opacity: 0.2;\n}\n.ph-duotone.ph-alien:after {\n content: '\\e8a7';\n margin-left: -1em;\n}\n.ph-duotone.ph-align-bottom:before {\n content: '\\e506';\n opacity: 0.2;\n}\n.ph-duotone.ph-align-bottom:after {\n content: '\\e507';\n margin-left: -1em;\n}\n.ph-duotone.ph-align-bottom-simple:before {\n content: '\\eb0c';\n opacity: 0.2;\n}\n.ph-duotone.ph-align-bottom-simple:after {\n content: '\\eb0d';\n margin-left: -1em;\n}\n.ph-duotone.ph-align-center-horizontal:before {\n content: '\\e50a';\n opacity: 0.2;\n}\n.ph-duotone.ph-align-center-horizontal:after {\n content: '\\e50b';\n margin-left: -1em;\n}\n.ph-duotone.ph-align-center-horizontal-simple:before {\n content: '\\eb0e';\n opacity: 0.2;\n}\n.ph-duotone.ph-align-center-horizontal-simple:after {\n content: '\\eb0f';\n margin-left: -1em;\n}\n.ph-duotone.ph-align-center-vertical:before {\n content: '\\e50c';\n opacity: 0.2;\n}\n.ph-duotone.ph-align-center-vertical:after {\n content: '\\e50d';\n margin-left: -1em;\n}\n.ph-duotone.ph-align-center-vertical-simple:before {\n content: '\\eb10';\n opacity: 0.2;\n}\n.ph-duotone.ph-align-center-vertical-simple:after {\n content: '\\eb11';\n margin-left: -1em;\n}\n.ph-duotone.ph-align-left:before {\n content: '\\e50e';\n opacity: 0.2;\n}\n.ph-duotone.ph-align-left:after {\n content: '\\e50f';\n margin-left: -1em;\n}\n.ph-duotone.ph-align-left-simple:before {\n content: '\\eaee';\n opacity: 0.2;\n}\n.ph-duotone.ph-align-left-simple:after {\n content: '\\eaef';\n margin-left: -1em;\n}\n.ph-duotone.ph-align-right:before {\n content: '\\e510';\n opacity: 0.2;\n}\n.ph-duotone.ph-align-right:after {\n content: '\\e511';\n margin-left: -1em;\n}\n.ph-duotone.ph-align-right-simple:before {\n content: '\\eb12';\n opacity: 0.2;\n}\n.ph-duotone.ph-align-right-simple:after {\n content: '\\eb13';\n margin-left: -1em;\n}\n.ph-duotone.ph-align-top:before {\n content: '\\e512';\n opacity: 0.2;\n}\n.ph-duotone.ph-align-top:after {\n content: '\\e513';\n margin-left: -1em;\n}\n.ph-duotone.ph-align-top-simple:before {\n content: '\\eb14';\n opacity: 0.2;\n}\n.ph-duotone.ph-align-top-simple:after {\n content: '\\eb15';\n margin-left: -1em;\n}\n.ph-duotone.ph-amazon-logo:before {\n content: '\\e96c';\n opacity: 0.2;\n}\n.ph-duotone.ph-amazon-logo:after {\n content: '\\e96d';\n margin-left: -1em;\n}\n.ph-duotone.ph-ambulance:before {\n content: '\\e572';\n opacity: 0.2;\n}\n.ph-duotone.ph-ambulance:after {\n content: '\\e573';\n margin-left: -1em;\n}\n.ph-duotone.ph-anchor:before {\n content: '\\e514';\n opacity: 0.2;\n}\n.ph-duotone.ph-anchor:after {\n content: '\\e515';\n margin-left: -1em;\n}\n.ph-duotone.ph-anchor-simple:before {\n content: '\\e5d8';\n opacity: 0.2;\n}\n.ph-duotone.ph-anchor-simple:after {\n content: '\\e5d9';\n margin-left: -1em;\n}\n.ph-duotone.ph-android-logo:before {\n content: '\\e008';\n opacity: 0.2;\n}\n.ph-duotone.ph-android-logo:after {\n content: '\\e009';\n margin-left: -1em;\n}\n.ph-duotone.ph-angle:before {\n content: '\\e7bc';\n opacity: 0.2;\n}\n.ph-duotone.ph-angle:after {\n content: '\\e7bd';\n margin-left: -1em;\n}\n.ph-duotone.ph-angular-logo:before {\n content: '\\eb80';\n opacity: 0.2;\n}\n.ph-duotone.ph-angular-logo:after {\n content: '\\eb81';\n margin-left: -1em;\n}\n.ph-duotone.ph-aperture:before {\n content: '\\e00a';\n opacity: 0.2;\n}\n.ph-duotone.ph-aperture:after {\n content: '\\e00b';\n margin-left: -1em;\n}\n.ph-duotone.ph-app-store-logo:before {\n content: '\\e974';\n opacity: 0.2;\n}\n.ph-duotone.ph-app-store-logo:after {\n content: '\\e975';\n margin-left: -1em;\n}\n.ph-duotone.ph-app-window:before {\n content: '\\e5da';\n opacity: 0.2;\n}\n.ph-duotone.ph-app-window:after {\n content: '\\e5db';\n margin-left: -1em;\n}\n.ph-duotone.ph-apple-logo:before {\n content: '\\e516';\n opacity: 0.2;\n}\n.ph-duotone.ph-apple-logo:after {\n content: '\\e517';\n margin-left: -1em;\n}\n.ph-duotone.ph-apple-podcasts-logo:before {\n content: '\\eb96';\n opacity: 0.2;\n}\n.ph-duotone.ph-apple-podcasts-logo:after {\n content: '\\eb97';\n margin-left: -1em;\n}\n.ph-duotone.ph-approximate-equals:before {\n content: '\\edaa';\n opacity: 0.2;\n}\n.ph-duotone.ph-approximate-equals:after {\n content: '\\edab';\n margin-left: -1em;\n}\n.ph-duotone.ph-archive:before {\n content: '\\e00c';\n opacity: 0.2;\n}\n.ph-duotone.ph-archive:after {\n content: '\\e00d';\n margin-left: -1em;\n}\n.ph-duotone.ph-armchair:before {\n content: '\\e012';\n opacity: 0.2;\n}\n.ph-duotone.ph-armchair:after {\n content: '\\e013';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-arc-left:before {\n content: '\\e014';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-arc-left:after {\n content: '\\e015';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-arc-right:before {\n content: '\\e016';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-arc-right:after {\n content: '\\e017';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-bend-double-up-left:before {\n content: '\\e03a';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-bend-double-up-left:after {\n content: '\\e03b';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-bend-double-up-right:before {\n content: '\\e03c';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-bend-double-up-right:after {\n content: '\\e03d';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-bend-down-left:before {\n content: '\\e018';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-bend-down-left:after {\n content: '\\e019';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-bend-down-right:before {\n content: '\\e01a';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-bend-down-right:after {\n content: '\\e01b';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-bend-left-down:before {\n content: '\\e01c';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-bend-left-down:after {\n content: '\\e01d';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-bend-left-up:before {\n content: '\\e01e';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-bend-left-up:after {\n content: '\\e01f';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-bend-right-down:before {\n content: '\\e020';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-bend-right-down:after {\n content: '\\e021';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-bend-right-up:before {\n content: '\\e022';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-bend-right-up:after {\n content: '\\e023';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-bend-up-left:before {\n content: '\\e024';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-bend-up-left:after {\n content: '\\e025';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-bend-up-right:before {\n content: '\\e026';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-bend-up-right:after {\n content: '\\e027';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-circle-down:before {\n content: '\\e028';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-circle-down:after {\n content: '\\e029';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-circle-down-left:before {\n content: '\\e02a';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-circle-down-left:after {\n content: '\\e02b';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-circle-down-right:before {\n content: '\\e02c';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-circle-down-right:after {\n content: '\\e02d';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-circle-left:before {\n content: '\\e05a';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-circle-left:after {\n content: '\\e05b';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-circle-right:before {\n content: '\\e02e';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-circle-right:after {\n content: '\\e02f';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-circle-up:before {\n content: '\\e030';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-circle-up:after {\n content: '\\e031';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-circle-up-left:before {\n content: '\\e032';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-circle-up-left:after {\n content: '\\e033';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-circle-up-right:before {\n content: '\\e034';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-circle-up-right:after {\n content: '\\e035';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-clockwise:before {\n content: '\\e036';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-clockwise:after {\n content: '\\e037';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-counter-clockwise:before {\n content: '\\e038';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-counter-clockwise:after {\n content: '\\e039';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-down:before {\n content: '\\e03e';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-down:after {\n content: '\\e03f';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-down-left:before {\n content: '\\e040';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-down-left:after {\n content: '\\e041';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-down-right:before {\n content: '\\e042';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-down-right:after {\n content: '\\e043';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-elbow-down-left:before {\n content: '\\e044';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-elbow-down-left:after {\n content: '\\e045';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-elbow-down-right:before {\n content: '\\e046';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-elbow-down-right:after {\n content: '\\e047';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-elbow-left:before {\n content: '\\e048';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-elbow-left:after {\n content: '\\e049';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-elbow-left-down:before {\n content: '\\e04a';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-elbow-left-down:after {\n content: '\\e04b';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-elbow-left-up:before {\n content: '\\e04c';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-elbow-left-up:after {\n content: '\\e04d';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-elbow-right:before {\n content: '\\e04e';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-elbow-right:after {\n content: '\\e04f';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-elbow-right-down:before {\n content: '\\e050';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-elbow-right-down:after {\n content: '\\e051';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-elbow-right-up:before {\n content: '\\e052';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-elbow-right-up:after {\n content: '\\e053';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-elbow-up-left:before {\n content: '\\e054';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-elbow-up-left:after {\n content: '\\e055';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-elbow-up-right:before {\n content: '\\e056';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-elbow-up-right:after {\n content: '\\e057';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-fat-down:before {\n content: '\\e518';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-fat-down:after {\n content: '\\e519';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-fat-left:before {\n content: '\\e51a';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-fat-left:after {\n content: '\\e51b';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-fat-line-down:before {\n content: '\\e51c';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-fat-line-down:after {\n content: '\\e51d';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-fat-line-left:before {\n content: '\\e51e';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-fat-line-left:after {\n content: '\\e51f';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-fat-line-right:before {\n content: '\\e520';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-fat-line-right:after {\n content: '\\e521';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-fat-line-up:before {\n content: '\\e522';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-fat-line-up:after {\n content: '\\e523';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-fat-lines-down:before {\n content: '\\e524';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-fat-lines-down:after {\n content: '\\e525';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-fat-lines-left:before {\n content: '\\e526';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-fat-lines-left:after {\n content: '\\e527';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-fat-lines-right:before {\n content: '\\e528';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-fat-lines-right:after {\n content: '\\e529';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-fat-lines-up:before {\n content: '\\e52a';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-fat-lines-up:after {\n content: '\\e52b';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-fat-right:before {\n content: '\\e52c';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-fat-right:after {\n content: '\\e52d';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-fat-up:before {\n content: '\\e52e';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-fat-up:after {\n content: '\\e52f';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-left:before {\n content: '\\e058';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-left:after {\n content: '\\e059';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-line-down:before {\n content: '\\e05c';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-line-down:after {\n content: '\\e05d';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-line-down-left:before {\n content: '\\e05e';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-line-down-left:after {\n content: '\\e05f';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-line-down-right:before {\n content: '\\e060';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-line-down-right:after {\n content: '\\e061';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-line-left:before {\n content: '\\e062';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-line-left:after {\n content: '\\e063';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-line-right:before {\n content: '\\e064';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-line-right:after {\n content: '\\e065';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-line-up:before {\n content: '\\e066';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-line-up:after {\n content: '\\e067';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-line-up-left:before {\n content: '\\e068';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-line-up-left:after {\n content: '\\e069';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-line-up-right:before {\n content: '\\e06a';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-line-up-right:after {\n content: '\\e06b';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-right:before {\n content: '\\e06c';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-right:after {\n content: '\\e06d';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-square-down:before {\n content: '\\e06e';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-square-down:after {\n content: '\\e06f';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-square-down-left:before {\n content: '\\e070';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-square-down-left:after {\n content: '\\e071';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-square-down-right:before {\n content: '\\e072';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-square-down-right:after {\n content: '\\e073';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-square-in:before {\n content: '\\e5dc';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-square-in:after {\n content: '\\e5dd';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-square-left:before {\n content: '\\e074';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-square-left:after {\n content: '\\e075';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-square-out:before {\n content: '\\e5de';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-square-out:after {\n content: '\\e5df';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-square-right:before {\n content: '\\e076';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-square-right:after {\n content: '\\e077';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-square-up:before {\n content: '\\e078';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-square-up:after {\n content: '\\e079';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-square-up-left:before {\n content: '\\e07a';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-square-up-left:after {\n content: '\\e07b';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-square-up-right:before {\n content: '\\e07c';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-square-up-right:after {\n content: '\\e07d';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-u-down-left:before {\n content: '\\e07e';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-u-down-left:after {\n content: '\\e07f';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-u-down-right:before {\n content: '\\e080';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-u-down-right:after {\n content: '\\e081';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-u-left-down:before {\n content: '\\e082';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-u-left-down:after {\n content: '\\e083';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-u-left-up:before {\n content: '\\e084';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-u-left-up:after {\n content: '\\e085';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-u-right-down:before {\n content: '\\e086';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-u-right-down:after {\n content: '\\e087';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-u-right-up:before {\n content: '\\e088';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-u-right-up:after {\n content: '\\e089';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-u-up-left:before {\n content: '\\e08a';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-u-up-left:after {\n content: '\\e08b';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-u-up-right:before {\n content: '\\e08c';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-u-up-right:after {\n content: '\\e08d';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-up:before {\n content: '\\e08e';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-up:after {\n content: '\\e08f';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-up-left:before {\n content: '\\e090';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-up-left:after {\n content: '\\e091';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrow-up-right:before {\n content: '\\e092';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrow-up-right:after {\n content: '\\e093';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrows-clockwise:before {\n content: '\\e094';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrows-clockwise:after {\n content: '\\e095';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrows-counter-clockwise:before {\n content: '\\e096';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrows-counter-clockwise:after {\n content: '\\e097';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrows-down-up:before {\n content: '\\e098';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrows-down-up:after {\n content: '\\e099';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrows-horizontal:before {\n content: '\\eb06';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrows-horizontal:after {\n content: '\\eb07';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrows-in:before {\n content: '\\e09a';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrows-in:after {\n content: '\\e09b';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrows-in-cardinal:before {\n content: '\\e09c';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrows-in-cardinal:after {\n content: '\\e09d';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrows-in-line-horizontal:before {\n content: '\\e530';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrows-in-line-horizontal:after {\n content: '\\e531';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrows-in-line-vertical:before {\n content: '\\e532';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrows-in-line-vertical:after {\n content: '\\e533';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrows-in-simple:before {\n content: '\\e09e';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrows-in-simple:after {\n content: '\\e09f';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrows-left-right:before {\n content: '\\e0a0';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrows-left-right:after {\n content: '\\e0a1';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrows-merge:before {\n content: '\\ed3e';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrows-merge:after {\n content: '\\ed3f';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrows-out:before {\n content: '\\e0a2';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrows-out:after {\n content: '\\e0a3';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrows-out-cardinal:before {\n content: '\\e0a4';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrows-out-cardinal:after {\n content: '\\e0a5';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrows-out-line-horizontal:before {\n content: '\\e534';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrows-out-line-horizontal:after {\n content: '\\e535';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrows-out-line-vertical:before {\n content: '\\e536';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrows-out-line-vertical:after {\n content: '\\e537';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrows-out-simple:before {\n content: '\\e0a6';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrows-out-simple:after {\n content: '\\e0a7';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrows-split:before {\n content: '\\ed3c';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrows-split:after {\n content: '\\ed3d';\n margin-left: -1em;\n}\n.ph-duotone.ph-arrows-vertical:before {\n content: '\\eb04';\n opacity: 0.2;\n}\n.ph-duotone.ph-arrows-vertical:after {\n content: '\\eb05';\n margin-left: -1em;\n}\n.ph-duotone.ph-article:before {\n content: '\\e0a8';\n opacity: 0.2;\n}\n.ph-duotone.ph-article:after {\n content: '\\e0a9';\n margin-left: -1em;\n}\n.ph-duotone.ph-article-medium:before {\n content: '\\e5e0';\n opacity: 0.2;\n}\n.ph-duotone.ph-article-medium:after {\n content: '\\e5e1';\n margin-left: -1em;\n}\n.ph-duotone.ph-article-ny-times:before {\n content: '\\e5e2';\n opacity: 0.2;\n}\n.ph-duotone.ph-article-ny-times:after {\n content: '\\e5e3';\n margin-left: -1em;\n}\n.ph-duotone.ph-asclepius:before {\n content: '\\ee34';\n opacity: 0.2;\n}\n.ph-duotone.ph-asclepius:after {\n content: '\\ee35';\n margin-left: -1em;\n}\n.ph-duotone.ph-asterisk:before {\n content: '\\e0aa';\n opacity: 0.2;\n}\n.ph-duotone.ph-asterisk:after {\n content: '\\e0ab';\n margin-left: -1em;\n}\n.ph-duotone.ph-asterisk-simple:before {\n content: '\\e832';\n opacity: 0.2;\n}\n.ph-duotone.ph-asterisk-simple:after {\n content: '\\e833';\n margin-left: -1em;\n}\n.ph-duotone.ph-at:before {\n content: '\\e0ac';\n opacity: 0.2;\n}\n.ph-duotone.ph-at:after {\n content: '\\e0ad';\n margin-left: -1em;\n}\n.ph-duotone.ph-atom:before {\n content: '\\e5e4';\n opacity: 0.2;\n}\n.ph-duotone.ph-atom:after {\n content: '\\e5e5';\n margin-left: -1em;\n}\n.ph-duotone.ph-avocado:before {\n content: '\\ee04';\n opacity: 0.2;\n}\n.ph-duotone.ph-avocado:after {\n content: '\\ee05';\n margin-left: -1em;\n}\n.ph-duotone.ph-axe:before {\n content: '\\e9fc';\n opacity: 0.2;\n}\n.ph-duotone.ph-axe:after {\n content: '\\e9fd';\n margin-left: -1em;\n}\n.ph-duotone.ph-baby:before {\n content: '\\e774';\n opacity: 0.2;\n}\n.ph-duotone.ph-baby:after {\n content: '\\e775';\n margin-left: -1em;\n}\n.ph-duotone.ph-baby-carriage:before {\n content: '\\e818';\n opacity: 0.2;\n}\n.ph-duotone.ph-baby-carriage:after {\n content: '\\e819';\n margin-left: -1em;\n}\n.ph-duotone.ph-backpack:before {\n content: '\\e922';\n opacity: 0.2;\n}\n.ph-duotone.ph-backpack:after {\n content: '\\e923';\n margin-left: -1em;\n}\n.ph-duotone.ph-backspace:before {\n content: '\\e0ae';\n opacity: 0.2;\n}\n.ph-duotone.ph-backspace:after {\n content: '\\e0af';\n margin-left: -1em;\n}\n.ph-duotone.ph-bag:before {\n content: '\\e0b0';\n opacity: 0.2;\n}\n.ph-duotone.ph-bag:after {\n content: '\\e0b1';\n margin-left: -1em;\n}\n.ph-duotone.ph-bag-simple:before {\n content: '\\e5e6';\n opacity: 0.2;\n}\n.ph-duotone.ph-bag-simple:after {\n content: '\\e5e7';\n margin-left: -1em;\n}\n.ph-duotone.ph-balloon:before {\n content: '\\e76c';\n opacity: 0.2;\n}\n.ph-duotone.ph-balloon:after {\n content: '\\e76d';\n margin-left: -1em;\n}\n.ph-duotone.ph-bandaids:before {\n content: '\\e0b2';\n opacity: 0.2;\n}\n.ph-duotone.ph-bandaids:after {\n content: '\\e0b3';\n margin-left: -1em;\n}\n.ph-duotone.ph-bank:before {\n content: '\\e0b4';\n opacity: 0.2;\n}\n.ph-duotone.ph-bank:after {\n content: '\\e0b5';\n margin-left: -1em;\n}\n.ph-duotone.ph-barbell:before {\n content: '\\e0b6';\n opacity: 0.2;\n}\n.ph-duotone.ph-barbell:after {\n content: '\\e0b7';\n margin-left: -1em;\n}\n.ph-duotone.ph-barcode:before {\n content: '\\e0b8';\n opacity: 0.2;\n}\n.ph-duotone.ph-barcode:after {\n content: '\\e0b9';\n margin-left: -1em;\n}\n.ph-duotone.ph-barn:before {\n content: '\\ec72';\n opacity: 0.2;\n}\n.ph-duotone.ph-barn:after {\n content: '\\ec73';\n margin-left: -1em;\n}\n.ph-duotone.ph-barricade:before {\n content: '\\e948';\n opacity: 0.2;\n}\n.ph-duotone.ph-barricade:after {\n content: '\\e949';\n margin-left: -1em;\n}\n.ph-duotone.ph-baseball:before {\n content: '\\e71a';\n opacity: 0.2;\n}\n.ph-duotone.ph-baseball:after {\n content: '\\e71b';\n margin-left: -1em;\n}\n.ph-duotone.ph-baseball-cap:before {\n content: '\\ea28';\n opacity: 0.2;\n}\n.ph-duotone.ph-baseball-cap:after {\n content: '\\ea29';\n margin-left: -1em;\n}\n.ph-duotone.ph-baseball-helmet:before {\n content: '\\ee4a';\n opacity: 0.2;\n}\n.ph-duotone.ph-baseball-helmet:after {\n content: '\\ee4b';\n margin-left: -1em;\n}\n.ph-duotone.ph-basket:before {\n content: '\\e964';\n opacity: 0.2;\n}\n.ph-duotone.ph-basket:after {\n content: '\\e965';\n margin-left: -1em;\n}\n.ph-duotone.ph-basketball:before {\n content: '\\e724';\n opacity: 0.2;\n}\n.ph-duotone.ph-basketball:after {\n content: '\\e725';\n margin-left: -1em;\n}\n.ph-duotone.ph-bathtub:before {\n content: '\\e81e';\n opacity: 0.2;\n}\n.ph-duotone.ph-bathtub:after {\n content: '\\e81f';\n margin-left: -1em;\n}\n.ph-duotone.ph-battery-charging:before {\n content: '\\e0ba';\n opacity: 0.2;\n}\n.ph-duotone.ph-battery-charging:after {\n content: '\\e0bb';\n margin-left: -1em;\n}\n.ph-duotone.ph-battery-charging-vertical:before {\n content: '\\e0bc';\n opacity: 0.2;\n}\n.ph-duotone.ph-battery-charging-vertical:after {\n content: '\\e0bd';\n margin-left: -1em;\n}\n.ph-duotone.ph-battery-empty:before {\n content: '\\e0be';\n opacity: 0.2;\n}\n.ph-duotone.ph-battery-empty:after {\n content: '\\e0bf';\n margin-left: -1em;\n}\n.ph-duotone.ph-battery-full:before {\n content: '\\e0c0';\n opacity: 0.2;\n}\n.ph-duotone.ph-battery-full:after {\n content: '\\e0c1';\n margin-left: -1em;\n}\n.ph-duotone.ph-battery-high:before {\n content: '\\e0c2';\n opacity: 0.2;\n}\n.ph-duotone.ph-battery-high:after {\n content: '\\e0c3';\n margin-left: -1em;\n}\n.ph-duotone.ph-battery-low:before {\n content: '\\e0c4';\n opacity: 0.2;\n}\n.ph-duotone.ph-battery-low:after {\n content: '\\e0c5';\n margin-left: -1em;\n}\n.ph-duotone.ph-battery-medium:before {\n content: '\\e0c6';\n opacity: 0.2;\n}\n.ph-duotone.ph-battery-medium:after {\n content: '\\e0c7';\n margin-left: -1em;\n}\n.ph-duotone.ph-battery-plus:before {\n content: '\\e808';\n opacity: 0.2;\n}\n.ph-duotone.ph-battery-plus:after {\n content: '\\e809';\n margin-left: -1em;\n}\n.ph-duotone.ph-battery-plus-vertical:before {\n content: '\\ec50';\n opacity: 0.2;\n}\n.ph-duotone.ph-battery-plus-vertical:after {\n content: '\\ec51';\n margin-left: -1em;\n}\n.ph-duotone.ph-battery-vertical-empty:before {\n content: '\\e7c6';\n opacity: 0.2;\n}\n.ph-duotone.ph-battery-vertical-empty:after {\n content: '\\e7c7';\n margin-left: -1em;\n}\n.ph-duotone.ph-battery-vertical-full:before {\n content: '\\e7c4';\n opacity: 0.2;\n}\n.ph-duotone.ph-battery-vertical-full:after {\n content: '\\e7c5';\n margin-left: -1em;\n}\n.ph-duotone.ph-battery-vertical-high:before {\n content: '\\e7c2';\n opacity: 0.2;\n}\n.ph-duotone.ph-battery-vertical-high:after {\n content: '\\e7c3';\n margin-left: -1em;\n}\n.ph-duotone.ph-battery-vertical-low:before {\n content: '\\e7be';\n opacity: 0.2;\n}\n.ph-duotone.ph-battery-vertical-low:after {\n content: '\\e7bf';\n margin-left: -1em;\n}\n.ph-duotone.ph-battery-vertical-medium:before {\n content: '\\e7c0';\n opacity: 0.2;\n}\n.ph-duotone.ph-battery-vertical-medium:after {\n content: '\\e7c1';\n margin-left: -1em;\n}\n.ph-duotone.ph-battery-warning:before {\n content: '\\e0c8';\n opacity: 0.2;\n}\n.ph-duotone.ph-battery-warning:after {\n content: '\\e0c9';\n margin-left: -1em;\n}\n.ph-duotone.ph-battery-warning-vertical:before {\n content: '\\e0ca';\n opacity: 0.2;\n}\n.ph-duotone.ph-battery-warning-vertical:after {\n content: '\\e0cb';\n margin-left: -1em;\n}\n.ph-duotone.ph-beach-ball:before {\n content: '\\ed24';\n opacity: 0.2;\n}\n.ph-duotone.ph-beach-ball:after {\n content: '\\ed25';\n margin-left: -1em;\n}\n.ph-duotone.ph-beanie:before {\n content: '\\ea2a';\n opacity: 0.2;\n}\n.ph-duotone.ph-beanie:after {\n content: '\\ea2b';\n margin-left: -1em;\n}\n.ph-duotone.ph-bed:before {\n content: '\\e0cc';\n opacity: 0.2;\n}\n.ph-duotone.ph-bed:after {\n content: '\\e0cd';\n margin-left: -1em;\n}\n.ph-duotone.ph-beer-bottle:before {\n content: '\\e7b0';\n opacity: 0.2;\n}\n.ph-duotone.ph-beer-bottle:after {\n content: '\\e7b1';\n margin-left: -1em;\n}\n.ph-duotone.ph-beer-stein:before {\n content: '\\eb62';\n opacity: 0.2;\n}\n.ph-duotone.ph-beer-stein:after {\n content: '\\eb63';\n margin-left: -1em;\n}\n.ph-duotone.ph-behance-logo:before {\n content: '\\e7f4';\n opacity: 0.2;\n}\n.ph-duotone.ph-behance-logo:after {\n content: '\\e7f5';\n margin-left: -1em;\n}\n.ph-duotone.ph-bell:before {\n content: '\\e0ce';\n opacity: 0.2;\n}\n.ph-duotone.ph-bell:after {\n content: '\\e0cf';\n margin-left: -1em;\n}\n.ph-duotone.ph-bell-ringing:before {\n content: '\\e5e8';\n opacity: 0.2;\n}\n.ph-duotone.ph-bell-ringing:after {\n content: '\\e5e9';\n margin-left: -1em;\n}\n.ph-duotone.ph-bell-simple:before {\n content: '\\e0d0';\n opacity: 0.2;\n}\n.ph-duotone.ph-bell-simple:after {\n content: '\\e0d1';\n margin-left: -1em;\n}\n.ph-duotone.ph-bell-simple-ringing:before {\n content: '\\e5ea';\n opacity: 0.2;\n}\n.ph-duotone.ph-bell-simple-ringing:after {\n content: '\\e5eb';\n margin-left: -1em;\n}\n.ph-duotone.ph-bell-simple-slash:before {\n content: '\\e0d2';\n opacity: 0.2;\n}\n.ph-duotone.ph-bell-simple-slash:after {\n content: '\\e0d3';\n margin-left: -1em;\n}\n.ph-duotone.ph-bell-simple-z:before {\n content: '\\e5ec';\n opacity: 0.2;\n}\n.ph-duotone.ph-bell-simple-z:after {\n content: '\\e5ed';\n margin-left: -1em;\n}\n.ph-duotone.ph-bell-slash:before {\n content: '\\e0d4';\n opacity: 0.2;\n}\n.ph-duotone.ph-bell-slash:after {\n content: '\\e0d5';\n margin-left: -1em;\n}\n.ph-duotone.ph-bell-z:before {\n content: '\\e5ee';\n opacity: 0.2;\n}\n.ph-duotone.ph-bell-z:after {\n content: '\\e5ef';\n margin-left: -1em;\n}\n.ph-duotone.ph-belt:before {\n content: '\\ea2c';\n opacity: 0.2;\n}\n.ph-duotone.ph-belt:after {\n content: '\\ea2d';\n margin-left: -1em;\n}\n.ph-duotone.ph-bezier-curve:before {\n content: '\\eb00';\n opacity: 0.2;\n}\n.ph-duotone.ph-bezier-curve:after {\n content: '\\eb01';\n margin-left: -1em;\n}\n.ph-duotone.ph-bicycle:before {\n content: '\\e0d6';\n opacity: 0.2;\n}\n.ph-duotone.ph-bicycle:after {\n content: '\\e0d7';\n margin-left: -1em;\n}\n.ph-duotone.ph-binary:before {\n content: '\\ee60';\n opacity: 0.2;\n}\n.ph-duotone.ph-binary:after {\n content: '\\ee61';\n margin-left: -1em;\n}\n.ph-duotone.ph-binoculars:before {\n content: '\\ea64';\n opacity: 0.2;\n}\n.ph-duotone.ph-binoculars:after {\n content: '\\ea65';\n margin-left: -1em;\n}\n.ph-duotone.ph-biohazard:before {\n content: '\\e9e0';\n opacity: 0.2;\n}\n.ph-duotone.ph-biohazard:after {\n content: '\\e9e1';\n margin-left: -1em;\n}\n.ph-duotone.ph-bird:before {\n content: '\\e72c';\n opacity: 0.2;\n}\n.ph-duotone.ph-bird:after {\n content: '\\e72d';\n margin-left: -1em;\n}\n.ph-duotone.ph-blueprint:before {\n content: '\\eda0';\n opacity: 0.2;\n}\n.ph-duotone.ph-blueprint:after {\n content: '\\eda1';\n margin-left: -1em;\n}\n.ph-duotone.ph-bluetooth:before {\n content: '\\e0da';\n opacity: 0.2;\n}\n.ph-duotone.ph-bluetooth:after {\n content: '\\e0db';\n margin-left: -1em;\n}\n.ph-duotone.ph-bluetooth-connected:before {\n content: '\\e0dc';\n opacity: 0.2;\n}\n.ph-duotone.ph-bluetooth-connected:after {\n content: '\\e0dd';\n margin-left: -1em;\n}\n.ph-duotone.ph-bluetooth-slash:before {\n content: '\\e0de';\n opacity: 0.2;\n}\n.ph-duotone.ph-bluetooth-slash:after {\n content: '\\e0df';\n margin-left: -1em;\n}\n.ph-duotone.ph-bluetooth-x:before {\n content: '\\e0e0';\n opacity: 0.2;\n}\n.ph-duotone.ph-bluetooth-x:after {\n content: '\\e0e1';\n margin-left: -1em;\n}\n.ph-duotone.ph-boat:before {\n content: '\\e786';\n opacity: 0.2;\n}\n.ph-duotone.ph-boat:after {\n content: '\\e787';\n margin-left: -1em;\n}\n.ph-duotone.ph-bomb:before {\n content: '\\ee0a';\n opacity: 0.2;\n}\n.ph-duotone.ph-bomb:after {\n content: '\\ee0b';\n margin-left: -1em;\n}\n.ph-duotone.ph-bone:before {\n content: '\\e7f2';\n opacity: 0.2;\n}\n.ph-duotone.ph-bone:after {\n content: '\\e7f3';\n margin-left: -1em;\n}\n.ph-duotone.ph-book:before {\n content: '\\e0e2';\n opacity: 0.2;\n}\n.ph-duotone.ph-book:after {\n content: '\\e0e3';\n margin-left: -1em;\n}\n.ph-duotone.ph-book-bookmark:before {\n content: '\\e0e4';\n opacity: 0.2;\n}\n.ph-duotone.ph-book-bookmark:after {\n content: '\\e0e5';\n margin-left: -1em;\n}\n.ph-duotone.ph-book-open:before {\n content: '\\e0e6';\n opacity: 0.2;\n}\n.ph-duotone.ph-book-open:after {\n content: '\\e0e7';\n margin-left: -1em;\n}\n.ph-duotone.ph-book-open-text:before {\n content: '\\e8f2';\n opacity: 0.2;\n}\n.ph-duotone.ph-book-open-text:after {\n content: '\\e8f3';\n margin-left: -1em;\n}\n.ph-duotone.ph-book-open-user:before {\n content: '\\ede0';\n opacity: 0.2;\n}\n.ph-duotone.ph-book-open-user:after {\n content: '\\ede1';\n margin-left: -1em;\n}\n.ph-duotone.ph-bookmark:before {\n content: '\\e0e8';\n opacity: 0.2;\n}\n.ph-duotone.ph-bookmark:after {\n content: '\\e0e9';\n margin-left: -1em;\n}\n.ph-duotone.ph-bookmark-simple:before {\n content: '\\e0ea';\n opacity: 0.2;\n}\n.ph-duotone.ph-bookmark-simple:after {\n content: '\\e0eb';\n margin-left: -1em;\n}\n.ph-duotone.ph-bookmarks:before {\n content: '\\e0ec';\n opacity: 0.2;\n}\n.ph-duotone.ph-bookmarks:after {\n content: '\\e0ed';\n margin-left: -1em;\n}\n.ph-duotone.ph-bookmarks-simple:before {\n content: '\\e5f0';\n opacity: 0.2;\n}\n.ph-duotone.ph-bookmarks-simple:after {\n content: '\\e5f1';\n margin-left: -1em;\n}\n.ph-duotone.ph-books:before {\n content: '\\e758';\n opacity: 0.2;\n}\n.ph-duotone.ph-books:after {\n content: '\\e759';\n margin-left: -1em;\n}\n.ph-duotone.ph-boot:before {\n content: '\\ecca';\n opacity: 0.2;\n}\n.ph-duotone.ph-boot:after {\n content: '\\eccb';\n margin-left: -1em;\n}\n.ph-duotone.ph-boules:before {\n content: '\\e722';\n opacity: 0.2;\n}\n.ph-duotone.ph-boules:after {\n content: '\\e723';\n margin-left: -1em;\n}\n.ph-duotone.ph-bounding-box:before {\n content: '\\e6ce';\n opacity: 0.2;\n}\n.ph-duotone.ph-bounding-box:after {\n content: '\\e6cf';\n margin-left: -1em;\n}\n.ph-duotone.ph-bowl-food:before {\n content: '\\eaa4';\n opacity: 0.2;\n}\n.ph-duotone.ph-bowl-food:after {\n content: '\\eaa5';\n margin-left: -1em;\n}\n.ph-duotone.ph-bowl-steam:before {\n content: '\\e8e4';\n opacity: 0.2;\n}\n.ph-duotone.ph-bowl-steam:after {\n content: '\\e8e5';\n margin-left: -1em;\n}\n.ph-duotone.ph-bowling-ball:before {\n content: '\\ea34';\n opacity: 0.2;\n}\n.ph-duotone.ph-bowling-ball:after {\n content: '\\ea35';\n margin-left: -1em;\n}\n.ph-duotone.ph-box-arrow-down:before {\n content: '\\e00e';\n opacity: 0.2;\n}\n.ph-duotone.ph-box-arrow-down:after {\n content: '\\e00f';\n margin-left: -1em;\n}\n.ph-duotone.ph-box-arrow-up:before {\n content: '\\ee54';\n opacity: 0.2;\n}\n.ph-duotone.ph-box-arrow-up:after {\n content: '\\ee55';\n margin-left: -1em;\n}\n.ph-duotone.ph-boxing-glove:before {\n content: '\\ea36';\n opacity: 0.2;\n}\n.ph-duotone.ph-boxing-glove:after {\n content: '\\ea37';\n margin-left: -1em;\n}\n.ph-duotone.ph-brackets-angle:before {\n content: '\\e862';\n opacity: 0.2;\n}\n.ph-duotone.ph-brackets-angle:after {\n content: '\\e863';\n margin-left: -1em;\n}\n.ph-duotone.ph-brackets-curly:before {\n content: '\\e860';\n opacity: 0.2;\n}\n.ph-duotone.ph-brackets-curly:after {\n content: '\\e861';\n margin-left: -1em;\n}\n.ph-duotone.ph-brackets-round:before {\n content: '\\e864';\n opacity: 0.2;\n}\n.ph-duotone.ph-brackets-round:after {\n content: '\\e865';\n margin-left: -1em;\n}\n.ph-duotone.ph-brackets-square:before {\n content: '\\e85e';\n opacity: 0.2;\n}\n.ph-duotone.ph-brackets-square:after {\n content: '\\e85f';\n margin-left: -1em;\n}\n.ph-duotone.ph-brain:before {\n content: '\\e74e';\n opacity: 0.2;\n}\n.ph-duotone.ph-brain:after {\n content: '\\e74f';\n margin-left: -1em;\n}\n.ph-duotone.ph-brandy:before {\n content: '\\e6b4';\n opacity: 0.2;\n}\n.ph-duotone.ph-brandy:after {\n content: '\\e6b5';\n margin-left: -1em;\n}\n.ph-duotone.ph-bread:before {\n content: '\\e81c';\n opacity: 0.2;\n}\n.ph-duotone.ph-bread:after {\n content: '\\e81d';\n margin-left: -1em;\n}\n.ph-duotone.ph-bridge:before {\n content: '\\ea68';\n opacity: 0.2;\n}\n.ph-duotone.ph-bridge:after {\n content: '\\ea69';\n margin-left: -1em;\n}\n.ph-duotone.ph-briefcase:before {\n content: '\\e0ee';\n opacity: 0.2;\n}\n.ph-duotone.ph-briefcase:after {\n content: '\\e0ef';\n margin-left: -1em;\n}\n.ph-duotone.ph-briefcase-metal:before {\n content: '\\e5f2';\n opacity: 0.2;\n}\n.ph-duotone.ph-briefcase-metal:after {\n content: '\\e5f3';\n margin-left: -1em;\n}\n.ph-duotone.ph-broadcast:before {\n content: '\\e0f2';\n opacity: 0.2;\n}\n.ph-duotone.ph-broadcast:after {\n content: '\\e0f3';\n margin-left: -1em;\n}\n.ph-duotone.ph-broom:before {\n content: '\\ec54';\n opacity: 0.2;\n}\n.ph-duotone.ph-broom:after {\n content: '\\ec55';\n margin-left: -1em;\n}\n.ph-duotone.ph-browser:before {\n content: '\\e0f4';\n opacity: 0.2;\n}\n.ph-duotone.ph-browser:after {\n content: '\\e0f5';\n margin-left: -1em;\n}\n.ph-duotone.ph-browsers:before {\n content: '\\e0f6';\n opacity: 0.2;\n}\n.ph-duotone.ph-browsers:after {\n content: '\\e0f7';\n margin-left: -1em;\n}\n.ph-duotone.ph-bug:before {\n content: '\\e5f4';\n opacity: 0.2;\n}\n.ph-duotone.ph-bug:after {\n content: '\\e5f5';\n margin-left: -1em;\n}\n.ph-duotone.ph-bug-beetle:before {\n content: '\\e5f6';\n opacity: 0.2;\n}\n.ph-duotone.ph-bug-beetle:after {\n content: '\\e5f7';\n margin-left: -1em;\n}\n.ph-duotone.ph-bug-droid:before {\n content: '\\e5f8';\n opacity: 0.2;\n}\n.ph-duotone.ph-bug-droid:after {\n content: '\\e5f9';\n margin-left: -1em;\n}\n.ph-duotone.ph-building:before {\n content: '\\e100';\n opacity: 0.2;\n}\n.ph-duotone.ph-building:after {\n content: '\\e101';\n margin-left: -1em;\n}\n.ph-duotone.ph-building-apartment:before {\n content: '\\e0fe';\n opacity: 0.2;\n}\n.ph-duotone.ph-building-apartment:after {\n content: '\\e103';\n margin-left: -1em;\n}\n.ph-duotone.ph-building-office:before {\n content: '\\e0ff';\n opacity: 0.2;\n}\n.ph-duotone.ph-building-office:after {\n content: '\\e104';\n margin-left: -1em;\n}\n.ph-duotone.ph-buildings:before {\n content: '\\e102';\n opacity: 0.2;\n}\n.ph-duotone.ph-buildings:after {\n content: '\\e105';\n margin-left: -1em;\n}\n.ph-duotone.ph-bulldozer:before {\n content: '\\ec6c';\n opacity: 0.2;\n}\n.ph-duotone.ph-bulldozer:after {\n content: '\\ec6d';\n margin-left: -1em;\n}\n.ph-duotone.ph-bus:before {\n content: '\\e106';\n opacity: 0.2;\n}\n.ph-duotone.ph-bus:after {\n content: '\\e107';\n margin-left: -1em;\n}\n.ph-duotone.ph-butterfly:before {\n content: '\\ea6e';\n opacity: 0.2;\n}\n.ph-duotone.ph-butterfly:after {\n content: '\\ea6f';\n margin-left: -1em;\n}\n.ph-duotone.ph-cable-car:before {\n content: '\\e49c';\n opacity: 0.2;\n}\n.ph-duotone.ph-cable-car:after {\n content: '\\e49d';\n margin-left: -1em;\n}\n.ph-duotone.ph-cactus:before {\n content: '\\e918';\n opacity: 0.2;\n}\n.ph-duotone.ph-cactus:after {\n content: '\\e919';\n margin-left: -1em;\n}\n.ph-duotone.ph-cake:before {\n content: '\\e780';\n opacity: 0.2;\n}\n.ph-duotone.ph-cake:after {\n content: '\\e781';\n margin-left: -1em;\n}\n.ph-duotone.ph-calculator:before {\n content: '\\e538';\n opacity: 0.2;\n}\n.ph-duotone.ph-calculator:after {\n content: '\\e539';\n margin-left: -1em;\n}\n.ph-duotone.ph-calendar:before {\n content: '\\e108';\n opacity: 0.2;\n}\n.ph-duotone.ph-calendar:after {\n content: '\\e109';\n margin-left: -1em;\n}\n.ph-duotone.ph-calendar-blank:before {\n content: '\\e10a';\n opacity: 0.2;\n}\n.ph-duotone.ph-calendar-blank:after {\n content: '\\e10b';\n margin-left: -1em;\n}\n.ph-duotone.ph-calendar-check:before {\n content: '\\e712';\n opacity: 0.2;\n}\n.ph-duotone.ph-calendar-check:after {\n content: '\\e713';\n margin-left: -1em;\n}\n.ph-duotone.ph-calendar-dot:before {\n content: '\\e7b2';\n opacity: 0.2;\n}\n.ph-duotone.ph-calendar-dot:after {\n content: '\\e7b3';\n margin-left: -1em;\n}\n.ph-duotone.ph-calendar-dots:before {\n content: '\\e7b4';\n opacity: 0.2;\n}\n.ph-duotone.ph-calendar-dots:after {\n content: '\\e7b5';\n margin-left: -1em;\n}\n.ph-duotone.ph-calendar-heart:before {\n content: '\\e8b0';\n opacity: 0.2;\n}\n.ph-duotone.ph-calendar-heart:after {\n content: '\\e8b1';\n margin-left: -1em;\n}\n.ph-duotone.ph-calendar-minus:before {\n content: '\\ea14';\n opacity: 0.2;\n}\n.ph-duotone.ph-calendar-minus:after {\n content: '\\ea15';\n margin-left: -1em;\n}\n.ph-duotone.ph-calendar-plus:before {\n content: '\\e714';\n opacity: 0.2;\n}\n.ph-duotone.ph-calendar-plus:after {\n content: '\\e715';\n margin-left: -1em;\n}\n.ph-duotone.ph-calendar-slash:before {\n content: '\\ea12';\n opacity: 0.2;\n}\n.ph-duotone.ph-calendar-slash:after {\n content: '\\ea13';\n margin-left: -1em;\n}\n.ph-duotone.ph-calendar-star:before {\n content: '\\e8b2';\n opacity: 0.2;\n}\n.ph-duotone.ph-calendar-star:after {\n content: '\\e8b3';\n margin-left: -1em;\n}\n.ph-duotone.ph-calendar-x:before {\n content: '\\e10c';\n opacity: 0.2;\n}\n.ph-duotone.ph-calendar-x:after {\n content: '\\e10d';\n margin-left: -1em;\n}\n.ph-duotone.ph-call-bell:before {\n content: '\\e7de';\n opacity: 0.2;\n}\n.ph-duotone.ph-call-bell:after {\n content: '\\e7df';\n margin-left: -1em;\n}\n.ph-duotone.ph-camera:before {\n content: '\\e10e';\n opacity: 0.2;\n}\n.ph-duotone.ph-camera:after {\n content: '\\e10f';\n margin-left: -1em;\n}\n.ph-duotone.ph-camera-plus:before {\n content: '\\ec58';\n opacity: 0.2;\n}\n.ph-duotone.ph-camera-plus:after {\n content: '\\ec59';\n margin-left: -1em;\n}\n.ph-duotone.ph-camera-rotate:before {\n content: '\\e7a4';\n opacity: 0.2;\n}\n.ph-duotone.ph-camera-rotate:after {\n content: '\\e7a5';\n margin-left: -1em;\n}\n.ph-duotone.ph-camera-slash:before {\n content: '\\e110';\n opacity: 0.2;\n}\n.ph-duotone.ph-camera-slash:after {\n content: '\\e111';\n margin-left: -1em;\n}\n.ph-duotone.ph-campfire:before {\n content: '\\e9d8';\n opacity: 0.2;\n}\n.ph-duotone.ph-campfire:after {\n content: '\\e9d9';\n margin-left: -1em;\n}\n.ph-duotone.ph-car:before {\n content: '\\e112';\n opacity: 0.2;\n}\n.ph-duotone.ph-car:after {\n content: '\\e113';\n margin-left: -1em;\n}\n.ph-duotone.ph-car-battery:before {\n content: '\\ee30';\n opacity: 0.2;\n}\n.ph-duotone.ph-car-battery:after {\n content: '\\ee31';\n margin-left: -1em;\n}\n.ph-duotone.ph-car-profile:before {\n content: '\\e8cc';\n opacity: 0.2;\n}\n.ph-duotone.ph-car-profile:after {\n content: '\\e8cd';\n margin-left: -1em;\n}\n.ph-duotone.ph-car-simple:before {\n content: '\\e114';\n opacity: 0.2;\n}\n.ph-duotone.ph-car-simple:after {\n content: '\\e115';\n margin-left: -1em;\n}\n.ph-duotone.ph-cardholder:before {\n content: '\\e5fa';\n opacity: 0.2;\n}\n.ph-duotone.ph-cardholder:after {\n content: '\\e5fb';\n margin-left: -1em;\n}\n.ph-duotone.ph-cards:before {\n content: '\\e0f8';\n opacity: 0.2;\n}\n.ph-duotone.ph-cards:after {\n content: '\\e0f9';\n margin-left: -1em;\n}\n.ph-duotone.ph-cards-three:before {\n content: '\\ee50';\n opacity: 0.2;\n}\n.ph-duotone.ph-cards-three:after {\n content: '\\ee51';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-circle-double-down:before {\n content: '\\e116';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-circle-double-down:after {\n content: '\\e117';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-circle-double-left:before {\n content: '\\e118';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-circle-double-left:after {\n content: '\\e119';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-circle-double-right:before {\n content: '\\e11a';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-circle-double-right:after {\n content: '\\e11b';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-circle-double-up:before {\n content: '\\e11c';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-circle-double-up:after {\n content: '\\e11d';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-circle-down:before {\n content: '\\e11e';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-circle-down:after {\n content: '\\e11f';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-circle-left:before {\n content: '\\e120';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-circle-left:after {\n content: '\\e121';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-circle-right:before {\n content: '\\e122';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-circle-right:after {\n content: '\\e123';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-circle-up:before {\n content: '\\e124';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-circle-up:after {\n content: '\\e125';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-circle-up-down:before {\n content: '\\e13e';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-circle-up-down:after {\n content: '\\e13f';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-double-down:before {\n content: '\\e126';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-double-down:after {\n content: '\\e127';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-double-left:before {\n content: '\\e128';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-double-left:after {\n content: '\\e129';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-double-right:before {\n content: '\\e12a';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-double-right:after {\n content: '\\e12b';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-double-up:before {\n content: '\\e12c';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-double-up:after {\n content: '\\e12d';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-down:before {\n content: '\\e136';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-down:after {\n content: '\\e137';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-left:before {\n content: '\\e138';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-left:after {\n content: '\\e139';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-line-down:before {\n content: '\\e134';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-line-down:after {\n content: '\\e135';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-line-left:before {\n content: '\\e132';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-line-left:after {\n content: '\\e133';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-line-right:before {\n content: '\\e130';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-line-right:after {\n content: '\\e131';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-line-up:before {\n content: '\\e12e';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-line-up:after {\n content: '\\e12f';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-right:before {\n content: '\\e13a';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-right:after {\n content: '\\e13b';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-up:before {\n content: '\\e13c';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-up:after {\n content: '\\e13d';\n margin-left: -1em;\n}\n.ph-duotone.ph-caret-up-down:before {\n content: '\\e140';\n opacity: 0.2;\n}\n.ph-duotone.ph-caret-up-down:after {\n content: '\\e141';\n margin-left: -1em;\n}\n.ph-duotone.ph-carrot:before {\n content: '\\ed38';\n opacity: 0.2;\n}\n.ph-duotone.ph-carrot:after {\n content: '\\ed39';\n margin-left: -1em;\n}\n.ph-duotone.ph-cash-register:before {\n content: '\\ed80';\n opacity: 0.2;\n}\n.ph-duotone.ph-cash-register:after {\n content: '\\ed81';\n margin-left: -1em;\n}\n.ph-duotone.ph-cassette-tape:before {\n content: '\\ed2e';\n opacity: 0.2;\n}\n.ph-duotone.ph-cassette-tape:after {\n content: '\\ed2f';\n margin-left: -1em;\n}\n.ph-duotone.ph-castle-turret:before {\n content: '\\e9d0';\n opacity: 0.2;\n}\n.ph-duotone.ph-castle-turret:after {\n content: '\\e9d1';\n margin-left: -1em;\n}\n.ph-duotone.ph-cat:before {\n content: '\\e748';\n opacity: 0.2;\n}\n.ph-duotone.ph-cat:after {\n content: '\\e749';\n margin-left: -1em;\n}\n.ph-duotone.ph-cell-signal-full:before {\n content: '\\e142';\n opacity: 0.2;\n}\n.ph-duotone.ph-cell-signal-full:after {\n content: '\\e143';\n margin-left: -1em;\n}\n.ph-duotone.ph-cell-signal-high:before {\n content: '\\e144';\n opacity: 0.2;\n}\n.ph-duotone.ph-cell-signal-high:after {\n content: '\\e145';\n margin-left: -1em;\n}\n.ph-duotone.ph-cell-signal-low:before {\n content: '\\e146';\n opacity: 0.2;\n}\n.ph-duotone.ph-cell-signal-low:after {\n content: '\\e147';\n margin-left: -1em;\n}\n.ph-duotone.ph-cell-signal-medium:before {\n content: '\\e148';\n opacity: 0.2;\n}\n.ph-duotone.ph-cell-signal-medium:after {\n content: '\\e149';\n margin-left: -1em;\n}\n.ph-duotone.ph-cell-signal-none:before {\n content: '\\e14a';\n color: #444;\n}\n.ph-duotone.ph-cell-signal-slash:before {\n content: '\\e14c';\n opacity: 0.2;\n}\n.ph-duotone.ph-cell-signal-slash:after {\n content: '\\e14d';\n margin-left: -1em;\n}\n.ph-duotone.ph-cell-signal-x:before {\n content: '\\e14e';\n opacity: 0.2;\n}\n.ph-duotone.ph-cell-signal-x:after {\n content: '\\e14f';\n margin-left: -1em;\n}\n.ph-duotone.ph-cell-tower:before {\n content: '\\ebaa';\n opacity: 0.2;\n}\n.ph-duotone.ph-cell-tower:after {\n content: '\\ebab';\n margin-left: -1em;\n}\n.ph-duotone.ph-certificate:before {\n content: '\\e766';\n opacity: 0.2;\n}\n.ph-duotone.ph-certificate:after {\n content: '\\e767';\n margin-left: -1em;\n}\n.ph-duotone.ph-chair:before {\n content: '\\e950';\n opacity: 0.2;\n}\n.ph-duotone.ph-chair:after {\n content: '\\e951';\n margin-left: -1em;\n}\n.ph-duotone.ph-chalkboard:before {\n content: '\\e5fc';\n opacity: 0.2;\n}\n.ph-duotone.ph-chalkboard:after {\n content: '\\e5fd';\n margin-left: -1em;\n}\n.ph-duotone.ph-chalkboard-simple:before {\n content: '\\e5fe';\n opacity: 0.2;\n}\n.ph-duotone.ph-chalkboard-simple:after {\n content: '\\e5ff';\n margin-left: -1em;\n}\n.ph-duotone.ph-chalkboard-teacher:before {\n content: '\\e600';\n opacity: 0.2;\n}\n.ph-duotone.ph-chalkboard-teacher:after {\n content: '\\e601';\n margin-left: -1em;\n}\n.ph-duotone.ph-champagne:before {\n content: '\\eaca';\n opacity: 0.2;\n}\n.ph-duotone.ph-champagne:after {\n content: '\\eacb';\n margin-left: -1em;\n}\n.ph-duotone.ph-charging-station:before {\n content: '\\e8d0';\n opacity: 0.2;\n}\n.ph-duotone.ph-charging-station:after {\n content: '\\e8d1';\n margin-left: -1em;\n}\n.ph-duotone.ph-chart-bar:before {\n content: '\\e150';\n opacity: 0.2;\n}\n.ph-duotone.ph-chart-bar:after {\n content: '\\e151';\n margin-left: -1em;\n}\n.ph-duotone.ph-chart-bar-horizontal:before {\n content: '\\e152';\n opacity: 0.2;\n}\n.ph-duotone.ph-chart-bar-horizontal:after {\n content: '\\e153';\n margin-left: -1em;\n}\n.ph-duotone.ph-chart-donut:before {\n content: '\\eaa6';\n opacity: 0.2;\n}\n.ph-duotone.ph-chart-donut:after {\n content: '\\eaa7';\n margin-left: -1em;\n}\n.ph-duotone.ph-chart-line:before {\n content: '\\e154';\n opacity: 0.2;\n}\n.ph-duotone.ph-chart-line:after {\n content: '\\e155';\n margin-left: -1em;\n}\n.ph-duotone.ph-chart-line-down:before {\n content: '\\e8b6';\n opacity: 0.2;\n}\n.ph-duotone.ph-chart-line-down:after {\n content: '\\e8b7';\n margin-left: -1em;\n}\n.ph-duotone.ph-chart-line-up:before {\n content: '\\e156';\n opacity: 0.2;\n}\n.ph-duotone.ph-chart-line-up:after {\n content: '\\e157';\n margin-left: -1em;\n}\n.ph-duotone.ph-chart-pie:before {\n content: '\\e158';\n opacity: 0.2;\n}\n.ph-duotone.ph-chart-pie:after {\n content: '\\e159';\n margin-left: -1em;\n}\n.ph-duotone.ph-chart-pie-slice:before {\n content: '\\e15a';\n opacity: 0.2;\n}\n.ph-duotone.ph-chart-pie-slice:after {\n content: '\\e15b';\n margin-left: -1em;\n}\n.ph-duotone.ph-chart-polar:before {\n content: '\\eaa8';\n opacity: 0.2;\n}\n.ph-duotone.ph-chart-polar:after {\n content: '\\eaa9';\n margin-left: -1em;\n}\n.ph-duotone.ph-chart-scatter:before {\n content: '\\eaac';\n opacity: 0.2;\n}\n.ph-duotone.ph-chart-scatter:after {\n content: '\\eaad';\n margin-left: -1em;\n}\n.ph-duotone.ph-chat:before {\n content: '\\e15c';\n opacity: 0.2;\n}\n.ph-duotone.ph-chat:after {\n content: '\\e15d';\n margin-left: -1em;\n}\n.ph-duotone.ph-chat-centered:before {\n content: '\\e160';\n opacity: 0.2;\n}\n.ph-duotone.ph-chat-centered:after {\n content: '\\e161';\n margin-left: -1em;\n}\n.ph-duotone.ph-chat-centered-dots:before {\n content: '\\e164';\n opacity: 0.2;\n}\n.ph-duotone.ph-chat-centered-dots:after {\n content: '\\e165';\n margin-left: -1em;\n}\n.ph-duotone.ph-chat-centered-slash:before {\n content: '\\e162';\n opacity: 0.2;\n}\n.ph-duotone.ph-chat-centered-slash:after {\n content: '\\e163';\n margin-left: -1em;\n}\n.ph-duotone.ph-chat-centered-text:before {\n content: '\\e166';\n opacity: 0.2;\n}\n.ph-duotone.ph-chat-centered-text:after {\n content: '\\e167';\n margin-left: -1em;\n}\n.ph-duotone.ph-chat-circle:before {\n content: '\\e168';\n opacity: 0.2;\n}\n.ph-duotone.ph-chat-circle:after {\n content: '\\e169';\n margin-left: -1em;\n}\n.ph-duotone.ph-chat-circle-dots:before {\n content: '\\e16c';\n opacity: 0.2;\n}\n.ph-duotone.ph-chat-circle-dots:after {\n content: '\\e16d';\n margin-left: -1em;\n}\n.ph-duotone.ph-chat-circle-slash:before {\n content: '\\e16a';\n opacity: 0.2;\n}\n.ph-duotone.ph-chat-circle-slash:after {\n content: '\\e16b';\n margin-left: -1em;\n}\n.ph-duotone.ph-chat-circle-text:before {\n content: '\\e16e';\n opacity: 0.2;\n}\n.ph-duotone.ph-chat-circle-text:after {\n content: '\\e16f';\n margin-left: -1em;\n}\n.ph-duotone.ph-chat-dots:before {\n content: '\\e170';\n opacity: 0.2;\n}\n.ph-duotone.ph-chat-dots:after {\n content: '\\e171';\n margin-left: -1em;\n}\n.ph-duotone.ph-chat-slash:before {\n content: '\\e15e';\n opacity: 0.2;\n}\n.ph-duotone.ph-chat-slash:after {\n content: '\\e15f';\n margin-left: -1em;\n}\n.ph-duotone.ph-chat-teardrop:before {\n content: '\\e172';\n opacity: 0.2;\n}\n.ph-duotone.ph-chat-teardrop:after {\n content: '\\e173';\n margin-left: -1em;\n}\n.ph-duotone.ph-chat-teardrop-dots:before {\n content: '\\e176';\n opacity: 0.2;\n}\n.ph-duotone.ph-chat-teardrop-dots:after {\n content: '\\e177';\n margin-left: -1em;\n}\n.ph-duotone.ph-chat-teardrop-slash:before {\n content: '\\e174';\n opacity: 0.2;\n}\n.ph-duotone.ph-chat-teardrop-slash:after {\n content: '\\e175';\n margin-left: -1em;\n}\n.ph-duotone.ph-chat-teardrop-text:before {\n content: '\\e178';\n opacity: 0.2;\n}\n.ph-duotone.ph-chat-teardrop-text:after {\n content: '\\e179';\n margin-left: -1em;\n}\n.ph-duotone.ph-chat-text:before {\n content: '\\e17a';\n opacity: 0.2;\n}\n.ph-duotone.ph-chat-text:after {\n content: '\\e17b';\n margin-left: -1em;\n}\n.ph-duotone.ph-chats:before {\n content: '\\e17c';\n opacity: 0.2;\n}\n.ph-duotone.ph-chats:after {\n content: '\\e17d';\n margin-left: -1em;\n}\n.ph-duotone.ph-chats-circle:before {\n content: '\\e17e';\n opacity: 0.2;\n}\n.ph-duotone.ph-chats-circle:after {\n content: '\\e17f';\n margin-left: -1em;\n}\n.ph-duotone.ph-chats-teardrop:before {\n content: '\\e180';\n opacity: 0.2;\n}\n.ph-duotone.ph-chats-teardrop:after {\n content: '\\e181';\n margin-left: -1em;\n}\n.ph-duotone.ph-check:before {\n content: '\\e182';\n opacity: 0.2;\n}\n.ph-duotone.ph-check:after {\n content: '\\e183';\n margin-left: -1em;\n}\n.ph-duotone.ph-check-circle:before {\n content: '\\e184';\n opacity: 0.2;\n}\n.ph-duotone.ph-check-circle:after {\n content: '\\e185';\n margin-left: -1em;\n}\n.ph-duotone.ph-check-fat:before {\n content: '\\eba6';\n opacity: 0.2;\n}\n.ph-duotone.ph-check-fat:after {\n content: '\\eba7';\n margin-left: -1em;\n}\n.ph-duotone.ph-check-square:before {\n content: '\\e186';\n opacity: 0.2;\n}\n.ph-duotone.ph-check-square:after {\n content: '\\e187';\n margin-left: -1em;\n}\n.ph-duotone.ph-check-square-offset:before {\n content: '\\e188';\n opacity: 0.2;\n}\n.ph-duotone.ph-check-square-offset:after {\n content: '\\e189';\n margin-left: -1em;\n}\n.ph-duotone.ph-checkerboard:before {\n content: '\\e8c4';\n opacity: 0.2;\n}\n.ph-duotone.ph-checkerboard:after {\n content: '\\e8c5';\n margin-left: -1em;\n}\n.ph-duotone.ph-checks:before {\n content: '\\e53a';\n opacity: 0.2;\n}\n.ph-duotone.ph-checks:after {\n content: '\\e53b';\n margin-left: -1em;\n}\n.ph-duotone.ph-cheers:before {\n content: '\\ea4a';\n opacity: 0.2;\n}\n.ph-duotone.ph-cheers:after {\n content: '\\ea4b';\n margin-left: -1em;\n}\n.ph-duotone.ph-cheese:before {\n content: '\\e9fe';\n opacity: 0.2;\n}\n.ph-duotone.ph-cheese:after {\n content: '\\e9ff';\n margin-left: -1em;\n}\n.ph-duotone.ph-chef-hat:before {\n content: '\\ed8e';\n opacity: 0.2;\n}\n.ph-duotone.ph-chef-hat:after {\n content: '\\ed8f';\n margin-left: -1em;\n}\n.ph-duotone.ph-cherries:before {\n content: '\\e830';\n opacity: 0.2;\n}\n.ph-duotone.ph-cherries:after {\n content: '\\e831';\n margin-left: -1em;\n}\n.ph-duotone.ph-church:before {\n content: '\\ecea';\n opacity: 0.2;\n}\n.ph-duotone.ph-church:after {\n content: '\\eceb';\n margin-left: -1em;\n}\n.ph-duotone.ph-cigarette:before {\n content: '\\ed90';\n opacity: 0.2;\n}\n.ph-duotone.ph-cigarette:after {\n content: '\\ed91';\n margin-left: -1em;\n}\n.ph-duotone.ph-cigarette-slash:before {\n content: '\\ed92';\n opacity: 0.2;\n}\n.ph-duotone.ph-cigarette-slash:after {\n content: '\\ed93';\n margin-left: -1em;\n}\n.ph-duotone.ph-circle:before {\n content: '\\e18a';\n opacity: 0.2;\n}\n.ph-duotone.ph-circle:after {\n content: '\\e18b';\n margin-left: -1em;\n}\n.ph-duotone.ph-circle-dashed:before {\n content: '\\e602';\n opacity: 0.2;\n}\n.ph-duotone.ph-circle-dashed:after {\n content: '\\e603';\n margin-left: -1em;\n}\n.ph-duotone.ph-circle-half:before {\n content: '\\e18c';\n opacity: 0.2;\n}\n.ph-duotone.ph-circle-half:after {\n content: '\\e18d';\n margin-left: -1em;\n}\n.ph-duotone.ph-circle-half-tilt:before {\n content: '\\e18e';\n opacity: 0.2;\n}\n.ph-duotone.ph-circle-half-tilt:after {\n content: '\\e18f';\n margin-left: -1em;\n}\n.ph-duotone.ph-circle-notch:before {\n content: '\\eb44';\n opacity: 0.2;\n}\n.ph-duotone.ph-circle-notch:after {\n content: '\\eb45';\n margin-left: -1em;\n}\n.ph-duotone.ph-circles-four:before {\n content: '\\e190';\n opacity: 0.2;\n}\n.ph-duotone.ph-circles-four:after {\n content: '\\e191';\n margin-left: -1em;\n}\n.ph-duotone.ph-circles-three:before {\n content: '\\e192';\n opacity: 0.2;\n}\n.ph-duotone.ph-circles-three:after {\n content: '\\e193';\n margin-left: -1em;\n}\n.ph-duotone.ph-circles-three-plus:before {\n content: '\\e194';\n opacity: 0.2;\n}\n.ph-duotone.ph-circles-three-plus:after {\n content: '\\e195';\n margin-left: -1em;\n}\n.ph-duotone.ph-circuitry:before {\n content: '\\e9c2';\n opacity: 0.2;\n}\n.ph-duotone.ph-circuitry:after {\n content: '\\e9c3';\n margin-left: -1em;\n}\n.ph-duotone.ph-city:before {\n content: '\\ea6a';\n opacity: 0.2;\n}\n.ph-duotone.ph-city:after {\n content: '\\ea6b';\n margin-left: -1em;\n}\n.ph-duotone.ph-clipboard:before {\n content: '\\e196';\n opacity: 0.2;\n}\n.ph-duotone.ph-clipboard:after {\n content: '\\e197';\n margin-left: -1em;\n}\n.ph-duotone.ph-clipboard-text:before {\n content: '\\e198';\n opacity: 0.2;\n}\n.ph-duotone.ph-clipboard-text:after {\n content: '\\e199';\n margin-left: -1em;\n}\n.ph-duotone.ph-clock:before {\n content: '\\e19a';\n opacity: 0.2;\n}\n.ph-duotone.ph-clock:after {\n content: '\\e19b';\n margin-left: -1em;\n}\n.ph-duotone.ph-clock-afternoon:before {\n content: '\\e19c';\n opacity: 0.2;\n}\n.ph-duotone.ph-clock-afternoon:after {\n content: '\\e19d';\n margin-left: -1em;\n}\n.ph-duotone.ph-clock-clockwise:before {\n content: '\\e19e';\n opacity: 0.2;\n}\n.ph-duotone.ph-clock-clockwise:after {\n content: '\\e19f';\n margin-left: -1em;\n}\n.ph-duotone.ph-clock-countdown:before {\n content: '\\ed2c';\n opacity: 0.2;\n}\n.ph-duotone.ph-clock-countdown:after {\n content: '\\ed2d';\n margin-left: -1em;\n}\n.ph-duotone.ph-clock-counter-clockwise:before {\n content: '\\e1a0';\n opacity: 0.2;\n}\n.ph-duotone.ph-clock-counter-clockwise:after {\n content: '\\e1a1';\n margin-left: -1em;\n}\n.ph-duotone.ph-clock-user:before {\n content: '\\edec';\n opacity: 0.2;\n}\n.ph-duotone.ph-clock-user:after {\n content: '\\eded';\n margin-left: -1em;\n}\n.ph-duotone.ph-closed-captioning:before {\n content: '\\e1a4';\n opacity: 0.2;\n}\n.ph-duotone.ph-closed-captioning:after {\n content: '\\e1a5';\n margin-left: -1em;\n}\n.ph-duotone.ph-cloud:before {\n content: '\\e1aa';\n opacity: 0.2;\n}\n.ph-duotone.ph-cloud:after {\n content: '\\e1ab';\n margin-left: -1em;\n}\n.ph-duotone.ph-cloud-arrow-down:before {\n content: '\\e1ac';\n opacity: 0.2;\n}\n.ph-duotone.ph-cloud-arrow-down:after {\n content: '\\e1ad';\n margin-left: -1em;\n}\n.ph-duotone.ph-cloud-arrow-up:before {\n content: '\\e1ae';\n opacity: 0.2;\n}\n.ph-duotone.ph-cloud-arrow-up:after {\n content: '\\e1af';\n margin-left: -1em;\n}\n.ph-duotone.ph-cloud-check:before {\n content: '\\e1b0';\n opacity: 0.2;\n}\n.ph-duotone.ph-cloud-check:after {\n content: '\\e1b1';\n margin-left: -1em;\n}\n.ph-duotone.ph-cloud-fog:before {\n content: '\\e53c';\n opacity: 0.2;\n}\n.ph-duotone.ph-cloud-fog:after {\n content: '\\e53d';\n margin-left: -1em;\n}\n.ph-duotone.ph-cloud-lightning:before {\n content: '\\e1b2';\n opacity: 0.2;\n}\n.ph-duotone.ph-cloud-lightning:after {\n content: '\\e1b3';\n margin-left: -1em;\n}\n.ph-duotone.ph-cloud-moon:before {\n content: '\\e53e';\n opacity: 0.2;\n}\n.ph-duotone.ph-cloud-moon:after {\n content: '\\e53f';\n margin-left: -1em;\n}\n.ph-duotone.ph-cloud-rain:before {\n content: '\\e1b4';\n opacity: 0.2;\n}\n.ph-duotone.ph-cloud-rain:after {\n content: '\\e1b5';\n margin-left: -1em;\n}\n.ph-duotone.ph-cloud-slash:before {\n content: '\\e1b6';\n opacity: 0.2;\n}\n.ph-duotone.ph-cloud-slash:after {\n content: '\\e1b7';\n margin-left: -1em;\n}\n.ph-duotone.ph-cloud-snow:before {\n content: '\\e1b8';\n opacity: 0.2;\n}\n.ph-duotone.ph-cloud-snow:after {\n content: '\\e1b9';\n margin-left: -1em;\n}\n.ph-duotone.ph-cloud-sun:before {\n content: '\\e540';\n opacity: 0.2;\n}\n.ph-duotone.ph-cloud-sun:after {\n content: '\\e541';\n margin-left: -1em;\n}\n.ph-duotone.ph-cloud-warning:before {\n content: '\\ea98';\n opacity: 0.2;\n}\n.ph-duotone.ph-cloud-warning:after {\n content: '\\ea99';\n margin-left: -1em;\n}\n.ph-duotone.ph-cloud-x:before {\n content: '\\ea96';\n opacity: 0.2;\n}\n.ph-duotone.ph-cloud-x:after {\n content: '\\ea97';\n margin-left: -1em;\n}\n.ph-duotone.ph-clover:before {\n content: '\\edc8';\n opacity: 0.2;\n}\n.ph-duotone.ph-clover:after {\n content: '\\edc9';\n margin-left: -1em;\n}\n.ph-duotone.ph-club:before {\n content: '\\e1ba';\n opacity: 0.2;\n}\n.ph-duotone.ph-club:after {\n content: '\\e1bb';\n margin-left: -1em;\n}\n.ph-duotone.ph-coat-hanger:before {\n content: '\\e7fe';\n opacity: 0.2;\n}\n.ph-duotone.ph-coat-hanger:after {\n content: '\\e7ff';\n margin-left: -1em;\n}\n.ph-duotone.ph-coda-logo:before {\n content: '\\e7ce';\n opacity: 0.2;\n}\n.ph-duotone.ph-coda-logo:after {\n content: '\\e7cf';\n margin-left: -1em;\n}\n.ph-duotone.ph-code:before {\n content: '\\e1bc';\n opacity: 0.2;\n}\n.ph-duotone.ph-code:after {\n content: '\\e1bd';\n margin-left: -1em;\n}\n.ph-duotone.ph-code-block:before {\n content: '\\eafe';\n opacity: 0.2;\n}\n.ph-duotone.ph-code-block:after {\n content: '\\eaff';\n margin-left: -1em;\n}\n.ph-duotone.ph-code-simple:before {\n content: '\\e1be';\n opacity: 0.2;\n}\n.ph-duotone.ph-code-simple:after {\n content: '\\e1bf';\n margin-left: -1em;\n}\n.ph-duotone.ph-codepen-logo:before {\n content: '\\e978';\n opacity: 0.2;\n}\n.ph-duotone.ph-codepen-logo:after {\n content: '\\e979';\n margin-left: -1em;\n}\n.ph-duotone.ph-codesandbox-logo:before {\n content: '\\ea06';\n opacity: 0.2;\n}\n.ph-duotone.ph-codesandbox-logo:after {\n content: '\\ea07';\n margin-left: -1em;\n}\n.ph-duotone.ph-coffee:before {\n content: '\\e1c2';\n opacity: 0.2;\n}\n.ph-duotone.ph-coffee:after {\n content: '\\e1c3';\n margin-left: -1em;\n}\n.ph-duotone.ph-coffee-bean:before {\n content: '\\e1c0';\n opacity: 0.2;\n}\n.ph-duotone.ph-coffee-bean:after {\n content: '\\e1c1';\n margin-left: -1em;\n}\n.ph-duotone.ph-coin:before {\n content: '\\e60e';\n opacity: 0.2;\n}\n.ph-duotone.ph-coin:after {\n content: '\\e60f';\n margin-left: -1em;\n}\n.ph-duotone.ph-coin-vertical:before {\n content: '\\eb48';\n opacity: 0.2;\n}\n.ph-duotone.ph-coin-vertical:after {\n content: '\\eb49';\n margin-left: -1em;\n}\n.ph-duotone.ph-coins:before {\n content: '\\e78e';\n opacity: 0.2;\n}\n.ph-duotone.ph-coins:after {\n content: '\\e78f';\n margin-left: -1em;\n}\n.ph-duotone.ph-columns:before {\n content: '\\e546';\n opacity: 0.2;\n}\n.ph-duotone.ph-columns:after {\n content: '\\e547';\n margin-left: -1em;\n}\n.ph-duotone.ph-columns-plus-left:before {\n content: '\\e544';\n opacity: 0.2;\n}\n.ph-duotone.ph-columns-plus-left:after {\n content: '\\e545';\n margin-left: -1em;\n}\n.ph-duotone.ph-columns-plus-right:before {\n content: '\\e542';\n opacity: 0.2;\n}\n.ph-duotone.ph-columns-plus-right:after {\n content: '\\e543';\n margin-left: -1em;\n}\n.ph-duotone.ph-command:before {\n content: '\\e1c4';\n opacity: 0.2;\n}\n.ph-duotone.ph-command:after {\n content: '\\e1c5';\n margin-left: -1em;\n}\n.ph-duotone.ph-compass:before {\n content: '\\e1c8';\n opacity: 0.2;\n}\n.ph-duotone.ph-compass:after {\n content: '\\e1c9';\n margin-left: -1em;\n}\n.ph-duotone.ph-compass-rose:before {\n content: '\\e1c6';\n opacity: 0.2;\n}\n.ph-duotone.ph-compass-rose:after {\n content: '\\e1c7';\n margin-left: -1em;\n}\n.ph-duotone.ph-compass-tool:before {\n content: '\\ea0e';\n opacity: 0.2;\n}\n.ph-duotone.ph-compass-tool:after {\n content: '\\ea0f';\n margin-left: -1em;\n}\n.ph-duotone.ph-computer-tower:before {\n content: '\\e548';\n opacity: 0.2;\n}\n.ph-duotone.ph-computer-tower:after {\n content: '\\e549';\n margin-left: -1em;\n}\n.ph-duotone.ph-confetti:before {\n content: '\\e81a';\n opacity: 0.2;\n}\n.ph-duotone.ph-confetti:after {\n content: '\\e81b';\n margin-left: -1em;\n}\n.ph-duotone.ph-contactless-payment:before {\n content: '\\ed42';\n opacity: 0.2;\n}\n.ph-duotone.ph-contactless-payment:after {\n content: '\\ed43';\n margin-left: -1em;\n}\n.ph-duotone.ph-control:before {\n content: '\\eca6';\n opacity: 0.2;\n}\n.ph-duotone.ph-control:after {\n content: '\\eca7';\n margin-left: -1em;\n}\n.ph-duotone.ph-cookie:before {\n content: '\\e6ca';\n opacity: 0.2;\n}\n.ph-duotone.ph-cookie:after {\n content: '\\e6cb';\n margin-left: -1em;\n}\n.ph-duotone.ph-cooking-pot:before {\n content: '\\e764';\n opacity: 0.2;\n}\n.ph-duotone.ph-cooking-pot:after {\n content: '\\e765';\n margin-left: -1em;\n}\n.ph-duotone.ph-copy:before {\n content: '\\e1ca';\n opacity: 0.2;\n}\n.ph-duotone.ph-copy:after {\n content: '\\e1cb';\n margin-left: -1em;\n}\n.ph-duotone.ph-copy-simple:before {\n content: '\\e1cc';\n opacity: 0.2;\n}\n.ph-duotone.ph-copy-simple:after {\n content: '\\e1cd';\n margin-left: -1em;\n}\n.ph-duotone.ph-copyleft:before {\n content: '\\e86a';\n opacity: 0.2;\n}\n.ph-duotone.ph-copyleft:after {\n content: '\\e86b';\n margin-left: -1em;\n}\n.ph-duotone.ph-copyright:before {\n content: '\\e54a';\n opacity: 0.2;\n}\n.ph-duotone.ph-copyright:after {\n content: '\\e54b';\n margin-left: -1em;\n}\n.ph-duotone.ph-corners-in:before {\n content: '\\e1ce';\n opacity: 0.2;\n}\n.ph-duotone.ph-corners-in:after {\n content: '\\e1cf';\n margin-left: -1em;\n}\n.ph-duotone.ph-corners-out:before {\n content: '\\e1d0';\n opacity: 0.2;\n}\n.ph-duotone.ph-corners-out:after {\n content: '\\e1d1';\n margin-left: -1em;\n}\n.ph-duotone.ph-couch:before {\n content: '\\e7f6';\n opacity: 0.2;\n}\n.ph-duotone.ph-couch:after {\n content: '\\e7f7';\n margin-left: -1em;\n}\n.ph-duotone.ph-court-basketball:before {\n content: '\\ee36';\n opacity: 0.2;\n}\n.ph-duotone.ph-court-basketball:after {\n content: '\\ee37';\n margin-left: -1em;\n}\n.ph-duotone.ph-cow:before {\n content: '\\eabe';\n opacity: 0.2;\n}\n.ph-duotone.ph-cow:after {\n content: '\\eabf';\n margin-left: -1em;\n}\n.ph-duotone.ph-cowboy-hat:before {\n content: '\\ed12';\n opacity: 0.2;\n}\n.ph-duotone.ph-cowboy-hat:after {\n content: '\\ed13';\n margin-left: -1em;\n}\n.ph-duotone.ph-cpu:before {\n content: '\\e610';\n opacity: 0.2;\n}\n.ph-duotone.ph-cpu:after {\n content: '\\e611';\n margin-left: -1em;\n}\n.ph-duotone.ph-crane:before {\n content: '\\ed48';\n opacity: 0.2;\n}\n.ph-duotone.ph-crane:after {\n content: '\\ed4b';\n margin-left: -1em;\n}\n.ph-duotone.ph-crane-tower:before {\n content: '\\ed49';\n opacity: 0.2;\n}\n.ph-duotone.ph-crane-tower:after {\n content: '\\ed4d';\n margin-left: -1em;\n}\n.ph-duotone.ph-credit-card:before {\n content: '\\e1d2';\n opacity: 0.2;\n}\n.ph-duotone.ph-credit-card:after {\n content: '\\e1d3';\n margin-left: -1em;\n}\n.ph-duotone.ph-cricket:before {\n content: '\\ee12';\n opacity: 0.2;\n}\n.ph-duotone.ph-cricket:after {\n content: '\\ee13';\n margin-left: -1em;\n}\n.ph-duotone.ph-crop:before {\n content: '\\e1d4';\n opacity: 0.2;\n}\n.ph-duotone.ph-crop:after {\n content: '\\e1d5';\n margin-left: -1em;\n}\n.ph-duotone.ph-cross:before {\n content: '\\e8a0';\n opacity: 0.2;\n}\n.ph-duotone.ph-cross:after {\n content: '\\e8a1';\n margin-left: -1em;\n}\n.ph-duotone.ph-crosshair:before {\n content: '\\e1d6';\n opacity: 0.2;\n}\n.ph-duotone.ph-crosshair:after {\n content: '\\e1d7';\n margin-left: -1em;\n}\n.ph-duotone.ph-crosshair-simple:before {\n content: '\\e1d8';\n opacity: 0.2;\n}\n.ph-duotone.ph-crosshair-simple:after {\n content: '\\e1d9';\n margin-left: -1em;\n}\n.ph-duotone.ph-crown:before {\n content: '\\e614';\n opacity: 0.2;\n}\n.ph-duotone.ph-crown:after {\n content: '\\e615';\n margin-left: -1em;\n}\n.ph-duotone.ph-crown-cross:before {\n content: '\\ee5e';\n opacity: 0.2;\n}\n.ph-duotone.ph-crown-cross:after {\n content: '\\ee5f';\n margin-left: -1em;\n}\n.ph-duotone.ph-crown-simple:before {\n content: '\\e616';\n opacity: 0.2;\n}\n.ph-duotone.ph-crown-simple:after {\n content: '\\e617';\n margin-left: -1em;\n}\n.ph-duotone.ph-cube:before {\n content: '\\e1da';\n opacity: 0.2;\n}\n.ph-duotone.ph-cube:after {\n content: '\\e1db';\n margin-left: -1em;\n}\n.ph-duotone.ph-cube-focus:before {\n content: '\\ed0a';\n opacity: 0.2;\n}\n.ph-duotone.ph-cube-focus:after {\n content: '\\ed0b';\n margin-left: -1em;\n}\n.ph-duotone.ph-cube-transparent:before {\n content: '\\ec7c';\n opacity: 0.2;\n}\n.ph-duotone.ph-cube-transparent:after {\n content: '\\ec7d';\n margin-left: -1em;\n}\n.ph-duotone.ph-currency-btc:before {\n content: '\\e618';\n opacity: 0.2;\n}\n.ph-duotone.ph-currency-btc:after {\n content: '\\e619';\n margin-left: -1em;\n}\n.ph-duotone.ph-currency-circle-dollar:before {\n content: '\\e54c';\n opacity: 0.2;\n}\n.ph-duotone.ph-currency-circle-dollar:after {\n content: '\\e54d';\n margin-left: -1em;\n}\n.ph-duotone.ph-currency-cny:before {\n content: '\\e54e';\n opacity: 0.2;\n}\n.ph-duotone.ph-currency-cny:after {\n content: '\\e54f';\n margin-left: -1em;\n}\n.ph-duotone.ph-currency-dollar:before {\n content: '\\e550';\n opacity: 0.2;\n}\n.ph-duotone.ph-currency-dollar:after {\n content: '\\e551';\n margin-left: -1em;\n}\n.ph-duotone.ph-currency-dollar-simple:before {\n content: '\\e552';\n opacity: 0.2;\n}\n.ph-duotone.ph-currency-dollar-simple:after {\n content: '\\e553';\n margin-left: -1em;\n}\n.ph-duotone.ph-currency-eth:before {\n content: '\\eada';\n opacity: 0.2;\n}\n.ph-duotone.ph-currency-eth:after {\n content: '\\eadb';\n margin-left: -1em;\n}\n.ph-duotone.ph-currency-eur:before {\n content: '\\e554';\n opacity: 0.2;\n}\n.ph-duotone.ph-currency-eur:after {\n content: '\\e555';\n margin-left: -1em;\n}\n.ph-duotone.ph-currency-gbp:before {\n content: '\\e556';\n opacity: 0.2;\n}\n.ph-duotone.ph-currency-gbp:after {\n content: '\\e557';\n margin-left: -1em;\n}\n.ph-duotone.ph-currency-inr:before {\n content: '\\e558';\n opacity: 0.2;\n}\n.ph-duotone.ph-currency-inr:after {\n content: '\\e559';\n margin-left: -1em;\n}\n.ph-duotone.ph-currency-jpy:before {\n content: '\\e55a';\n opacity: 0.2;\n}\n.ph-duotone.ph-currency-jpy:after {\n content: '\\e55b';\n margin-left: -1em;\n}\n.ph-duotone.ph-currency-krw:before {\n content: '\\e55c';\n opacity: 0.2;\n}\n.ph-duotone.ph-currency-krw:after {\n content: '\\e55d';\n margin-left: -1em;\n}\n.ph-duotone.ph-currency-kzt:before {\n content: '\\ec4c';\n opacity: 0.2;\n}\n.ph-duotone.ph-currency-kzt:after {\n content: '\\ec4d';\n margin-left: -1em;\n}\n.ph-duotone.ph-currency-ngn:before {\n content: '\\eb52';\n opacity: 0.2;\n}\n.ph-duotone.ph-currency-ngn:after {\n content: '\\eb53';\n margin-left: -1em;\n}\n.ph-duotone.ph-currency-rub:before {\n content: '\\e55e';\n opacity: 0.2;\n}\n.ph-duotone.ph-currency-rub:after {\n content: '\\e55f';\n margin-left: -1em;\n}\n.ph-duotone.ph-cursor:before {\n content: '\\e1dc';\n opacity: 0.2;\n}\n.ph-duotone.ph-cursor:after {\n content: '\\e1dd';\n margin-left: -1em;\n}\n.ph-duotone.ph-cursor-click:before {\n content: '\\e7c8';\n opacity: 0.2;\n}\n.ph-duotone.ph-cursor-click:after {\n content: '\\e7c9';\n margin-left: -1em;\n}\n.ph-duotone.ph-cursor-text:before {\n content: '\\e7d8';\n opacity: 0.2;\n}\n.ph-duotone.ph-cursor-text:after {\n content: '\\e7d9';\n margin-left: -1em;\n}\n.ph-duotone.ph-cylinder:before {\n content: '\\e8fc';\n opacity: 0.2;\n}\n.ph-duotone.ph-cylinder:after {\n content: '\\e8fd';\n margin-left: -1em;\n}\n.ph-duotone.ph-database:before {\n content: '\\e1de';\n opacity: 0.2;\n}\n.ph-duotone.ph-database:after {\n content: '\\e1df';\n margin-left: -1em;\n}\n.ph-duotone.ph-desk:before {\n content: '\\ed16';\n opacity: 0.2;\n}\n.ph-duotone.ph-desk:after {\n content: '\\ed17';\n margin-left: -1em;\n}\n.ph-duotone.ph-desktop:before {\n content: '\\e560';\n opacity: 0.2;\n}\n.ph-duotone.ph-desktop:after {\n content: '\\e561';\n margin-left: -1em;\n}\n.ph-duotone.ph-desktop-tower:before {\n content: '\\e562';\n opacity: 0.2;\n}\n.ph-duotone.ph-desktop-tower:after {\n content: '\\e563';\n margin-left: -1em;\n}\n.ph-duotone.ph-detective:before {\n content: '\\e83e';\n opacity: 0.2;\n}\n.ph-duotone.ph-detective:after {\n content: '\\e83f';\n margin-left: -1em;\n}\n.ph-duotone.ph-dev-to-logo:before {\n content: '\\ed0e';\n opacity: 0.2;\n}\n.ph-duotone.ph-dev-to-logo:after {\n content: '\\ed0f';\n margin-left: -1em;\n}\n.ph-duotone.ph-device-mobile:before {\n content: '\\e1e0';\n opacity: 0.2;\n}\n.ph-duotone.ph-device-mobile:after {\n content: '\\e1e1';\n margin-left: -1em;\n}\n.ph-duotone.ph-device-mobile-camera:before {\n content: '\\e1e2';\n opacity: 0.2;\n}\n.ph-duotone.ph-device-mobile-camera:after {\n content: '\\e1e3';\n margin-left: -1em;\n}\n.ph-duotone.ph-device-mobile-slash:before {\n content: '\\ee46';\n opacity: 0.2;\n}\n.ph-duotone.ph-device-mobile-slash:after {\n content: '\\ee47';\n margin-left: -1em;\n}\n.ph-duotone.ph-device-mobile-speaker:before {\n content: '\\e1e4';\n opacity: 0.2;\n}\n.ph-duotone.ph-device-mobile-speaker:after {\n content: '\\e1e5';\n margin-left: -1em;\n}\n.ph-duotone.ph-device-rotate:before {\n content: '\\edf2';\n opacity: 0.2;\n}\n.ph-duotone.ph-device-rotate:after {\n content: '\\edf3';\n margin-left: -1em;\n}\n.ph-duotone.ph-device-tablet:before {\n content: '\\e1e6';\n opacity: 0.2;\n}\n.ph-duotone.ph-device-tablet:after {\n content: '\\e1e7';\n margin-left: -1em;\n}\n.ph-duotone.ph-device-tablet-camera:before {\n content: '\\e1e8';\n opacity: 0.2;\n}\n.ph-duotone.ph-device-tablet-camera:after {\n content: '\\e1e9';\n margin-left: -1em;\n}\n.ph-duotone.ph-device-tablet-speaker:before {\n content: '\\e1ea';\n opacity: 0.2;\n}\n.ph-duotone.ph-device-tablet-speaker:after {\n content: '\\e1eb';\n margin-left: -1em;\n}\n.ph-duotone.ph-devices:before {\n content: '\\eba4';\n opacity: 0.2;\n}\n.ph-duotone.ph-devices:after {\n content: '\\eba5';\n margin-left: -1em;\n}\n.ph-duotone.ph-diamond:before {\n content: '\\e1ec';\n opacity: 0.2;\n}\n.ph-duotone.ph-diamond:after {\n content: '\\e1ed';\n margin-left: -1em;\n}\n.ph-duotone.ph-diamonds-four:before {\n content: '\\e8f4';\n opacity: 0.2;\n}\n.ph-duotone.ph-diamonds-four:after {\n content: '\\e8f5';\n margin-left: -1em;\n}\n.ph-duotone.ph-dice-five:before {\n content: '\\e1ee';\n opacity: 0.2;\n}\n.ph-duotone.ph-dice-five:after {\n content: '\\e1ef';\n margin-left: -1em;\n}\n.ph-duotone.ph-dice-four:before {\n content: '\\e1f0';\n opacity: 0.2;\n}\n.ph-duotone.ph-dice-four:after {\n content: '\\e1f1';\n margin-left: -1em;\n}\n.ph-duotone.ph-dice-one:before {\n content: '\\e1f2';\n opacity: 0.2;\n}\n.ph-duotone.ph-dice-one:after {\n content: '\\e1f3';\n margin-left: -1em;\n}\n.ph-duotone.ph-dice-six:before {\n content: '\\e1f4';\n opacity: 0.2;\n}\n.ph-duotone.ph-dice-six:after {\n content: '\\e1f5';\n margin-left: -1em;\n}\n.ph-duotone.ph-dice-three:before {\n content: '\\e1f6';\n opacity: 0.2;\n}\n.ph-duotone.ph-dice-three:after {\n content: '\\e1f7';\n margin-left: -1em;\n}\n.ph-duotone.ph-dice-two:before {\n content: '\\e1f8';\n opacity: 0.2;\n}\n.ph-duotone.ph-dice-two:after {\n content: '\\e1f9';\n margin-left: -1em;\n}\n.ph-duotone.ph-disc:before {\n content: '\\e564';\n opacity: 0.2;\n}\n.ph-duotone.ph-disc:after {\n content: '\\e565';\n margin-left: -1em;\n}\n.ph-duotone.ph-disco-ball:before {\n content: '\\ed98';\n opacity: 0.2;\n}\n.ph-duotone.ph-disco-ball:after {\n content: '\\ed99';\n margin-left: -1em;\n}\n.ph-duotone.ph-discord-logo:before {\n content: '\\e61a';\n opacity: 0.2;\n}\n.ph-duotone.ph-discord-logo:after {\n content: '\\e61b';\n margin-left: -1em;\n}\n.ph-duotone.ph-divide:before {\n content: '\\e1fa';\n opacity: 0.2;\n}\n.ph-duotone.ph-divide:after {\n content: '\\e1fb';\n margin-left: -1em;\n}\n.ph-duotone.ph-dna:before {\n content: '\\e924';\n opacity: 0.2;\n}\n.ph-duotone.ph-dna:after {\n content: '\\e925';\n margin-left: -1em;\n}\n.ph-duotone.ph-dog:before {\n content: '\\e74a';\n opacity: 0.2;\n}\n.ph-duotone.ph-dog:after {\n content: '\\e74b';\n margin-left: -1em;\n}\n.ph-duotone.ph-door:before {\n content: '\\e61c';\n opacity: 0.2;\n}\n.ph-duotone.ph-door:after {\n content: '\\e61d';\n margin-left: -1em;\n}\n.ph-duotone.ph-door-open:before {\n content: '\\e7e6';\n opacity: 0.2;\n}\n.ph-duotone.ph-door-open:after {\n content: '\\e7e7';\n margin-left: -1em;\n}\n.ph-duotone.ph-dot:before {\n content: '\\ecde';\n opacity: 0.2;\n}\n.ph-duotone.ph-dot:after {\n content: '\\ecdf';\n margin-left: -1em;\n}\n.ph-duotone.ph-dot-outline:before {\n content: '\\ece0';\n opacity: 0.2;\n}\n.ph-duotone.ph-dot-outline:after {\n content: '\\ece1';\n margin-left: -1em;\n}\n.ph-duotone.ph-dots-nine:before {\n content: '\\e1fc';\n opacity: 0.2;\n}\n.ph-duotone.ph-dots-nine:after {\n content: '\\e1fd';\n margin-left: -1em;\n}\n.ph-duotone.ph-dots-six:before {\n content: '\\e794';\n opacity: 0.2;\n}\n.ph-duotone.ph-dots-six:after {\n content: '\\e795';\n margin-left: -1em;\n}\n.ph-duotone.ph-dots-six-vertical:before {\n content: '\\eae2';\n opacity: 0.2;\n}\n.ph-duotone.ph-dots-six-vertical:after {\n content: '\\eae3';\n margin-left: -1em;\n}\n.ph-duotone.ph-dots-three:before {\n content: '\\e1fe';\n opacity: 0.2;\n}\n.ph-duotone.ph-dots-three:after {\n content: '\\e1ff';\n margin-left: -1em;\n}\n.ph-duotone.ph-dots-three-circle:before {\n content: '\\e200';\n opacity: 0.2;\n}\n.ph-duotone.ph-dots-three-circle:after {\n content: '\\e201';\n margin-left: -1em;\n}\n.ph-duotone.ph-dots-three-circle-vertical:before {\n content: '\\e202';\n opacity: 0.2;\n}\n.ph-duotone.ph-dots-three-circle-vertical:after {\n content: '\\e203';\n margin-left: -1em;\n}\n.ph-duotone.ph-dots-three-outline:before {\n content: '\\e204';\n opacity: 0.2;\n}\n.ph-duotone.ph-dots-three-outline:after {\n content: '\\e205';\n margin-left: -1em;\n}\n.ph-duotone.ph-dots-three-outline-vertical:before {\n content: '\\e206';\n opacity: 0.2;\n}\n.ph-duotone.ph-dots-three-outline-vertical:after {\n content: '\\e207';\n margin-left: -1em;\n}\n.ph-duotone.ph-dots-three-vertical:before {\n content: '\\e208';\n opacity: 0.2;\n}\n.ph-duotone.ph-dots-three-vertical:after {\n content: '\\e209';\n margin-left: -1em;\n}\n.ph-duotone.ph-download:before {\n content: '\\e20a';\n opacity: 0.2;\n}\n.ph-duotone.ph-download:after {\n content: '\\e20b';\n margin-left: -1em;\n}\n.ph-duotone.ph-download-simple:before {\n content: '\\e20c';\n opacity: 0.2;\n}\n.ph-duotone.ph-download-simple:after {\n content: '\\e20d';\n margin-left: -1em;\n}\n.ph-duotone.ph-dress:before {\n content: '\\ea7e';\n opacity: 0.2;\n}\n.ph-duotone.ph-dress:after {\n content: '\\ea7f';\n margin-left: -1em;\n}\n.ph-duotone.ph-dresser:before {\n content: '\\e94e';\n opacity: 0.2;\n}\n.ph-duotone.ph-dresser:after {\n content: '\\e94f';\n margin-left: -1em;\n}\n.ph-duotone.ph-dribbble-logo:before {\n content: '\\e20e';\n opacity: 0.2;\n}\n.ph-duotone.ph-dribbble-logo:after {\n content: '\\e20f';\n margin-left: -1em;\n}\n.ph-duotone.ph-drone:before {\n content: '\\ed74';\n opacity: 0.2;\n}\n.ph-duotone.ph-drone:after {\n content: '\\ed75';\n margin-left: -1em;\n}\n.ph-duotone.ph-drop:before {\n content: '\\e210';\n opacity: 0.2;\n}\n.ph-duotone.ph-drop:after {\n content: '\\e211';\n margin-left: -1em;\n}\n.ph-duotone.ph-drop-half:before {\n content: '\\e566';\n opacity: 0.2;\n}\n.ph-duotone.ph-drop-half:after {\n content: '\\e567';\n margin-left: -1em;\n}\n.ph-duotone.ph-drop-half-bottom:before {\n content: '\\eb40';\n opacity: 0.2;\n}\n.ph-duotone.ph-drop-half-bottom:after {\n content: '\\eb41';\n margin-left: -1em;\n}\n.ph-duotone.ph-drop-simple:before {\n content: '\\ee32';\n opacity: 0.2;\n}\n.ph-duotone.ph-drop-simple:after {\n content: '\\ee33';\n margin-left: -1em;\n}\n.ph-duotone.ph-drop-slash:before {\n content: '\\e954';\n opacity: 0.2;\n}\n.ph-duotone.ph-drop-slash:after {\n content: '\\e955';\n margin-left: -1em;\n}\n.ph-duotone.ph-dropbox-logo:before {\n content: '\\e7d0';\n opacity: 0.2;\n}\n.ph-duotone.ph-dropbox-logo:after {\n content: '\\e7d1';\n margin-left: -1em;\n}\n.ph-duotone.ph-ear:before {\n content: '\\e70c';\n opacity: 0.2;\n}\n.ph-duotone.ph-ear:after {\n content: '\\e70d';\n margin-left: -1em;\n}\n.ph-duotone.ph-ear-slash:before {\n content: '\\e70e';\n opacity: 0.2;\n}\n.ph-duotone.ph-ear-slash:after {\n content: '\\e70f';\n margin-left: -1em;\n}\n.ph-duotone.ph-egg:before {\n content: '\\e812';\n opacity: 0.2;\n}\n.ph-duotone.ph-egg:after {\n content: '\\e813';\n margin-left: -1em;\n}\n.ph-duotone.ph-egg-crack:before {\n content: '\\eb64';\n opacity: 0.2;\n}\n.ph-duotone.ph-egg-crack:after {\n content: '\\eb65';\n margin-left: -1em;\n}\n.ph-duotone.ph-eject:before {\n content: '\\e212';\n opacity: 0.2;\n}\n.ph-duotone.ph-eject:after {\n content: '\\e213';\n margin-left: -1em;\n}\n.ph-duotone.ph-eject-simple:before {\n content: '\\e6ae';\n opacity: 0.2;\n}\n.ph-duotone.ph-eject-simple:after {\n content: '\\e6af';\n margin-left: -1em;\n}\n.ph-duotone.ph-elevator:before {\n content: '\\ecc0';\n opacity: 0.2;\n}\n.ph-duotone.ph-elevator:after {\n content: '\\ecc1';\n margin-left: -1em;\n}\n.ph-duotone.ph-empty:before {\n content: '\\edbc';\n opacity: 0.2;\n}\n.ph-duotone.ph-empty:after {\n content: '\\edbd';\n margin-left: -1em;\n}\n.ph-duotone.ph-engine:before {\n content: '\\ea80';\n opacity: 0.2;\n}\n.ph-duotone.ph-engine:after {\n content: '\\ea81';\n margin-left: -1em;\n}\n.ph-duotone.ph-envelope:before {\n content: '\\e214';\n opacity: 0.2;\n}\n.ph-duotone.ph-envelope:after {\n content: '\\e215';\n margin-left: -1em;\n}\n.ph-duotone.ph-envelope-open:before {\n content: '\\e216';\n opacity: 0.2;\n}\n.ph-duotone.ph-envelope-open:after {\n content: '\\e217';\n margin-left: -1em;\n}\n.ph-duotone.ph-envelope-simple:before {\n content: '\\e218';\n opacity: 0.2;\n}\n.ph-duotone.ph-envelope-simple:after {\n content: '\\e219';\n margin-left: -1em;\n}\n.ph-duotone.ph-envelope-simple-open:before {\n content: '\\e21a';\n opacity: 0.2;\n}\n.ph-duotone.ph-envelope-simple-open:after {\n content: '\\e21b';\n margin-left: -1em;\n}\n.ph-duotone.ph-equalizer:before {\n content: '\\ebbc';\n opacity: 0.2;\n}\n.ph-duotone.ph-equalizer:after {\n content: '\\ebbd';\n margin-left: -1em;\n}\n.ph-duotone.ph-equals:before {\n content: '\\e21c';\n opacity: 0.2;\n}\n.ph-duotone.ph-equals:after {\n content: '\\e21d';\n margin-left: -1em;\n}\n.ph-duotone.ph-eraser:before {\n content: '\\e21e';\n opacity: 0.2;\n}\n.ph-duotone.ph-eraser:after {\n content: '\\e21f';\n margin-left: -1em;\n}\n.ph-duotone.ph-escalator-down:before {\n content: '\\ecba';\n opacity: 0.2;\n}\n.ph-duotone.ph-escalator-down:after {\n content: '\\ecbb';\n margin-left: -1em;\n}\n.ph-duotone.ph-escalator-up:before {\n content: '\\ecbc';\n opacity: 0.2;\n}\n.ph-duotone.ph-escalator-up:after {\n content: '\\ecbd';\n margin-left: -1em;\n}\n.ph-duotone.ph-exam:before {\n content: '\\e742';\n opacity: 0.2;\n}\n.ph-duotone.ph-exam:after {\n content: '\\e743';\n margin-left: -1em;\n}\n.ph-duotone.ph-exclamation-mark:before {\n content: '\\ee44';\n opacity: 0.2;\n}\n.ph-duotone.ph-exclamation-mark:after {\n content: '\\ee45';\n margin-left: -1em;\n}\n.ph-duotone.ph-exclude:before {\n content: '\\e882';\n opacity: 0.2;\n}\n.ph-duotone.ph-exclude:after {\n content: '\\e883';\n margin-left: -1em;\n}\n.ph-duotone.ph-exclude-square:before {\n content: '\\e880';\n opacity: 0.2;\n}\n.ph-duotone.ph-exclude-square:after {\n content: '\\e881';\n margin-left: -1em;\n}\n.ph-duotone.ph-export:before {\n content: '\\eaf0';\n opacity: 0.2;\n}\n.ph-duotone.ph-export:after {\n content: '\\eaf1';\n margin-left: -1em;\n}\n.ph-duotone.ph-eye:before {\n content: '\\e220';\n opacity: 0.2;\n}\n.ph-duotone.ph-eye:after {\n content: '\\e221';\n margin-left: -1em;\n}\n.ph-duotone.ph-eye-closed:before {\n content: '\\e222';\n opacity: 0.2;\n}\n.ph-duotone.ph-eye-closed:after {\n content: '\\e223';\n margin-left: -1em;\n}\n.ph-duotone.ph-eye-slash:before {\n content: '\\e224';\n opacity: 0.2;\n}\n.ph-duotone.ph-eye-slash:after {\n content: '\\e225';\n margin-left: -1em;\n}\n.ph-duotone.ph-eyedropper:before {\n content: '\\e568';\n opacity: 0.2;\n}\n.ph-duotone.ph-eyedropper:after {\n content: '\\e569';\n margin-left: -1em;\n}\n.ph-duotone.ph-eyedropper-sample:before {\n content: '\\eac4';\n opacity: 0.2;\n}\n.ph-duotone.ph-eyedropper-sample:after {\n content: '\\eac5';\n margin-left: -1em;\n}\n.ph-duotone.ph-eyeglasses:before {\n content: '\\e7ba';\n opacity: 0.2;\n}\n.ph-duotone.ph-eyeglasses:after {\n content: '\\e7bb';\n margin-left: -1em;\n}\n.ph-duotone.ph-eyes:before {\n content: '\\ee5c';\n opacity: 0.2;\n}\n.ph-duotone.ph-eyes:after {\n content: '\\ee5d';\n margin-left: -1em;\n}\n.ph-duotone.ph-face-mask:before {\n content: '\\e56a';\n opacity: 0.2;\n}\n.ph-duotone.ph-face-mask:after {\n content: '\\e56b';\n margin-left: -1em;\n}\n.ph-duotone.ph-facebook-logo:before {\n content: '\\e226';\n opacity: 0.2;\n}\n.ph-duotone.ph-facebook-logo:after {\n content: '\\e227';\n margin-left: -1em;\n}\n.ph-duotone.ph-factory:before {\n content: '\\e760';\n opacity: 0.2;\n}\n.ph-duotone.ph-factory:after {\n content: '\\e761';\n margin-left: -1em;\n}\n.ph-duotone.ph-faders:before {\n content: '\\e228';\n opacity: 0.2;\n}\n.ph-duotone.ph-faders:after {\n content: '\\e229';\n margin-left: -1em;\n}\n.ph-duotone.ph-faders-horizontal:before {\n content: '\\e22a';\n opacity: 0.2;\n}\n.ph-duotone.ph-faders-horizontal:after {\n content: '\\e22b';\n margin-left: -1em;\n}\n.ph-duotone.ph-fallout-shelter:before {\n content: '\\e9de';\n opacity: 0.2;\n}\n.ph-duotone.ph-fallout-shelter:after {\n content: '\\e9df';\n margin-left: -1em;\n}\n.ph-duotone.ph-fan:before {\n content: '\\e9f2';\n opacity: 0.2;\n}\n.ph-duotone.ph-fan:after {\n content: '\\e9f3';\n margin-left: -1em;\n}\n.ph-duotone.ph-farm:before {\n content: '\\ec70';\n opacity: 0.2;\n}\n.ph-duotone.ph-farm:after {\n content: '\\ec71';\n margin-left: -1em;\n}\n.ph-duotone.ph-fast-forward:before {\n content: '\\e6a6';\n opacity: 0.2;\n}\n.ph-duotone.ph-fast-forward:after {\n content: '\\e6a7';\n margin-left: -1em;\n}\n.ph-duotone.ph-fast-forward-circle:before {\n content: '\\e22c';\n opacity: 0.2;\n}\n.ph-duotone.ph-fast-forward-circle:after {\n content: '\\e22d';\n margin-left: -1em;\n}\n.ph-duotone.ph-feather:before {\n content: '\\e9c0';\n opacity: 0.2;\n}\n.ph-duotone.ph-feather:after {\n content: '\\e9c1';\n margin-left: -1em;\n}\n.ph-duotone.ph-fediverse-logo:before {\n content: '\\ed66';\n opacity: 0.2;\n}\n.ph-duotone.ph-fediverse-logo:after {\n content: '\\ed67';\n margin-left: -1em;\n}\n.ph-duotone.ph-figma-logo:before {\n content: '\\e22e';\n opacity: 0.2;\n}\n.ph-duotone.ph-figma-logo:after {\n content: '\\e22f';\n margin-left: -1em;\n}\n.ph-duotone.ph-file:before {\n content: '\\e230';\n opacity: 0.2;\n}\n.ph-duotone.ph-file:after {\n content: '\\e231';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-archive:before {\n content: '\\eb2a';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-archive:after {\n content: '\\eb2b';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-arrow-down:before {\n content: '\\e232';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-arrow-down:after {\n content: '\\e233';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-arrow-up:before {\n content: '\\e61e';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-arrow-up:after {\n content: '\\e61f';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-audio:before {\n content: '\\ea20';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-audio:after {\n content: '\\ea21';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-c:before {\n content: '\\eb32';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-c:after {\n content: '\\eb36';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-c-sharp:before {\n content: '\\eb30';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-c-sharp:after {\n content: '\\eb31';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-cloud:before {\n content: '\\e95e';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-cloud:after {\n content: '\\e95f';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-code:before {\n content: '\\e914';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-code:after {\n content: '\\e915';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-cpp:before {\n content: '\\eb2e';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-cpp:after {\n content: '\\eb2f';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-css:before {\n content: '\\eb34';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-css:after {\n content: '\\eb37';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-csv:before {\n content: '\\eb1c';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-csv:after {\n content: '\\eb1d';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-dashed:before {\n content: '\\e704';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-dashed:after {\n content: '\\e705';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-doc:before {\n content: '\\eb1e';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-doc:after {\n content: '\\eb1f';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-html:before {\n content: '\\eb38';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-html:after {\n content: '\\eb39';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-image:before {\n content: '\\ea24';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-image:after {\n content: '\\ea25';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-ini:before {\n content: '\\eb33';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-ini:after {\n content: '\\eb3b';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-jpg:before {\n content: '\\eb1a';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-jpg:after {\n content: '\\eb1b';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-js:before {\n content: '\\eb24';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-js:after {\n content: '\\eb25';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-jsx:before {\n content: '\\eb3a';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-jsx:after {\n content: '\\eb3d';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-lock:before {\n content: '\\e95c';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-lock:after {\n content: '\\e95d';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-magnifying-glass:before {\n content: '\\e238';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-magnifying-glass:after {\n content: '\\e239';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-md:before {\n content: '\\ed50';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-md:after {\n content: '\\ed51';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-minus:before {\n content: '\\e234';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-minus:after {\n content: '\\e235';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-pdf:before {\n content: '\\e702';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-pdf:after {\n content: '\\e703';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-plus:before {\n content: '\\e236';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-plus:after {\n content: '\\e237';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-png:before {\n content: '\\eb18';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-png:after {\n content: '\\eb19';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-ppt:before {\n content: '\\eb20';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-ppt:after {\n content: '\\eb21';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-py:before {\n content: '\\eb2c';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-py:after {\n content: '\\eb2d';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-rs:before {\n content: '\\eb28';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-rs:after {\n content: '\\eb29';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-sql:before {\n content: '\\ed4e';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-sql:after {\n content: '\\ed4f';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-svg:before {\n content: '\\ed08';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-svg:after {\n content: '\\ed09';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-text:before {\n content: '\\e23a';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-text:after {\n content: '\\e23b';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-ts:before {\n content: '\\eb26';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-ts:after {\n content: '\\eb27';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-tsx:before {\n content: '\\eb3c';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-tsx:after {\n content: '\\eb3f';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-txt:before {\n content: '\\eb35';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-txt:after {\n content: '\\eb43';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-video:before {\n content: '\\ea22';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-video:after {\n content: '\\ea23';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-vue:before {\n content: '\\eb3e';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-vue:after {\n content: '\\eb47';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-x:before {\n content: '\\e23c';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-x:after {\n content: '\\e23d';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-xls:before {\n content: '\\eb22';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-xls:after {\n content: '\\eb23';\n margin-left: -1em;\n}\n.ph-duotone.ph-file-zip:before {\n content: '\\e958';\n opacity: 0.2;\n}\n.ph-duotone.ph-file-zip:after {\n content: '\\e959';\n margin-left: -1em;\n}\n.ph-duotone.ph-files:before {\n content: '\\e710';\n opacity: 0.2;\n}\n.ph-duotone.ph-files:after {\n content: '\\e711';\n margin-left: -1em;\n}\n.ph-duotone.ph-film-reel:before {\n content: '\\e8c0';\n opacity: 0.2;\n}\n.ph-duotone.ph-film-reel:after {\n content: '\\e8c1';\n margin-left: -1em;\n}\n.ph-duotone.ph-film-script:before {\n content: '\\eb50';\n opacity: 0.2;\n}\n.ph-duotone.ph-film-script:after {\n content: '\\eb51';\n margin-left: -1em;\n}\n.ph-duotone.ph-film-slate:before {\n content: '\\e8c2';\n opacity: 0.2;\n}\n.ph-duotone.ph-film-slate:after {\n content: '\\e8c3';\n margin-left: -1em;\n}\n.ph-duotone.ph-film-strip:before {\n content: '\\e792';\n opacity: 0.2;\n}\n.ph-duotone.ph-film-strip:after {\n content: '\\e793';\n margin-left: -1em;\n}\n.ph-duotone.ph-fingerprint:before {\n content: '\\e23e';\n opacity: 0.2;\n}\n.ph-duotone.ph-fingerprint:after {\n content: '\\e23f';\n margin-left: -1em;\n}\n.ph-duotone.ph-fingerprint-simple:before {\n content: '\\e240';\n opacity: 0.2;\n}\n.ph-duotone.ph-fingerprint-simple:after {\n content: '\\e241';\n margin-left: -1em;\n}\n.ph-duotone.ph-finn-the-human:before {\n content: '\\e56c';\n opacity: 0.2;\n}\n.ph-duotone.ph-finn-the-human:after {\n content: '\\e56d';\n margin-left: -1em;\n}\n.ph-duotone.ph-fire:before {\n content: '\\e242';\n opacity: 0.2;\n}\n.ph-duotone.ph-fire:after {\n content: '\\e243';\n margin-left: -1em;\n}\n.ph-duotone.ph-fire-extinguisher:before {\n content: '\\e9e8';\n opacity: 0.2;\n}\n.ph-duotone.ph-fire-extinguisher:after {\n content: '\\e9e9';\n margin-left: -1em;\n}\n.ph-duotone.ph-fire-simple:before {\n content: '\\e620';\n opacity: 0.2;\n}\n.ph-duotone.ph-fire-simple:after {\n content: '\\e621';\n margin-left: -1em;\n}\n.ph-duotone.ph-fire-truck:before {\n content: '\\e574';\n opacity: 0.2;\n}\n.ph-duotone.ph-fire-truck:after {\n content: '\\e575';\n margin-left: -1em;\n}\n.ph-duotone.ph-first-aid:before {\n content: '\\e56e';\n opacity: 0.2;\n}\n.ph-duotone.ph-first-aid:after {\n content: '\\e56f';\n margin-left: -1em;\n}\n.ph-duotone.ph-first-aid-kit:before {\n content: '\\e570';\n opacity: 0.2;\n}\n.ph-duotone.ph-first-aid-kit:after {\n content: '\\e571';\n margin-left: -1em;\n}\n.ph-duotone.ph-fish:before {\n content: '\\e728';\n opacity: 0.2;\n}\n.ph-duotone.ph-fish:after {\n content: '\\e729';\n margin-left: -1em;\n}\n.ph-duotone.ph-fish-simple:before {\n content: '\\e72a';\n opacity: 0.2;\n}\n.ph-duotone.ph-fish-simple:after {\n content: '\\e72b';\n margin-left: -1em;\n}\n.ph-duotone.ph-flag:before {\n content: '\\e244';\n opacity: 0.2;\n}\n.ph-duotone.ph-flag:after {\n content: '\\e245';\n margin-left: -1em;\n}\n.ph-duotone.ph-flag-banner:before {\n content: '\\e622';\n opacity: 0.2;\n}\n.ph-duotone.ph-flag-banner:after {\n content: '\\e623';\n margin-left: -1em;\n}\n.ph-duotone.ph-flag-banner-fold:before {\n content: '\\ecf2';\n opacity: 0.2;\n}\n.ph-duotone.ph-flag-banner-fold:after {\n content: '\\ecf3';\n margin-left: -1em;\n}\n.ph-duotone.ph-flag-checkered:before {\n content: '\\ea38';\n opacity: 0.2;\n}\n.ph-duotone.ph-flag-checkered:after {\n content: '\\ea39';\n margin-left: -1em;\n}\n.ph-duotone.ph-flag-pennant:before {\n content: '\\ecf0';\n opacity: 0.2;\n}\n.ph-duotone.ph-flag-pennant:after {\n content: '\\ecf1';\n margin-left: -1em;\n}\n.ph-duotone.ph-flame:before {\n content: '\\e624';\n opacity: 0.2;\n}\n.ph-duotone.ph-flame:after {\n content: '\\e625';\n margin-left: -1em;\n}\n.ph-duotone.ph-flashlight:before {\n content: '\\e246';\n opacity: 0.2;\n}\n.ph-duotone.ph-flashlight:after {\n content: '\\e247';\n margin-left: -1em;\n}\n.ph-duotone.ph-flask:before {\n content: '\\e79e';\n opacity: 0.2;\n}\n.ph-duotone.ph-flask:after {\n content: '\\e79f';\n margin-left: -1em;\n}\n.ph-duotone.ph-flip-horizontal:before {\n content: '\\ed6a';\n opacity: 0.2;\n}\n.ph-duotone.ph-flip-horizontal:after {\n content: '\\ed6b';\n margin-left: -1em;\n}\n.ph-duotone.ph-flip-vertical:before {\n content: '\\ed6c';\n opacity: 0.2;\n}\n.ph-duotone.ph-flip-vertical:after {\n content: '\\ed6d';\n margin-left: -1em;\n}\n.ph-duotone.ph-floppy-disk:before {\n content: '\\e248';\n opacity: 0.2;\n}\n.ph-duotone.ph-floppy-disk:after {\n content: '\\e249';\n margin-left: -1em;\n}\n.ph-duotone.ph-floppy-disk-back:before {\n content: '\\eaf4';\n opacity: 0.2;\n}\n.ph-duotone.ph-floppy-disk-back:after {\n content: '\\eaf5';\n margin-left: -1em;\n}\n.ph-duotone.ph-flow-arrow:before {\n content: '\\e6ec';\n opacity: 0.2;\n}\n.ph-duotone.ph-flow-arrow:after {\n content: '\\e6ed';\n margin-left: -1em;\n}\n.ph-duotone.ph-flower:before {\n content: '\\e75e';\n opacity: 0.2;\n}\n.ph-duotone.ph-flower:after {\n content: '\\e75f';\n margin-left: -1em;\n}\n.ph-duotone.ph-flower-lotus:before {\n content: '\\e6cc';\n opacity: 0.2;\n}\n.ph-duotone.ph-flower-lotus:after {\n content: '\\e6cd';\n margin-left: -1em;\n}\n.ph-duotone.ph-flower-tulip:before {\n content: '\\eacc';\n opacity: 0.2;\n}\n.ph-duotone.ph-flower-tulip:after {\n content: '\\eacd';\n margin-left: -1em;\n}\n.ph-duotone.ph-flying-saucer:before {\n content: '\\eb4a';\n opacity: 0.2;\n}\n.ph-duotone.ph-flying-saucer:after {\n content: '\\eb4b';\n margin-left: -1em;\n}\n.ph-duotone.ph-folder:before {\n content: '\\e24a';\n opacity: 0.2;\n}\n.ph-duotone.ph-folder:after {\n content: '\\e24b';\n margin-left: -1em;\n}\n.ph-duotone.ph-folder-dashed:before {\n content: '\\e8f8';\n opacity: 0.2;\n}\n.ph-duotone.ph-folder-dashed:after {\n content: '\\e8f9';\n margin-left: -1em;\n}\n.ph-duotone.ph-folder-lock:before {\n content: '\\ea3c';\n opacity: 0.2;\n}\n.ph-duotone.ph-folder-lock:after {\n content: '\\ea3d';\n margin-left: -1em;\n}\n.ph-duotone.ph-folder-minus:before {\n content: '\\e254';\n opacity: 0.2;\n}\n.ph-duotone.ph-folder-minus:after {\n content: '\\e255';\n margin-left: -1em;\n}\n.ph-duotone.ph-folder-open:before {\n content: '\\e256';\n opacity: 0.2;\n}\n.ph-duotone.ph-folder-open:after {\n content: '\\e257';\n margin-left: -1em;\n}\n.ph-duotone.ph-folder-plus:before {\n content: '\\e258';\n opacity: 0.2;\n}\n.ph-duotone.ph-folder-plus:after {\n content: '\\e259';\n margin-left: -1em;\n}\n.ph-duotone.ph-folder-simple:before {\n content: '\\e25a';\n opacity: 0.2;\n}\n.ph-duotone.ph-folder-simple:after {\n content: '\\e25b';\n margin-left: -1em;\n}\n.ph-duotone.ph-folder-simple-dashed:before {\n content: '\\ec2a';\n opacity: 0.2;\n}\n.ph-duotone.ph-folder-simple-dashed:after {\n content: '\\ec2b';\n margin-left: -1em;\n}\n.ph-duotone.ph-folder-simple-lock:before {\n content: '\\eb5e';\n opacity: 0.2;\n}\n.ph-duotone.ph-folder-simple-lock:after {\n content: '\\eb5f';\n margin-left: -1em;\n}\n.ph-duotone.ph-folder-simple-minus:before {\n content: '\\e25c';\n opacity: 0.2;\n}\n.ph-duotone.ph-folder-simple-minus:after {\n content: '\\e25d';\n margin-left: -1em;\n}\n.ph-duotone.ph-folder-simple-plus:before {\n content: '\\e25e';\n opacity: 0.2;\n}\n.ph-duotone.ph-folder-simple-plus:after {\n content: '\\e25f';\n margin-left: -1em;\n}\n.ph-duotone.ph-folder-simple-star:before {\n content: '\\ec2e';\n opacity: 0.2;\n}\n.ph-duotone.ph-folder-simple-star:after {\n content: '\\ec2f';\n margin-left: -1em;\n}\n.ph-duotone.ph-folder-simple-user:before {\n content: '\\eb60';\n opacity: 0.2;\n}\n.ph-duotone.ph-folder-simple-user:after {\n content: '\\eb61';\n margin-left: -1em;\n}\n.ph-duotone.ph-folder-star:before {\n content: '\\ea86';\n opacity: 0.2;\n}\n.ph-duotone.ph-folder-star:after {\n content: '\\ea87';\n margin-left: -1em;\n}\n.ph-duotone.ph-folder-user:before {\n content: '\\eb46';\n opacity: 0.2;\n}\n.ph-duotone.ph-folder-user:after {\n content: '\\eb4c';\n margin-left: -1em;\n}\n.ph-duotone.ph-folders:before {\n content: '\\e260';\n opacity: 0.2;\n}\n.ph-duotone.ph-folders:after {\n content: '\\e261';\n margin-left: -1em;\n}\n.ph-duotone.ph-football:before {\n content: '\\e718';\n opacity: 0.2;\n}\n.ph-duotone.ph-football:after {\n content: '\\e719';\n margin-left: -1em;\n}\n.ph-duotone.ph-football-helmet:before {\n content: '\\ee4c';\n opacity: 0.2;\n}\n.ph-duotone.ph-football-helmet:after {\n content: '\\ee4d';\n margin-left: -1em;\n}\n.ph-duotone.ph-footprints:before {\n content: '\\ea88';\n opacity: 0.2;\n}\n.ph-duotone.ph-footprints:after {\n content: '\\ea89';\n margin-left: -1em;\n}\n.ph-duotone.ph-fork-knife:before {\n content: '\\e262';\n opacity: 0.2;\n}\n.ph-duotone.ph-fork-knife:after {\n content: '\\e263';\n margin-left: -1em;\n}\n.ph-duotone.ph-four-k:before {\n content: '\\ea5c';\n opacity: 0.2;\n}\n.ph-duotone.ph-four-k:after {\n content: '\\ea5d';\n margin-left: -1em;\n}\n.ph-duotone.ph-frame-corners:before {\n content: '\\e626';\n opacity: 0.2;\n}\n.ph-duotone.ph-frame-corners:after {\n content: '\\e627';\n margin-left: -1em;\n}\n.ph-duotone.ph-framer-logo:before {\n content: '\\e264';\n opacity: 0.2;\n}\n.ph-duotone.ph-framer-logo:after {\n content: '\\e265';\n margin-left: -1em;\n}\n.ph-duotone.ph-function:before {\n content: '\\ebe4';\n opacity: 0.2;\n}\n.ph-duotone.ph-function:after {\n content: '\\ebe5';\n margin-left: -1em;\n}\n.ph-duotone.ph-funnel:before {\n content: '\\e266';\n opacity: 0.2;\n}\n.ph-duotone.ph-funnel:after {\n content: '\\e267';\n margin-left: -1em;\n}\n.ph-duotone.ph-funnel-simple:before {\n content: '\\e268';\n opacity: 0.2;\n}\n.ph-duotone.ph-funnel-simple:after {\n content: '\\e269';\n margin-left: -1em;\n}\n.ph-duotone.ph-funnel-simple-x:before {\n content: '\\e26a';\n opacity: 0.2;\n}\n.ph-duotone.ph-funnel-simple-x:after {\n content: '\\e26b';\n margin-left: -1em;\n}\n.ph-duotone.ph-funnel-x:before {\n content: '\\e26c';\n opacity: 0.2;\n}\n.ph-duotone.ph-funnel-x:after {\n content: '\\e26d';\n margin-left: -1em;\n}\n.ph-duotone.ph-game-controller:before {\n content: '\\e26e';\n opacity: 0.2;\n}\n.ph-duotone.ph-game-controller:after {\n content: '\\e26f';\n margin-left: -1em;\n}\n.ph-duotone.ph-garage:before {\n content: '\\ecd6';\n opacity: 0.2;\n}\n.ph-duotone.ph-garage:after {\n content: '\\ecd7';\n margin-left: -1em;\n}\n.ph-duotone.ph-gas-can:before {\n content: '\\e8ce';\n opacity: 0.2;\n}\n.ph-duotone.ph-gas-can:after {\n content: '\\e8cf';\n margin-left: -1em;\n}\n.ph-duotone.ph-gas-pump:before {\n content: '\\e768';\n opacity: 0.2;\n}\n.ph-duotone.ph-gas-pump:after {\n content: '\\e769';\n margin-left: -1em;\n}\n.ph-duotone.ph-gauge:before {\n content: '\\e628';\n opacity: 0.2;\n}\n.ph-duotone.ph-gauge:after {\n content: '\\e629';\n margin-left: -1em;\n}\n.ph-duotone.ph-gavel:before {\n content: '\\ea32';\n opacity: 0.2;\n}\n.ph-duotone.ph-gavel:after {\n content: '\\ea33';\n margin-left: -1em;\n}\n.ph-duotone.ph-gear:before {\n content: '\\e270';\n opacity: 0.2;\n}\n.ph-duotone.ph-gear:after {\n content: '\\e271';\n margin-left: -1em;\n}\n.ph-duotone.ph-gear-fine:before {\n content: '\\e87c';\n opacity: 0.2;\n}\n.ph-duotone.ph-gear-fine:after {\n content: '\\e87d';\n margin-left: -1em;\n}\n.ph-duotone.ph-gear-six:before {\n content: '\\e272';\n opacity: 0.2;\n}\n.ph-duotone.ph-gear-six:after {\n content: '\\e273';\n margin-left: -1em;\n}\n.ph-duotone.ph-gender-female:before {\n content: '\\e6e0';\n opacity: 0.2;\n}\n.ph-duotone.ph-gender-female:after {\n content: '\\e6e1';\n margin-left: -1em;\n}\n.ph-duotone.ph-gender-intersex:before {\n content: '\\e6e6';\n opacity: 0.2;\n}\n.ph-duotone.ph-gender-intersex:after {\n content: '\\e6e7';\n margin-left: -1em;\n}\n.ph-duotone.ph-gender-male:before {\n content: '\\e6e2';\n opacity: 0.2;\n}\n.ph-duotone.ph-gender-male:after {\n content: '\\e6e3';\n margin-left: -1em;\n}\n.ph-duotone.ph-gender-neuter:before {\n content: '\\e6ea';\n opacity: 0.2;\n}\n.ph-duotone.ph-gender-neuter:after {\n content: '\\e6eb';\n margin-left: -1em;\n}\n.ph-duotone.ph-gender-nonbinary:before {\n content: '\\e6e4';\n opacity: 0.2;\n}\n.ph-duotone.ph-gender-nonbinary:after {\n content: '\\e6e5';\n margin-left: -1em;\n}\n.ph-duotone.ph-gender-transgender:before {\n content: '\\e6e8';\n opacity: 0.2;\n}\n.ph-duotone.ph-gender-transgender:after {\n content: '\\e6e9';\n margin-left: -1em;\n}\n.ph-duotone.ph-ghost:before {\n content: '\\e62a';\n opacity: 0.2;\n}\n.ph-duotone.ph-ghost:after {\n content: '\\e62b';\n margin-left: -1em;\n}\n.ph-duotone.ph-gif:before {\n content: '\\e274';\n opacity: 0.2;\n}\n.ph-duotone.ph-gif:after {\n content: '\\e275';\n margin-left: -1em;\n}\n.ph-duotone.ph-gift:before {\n content: '\\e276';\n opacity: 0.2;\n}\n.ph-duotone.ph-gift:after {\n content: '\\e277';\n margin-left: -1em;\n}\n.ph-duotone.ph-git-branch:before {\n content: '\\e278';\n opacity: 0.2;\n}\n.ph-duotone.ph-git-branch:after {\n content: '\\e279';\n margin-left: -1em;\n}\n.ph-duotone.ph-git-commit:before {\n content: '\\e27a';\n opacity: 0.2;\n}\n.ph-duotone.ph-git-commit:after {\n content: '\\e27b';\n margin-left: -1em;\n}\n.ph-duotone.ph-git-diff:before {\n content: '\\e27c';\n opacity: 0.2;\n}\n.ph-duotone.ph-git-diff:after {\n content: '\\e27d';\n margin-left: -1em;\n}\n.ph-duotone.ph-git-fork:before {\n content: '\\e27e';\n opacity: 0.2;\n}\n.ph-duotone.ph-git-fork:after {\n content: '\\e27f';\n margin-left: -1em;\n}\n.ph-duotone.ph-git-merge:before {\n content: '\\e280';\n opacity: 0.2;\n}\n.ph-duotone.ph-git-merge:after {\n content: '\\e281';\n margin-left: -1em;\n}\n.ph-duotone.ph-git-pull-request:before {\n content: '\\e282';\n opacity: 0.2;\n}\n.ph-duotone.ph-git-pull-request:after {\n content: '\\e283';\n margin-left: -1em;\n}\n.ph-duotone.ph-github-logo:before {\n content: '\\e576';\n opacity: 0.2;\n}\n.ph-duotone.ph-github-logo:after {\n content: '\\e577';\n margin-left: -1em;\n}\n.ph-duotone.ph-gitlab-logo:before {\n content: '\\e694';\n opacity: 0.2;\n}\n.ph-duotone.ph-gitlab-logo:after {\n content: '\\e695';\n margin-left: -1em;\n}\n.ph-duotone.ph-gitlab-logo-simple:before {\n content: '\\e696';\n opacity: 0.2;\n}\n.ph-duotone.ph-gitlab-logo-simple:after {\n content: '\\e697';\n margin-left: -1em;\n}\n.ph-duotone.ph-globe:before {\n content: '\\e288';\n opacity: 0.2;\n}\n.ph-duotone.ph-globe:after {\n content: '\\e289';\n margin-left: -1em;\n}\n.ph-duotone.ph-globe-hemisphere-east:before {\n content: '\\e28a';\n opacity: 0.2;\n}\n.ph-duotone.ph-globe-hemisphere-east:after {\n content: '\\e28b';\n margin-left: -1em;\n}\n.ph-duotone.ph-globe-hemisphere-west:before {\n content: '\\e28c';\n opacity: 0.2;\n}\n.ph-duotone.ph-globe-hemisphere-west:after {\n content: '\\e28d';\n margin-left: -1em;\n}\n.ph-duotone.ph-globe-simple:before {\n content: '\\e28e';\n opacity: 0.2;\n}\n.ph-duotone.ph-globe-simple:after {\n content: '\\e28f';\n margin-left: -1em;\n}\n.ph-duotone.ph-globe-simple-x:before {\n content: '\\e284';\n opacity: 0.2;\n}\n.ph-duotone.ph-globe-simple-x:after {\n content: '\\e285';\n margin-left: -1em;\n}\n.ph-duotone.ph-globe-stand:before {\n content: '\\e290';\n opacity: 0.2;\n}\n.ph-duotone.ph-globe-stand:after {\n content: '\\e291';\n margin-left: -1em;\n}\n.ph-duotone.ph-globe-x:before {\n content: '\\e286';\n opacity: 0.2;\n}\n.ph-duotone.ph-globe-x:after {\n content: '\\e287';\n margin-left: -1em;\n}\n.ph-duotone.ph-goggles:before {\n content: '\\ecb4';\n opacity: 0.2;\n}\n.ph-duotone.ph-goggles:after {\n content: '\\ecb5';\n margin-left: -1em;\n}\n.ph-duotone.ph-golf:before {\n content: '\\ea3e';\n opacity: 0.2;\n}\n.ph-duotone.ph-golf:after {\n content: '\\ea3f';\n margin-left: -1em;\n}\n.ph-duotone.ph-goodreads-logo:before {\n content: '\\ed10';\n opacity: 0.2;\n}\n.ph-duotone.ph-goodreads-logo:after {\n content: '\\ed11';\n margin-left: -1em;\n}\n.ph-duotone.ph-google-cardboard-logo:before {\n content: '\\e7b6';\n opacity: 0.2;\n}\n.ph-duotone.ph-google-cardboard-logo:after {\n content: '\\e7b7';\n margin-left: -1em;\n}\n.ph-duotone.ph-google-chrome-logo:before {\n content: '\\e976';\n opacity: 0.2;\n}\n.ph-duotone.ph-google-chrome-logo:after {\n content: '\\e977';\n margin-left: -1em;\n}\n.ph-duotone.ph-google-drive-logo:before {\n content: '\\e8f6';\n opacity: 0.2;\n}\n.ph-duotone.ph-google-drive-logo:after {\n content: '\\e8f7';\n margin-left: -1em;\n}\n.ph-duotone.ph-google-logo:before {\n content: '\\e292';\n opacity: 0.2;\n}\n.ph-duotone.ph-google-logo:after {\n content: '\\e293';\n margin-left: -1em;\n}\n.ph-duotone.ph-google-photos-logo:before {\n content: '\\eb92';\n opacity: 0.2;\n}\n.ph-duotone.ph-google-photos-logo:after {\n content: '\\eb93';\n margin-left: -1em;\n}\n.ph-duotone.ph-google-play-logo:before {\n content: '\\e294';\n opacity: 0.2;\n}\n.ph-duotone.ph-google-play-logo:after {\n content: '\\e295';\n margin-left: -1em;\n}\n.ph-duotone.ph-google-podcasts-logo:before {\n content: '\\eb94';\n opacity: 0.2;\n}\n.ph-duotone.ph-google-podcasts-logo:after {\n content: '\\eb95';\n margin-left: -1em;\n}\n.ph-duotone.ph-gps:before {\n content: '\\edd8';\n opacity: 0.2;\n}\n.ph-duotone.ph-gps:after {\n content: '\\edd9';\n margin-left: -1em;\n}\n.ph-duotone.ph-gps-fix:before {\n content: '\\edd6';\n opacity: 0.2;\n}\n.ph-duotone.ph-gps-fix:after {\n content: '\\edd7';\n margin-left: -1em;\n}\n.ph-duotone.ph-gps-slash:before {\n content: '\\edd4';\n opacity: 0.2;\n}\n.ph-duotone.ph-gps-slash:after {\n content: '\\edd5';\n margin-left: -1em;\n}\n.ph-duotone.ph-gradient:before {\n content: '\\eb42';\n opacity: 0.2;\n}\n.ph-duotone.ph-gradient:after {\n content: '\\eb4d';\n margin-left: -1em;\n}\n.ph-duotone.ph-graduation-cap:before {\n content: '\\e62c';\n opacity: 0.2;\n}\n.ph-duotone.ph-graduation-cap:after {\n content: '\\e62d';\n margin-left: -1em;\n}\n.ph-duotone.ph-grains:before {\n content: '\\ec68';\n opacity: 0.2;\n}\n.ph-duotone.ph-grains:after {\n content: '\\ec69';\n margin-left: -1em;\n}\n.ph-duotone.ph-grains-slash:before {\n content: '\\ec6a';\n opacity: 0.2;\n}\n.ph-duotone.ph-grains-slash:after {\n content: '\\ec6b';\n margin-left: -1em;\n}\n.ph-duotone.ph-graph:before {\n content: '\\eb58';\n opacity: 0.2;\n}\n.ph-duotone.ph-graph:after {\n content: '\\eb59';\n margin-left: -1em;\n}\n.ph-duotone.ph-graphics-card:before {\n content: '\\e612';\n opacity: 0.2;\n}\n.ph-duotone.ph-graphics-card:after {\n content: '\\e613';\n margin-left: -1em;\n}\n.ph-duotone.ph-greater-than:before {\n content: '\\edc4';\n opacity: 0.2;\n}\n.ph-duotone.ph-greater-than:after {\n content: '\\edc5';\n margin-left: -1em;\n}\n.ph-duotone.ph-greater-than-or-equal:before {\n content: '\\eda2';\n opacity: 0.2;\n}\n.ph-duotone.ph-greater-than-or-equal:after {\n content: '\\eda3';\n margin-left: -1em;\n}\n.ph-duotone.ph-grid-four:before {\n content: '\\e296';\n opacity: 0.2;\n}\n.ph-duotone.ph-grid-four:after {\n content: '\\e297';\n margin-left: -1em;\n}\n.ph-duotone.ph-grid-nine:before {\n content: '\\ec8c';\n opacity: 0.2;\n}\n.ph-duotone.ph-grid-nine:after {\n content: '\\ec8d';\n margin-left: -1em;\n}\n.ph-duotone.ph-guitar:before {\n content: '\\ea8a';\n opacity: 0.2;\n}\n.ph-duotone.ph-guitar:after {\n content: '\\ea8b';\n margin-left: -1em;\n}\n.ph-duotone.ph-hair-dryer:before {\n content: '\\ea66';\n opacity: 0.2;\n}\n.ph-duotone.ph-hair-dryer:after {\n content: '\\ea67';\n margin-left: -1em;\n}\n.ph-duotone.ph-hamburger:before {\n content: '\\e790';\n opacity: 0.2;\n}\n.ph-duotone.ph-hamburger:after {\n content: '\\e791';\n margin-left: -1em;\n}\n.ph-duotone.ph-hammer:before {\n content: '\\e80e';\n opacity: 0.2;\n}\n.ph-duotone.ph-hammer:after {\n content: '\\e80f';\n margin-left: -1em;\n}\n.ph-duotone.ph-hand:before {\n content: '\\e298';\n opacity: 0.2;\n}\n.ph-duotone.ph-hand:after {\n content: '\\e299';\n margin-left: -1em;\n}\n.ph-duotone.ph-hand-arrow-down:before {\n content: '\\ea4e';\n opacity: 0.2;\n}\n.ph-duotone.ph-hand-arrow-down:after {\n content: '\\ea4f';\n margin-left: -1em;\n}\n.ph-duotone.ph-hand-arrow-up:before {\n content: '\\ee5a';\n opacity: 0.2;\n}\n.ph-duotone.ph-hand-arrow-up:after {\n content: '\\ee5b';\n margin-left: -1em;\n}\n.ph-duotone.ph-hand-coins:before {\n content: '\\ea8c';\n opacity: 0.2;\n}\n.ph-duotone.ph-hand-coins:after {\n content: '\\ea8d';\n margin-left: -1em;\n}\n.ph-duotone.ph-hand-deposit:before {\n content: '\\ee82';\n opacity: 0.2;\n}\n.ph-duotone.ph-hand-deposit:after {\n content: '\\ee83';\n margin-left: -1em;\n}\n.ph-duotone.ph-hand-eye:before {\n content: '\\ea4c';\n opacity: 0.2;\n}\n.ph-duotone.ph-hand-eye:after {\n content: '\\ea4d';\n margin-left: -1em;\n}\n.ph-duotone.ph-hand-fist:before {\n content: '\\e57a';\n opacity: 0.2;\n}\n.ph-duotone.ph-hand-fist:after {\n content: '\\e57b';\n margin-left: -1em;\n}\n.ph-duotone.ph-hand-grabbing:before {\n content: '\\e57c';\n opacity: 0.2;\n}\n.ph-duotone.ph-hand-grabbing:after {\n content: '\\e57d';\n margin-left: -1em;\n}\n.ph-duotone.ph-hand-heart:before {\n content: '\\e810';\n opacity: 0.2;\n}\n.ph-duotone.ph-hand-heart:after {\n content: '\\e811';\n margin-left: -1em;\n}\n.ph-duotone.ph-hand-palm:before {\n content: '\\e57e';\n opacity: 0.2;\n}\n.ph-duotone.ph-hand-palm:after {\n content: '\\e57f';\n margin-left: -1em;\n}\n.ph-duotone.ph-hand-peace:before {\n content: '\\e7cc';\n opacity: 0.2;\n}\n.ph-duotone.ph-hand-peace:after {\n content: '\\e7cd';\n margin-left: -1em;\n}\n.ph-duotone.ph-hand-pointing:before {\n content: '\\e29a';\n opacity: 0.2;\n}\n.ph-duotone.ph-hand-pointing:after {\n content: '\\e29b';\n margin-left: -1em;\n}\n.ph-duotone.ph-hand-soap:before {\n content: '\\e630';\n opacity: 0.2;\n}\n.ph-duotone.ph-hand-soap:after {\n content: '\\e631';\n margin-left: -1em;\n}\n.ph-duotone.ph-hand-swipe-left:before {\n content: '\\ec94';\n opacity: 0.2;\n}\n.ph-duotone.ph-hand-swipe-left:after {\n content: '\\ec95';\n margin-left: -1em;\n}\n.ph-duotone.ph-hand-swipe-right:before {\n content: '\\ec92';\n opacity: 0.2;\n}\n.ph-duotone.ph-hand-swipe-right:after {\n content: '\\ec93';\n margin-left: -1em;\n}\n.ph-duotone.ph-hand-tap:before {\n content: '\\ec90';\n opacity: 0.2;\n}\n.ph-duotone.ph-hand-tap:after {\n content: '\\ec91';\n margin-left: -1em;\n}\n.ph-duotone.ph-hand-waving:before {\n content: '\\e580';\n opacity: 0.2;\n}\n.ph-duotone.ph-hand-waving:after {\n content: '\\e581';\n margin-left: -1em;\n}\n.ph-duotone.ph-hand-withdraw:before {\n content: '\\ee80';\n opacity: 0.2;\n}\n.ph-duotone.ph-hand-withdraw:after {\n content: '\\ee81';\n margin-left: -1em;\n}\n.ph-duotone.ph-handbag:before {\n content: '\\e29c';\n opacity: 0.2;\n}\n.ph-duotone.ph-handbag:after {\n content: '\\e29d';\n margin-left: -1em;\n}\n.ph-duotone.ph-handbag-simple:before {\n content: '\\e62e';\n opacity: 0.2;\n}\n.ph-duotone.ph-handbag-simple:after {\n content: '\\e62f';\n margin-left: -1em;\n}\n.ph-duotone.ph-hands-clapping:before {\n content: '\\e6a0';\n opacity: 0.2;\n}\n.ph-duotone.ph-hands-clapping:after {\n content: '\\e6a1';\n margin-left: -1em;\n}\n.ph-duotone.ph-hands-praying:before {\n content: '\\ecc8';\n opacity: 0.2;\n}\n.ph-duotone.ph-hands-praying:after {\n content: '\\ecc9';\n margin-left: -1em;\n}\n.ph-duotone.ph-handshake:before {\n content: '\\e582';\n opacity: 0.2;\n}\n.ph-duotone.ph-handshake:after {\n content: '\\e583';\n margin-left: -1em;\n}\n.ph-duotone.ph-hard-drive:before {\n content: '\\e29e';\n opacity: 0.2;\n}\n.ph-duotone.ph-hard-drive:after {\n content: '\\e29f';\n margin-left: -1em;\n}\n.ph-duotone.ph-hard-drives:before {\n content: '\\e2a0';\n opacity: 0.2;\n}\n.ph-duotone.ph-hard-drives:after {\n content: '\\e2a1';\n margin-left: -1em;\n}\n.ph-duotone.ph-hard-hat:before {\n content: '\\ed46';\n opacity: 0.2;\n}\n.ph-duotone.ph-hard-hat:after {\n content: '\\ed47';\n margin-left: -1em;\n}\n.ph-duotone.ph-hash:before {\n content: '\\e2a2';\n opacity: 0.2;\n}\n.ph-duotone.ph-hash:after {\n content: '\\e2a3';\n margin-left: -1em;\n}\n.ph-duotone.ph-hash-straight:before {\n content: '\\e2a4';\n opacity: 0.2;\n}\n.ph-duotone.ph-hash-straight:after {\n content: '\\e2a5';\n margin-left: -1em;\n}\n.ph-duotone.ph-head-circuit:before {\n content: '\\e7d4';\n opacity: 0.2;\n}\n.ph-duotone.ph-head-circuit:after {\n content: '\\e7d5';\n margin-left: -1em;\n}\n.ph-duotone.ph-headlights:before {\n content: '\\e6fe';\n opacity: 0.2;\n}\n.ph-duotone.ph-headlights:after {\n content: '\\e6ff';\n margin-left: -1em;\n}\n.ph-duotone.ph-headphones:before {\n content: '\\e2a6';\n opacity: 0.2;\n}\n.ph-duotone.ph-headphones:after {\n content: '\\e2a7';\n margin-left: -1em;\n}\n.ph-duotone.ph-headset:before {\n content: '\\e584';\n opacity: 0.2;\n}\n.ph-duotone.ph-headset:after {\n content: '\\e585';\n margin-left: -1em;\n}\n.ph-duotone.ph-heart:before {\n content: '\\e2a8';\n opacity: 0.2;\n}\n.ph-duotone.ph-heart:after {\n content: '\\e2a9';\n margin-left: -1em;\n}\n.ph-duotone.ph-heart-break:before {\n content: '\\ebe8';\n opacity: 0.2;\n}\n.ph-duotone.ph-heart-break:after {\n content: '\\ebe9';\n margin-left: -1em;\n}\n.ph-duotone.ph-heart-half:before {\n content: '\\ec48';\n opacity: 0.2;\n}\n.ph-duotone.ph-heart-half:after {\n content: '\\ec49';\n margin-left: -1em;\n}\n.ph-duotone.ph-heart-straight:before {\n content: '\\e2aa';\n opacity: 0.2;\n}\n.ph-duotone.ph-heart-straight:after {\n content: '\\e2ab';\n margin-left: -1em;\n}\n.ph-duotone.ph-heart-straight-break:before {\n content: '\\eb98';\n opacity: 0.2;\n}\n.ph-duotone.ph-heart-straight-break:after {\n content: '\\eb99';\n margin-left: -1em;\n}\n.ph-duotone.ph-heartbeat:before {\n content: '\\e2ac';\n opacity: 0.2;\n}\n.ph-duotone.ph-heartbeat:after {\n content: '\\e2ad';\n margin-left: -1em;\n}\n.ph-duotone.ph-hexagon:before {\n content: '\\e2ae';\n opacity: 0.2;\n}\n.ph-duotone.ph-hexagon:after {\n content: '\\e2af';\n margin-left: -1em;\n}\n.ph-duotone.ph-high-definition:before {\n content: '\\ea8e';\n opacity: 0.2;\n}\n.ph-duotone.ph-high-definition:after {\n content: '\\ea8f';\n margin-left: -1em;\n}\n.ph-duotone.ph-high-heel:before {\n content: '\\e8e8';\n opacity: 0.2;\n}\n.ph-duotone.ph-high-heel:after {\n content: '\\e8e9';\n margin-left: -1em;\n}\n.ph-duotone.ph-highlighter:before {\n content: '\\ec76';\n opacity: 0.2;\n}\n.ph-duotone.ph-highlighter:after {\n content: '\\ec77';\n margin-left: -1em;\n}\n.ph-duotone.ph-highlighter-circle:before {\n content: '\\e632';\n opacity: 0.2;\n}\n.ph-duotone.ph-highlighter-circle:after {\n content: '\\e633';\n margin-left: -1em;\n}\n.ph-duotone.ph-hockey:before {\n content: '\\ec86';\n opacity: 0.2;\n}\n.ph-duotone.ph-hockey:after {\n content: '\\ec87';\n margin-left: -1em;\n}\n.ph-duotone.ph-hoodie:before {\n content: '\\ecd0';\n opacity: 0.2;\n}\n.ph-duotone.ph-hoodie:after {\n content: '\\ecd1';\n margin-left: -1em;\n}\n.ph-duotone.ph-horse:before {\n content: '\\e2b0';\n opacity: 0.2;\n}\n.ph-duotone.ph-horse:after {\n content: '\\e2b1';\n margin-left: -1em;\n}\n.ph-duotone.ph-hospital:before {\n content: '\\e844';\n opacity: 0.2;\n}\n.ph-duotone.ph-hospital:after {\n content: '\\e845';\n margin-left: -1em;\n}\n.ph-duotone.ph-hourglass:before {\n content: '\\e2b2';\n opacity: 0.2;\n}\n.ph-duotone.ph-hourglass:after {\n content: '\\e2b3';\n margin-left: -1em;\n}\n.ph-duotone.ph-hourglass-high:before {\n content: '\\e2b4';\n opacity: 0.2;\n}\n.ph-duotone.ph-hourglass-high:after {\n content: '\\e2b5';\n margin-left: -1em;\n}\n.ph-duotone.ph-hourglass-low:before {\n content: '\\e2b6';\n opacity: 0.2;\n}\n.ph-duotone.ph-hourglass-low:after {\n content: '\\e2b7';\n margin-left: -1em;\n}\n.ph-duotone.ph-hourglass-medium:before {\n content: '\\e2b8';\n opacity: 0.2;\n}\n.ph-duotone.ph-hourglass-medium:after {\n content: '\\e2b9';\n margin-left: -1em;\n}\n.ph-duotone.ph-hourglass-simple:before {\n content: '\\e2ba';\n opacity: 0.2;\n}\n.ph-duotone.ph-hourglass-simple:after {\n content: '\\e2bb';\n margin-left: -1em;\n}\n.ph-duotone.ph-hourglass-simple-high:before {\n content: '\\e2bc';\n opacity: 0.2;\n}\n.ph-duotone.ph-hourglass-simple-high:after {\n content: '\\e2bd';\n margin-left: -1em;\n}\n.ph-duotone.ph-hourglass-simple-low:before {\n content: '\\e2be';\n opacity: 0.2;\n}\n.ph-duotone.ph-hourglass-simple-low:after {\n content: '\\e2bf';\n margin-left: -1em;\n}\n.ph-duotone.ph-hourglass-simple-medium:before {\n content: '\\e2c0';\n opacity: 0.2;\n}\n.ph-duotone.ph-hourglass-simple-medium:after {\n content: '\\e2c1';\n margin-left: -1em;\n}\n.ph-duotone.ph-house:before {\n content: '\\e2c2';\n opacity: 0.2;\n}\n.ph-duotone.ph-house:after {\n content: '\\e2c3';\n margin-left: -1em;\n}\n.ph-duotone.ph-house-line:before {\n content: '\\e2c4';\n opacity: 0.2;\n}\n.ph-duotone.ph-house-line:after {\n content: '\\e2c5';\n margin-left: -1em;\n}\n.ph-duotone.ph-house-simple:before {\n content: '\\e2c6';\n opacity: 0.2;\n}\n.ph-duotone.ph-house-simple:after {\n content: '\\e2c7';\n margin-left: -1em;\n}\n.ph-duotone.ph-hurricane:before {\n content: '\\e88e';\n opacity: 0.2;\n}\n.ph-duotone.ph-hurricane:after {\n content: '\\e88f';\n margin-left: -1em;\n}\n.ph-duotone.ph-ice-cream:before {\n content: '\\e804';\n opacity: 0.2;\n}\n.ph-duotone.ph-ice-cream:after {\n content: '\\e805';\n margin-left: -1em;\n}\n.ph-duotone.ph-identification-badge:before {\n content: '\\e6f6';\n opacity: 0.2;\n}\n.ph-duotone.ph-identification-badge:after {\n content: '\\e6f7';\n margin-left: -1em;\n}\n.ph-duotone.ph-identification-card:before {\n content: '\\e2c8';\n opacity: 0.2;\n}\n.ph-duotone.ph-identification-card:after {\n content: '\\e2c9';\n margin-left: -1em;\n}\n.ph-duotone.ph-image:before {\n content: '\\e2ca';\n opacity: 0.2;\n}\n.ph-duotone.ph-image:after {\n content: '\\e2cb';\n margin-left: -1em;\n}\n.ph-duotone.ph-image-broken:before {\n content: '\\e7a8';\n opacity: 0.2;\n}\n.ph-duotone.ph-image-broken:after {\n content: '\\e7a9';\n margin-left: -1em;\n}\n.ph-duotone.ph-image-square:before {\n content: '\\e2cc';\n opacity: 0.2;\n}\n.ph-duotone.ph-image-square:after {\n content: '\\e2cd';\n margin-left: -1em;\n}\n.ph-duotone.ph-images:before {\n content: '\\e836';\n opacity: 0.2;\n}\n.ph-duotone.ph-images:after {\n content: '\\e837';\n margin-left: -1em;\n}\n.ph-duotone.ph-images-square:before {\n content: '\\e834';\n opacity: 0.2;\n}\n.ph-duotone.ph-images-square:after {\n content: '\\e835';\n margin-left: -1em;\n}\n.ph-duotone.ph-infinity:before {\n content: '\\e634';\n opacity: 0.2;\n}\n.ph-duotone.ph-infinity:after {\n content: '\\e635';\n margin-left: -1em;\n}\n.ph-duotone.ph-info:before {\n content: '\\e2ce';\n opacity: 0.2;\n}\n.ph-duotone.ph-info:after {\n content: '\\e2cf';\n margin-left: -1em;\n}\n.ph-duotone.ph-instagram-logo:before {\n content: '\\e2d0';\n opacity: 0.2;\n}\n.ph-duotone.ph-instagram-logo:after {\n content: '\\e2d1';\n margin-left: -1em;\n}\n.ph-duotone.ph-intersect:before {\n content: '\\e2d2';\n opacity: 0.2;\n}\n.ph-duotone.ph-intersect:after {\n content: '\\e2d3';\n margin-left: -1em;\n}\n.ph-duotone.ph-intersect-square:before {\n content: '\\e87a';\n opacity: 0.2;\n}\n.ph-duotone.ph-intersect-square:after {\n content: '\\e87b';\n margin-left: -1em;\n}\n.ph-duotone.ph-intersect-three:before {\n content: '\\ecc4';\n opacity: 0.2;\n}\n.ph-duotone.ph-intersect-three:after {\n content: '\\ecc5';\n margin-left: -1em;\n}\n.ph-duotone.ph-intersection:before {\n content: '\\edba';\n opacity: 0.2;\n}\n.ph-duotone.ph-intersection:after {\n content: '\\edbb';\n margin-left: -1em;\n}\n.ph-duotone.ph-invoice:before {\n content: '\\ee42';\n opacity: 0.2;\n}\n.ph-duotone.ph-invoice:after {\n content: '\\ee43';\n margin-left: -1em;\n}\n.ph-duotone.ph-island:before {\n content: '\\ee06';\n opacity: 0.2;\n}\n.ph-duotone.ph-island:after {\n content: '\\ee07';\n margin-left: -1em;\n}\n.ph-duotone.ph-jar:before {\n content: '\\e7e0';\n opacity: 0.2;\n}\n.ph-duotone.ph-jar:after {\n content: '\\e7e3';\n margin-left: -1em;\n}\n.ph-duotone.ph-jar-label:before {\n content: '\\e7e1';\n opacity: 0.2;\n}\n.ph-duotone.ph-jar-label:after {\n content: '\\e7e5';\n margin-left: -1em;\n}\n.ph-duotone.ph-jeep:before {\n content: '\\e2d4';\n opacity: 0.2;\n}\n.ph-duotone.ph-jeep:after {\n content: '\\e2d5';\n margin-left: -1em;\n}\n.ph-duotone.ph-joystick:before {\n content: '\\ea5e';\n opacity: 0.2;\n}\n.ph-duotone.ph-joystick:after {\n content: '\\ea5f';\n margin-left: -1em;\n}\n.ph-duotone.ph-kanban:before {\n content: '\\eb54';\n opacity: 0.2;\n}\n.ph-duotone.ph-kanban:after {\n content: '\\eb55';\n margin-left: -1em;\n}\n.ph-duotone.ph-key:before {\n content: '\\e2d6';\n opacity: 0.2;\n}\n.ph-duotone.ph-key:after {\n content: '\\e2d7';\n margin-left: -1em;\n}\n.ph-duotone.ph-key-return:before {\n content: '\\e782';\n opacity: 0.2;\n}\n.ph-duotone.ph-key-return:after {\n content: '\\e783';\n margin-left: -1em;\n}\n.ph-duotone.ph-keyboard:before {\n content: '\\e2d8';\n opacity: 0.2;\n}\n.ph-duotone.ph-keyboard:after {\n content: '\\e2d9';\n margin-left: -1em;\n}\n.ph-duotone.ph-keyhole:before {\n content: '\\ea78';\n opacity: 0.2;\n}\n.ph-duotone.ph-keyhole:after {\n content: '\\ea79';\n margin-left: -1em;\n}\n.ph-duotone.ph-knife:before {\n content: '\\e636';\n opacity: 0.2;\n}\n.ph-duotone.ph-knife:after {\n content: '\\e637';\n margin-left: -1em;\n}\n.ph-duotone.ph-ladder:before {\n content: '\\e9e4';\n opacity: 0.2;\n}\n.ph-duotone.ph-ladder:after {\n content: '\\e9e5';\n margin-left: -1em;\n}\n.ph-duotone.ph-ladder-simple:before {\n content: '\\ec26';\n opacity: 0.2;\n}\n.ph-duotone.ph-ladder-simple:after {\n content: '\\ec27';\n margin-left: -1em;\n}\n.ph-duotone.ph-lamp:before {\n content: '\\e638';\n opacity: 0.2;\n}\n.ph-duotone.ph-lamp:after {\n content: '\\e639';\n margin-left: -1em;\n}\n.ph-duotone.ph-lamp-pendant:before {\n content: '\\ee2e';\n opacity: 0.2;\n}\n.ph-duotone.ph-lamp-pendant:after {\n content: '\\ee2f';\n margin-left: -1em;\n}\n.ph-duotone.ph-laptop:before {\n content: '\\e586';\n opacity: 0.2;\n}\n.ph-duotone.ph-laptop:after {\n content: '\\e587';\n margin-left: -1em;\n}\n.ph-duotone.ph-lasso:before {\n content: '\\edc6';\n opacity: 0.2;\n}\n.ph-duotone.ph-lasso:after {\n content: '\\edc7';\n margin-left: -1em;\n}\n.ph-duotone.ph-lastfm-logo:before {\n content: '\\e842';\n opacity: 0.2;\n}\n.ph-duotone.ph-lastfm-logo:after {\n content: '\\e843';\n margin-left: -1em;\n}\n.ph-duotone.ph-layout:before {\n content: '\\e6d6';\n opacity: 0.2;\n}\n.ph-duotone.ph-layout:after {\n content: '\\e6d7';\n margin-left: -1em;\n}\n.ph-duotone.ph-leaf:before {\n content: '\\e2da';\n opacity: 0.2;\n}\n.ph-duotone.ph-leaf:after {\n content: '\\e2db';\n margin-left: -1em;\n}\n.ph-duotone.ph-lectern:before {\n content: '\\e95a';\n opacity: 0.2;\n}\n.ph-duotone.ph-lectern:after {\n content: '\\e95b';\n margin-left: -1em;\n}\n.ph-duotone.ph-lego:before {\n content: '\\e8c6';\n opacity: 0.2;\n}\n.ph-duotone.ph-lego:after {\n content: '\\e8c8';\n margin-left: -1em;\n}\n.ph-duotone.ph-lego-smiley:before {\n content: '\\e8c7';\n opacity: 0.2;\n}\n.ph-duotone.ph-lego-smiley:after {\n content: '\\e8c9';\n margin-left: -1em;\n}\n.ph-duotone.ph-less-than:before {\n content: '\\edac';\n opacity: 0.2;\n}\n.ph-duotone.ph-less-than:after {\n content: '\\edad';\n margin-left: -1em;\n}\n.ph-duotone.ph-less-than-or-equal:before {\n content: '\\eda4';\n opacity: 0.2;\n}\n.ph-duotone.ph-less-than-or-equal:after {\n content: '\\eda5';\n margin-left: -1em;\n}\n.ph-duotone.ph-letter-circle-h:before {\n content: '\\ebf8';\n opacity: 0.2;\n}\n.ph-duotone.ph-letter-circle-h:after {\n content: '\\ebf9';\n margin-left: -1em;\n}\n.ph-duotone.ph-letter-circle-p:before {\n content: '\\ec08';\n opacity: 0.2;\n}\n.ph-duotone.ph-letter-circle-p:after {\n content: '\\ec09';\n margin-left: -1em;\n}\n.ph-duotone.ph-letter-circle-v:before {\n content: '\\ec14';\n opacity: 0.2;\n}\n.ph-duotone.ph-letter-circle-v:after {\n content: '\\ec15';\n margin-left: -1em;\n}\n.ph-duotone.ph-lifebuoy:before {\n content: '\\e63a';\n opacity: 0.2;\n}\n.ph-duotone.ph-lifebuoy:after {\n content: '\\e63b';\n margin-left: -1em;\n}\n.ph-duotone.ph-lightbulb:before {\n content: '\\e2dc';\n opacity: 0.2;\n}\n.ph-duotone.ph-lightbulb:after {\n content: '\\e2dd';\n margin-left: -1em;\n}\n.ph-duotone.ph-lightbulb-filament:before {\n content: '\\e63c';\n opacity: 0.2;\n}\n.ph-duotone.ph-lightbulb-filament:after {\n content: '\\e63d';\n margin-left: -1em;\n}\n.ph-duotone.ph-lighthouse:before {\n content: '\\e9f6';\n opacity: 0.2;\n}\n.ph-duotone.ph-lighthouse:after {\n content: '\\e9f7';\n margin-left: -1em;\n}\n.ph-duotone.ph-lightning:before {\n content: '\\e2de';\n opacity: 0.2;\n}\n.ph-duotone.ph-lightning:after {\n content: '\\e2df';\n margin-left: -1em;\n}\n.ph-duotone.ph-lightning-a:before {\n content: '\\ea84';\n opacity: 0.2;\n}\n.ph-duotone.ph-lightning-a:after {\n content: '\\ea85';\n margin-left: -1em;\n}\n.ph-duotone.ph-lightning-slash:before {\n content: '\\e2e0';\n opacity: 0.2;\n}\n.ph-duotone.ph-lightning-slash:after {\n content: '\\e2e1';\n margin-left: -1em;\n}\n.ph-duotone.ph-line-segment:before {\n content: '\\e6d2';\n opacity: 0.2;\n}\n.ph-duotone.ph-line-segment:after {\n content: '\\e6d3';\n margin-left: -1em;\n}\n.ph-duotone.ph-line-segments:before {\n content: '\\e6d4';\n opacity: 0.2;\n}\n.ph-duotone.ph-line-segments:after {\n content: '\\e6d5';\n margin-left: -1em;\n}\n.ph-duotone.ph-line-vertical:before {\n content: '\\ed70';\n opacity: 0.2;\n}\n.ph-duotone.ph-line-vertical:after {\n content: '\\ed71';\n margin-left: -1em;\n}\n.ph-duotone.ph-link:before {\n content: '\\e2e2';\n opacity: 0.2;\n}\n.ph-duotone.ph-link:after {\n content: '\\e2e3';\n margin-left: -1em;\n}\n.ph-duotone.ph-link-break:before {\n content: '\\e2e4';\n opacity: 0.2;\n}\n.ph-duotone.ph-link-break:after {\n content: '\\e2e5';\n margin-left: -1em;\n}\n.ph-duotone.ph-link-simple:before {\n content: '\\e2e6';\n opacity: 0.2;\n}\n.ph-duotone.ph-link-simple:after {\n content: '\\e2e7';\n margin-left: -1em;\n}\n.ph-duotone.ph-link-simple-break:before {\n content: '\\e2e8';\n opacity: 0.2;\n}\n.ph-duotone.ph-link-simple-break:after {\n content: '\\e2e9';\n margin-left: -1em;\n}\n.ph-duotone.ph-link-simple-horizontal:before {\n content: '\\e2ea';\n opacity: 0.2;\n}\n.ph-duotone.ph-link-simple-horizontal:after {\n content: '\\e2eb';\n margin-left: -1em;\n}\n.ph-duotone.ph-link-simple-horizontal-break:before {\n content: '\\e2ec';\n opacity: 0.2;\n}\n.ph-duotone.ph-link-simple-horizontal-break:after {\n content: '\\e2ed';\n margin-left: -1em;\n}\n.ph-duotone.ph-linkedin-logo:before {\n content: '\\e2ee';\n opacity: 0.2;\n}\n.ph-duotone.ph-linkedin-logo:after {\n content: '\\e2ef';\n margin-left: -1em;\n}\n.ph-duotone.ph-linktree-logo:before {\n content: '\\edee';\n opacity: 0.2;\n}\n.ph-duotone.ph-linktree-logo:after {\n content: '\\edef';\n margin-left: -1em;\n}\n.ph-duotone.ph-linux-logo:before {\n content: '\\eb02';\n opacity: 0.2;\n}\n.ph-duotone.ph-linux-logo:after {\n content: '\\eb03';\n margin-left: -1em;\n}\n.ph-duotone.ph-list:before {\n content: '\\e2f0';\n opacity: 0.2;\n}\n.ph-duotone.ph-list:after {\n content: '\\e2f1';\n margin-left: -1em;\n}\n.ph-duotone.ph-list-bullets:before {\n content: '\\e2f2';\n opacity: 0.2;\n}\n.ph-duotone.ph-list-bullets:after {\n content: '\\e2f3';\n margin-left: -1em;\n}\n.ph-duotone.ph-list-checks:before {\n content: '\\eadc';\n opacity: 0.2;\n}\n.ph-duotone.ph-list-checks:after {\n content: '\\eadd';\n margin-left: -1em;\n}\n.ph-duotone.ph-list-dashes:before {\n content: '\\e2f4';\n opacity: 0.2;\n}\n.ph-duotone.ph-list-dashes:after {\n content: '\\e2f5';\n margin-left: -1em;\n}\n.ph-duotone.ph-list-heart:before {\n content: '\\ebde';\n opacity: 0.2;\n}\n.ph-duotone.ph-list-heart:after {\n content: '\\ebdf';\n margin-left: -1em;\n}\n.ph-duotone.ph-list-magnifying-glass:before {\n content: '\\ebe0';\n opacity: 0.2;\n}\n.ph-duotone.ph-list-magnifying-glass:after {\n content: '\\ebe1';\n margin-left: -1em;\n}\n.ph-duotone.ph-list-numbers:before {\n content: '\\e2f6';\n opacity: 0.2;\n}\n.ph-duotone.ph-list-numbers:after {\n content: '\\e2f7';\n margin-left: -1em;\n}\n.ph-duotone.ph-list-plus:before {\n content: '\\e2f8';\n opacity: 0.2;\n}\n.ph-duotone.ph-list-plus:after {\n content: '\\e2f9';\n margin-left: -1em;\n}\n.ph-duotone.ph-list-star:before {\n content: '\\ebdc';\n opacity: 0.2;\n}\n.ph-duotone.ph-list-star:after {\n content: '\\ebdd';\n margin-left: -1em;\n}\n.ph-duotone.ph-lock:before {\n content: '\\e2fa';\n opacity: 0.2;\n}\n.ph-duotone.ph-lock:after {\n content: '\\e2fb';\n margin-left: -1em;\n}\n.ph-duotone.ph-lock-key:before {\n content: '\\e2fe';\n opacity: 0.2;\n}\n.ph-duotone.ph-lock-key:after {\n content: '\\e2ff';\n margin-left: -1em;\n}\n.ph-duotone.ph-lock-key-open:before {\n content: '\\e300';\n opacity: 0.2;\n}\n.ph-duotone.ph-lock-key-open:after {\n content: '\\e301';\n margin-left: -1em;\n}\n.ph-duotone.ph-lock-laminated:before {\n content: '\\e302';\n opacity: 0.2;\n}\n.ph-duotone.ph-lock-laminated:after {\n content: '\\e303';\n margin-left: -1em;\n}\n.ph-duotone.ph-lock-laminated-open:before {\n content: '\\e304';\n opacity: 0.2;\n}\n.ph-duotone.ph-lock-laminated-open:after {\n content: '\\e305';\n margin-left: -1em;\n}\n.ph-duotone.ph-lock-open:before {\n content: '\\e306';\n opacity: 0.2;\n}\n.ph-duotone.ph-lock-open:after {\n content: '\\e307';\n margin-left: -1em;\n}\n.ph-duotone.ph-lock-simple:before {\n content: '\\e308';\n opacity: 0.2;\n}\n.ph-duotone.ph-lock-simple:after {\n content: '\\e309';\n margin-left: -1em;\n}\n.ph-duotone.ph-lock-simple-open:before {\n content: '\\e30a';\n opacity: 0.2;\n}\n.ph-duotone.ph-lock-simple-open:after {\n content: '\\e30b';\n margin-left: -1em;\n}\n.ph-duotone.ph-lockers:before {\n content: '\\ecb8';\n opacity: 0.2;\n}\n.ph-duotone.ph-lockers:after {\n content: '\\ecb9';\n margin-left: -1em;\n}\n.ph-duotone.ph-log:before {\n content: '\\ed82';\n opacity: 0.2;\n}\n.ph-duotone.ph-log:after {\n content: '\\ed83';\n margin-left: -1em;\n}\n.ph-duotone.ph-magic-wand:before {\n content: '\\e6b6';\n opacity: 0.2;\n}\n.ph-duotone.ph-magic-wand:after {\n content: '\\e6b7';\n margin-left: -1em;\n}\n.ph-duotone.ph-magnet:before {\n content: '\\e680';\n opacity: 0.2;\n}\n.ph-duotone.ph-magnet:after {\n content: '\\e681';\n margin-left: -1em;\n}\n.ph-duotone.ph-magnet-straight:before {\n content: '\\e682';\n opacity: 0.2;\n}\n.ph-duotone.ph-magnet-straight:after {\n content: '\\e683';\n margin-left: -1em;\n}\n.ph-duotone.ph-magnifying-glass:before {\n content: '\\e30c';\n opacity: 0.2;\n}\n.ph-duotone.ph-magnifying-glass:after {\n content: '\\e30d';\n margin-left: -1em;\n}\n.ph-duotone.ph-magnifying-glass-minus:before {\n content: '\\e30e';\n opacity: 0.2;\n}\n.ph-duotone.ph-magnifying-glass-minus:after {\n content: '\\e30f';\n margin-left: -1em;\n}\n.ph-duotone.ph-magnifying-glass-plus:before {\n content: '\\e310';\n opacity: 0.2;\n}\n.ph-duotone.ph-magnifying-glass-plus:after {\n content: '\\e311';\n margin-left: -1em;\n}\n.ph-duotone.ph-mailbox:before {\n content: '\\ec1e';\n opacity: 0.2;\n}\n.ph-duotone.ph-mailbox:after {\n content: '\\ec1f';\n margin-left: -1em;\n}\n.ph-duotone.ph-map-pin:before {\n content: '\\e316';\n opacity: 0.2;\n}\n.ph-duotone.ph-map-pin:after {\n content: '\\e317';\n margin-left: -1em;\n}\n.ph-duotone.ph-map-pin-area:before {\n content: '\\ee3a';\n opacity: 0.2;\n}\n.ph-duotone.ph-map-pin-area:after {\n content: '\\ee3b';\n margin-left: -1em;\n}\n.ph-duotone.ph-map-pin-line:before {\n content: '\\e318';\n opacity: 0.2;\n}\n.ph-duotone.ph-map-pin-line:after {\n content: '\\e319';\n margin-left: -1em;\n}\n.ph-duotone.ph-map-pin-plus:before {\n content: '\\e314';\n opacity: 0.2;\n}\n.ph-duotone.ph-map-pin-plus:after {\n content: '\\e315';\n margin-left: -1em;\n}\n.ph-duotone.ph-map-pin-simple:before {\n content: '\\ee3e';\n opacity: 0.2;\n}\n.ph-duotone.ph-map-pin-simple:after {\n content: '\\ee3f';\n margin-left: -1em;\n}\n.ph-duotone.ph-map-pin-simple-area:before {\n content: '\\ee3c';\n opacity: 0.2;\n}\n.ph-duotone.ph-map-pin-simple-area:after {\n content: '\\ee3d';\n margin-left: -1em;\n}\n.ph-duotone.ph-map-pin-simple-line:before {\n content: '\\ee38';\n opacity: 0.2;\n}\n.ph-duotone.ph-map-pin-simple-line:after {\n content: '\\ee39';\n margin-left: -1em;\n}\n.ph-duotone.ph-map-trifold:before {\n content: '\\e31a';\n opacity: 0.2;\n}\n.ph-duotone.ph-map-trifold:after {\n content: '\\e31b';\n margin-left: -1em;\n}\n.ph-duotone.ph-markdown-logo:before {\n content: '\\e508';\n opacity: 0.2;\n}\n.ph-duotone.ph-markdown-logo:after {\n content: '\\e509';\n margin-left: -1em;\n}\n.ph-duotone.ph-marker-circle:before {\n content: '\\e640';\n opacity: 0.2;\n}\n.ph-duotone.ph-marker-circle:after {\n content: '\\e641';\n margin-left: -1em;\n}\n.ph-duotone.ph-martini:before {\n content: '\\e31c';\n opacity: 0.2;\n}\n.ph-duotone.ph-martini:after {\n content: '\\e31d';\n margin-left: -1em;\n}\n.ph-duotone.ph-mask-happy:before {\n content: '\\e9f4';\n opacity: 0.2;\n}\n.ph-duotone.ph-mask-happy:after {\n content: '\\e9f5';\n margin-left: -1em;\n}\n.ph-duotone.ph-mask-sad:before {\n content: '\\eb9e';\n opacity: 0.2;\n}\n.ph-duotone.ph-mask-sad:after {\n content: '\\eb9f';\n margin-left: -1em;\n}\n.ph-duotone.ph-mastodon-logo:before {\n content: '\\ed68';\n opacity: 0.2;\n}\n.ph-duotone.ph-mastodon-logo:after {\n content: '\\ed69';\n margin-left: -1em;\n}\n.ph-duotone.ph-math-operations:before {\n content: '\\e31e';\n opacity: 0.2;\n}\n.ph-duotone.ph-math-operations:after {\n content: '\\e31f';\n margin-left: -1em;\n}\n.ph-duotone.ph-matrix-logo:before {\n content: '\\ed64';\n opacity: 0.2;\n}\n.ph-duotone.ph-matrix-logo:after {\n content: '\\ed65';\n margin-left: -1em;\n}\n.ph-duotone.ph-medal:before {\n content: '\\e320';\n opacity: 0.2;\n}\n.ph-duotone.ph-medal:after {\n content: '\\e321';\n margin-left: -1em;\n}\n.ph-duotone.ph-medal-military:before {\n content: '\\ecfc';\n opacity: 0.2;\n}\n.ph-duotone.ph-medal-military:after {\n content: '\\ecfd';\n margin-left: -1em;\n}\n.ph-duotone.ph-medium-logo:before {\n content: '\\e322';\n opacity: 0.2;\n}\n.ph-duotone.ph-medium-logo:after {\n content: '\\e323';\n margin-left: -1em;\n}\n.ph-duotone.ph-megaphone:before {\n content: '\\e324';\n opacity: 0.2;\n}\n.ph-duotone.ph-megaphone:after {\n content: '\\e325';\n margin-left: -1em;\n}\n.ph-duotone.ph-megaphone-simple:before {\n content: '\\e642';\n opacity: 0.2;\n}\n.ph-duotone.ph-megaphone-simple:after {\n content: '\\e643';\n margin-left: -1em;\n}\n.ph-duotone.ph-member-of:before {\n content: '\\edc2';\n opacity: 0.2;\n}\n.ph-duotone.ph-member-of:after {\n content: '\\edc3';\n margin-left: -1em;\n}\n.ph-duotone.ph-memory:before {\n content: '\\e9c4';\n opacity: 0.2;\n}\n.ph-duotone.ph-memory:after {\n content: '\\e9c5';\n margin-left: -1em;\n}\n.ph-duotone.ph-messenger-logo:before {\n content: '\\e6d8';\n opacity: 0.2;\n}\n.ph-duotone.ph-messenger-logo:after {\n content: '\\e6d9';\n margin-left: -1em;\n}\n.ph-duotone.ph-meta-logo:before {\n content: '\\ed02';\n opacity: 0.2;\n}\n.ph-duotone.ph-meta-logo:after {\n content: '\\ed03';\n margin-left: -1em;\n}\n.ph-duotone.ph-meteor:before {\n content: '\\e9ba';\n opacity: 0.2;\n}\n.ph-duotone.ph-meteor:after {\n content: '\\e9bb';\n margin-left: -1em;\n}\n.ph-duotone.ph-metronome:before {\n content: '\\ec8e';\n opacity: 0.2;\n}\n.ph-duotone.ph-metronome:after {\n content: '\\ec8f';\n margin-left: -1em;\n}\n.ph-duotone.ph-microphone:before {\n content: '\\e326';\n opacity: 0.2;\n}\n.ph-duotone.ph-microphone:after {\n content: '\\e327';\n margin-left: -1em;\n}\n.ph-duotone.ph-microphone-slash:before {\n content: '\\e328';\n opacity: 0.2;\n}\n.ph-duotone.ph-microphone-slash:after {\n content: '\\e329';\n margin-left: -1em;\n}\n.ph-duotone.ph-microphone-stage:before {\n content: '\\e75c';\n opacity: 0.2;\n}\n.ph-duotone.ph-microphone-stage:after {\n content: '\\e75d';\n margin-left: -1em;\n}\n.ph-duotone.ph-microscope:before {\n content: '\\ec7a';\n opacity: 0.2;\n}\n.ph-duotone.ph-microscope:after {\n content: '\\ec7b';\n margin-left: -1em;\n}\n.ph-duotone.ph-microsoft-excel-logo:before {\n content: '\\eb6c';\n opacity: 0.2;\n}\n.ph-duotone.ph-microsoft-excel-logo:after {\n content: '\\eb6d';\n margin-left: -1em;\n}\n.ph-duotone.ph-microsoft-outlook-logo:before {\n content: '\\eb70';\n opacity: 0.2;\n}\n.ph-duotone.ph-microsoft-outlook-logo:after {\n content: '\\eb71';\n margin-left: -1em;\n}\n.ph-duotone.ph-microsoft-powerpoint-logo:before {\n content: '\\eace';\n opacity: 0.2;\n}\n.ph-duotone.ph-microsoft-powerpoint-logo:after {\n content: '\\eacf';\n margin-left: -1em;\n}\n.ph-duotone.ph-microsoft-teams-logo:before {\n content: '\\eb66';\n opacity: 0.2;\n}\n.ph-duotone.ph-microsoft-teams-logo:after {\n content: '\\eb67';\n margin-left: -1em;\n}\n.ph-duotone.ph-microsoft-word-logo:before {\n content: '\\eb6a';\n opacity: 0.2;\n}\n.ph-duotone.ph-microsoft-word-logo:after {\n content: '\\eb6b';\n margin-left: -1em;\n}\n.ph-duotone.ph-minus:before {\n content: '\\e32a';\n opacity: 0.2;\n}\n.ph-duotone.ph-minus:after {\n content: '\\e32b';\n margin-left: -1em;\n}\n.ph-duotone.ph-minus-circle:before {\n content: '\\e32c';\n opacity: 0.2;\n}\n.ph-duotone.ph-minus-circle:after {\n content: '\\e32d';\n margin-left: -1em;\n}\n.ph-duotone.ph-minus-square:before {\n content: '\\ed4c';\n opacity: 0.2;\n}\n.ph-duotone.ph-minus-square:after {\n content: '\\ed53';\n margin-left: -1em;\n}\n.ph-duotone.ph-money:before {\n content: '\\e588';\n opacity: 0.2;\n}\n.ph-duotone.ph-money:after {\n content: '\\e589';\n margin-left: -1em;\n}\n.ph-duotone.ph-money-wavy:before {\n content: '\\ee68';\n opacity: 0.2;\n}\n.ph-duotone.ph-money-wavy:after {\n content: '\\ee69';\n margin-left: -1em;\n}\n.ph-duotone.ph-monitor:before {\n content: '\\e32e';\n opacity: 0.2;\n}\n.ph-duotone.ph-monitor:after {\n content: '\\e32f';\n margin-left: -1em;\n}\n.ph-duotone.ph-monitor-arrow-up:before {\n content: '\\e58a';\n opacity: 0.2;\n}\n.ph-duotone.ph-monitor-arrow-up:after {\n content: '\\e58b';\n margin-left: -1em;\n}\n.ph-duotone.ph-monitor-play:before {\n content: '\\e58c';\n opacity: 0.2;\n}\n.ph-duotone.ph-monitor-play:after {\n content: '\\e58d';\n margin-left: -1em;\n}\n.ph-duotone.ph-moon:before {\n content: '\\e330';\n opacity: 0.2;\n}\n.ph-duotone.ph-moon:after {\n content: '\\e331';\n margin-left: -1em;\n}\n.ph-duotone.ph-moon-stars:before {\n content: '\\e58e';\n opacity: 0.2;\n}\n.ph-duotone.ph-moon-stars:after {\n content: '\\e58f';\n margin-left: -1em;\n}\n.ph-duotone.ph-moped:before {\n content: '\\e824';\n opacity: 0.2;\n}\n.ph-duotone.ph-moped:after {\n content: '\\e825';\n margin-left: -1em;\n}\n.ph-duotone.ph-moped-front:before {\n content: '\\e822';\n opacity: 0.2;\n}\n.ph-duotone.ph-moped-front:after {\n content: '\\e823';\n margin-left: -1em;\n}\n.ph-duotone.ph-mosque:before {\n content: '\\ecee';\n opacity: 0.2;\n}\n.ph-duotone.ph-mosque:after {\n content: '\\ecef';\n margin-left: -1em;\n}\n.ph-duotone.ph-motorcycle:before {\n content: '\\e80a';\n opacity: 0.2;\n}\n.ph-duotone.ph-motorcycle:after {\n content: '\\e80b';\n margin-left: -1em;\n}\n.ph-duotone.ph-mountains:before {\n content: '\\e7ae';\n opacity: 0.2;\n}\n.ph-duotone.ph-mountains:after {\n content: '\\e7af';\n margin-left: -1em;\n}\n.ph-duotone.ph-mouse:before {\n content: '\\e33a';\n opacity: 0.2;\n}\n.ph-duotone.ph-mouse:after {\n content: '\\e33b';\n margin-left: -1em;\n}\n.ph-duotone.ph-mouse-left-click:before {\n content: '\\e334';\n opacity: 0.2;\n}\n.ph-duotone.ph-mouse-left-click:after {\n content: '\\e335';\n margin-left: -1em;\n}\n.ph-duotone.ph-mouse-middle-click:before {\n content: '\\e338';\n opacity: 0.2;\n}\n.ph-duotone.ph-mouse-middle-click:after {\n content: '\\e339';\n margin-left: -1em;\n}\n.ph-duotone.ph-mouse-right-click:before {\n content: '\\e336';\n opacity: 0.2;\n}\n.ph-duotone.ph-mouse-right-click:after {\n content: '\\e337';\n margin-left: -1em;\n}\n.ph-duotone.ph-mouse-scroll:before {\n content: '\\e332';\n opacity: 0.2;\n}\n.ph-duotone.ph-mouse-scroll:after {\n content: '\\e333';\n margin-left: -1em;\n}\n.ph-duotone.ph-mouse-simple:before {\n content: '\\e644';\n opacity: 0.2;\n}\n.ph-duotone.ph-mouse-simple:after {\n content: '\\e645';\n margin-left: -1em;\n}\n.ph-duotone.ph-music-note:before {\n content: '\\e33c';\n opacity: 0.2;\n}\n.ph-duotone.ph-music-note:after {\n content: '\\e33d';\n margin-left: -1em;\n}\n.ph-duotone.ph-music-note-simple:before {\n content: '\\e33e';\n opacity: 0.2;\n}\n.ph-duotone.ph-music-note-simple:after {\n content: '\\e33f';\n margin-left: -1em;\n}\n.ph-duotone.ph-music-notes:before {\n content: '\\e340';\n opacity: 0.2;\n}\n.ph-duotone.ph-music-notes:after {\n content: '\\e341';\n margin-left: -1em;\n}\n.ph-duotone.ph-music-notes-minus:before {\n content: '\\ee0c';\n opacity: 0.2;\n}\n.ph-duotone.ph-music-notes-minus:after {\n content: '\\ee0d';\n margin-left: -1em;\n}\n.ph-duotone.ph-music-notes-plus:before {\n content: '\\eb7c';\n opacity: 0.2;\n}\n.ph-duotone.ph-music-notes-plus:after {\n content: '\\eb7d';\n margin-left: -1em;\n}\n.ph-duotone.ph-music-notes-simple:before {\n content: '\\e342';\n opacity: 0.2;\n}\n.ph-duotone.ph-music-notes-simple:after {\n content: '\\e343';\n margin-left: -1em;\n}\n.ph-duotone.ph-navigation-arrow:before {\n content: '\\eade';\n opacity: 0.2;\n}\n.ph-duotone.ph-navigation-arrow:after {\n content: '\\eadf';\n margin-left: -1em;\n}\n.ph-duotone.ph-needle:before {\n content: '\\e82e';\n opacity: 0.2;\n}\n.ph-duotone.ph-needle:after {\n content: '\\e82f';\n margin-left: -1em;\n}\n.ph-duotone.ph-network:before {\n content: '\\edde';\n opacity: 0.2;\n}\n.ph-duotone.ph-network:after {\n content: '\\eddf';\n margin-left: -1em;\n}\n.ph-duotone.ph-network-slash:before {\n content: '\\eddc';\n opacity: 0.2;\n}\n.ph-duotone.ph-network-slash:after {\n content: '\\eddd';\n margin-left: -1em;\n}\n.ph-duotone.ph-network-x:before {\n content: '\\edda';\n opacity: 0.2;\n}\n.ph-duotone.ph-network-x:after {\n content: '\\eddb';\n margin-left: -1em;\n}\n.ph-duotone.ph-newspaper:before {\n content: '\\e344';\n opacity: 0.2;\n}\n.ph-duotone.ph-newspaper:after {\n content: '\\e345';\n margin-left: -1em;\n}\n.ph-duotone.ph-newspaper-clipping:before {\n content: '\\e346';\n opacity: 0.2;\n}\n.ph-duotone.ph-newspaper-clipping:after {\n content: '\\e347';\n margin-left: -1em;\n}\n.ph-duotone.ph-not-equals:before {\n content: '\\eda6';\n opacity: 0.2;\n}\n.ph-duotone.ph-not-equals:after {\n content: '\\eda7';\n margin-left: -1em;\n}\n.ph-duotone.ph-not-member-of:before {\n content: '\\edae';\n opacity: 0.2;\n}\n.ph-duotone.ph-not-member-of:after {\n content: '\\edaf';\n margin-left: -1em;\n}\n.ph-duotone.ph-not-subset-of:before {\n content: '\\edb0';\n opacity: 0.2;\n}\n.ph-duotone.ph-not-subset-of:after {\n content: '\\edb1';\n margin-left: -1em;\n}\n.ph-duotone.ph-not-superset-of:before {\n content: '\\edb2';\n opacity: 0.2;\n}\n.ph-duotone.ph-not-superset-of:after {\n content: '\\edb3';\n margin-left: -1em;\n}\n.ph-duotone.ph-notches:before {\n content: '\\ed3a';\n opacity: 0.2;\n}\n.ph-duotone.ph-notches:after {\n content: '\\ed3b';\n margin-left: -1em;\n}\n.ph-duotone.ph-note:before {\n content: '\\e348';\n opacity: 0.2;\n}\n.ph-duotone.ph-note:after {\n content: '\\e349';\n margin-left: -1em;\n}\n.ph-duotone.ph-note-blank:before {\n content: '\\e34a';\n opacity: 0.2;\n}\n.ph-duotone.ph-note-blank:after {\n content: '\\e34b';\n margin-left: -1em;\n}\n.ph-duotone.ph-note-pencil:before {\n content: '\\e34c';\n opacity: 0.2;\n}\n.ph-duotone.ph-note-pencil:after {\n content: '\\e34d';\n margin-left: -1em;\n}\n.ph-duotone.ph-notebook:before {\n content: '\\e34e';\n opacity: 0.2;\n}\n.ph-duotone.ph-notebook:after {\n content: '\\e34f';\n margin-left: -1em;\n}\n.ph-duotone.ph-notepad:before {\n content: '\\e63e';\n opacity: 0.2;\n}\n.ph-duotone.ph-notepad:after {\n content: '\\e63f';\n margin-left: -1em;\n}\n.ph-duotone.ph-notification:before {\n content: '\\e6fa';\n opacity: 0.2;\n}\n.ph-duotone.ph-notification:after {\n content: '\\e6fb';\n margin-left: -1em;\n}\n.ph-duotone.ph-notion-logo:before {\n content: '\\e9a0';\n opacity: 0.2;\n}\n.ph-duotone.ph-notion-logo:after {\n content: '\\e9a1';\n margin-left: -1em;\n}\n.ph-duotone.ph-nuclear-plant:before {\n content: '\\ed7c';\n opacity: 0.2;\n}\n.ph-duotone.ph-nuclear-plant:after {\n content: '\\ed7d';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-circle-eight:before {\n content: '\\e352';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-circle-eight:after {\n content: '\\e353';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-circle-five:before {\n content: '\\e358';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-circle-five:after {\n content: '\\e359';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-circle-four:before {\n content: '\\e35e';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-circle-four:after {\n content: '\\e35f';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-circle-nine:before {\n content: '\\e364';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-circle-nine:after {\n content: '\\e365';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-circle-one:before {\n content: '\\e36a';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-circle-one:after {\n content: '\\e36b';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-circle-seven:before {\n content: '\\e370';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-circle-seven:after {\n content: '\\e371';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-circle-six:before {\n content: '\\e376';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-circle-six:after {\n content: '\\e377';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-circle-three:before {\n content: '\\e37c';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-circle-three:after {\n content: '\\e37d';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-circle-two:before {\n content: '\\e382';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-circle-two:after {\n content: '\\e383';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-circle-zero:before {\n content: '\\e388';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-circle-zero:after {\n content: '\\e389';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-eight:before {\n content: '\\e350';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-eight:after {\n content: '\\e351';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-five:before {\n content: '\\e356';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-five:after {\n content: '\\e357';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-four:before {\n content: '\\e35c';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-four:after {\n content: '\\e35d';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-nine:before {\n content: '\\e362';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-nine:after {\n content: '\\e363';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-one:before {\n content: '\\e368';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-one:after {\n content: '\\e369';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-seven:before {\n content: '\\e36e';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-seven:after {\n content: '\\e36f';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-six:before {\n content: '\\e374';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-six:after {\n content: '\\e375';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-square-eight:before {\n content: '\\e354';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-square-eight:after {\n content: '\\e355';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-square-five:before {\n content: '\\e35a';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-square-five:after {\n content: '\\e35b';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-square-four:before {\n content: '\\e360';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-square-four:after {\n content: '\\e361';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-square-nine:before {\n content: '\\e366';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-square-nine:after {\n content: '\\e367';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-square-one:before {\n content: '\\e36c';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-square-one:after {\n content: '\\e36d';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-square-seven:before {\n content: '\\e372';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-square-seven:after {\n content: '\\e373';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-square-six:before {\n content: '\\e378';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-square-six:after {\n content: '\\e379';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-square-three:before {\n content: '\\e37e';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-square-three:after {\n content: '\\e37f';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-square-two:before {\n content: '\\e384';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-square-two:after {\n content: '\\e385';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-square-zero:before {\n content: '\\e38a';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-square-zero:after {\n content: '\\e38b';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-three:before {\n content: '\\e37a';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-three:after {\n content: '\\e37b';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-two:before {\n content: '\\e380';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-two:after {\n content: '\\e381';\n margin-left: -1em;\n}\n.ph-duotone.ph-number-zero:before {\n content: '\\e386';\n opacity: 0.2;\n}\n.ph-duotone.ph-number-zero:after {\n content: '\\e387';\n margin-left: -1em;\n}\n.ph-duotone.ph-numpad:before {\n content: '\\e3c8';\n opacity: 0.2;\n}\n.ph-duotone.ph-numpad:after {\n content: '\\e3c9';\n margin-left: -1em;\n}\n.ph-duotone.ph-nut:before {\n content: '\\e38c';\n opacity: 0.2;\n}\n.ph-duotone.ph-nut:after {\n content: '\\e38d';\n margin-left: -1em;\n}\n.ph-duotone.ph-ny-times-logo:before {\n content: '\\e646';\n opacity: 0.2;\n}\n.ph-duotone.ph-ny-times-logo:after {\n content: '\\e647';\n margin-left: -1em;\n}\n.ph-duotone.ph-octagon:before {\n content: '\\e38e';\n opacity: 0.2;\n}\n.ph-duotone.ph-octagon:after {\n content: '\\e38f';\n margin-left: -1em;\n}\n.ph-duotone.ph-office-chair:before {\n content: '\\ea46';\n opacity: 0.2;\n}\n.ph-duotone.ph-office-chair:after {\n content: '\\ea47';\n margin-left: -1em;\n}\n.ph-duotone.ph-onigiri:before {\n content: '\\ee2c';\n opacity: 0.2;\n}\n.ph-duotone.ph-onigiri:after {\n content: '\\ee2d';\n margin-left: -1em;\n}\n.ph-duotone.ph-open-ai-logo:before {\n content: '\\e7d2';\n opacity: 0.2;\n}\n.ph-duotone.ph-open-ai-logo:after {\n content: '\\e7d3';\n margin-left: -1em;\n}\n.ph-duotone.ph-option:before {\n content: '\\e8a8';\n opacity: 0.2;\n}\n.ph-duotone.ph-option:after {\n content: '\\e8a9';\n margin-left: -1em;\n}\n.ph-duotone.ph-orange:before {\n content: '\\ee40';\n opacity: 0.2;\n}\n.ph-duotone.ph-orange:after {\n content: '\\ee41';\n margin-left: -1em;\n}\n.ph-duotone.ph-orange-slice:before {\n content: '\\ed36';\n opacity: 0.2;\n}\n.ph-duotone.ph-orange-slice:after {\n content: '\\ed37';\n margin-left: -1em;\n}\n.ph-duotone.ph-oven:before {\n content: '\\ed8c';\n opacity: 0.2;\n}\n.ph-duotone.ph-oven:after {\n content: '\\ed8d';\n margin-left: -1em;\n}\n.ph-duotone.ph-package:before {\n content: '\\e390';\n opacity: 0.2;\n}\n.ph-duotone.ph-package:after {\n content: '\\e391';\n margin-left: -1em;\n}\n.ph-duotone.ph-paint-brush:before {\n content: '\\e6f0';\n opacity: 0.2;\n}\n.ph-duotone.ph-paint-brush:after {\n content: '\\e6f1';\n margin-left: -1em;\n}\n.ph-duotone.ph-paint-brush-broad:before {\n content: '\\e590';\n opacity: 0.2;\n}\n.ph-duotone.ph-paint-brush-broad:after {\n content: '\\e591';\n margin-left: -1em;\n}\n.ph-duotone.ph-paint-brush-household:before {\n content: '\\e6f2';\n opacity: 0.2;\n}\n.ph-duotone.ph-paint-brush-household:after {\n content: '\\e6f3';\n margin-left: -1em;\n}\n.ph-duotone.ph-paint-bucket:before {\n content: '\\e392';\n opacity: 0.2;\n}\n.ph-duotone.ph-paint-bucket:after {\n content: '\\e393';\n margin-left: -1em;\n}\n.ph-duotone.ph-paint-roller:before {\n content: '\\e6f4';\n opacity: 0.2;\n}\n.ph-duotone.ph-paint-roller:after {\n content: '\\e6f5';\n margin-left: -1em;\n}\n.ph-duotone.ph-palette:before {\n content: '\\e6c8';\n opacity: 0.2;\n}\n.ph-duotone.ph-palette:after {\n content: '\\e6c9';\n margin-left: -1em;\n}\n.ph-duotone.ph-panorama:before {\n content: '\\eaa2';\n opacity: 0.2;\n}\n.ph-duotone.ph-panorama:after {\n content: '\\eaa3';\n margin-left: -1em;\n}\n.ph-duotone.ph-pants:before {\n content: '\\ec88';\n opacity: 0.2;\n}\n.ph-duotone.ph-pants:after {\n content: '\\ec89';\n margin-left: -1em;\n}\n.ph-duotone.ph-paper-plane:before {\n content: '\\e394';\n opacity: 0.2;\n}\n.ph-duotone.ph-paper-plane:after {\n content: '\\e395';\n margin-left: -1em;\n}\n.ph-duotone.ph-paper-plane-right:before {\n content: '\\e396';\n opacity: 0.2;\n}\n.ph-duotone.ph-paper-plane-right:after {\n content: '\\e397';\n margin-left: -1em;\n}\n.ph-duotone.ph-paper-plane-tilt:before {\n content: '\\e398';\n opacity: 0.2;\n}\n.ph-duotone.ph-paper-plane-tilt:after {\n content: '\\e399';\n margin-left: -1em;\n}\n.ph-duotone.ph-paperclip:before {\n content: '\\e39a';\n opacity: 0.2;\n}\n.ph-duotone.ph-paperclip:after {\n content: '\\e39b';\n margin-left: -1em;\n}\n.ph-duotone.ph-paperclip-horizontal:before {\n content: '\\e592';\n opacity: 0.2;\n}\n.ph-duotone.ph-paperclip-horizontal:after {\n content: '\\e593';\n margin-left: -1em;\n}\n.ph-duotone.ph-parachute:before {\n content: '\\ea7c';\n opacity: 0.2;\n}\n.ph-duotone.ph-parachute:after {\n content: '\\ea7d';\n margin-left: -1em;\n}\n.ph-duotone.ph-paragraph:before {\n content: '\\e960';\n opacity: 0.2;\n}\n.ph-duotone.ph-paragraph:after {\n content: '\\e961';\n margin-left: -1em;\n}\n.ph-duotone.ph-parallelogram:before {\n content: '\\ecc6';\n opacity: 0.2;\n}\n.ph-duotone.ph-parallelogram:after {\n content: '\\ecc7';\n margin-left: -1em;\n}\n.ph-duotone.ph-park:before {\n content: '\\ecb2';\n opacity: 0.2;\n}\n.ph-duotone.ph-park:after {\n content: '\\ecb3';\n margin-left: -1em;\n}\n.ph-duotone.ph-password:before {\n content: '\\e752';\n opacity: 0.2;\n}\n.ph-duotone.ph-password:after {\n content: '\\e753';\n margin-left: -1em;\n}\n.ph-duotone.ph-path:before {\n content: '\\e39c';\n opacity: 0.2;\n}\n.ph-duotone.ph-path:after {\n content: '\\e39d';\n margin-left: -1em;\n}\n.ph-duotone.ph-patreon-logo:before {\n content: '\\e98a';\n opacity: 0.2;\n}\n.ph-duotone.ph-patreon-logo:after {\n content: '\\e98b';\n margin-left: -1em;\n}\n.ph-duotone.ph-pause:before {\n content: '\\e39e';\n opacity: 0.2;\n}\n.ph-duotone.ph-pause:after {\n content: '\\e39f';\n margin-left: -1em;\n}\n.ph-duotone.ph-pause-circle:before {\n content: '\\e3a0';\n opacity: 0.2;\n}\n.ph-duotone.ph-pause-circle:after {\n content: '\\e3a1';\n margin-left: -1em;\n}\n.ph-duotone.ph-paw-print:before {\n content: '\\e648';\n opacity: 0.2;\n}\n.ph-duotone.ph-paw-print:after {\n content: '\\e649';\n margin-left: -1em;\n}\n.ph-duotone.ph-paypal-logo:before {\n content: '\\e98c';\n opacity: 0.2;\n}\n.ph-duotone.ph-paypal-logo:after {\n content: '\\e98d';\n margin-left: -1em;\n}\n.ph-duotone.ph-peace:before {\n content: '\\e3a2';\n opacity: 0.2;\n}\n.ph-duotone.ph-peace:after {\n content: '\\e3a3';\n margin-left: -1em;\n}\n.ph-duotone.ph-pen:before {\n content: '\\e3aa';\n opacity: 0.2;\n}\n.ph-duotone.ph-pen:after {\n content: '\\e3ab';\n margin-left: -1em;\n}\n.ph-duotone.ph-pen-nib:before {\n content: '\\e3ac';\n opacity: 0.2;\n}\n.ph-duotone.ph-pen-nib:after {\n content: '\\e3ad';\n margin-left: -1em;\n}\n.ph-duotone.ph-pen-nib-straight:before {\n content: '\\e64a';\n opacity: 0.2;\n}\n.ph-duotone.ph-pen-nib-straight:after {\n content: '\\e64b';\n margin-left: -1em;\n}\n.ph-duotone.ph-pencil:before {\n content: '\\e3ae';\n opacity: 0.2;\n}\n.ph-duotone.ph-pencil:after {\n content: '\\e3af';\n margin-left: -1em;\n}\n.ph-duotone.ph-pencil-circle:before {\n content: '\\e3b0';\n opacity: 0.2;\n}\n.ph-duotone.ph-pencil-circle:after {\n content: '\\e3b1';\n margin-left: -1em;\n}\n.ph-duotone.ph-pencil-line:before {\n content: '\\e3b2';\n opacity: 0.2;\n}\n.ph-duotone.ph-pencil-line:after {\n content: '\\e3b3';\n margin-left: -1em;\n}\n.ph-duotone.ph-pencil-ruler:before {\n content: '\\e906';\n opacity: 0.2;\n}\n.ph-duotone.ph-pencil-ruler:after {\n content: '\\e907';\n margin-left: -1em;\n}\n.ph-duotone.ph-pencil-simple:before {\n content: '\\e3b4';\n opacity: 0.2;\n}\n.ph-duotone.ph-pencil-simple:after {\n content: '\\e3b5';\n margin-left: -1em;\n}\n.ph-duotone.ph-pencil-simple-line:before {\n content: '\\ebc6';\n opacity: 0.2;\n}\n.ph-duotone.ph-pencil-simple-line:after {\n content: '\\ebc7';\n margin-left: -1em;\n}\n.ph-duotone.ph-pencil-simple-slash:before {\n content: '\\ecf6';\n opacity: 0.2;\n}\n.ph-duotone.ph-pencil-simple-slash:after {\n content: '\\ecf7';\n margin-left: -1em;\n}\n.ph-duotone.ph-pencil-slash:before {\n content: '\\ecf8';\n opacity: 0.2;\n}\n.ph-duotone.ph-pencil-slash:after {\n content: '\\ecf9';\n margin-left: -1em;\n}\n.ph-duotone.ph-pentagon:before {\n content: '\\ec7e';\n opacity: 0.2;\n}\n.ph-duotone.ph-pentagon:after {\n content: '\\ec7f';\n margin-left: -1em;\n}\n.ph-duotone.ph-pentagram:before {\n content: '\\ec5c';\n opacity: 0.2;\n}\n.ph-duotone.ph-pentagram:after {\n content: '\\ec5d';\n margin-left: -1em;\n}\n.ph-duotone.ph-pepper:before {\n content: '\\e94a';\n opacity: 0.2;\n}\n.ph-duotone.ph-pepper:after {\n content: '\\e94b';\n margin-left: -1em;\n}\n.ph-duotone.ph-percent:before {\n content: '\\e3b6';\n opacity: 0.2;\n}\n.ph-duotone.ph-percent:after {\n content: '\\e3b7';\n margin-left: -1em;\n}\n.ph-duotone.ph-person:before {\n content: '\\e3a8';\n opacity: 0.2;\n}\n.ph-duotone.ph-person:after {\n content: '\\e3a9';\n margin-left: -1em;\n}\n.ph-duotone.ph-person-arms-spread:before {\n content: '\\ecfe';\n opacity: 0.2;\n}\n.ph-duotone.ph-person-arms-spread:after {\n content: '\\ecff';\n margin-left: -1em;\n}\n.ph-duotone.ph-person-simple:before {\n content: '\\e72e';\n opacity: 0.2;\n}\n.ph-duotone.ph-person-simple:after {\n content: '\\e72f';\n margin-left: -1em;\n}\n.ph-duotone.ph-person-simple-bike:before {\n content: '\\e734';\n opacity: 0.2;\n}\n.ph-duotone.ph-person-simple-bike:after {\n content: '\\e735';\n margin-left: -1em;\n}\n.ph-duotone.ph-person-simple-circle:before {\n content: '\\ee58';\n opacity: 0.2;\n}\n.ph-duotone.ph-person-simple-circle:after {\n content: '\\ee59';\n margin-left: -1em;\n}\n.ph-duotone.ph-person-simple-hike:before {\n content: '\\ed54';\n opacity: 0.2;\n}\n.ph-duotone.ph-person-simple-hike:after {\n content: '\\ed55';\n margin-left: -1em;\n}\n.ph-duotone.ph-person-simple-run:before {\n content: '\\e730';\n opacity: 0.2;\n}\n.ph-duotone.ph-person-simple-run:after {\n content: '\\e731';\n margin-left: -1em;\n}\n.ph-duotone.ph-person-simple-ski:before {\n content: '\\e71c';\n opacity: 0.2;\n}\n.ph-duotone.ph-person-simple-ski:after {\n content: '\\e71d';\n margin-left: -1em;\n}\n.ph-duotone.ph-person-simple-snowboard:before {\n content: '\\e71e';\n opacity: 0.2;\n}\n.ph-duotone.ph-person-simple-snowboard:after {\n content: '\\e71f';\n margin-left: -1em;\n}\n.ph-duotone.ph-person-simple-swim:before {\n content: '\\e736';\n opacity: 0.2;\n}\n.ph-duotone.ph-person-simple-swim:after {\n content: '\\e737';\n margin-left: -1em;\n}\n.ph-duotone.ph-person-simple-tai-chi:before {\n content: '\\ed5c';\n opacity: 0.2;\n}\n.ph-duotone.ph-person-simple-tai-chi:after {\n content: '\\ed5d';\n margin-left: -1em;\n}\n.ph-duotone.ph-person-simple-throw:before {\n content: '\\e732';\n opacity: 0.2;\n}\n.ph-duotone.ph-person-simple-throw:after {\n content: '\\e733';\n margin-left: -1em;\n}\n.ph-duotone.ph-person-simple-walk:before {\n content: '\\e73a';\n opacity: 0.2;\n}\n.ph-duotone.ph-person-simple-walk:after {\n content: '\\e73b';\n margin-left: -1em;\n}\n.ph-duotone.ph-perspective:before {\n content: '\\ebe6';\n opacity: 0.2;\n}\n.ph-duotone.ph-perspective:after {\n content: '\\ebe7';\n margin-left: -1em;\n}\n.ph-duotone.ph-phone:before {\n content: '\\e3b8';\n opacity: 0.2;\n}\n.ph-duotone.ph-phone:after {\n content: '\\e3b9';\n margin-left: -1em;\n}\n.ph-duotone.ph-phone-call:before {\n content: '\\e3ba';\n opacity: 0.2;\n}\n.ph-duotone.ph-phone-call:after {\n content: '\\e3bb';\n margin-left: -1em;\n}\n.ph-duotone.ph-phone-disconnect:before {\n content: '\\e3bc';\n opacity: 0.2;\n}\n.ph-duotone.ph-phone-disconnect:after {\n content: '\\e3bd';\n margin-left: -1em;\n}\n.ph-duotone.ph-phone-incoming:before {\n content: '\\e3be';\n opacity: 0.2;\n}\n.ph-duotone.ph-phone-incoming:after {\n content: '\\e3bf';\n margin-left: -1em;\n}\n.ph-duotone.ph-phone-list:before {\n content: '\\e3cc';\n opacity: 0.2;\n}\n.ph-duotone.ph-phone-list:after {\n content: '\\e3cd';\n margin-left: -1em;\n}\n.ph-duotone.ph-phone-outgoing:before {\n content: '\\e3c0';\n opacity: 0.2;\n}\n.ph-duotone.ph-phone-outgoing:after {\n content: '\\e3c1';\n margin-left: -1em;\n}\n.ph-duotone.ph-phone-pause:before {\n content: '\\e3ca';\n opacity: 0.2;\n}\n.ph-duotone.ph-phone-pause:after {\n content: '\\e3cb';\n margin-left: -1em;\n}\n.ph-duotone.ph-phone-plus:before {\n content: '\\ec56';\n opacity: 0.2;\n}\n.ph-duotone.ph-phone-plus:after {\n content: '\\ec57';\n margin-left: -1em;\n}\n.ph-duotone.ph-phone-slash:before {\n content: '\\e3c2';\n opacity: 0.2;\n}\n.ph-duotone.ph-phone-slash:after {\n content: '\\e3c3';\n margin-left: -1em;\n}\n.ph-duotone.ph-phone-transfer:before {\n content: '\\e3c6';\n opacity: 0.2;\n}\n.ph-duotone.ph-phone-transfer:after {\n content: '\\e3c7';\n margin-left: -1em;\n}\n.ph-duotone.ph-phone-x:before {\n content: '\\e3c4';\n opacity: 0.2;\n}\n.ph-duotone.ph-phone-x:after {\n content: '\\e3c5';\n margin-left: -1em;\n}\n.ph-duotone.ph-phosphor-logo:before {\n content: '\\e3ce';\n opacity: 0.2;\n}\n.ph-duotone.ph-phosphor-logo:after {\n content: '\\e3cf';\n margin-left: -1em;\n}\n.ph-duotone.ph-pi:before {\n content: '\\ec80';\n opacity: 0.2;\n}\n.ph-duotone.ph-pi:after {\n content: '\\ec81';\n margin-left: -1em;\n}\n.ph-duotone.ph-piano-keys:before {\n content: '\\e9c8';\n opacity: 0.2;\n}\n.ph-duotone.ph-piano-keys:after {\n content: '\\e9c9';\n margin-left: -1em;\n}\n.ph-duotone.ph-picnic-table:before {\n content: '\\ee26';\n opacity: 0.2;\n}\n.ph-duotone.ph-picnic-table:after {\n content: '\\ee27';\n margin-left: -1em;\n}\n.ph-duotone.ph-picture-in-picture:before {\n content: '\\e64c';\n opacity: 0.2;\n}\n.ph-duotone.ph-picture-in-picture:after {\n content: '\\e64d';\n margin-left: -1em;\n}\n.ph-duotone.ph-piggy-bank:before {\n content: '\\ea04';\n opacity: 0.2;\n}\n.ph-duotone.ph-piggy-bank:after {\n content: '\\ea05';\n margin-left: -1em;\n}\n.ph-duotone.ph-pill:before {\n content: '\\e700';\n opacity: 0.2;\n}\n.ph-duotone.ph-pill:after {\n content: '\\e701';\n margin-left: -1em;\n}\n.ph-duotone.ph-ping-pong:before {\n content: '\\ea42';\n opacity: 0.2;\n}\n.ph-duotone.ph-ping-pong:after {\n content: '\\ea43';\n margin-left: -1em;\n}\n.ph-duotone.ph-pint-glass:before {\n content: '\\edd0';\n opacity: 0.2;\n}\n.ph-duotone.ph-pint-glass:after {\n content: '\\edd1';\n margin-left: -1em;\n}\n.ph-duotone.ph-pinterest-logo:before {\n content: '\\e64e';\n opacity: 0.2;\n}\n.ph-duotone.ph-pinterest-logo:after {\n content: '\\e64f';\n margin-left: -1em;\n}\n.ph-duotone.ph-pinwheel:before {\n content: '\\eb9c';\n opacity: 0.2;\n}\n.ph-duotone.ph-pinwheel:after {\n content: '\\eb9d';\n margin-left: -1em;\n}\n.ph-duotone.ph-pipe:before {\n content: '\\ed86';\n opacity: 0.2;\n}\n.ph-duotone.ph-pipe:after {\n content: '\\ed87';\n margin-left: -1em;\n}\n.ph-duotone.ph-pipe-wrench:before {\n content: '\\ed88';\n opacity: 0.2;\n}\n.ph-duotone.ph-pipe-wrench:after {\n content: '\\ed89';\n margin-left: -1em;\n}\n.ph-duotone.ph-pix-logo:before {\n content: '\\ecc2';\n opacity: 0.2;\n}\n.ph-duotone.ph-pix-logo:after {\n content: '\\ecc3';\n margin-left: -1em;\n}\n.ph-duotone.ph-pizza:before {\n content: '\\e796';\n opacity: 0.2;\n}\n.ph-duotone.ph-pizza:after {\n content: '\\e797';\n margin-left: -1em;\n}\n.ph-duotone.ph-placeholder:before {\n content: '\\e650';\n opacity: 0.2;\n}\n.ph-duotone.ph-placeholder:after {\n content: '\\e651';\n margin-left: -1em;\n}\n.ph-duotone.ph-planet:before {\n content: '\\e652';\n opacity: 0.2;\n}\n.ph-duotone.ph-planet:after {\n content: '\\e653';\n margin-left: -1em;\n}\n.ph-duotone.ph-plant:before {\n content: '\\ebae';\n opacity: 0.2;\n}\n.ph-duotone.ph-plant:after {\n content: '\\ebaf';\n margin-left: -1em;\n}\n.ph-duotone.ph-play:before {\n content: '\\e3d0';\n opacity: 0.2;\n}\n.ph-duotone.ph-play:after {\n content: '\\e3d1';\n margin-left: -1em;\n}\n.ph-duotone.ph-play-circle:before {\n content: '\\e3d2';\n opacity: 0.2;\n}\n.ph-duotone.ph-play-circle:after {\n content: '\\e3d3';\n margin-left: -1em;\n}\n.ph-duotone.ph-play-pause:before {\n content: '\\e8be';\n opacity: 0.2;\n}\n.ph-duotone.ph-play-pause:after {\n content: '\\e8bf';\n margin-left: -1em;\n}\n.ph-duotone.ph-playlist:before {\n content: '\\e6aa';\n opacity: 0.2;\n}\n.ph-duotone.ph-playlist:after {\n content: '\\e6ab';\n margin-left: -1em;\n}\n.ph-duotone.ph-plug:before {\n content: '\\e946';\n opacity: 0.2;\n}\n.ph-duotone.ph-plug:after {\n content: '\\e947';\n margin-left: -1em;\n}\n.ph-duotone.ph-plug-charging:before {\n content: '\\eb5c';\n opacity: 0.2;\n}\n.ph-duotone.ph-plug-charging:after {\n content: '\\eb5d';\n margin-left: -1em;\n}\n.ph-duotone.ph-plugs:before {\n content: '\\eb56';\n opacity: 0.2;\n}\n.ph-duotone.ph-plugs:after {\n content: '\\eb57';\n margin-left: -1em;\n}\n.ph-duotone.ph-plugs-connected:before {\n content: '\\eb5a';\n opacity: 0.2;\n}\n.ph-duotone.ph-plugs-connected:after {\n content: '\\eb5b';\n margin-left: -1em;\n}\n.ph-duotone.ph-plus:before {\n content: '\\e3d4';\n opacity: 0.2;\n}\n.ph-duotone.ph-plus:after {\n content: '\\e3d5';\n margin-left: -1em;\n}\n.ph-duotone.ph-plus-circle:before {\n content: '\\e3d6';\n opacity: 0.2;\n}\n.ph-duotone.ph-plus-circle:after {\n content: '\\e3d7';\n margin-left: -1em;\n}\n.ph-duotone.ph-plus-minus:before {\n content: '\\e3d8';\n opacity: 0.2;\n}\n.ph-duotone.ph-plus-minus:after {\n content: '\\e3d9';\n margin-left: -1em;\n}\n.ph-duotone.ph-plus-square:before {\n content: '\\ed4a';\n opacity: 0.2;\n}\n.ph-duotone.ph-plus-square:after {\n content: '\\ed56';\n margin-left: -1em;\n}\n.ph-duotone.ph-poker-chip:before {\n content: '\\e594';\n opacity: 0.2;\n}\n.ph-duotone.ph-poker-chip:after {\n content: '\\e595';\n margin-left: -1em;\n}\n.ph-duotone.ph-police-car:before {\n content: '\\ec4a';\n opacity: 0.2;\n}\n.ph-duotone.ph-police-car:after {\n content: '\\ec4b';\n margin-left: -1em;\n}\n.ph-duotone.ph-polygon:before {\n content: '\\e6d0';\n opacity: 0.2;\n}\n.ph-duotone.ph-polygon:after {\n content: '\\e6d1';\n margin-left: -1em;\n}\n.ph-duotone.ph-popcorn:before {\n content: '\\eb4e';\n opacity: 0.2;\n}\n.ph-duotone.ph-popcorn:after {\n content: '\\eb4f';\n margin-left: -1em;\n}\n.ph-duotone.ph-popsicle:before {\n content: '\\ebbe';\n opacity: 0.2;\n}\n.ph-duotone.ph-popsicle:after {\n content: '\\ebbf';\n margin-left: -1em;\n}\n.ph-duotone.ph-potted-plant:before {\n content: '\\ec22';\n opacity: 0.2;\n}\n.ph-duotone.ph-potted-plant:after {\n content: '\\ec23';\n margin-left: -1em;\n}\n.ph-duotone.ph-power:before {\n content: '\\e3da';\n opacity: 0.2;\n}\n.ph-duotone.ph-power:after {\n content: '\\e3db';\n margin-left: -1em;\n}\n.ph-duotone.ph-prescription:before {\n content: '\\e7a2';\n opacity: 0.2;\n}\n.ph-duotone.ph-prescription:after {\n content: '\\e7a3';\n margin-left: -1em;\n}\n.ph-duotone.ph-presentation:before {\n content: '\\e654';\n opacity: 0.2;\n}\n.ph-duotone.ph-presentation:after {\n content: '\\e655';\n margin-left: -1em;\n}\n.ph-duotone.ph-presentation-chart:before {\n content: '\\e656';\n opacity: 0.2;\n}\n.ph-duotone.ph-presentation-chart:after {\n content: '\\e657';\n margin-left: -1em;\n}\n.ph-duotone.ph-printer:before {\n content: '\\e3dc';\n opacity: 0.2;\n}\n.ph-duotone.ph-printer:after {\n content: '\\e3dd';\n margin-left: -1em;\n}\n.ph-duotone.ph-prohibit:before {\n content: '\\e3de';\n opacity: 0.2;\n}\n.ph-duotone.ph-prohibit:after {\n content: '\\e3df';\n margin-left: -1em;\n}\n.ph-duotone.ph-prohibit-inset:before {\n content: '\\e3e0';\n opacity: 0.2;\n}\n.ph-duotone.ph-prohibit-inset:after {\n content: '\\e3e1';\n margin-left: -1em;\n}\n.ph-duotone.ph-projector-screen:before {\n content: '\\e658';\n opacity: 0.2;\n}\n.ph-duotone.ph-projector-screen:after {\n content: '\\e659';\n margin-left: -1em;\n}\n.ph-duotone.ph-projector-screen-chart:before {\n content: '\\e65a';\n opacity: 0.2;\n}\n.ph-duotone.ph-projector-screen-chart:after {\n content: '\\e65b';\n margin-left: -1em;\n}\n.ph-duotone.ph-pulse:before {\n content: '\\e000';\n opacity: 0.2;\n}\n.ph-duotone.ph-pulse:after {\n content: '\\e001';\n margin-left: -1em;\n}\n.ph-duotone.ph-push-pin:before {\n content: '\\e3e2';\n opacity: 0.2;\n}\n.ph-duotone.ph-push-pin:after {\n content: '\\e3e3';\n margin-left: -1em;\n}\n.ph-duotone.ph-push-pin-simple:before {\n content: '\\e65c';\n opacity: 0.2;\n}\n.ph-duotone.ph-push-pin-simple:after {\n content: '\\e65d';\n margin-left: -1em;\n}\n.ph-duotone.ph-push-pin-simple-slash:before {\n content: '\\e65e';\n opacity: 0.2;\n}\n.ph-duotone.ph-push-pin-simple-slash:after {\n content: '\\e65f';\n margin-left: -1em;\n}\n.ph-duotone.ph-push-pin-slash:before {\n content: '\\e3e4';\n opacity: 0.2;\n}\n.ph-duotone.ph-push-pin-slash:after {\n content: '\\e3e5';\n margin-left: -1em;\n}\n.ph-duotone.ph-puzzle-piece:before {\n content: '\\e596';\n opacity: 0.2;\n}\n.ph-duotone.ph-puzzle-piece:after {\n content: '\\e597';\n margin-left: -1em;\n}\n.ph-duotone.ph-qr-code:before {\n content: '\\e3e6';\n opacity: 0.2;\n}\n.ph-duotone.ph-qr-code:after {\n content: '\\e3e7';\n margin-left: -1em;\n}\n.ph-duotone.ph-question:before {\n content: '\\e3e8';\n opacity: 0.2;\n}\n.ph-duotone.ph-question:after {\n content: '\\e3eb';\n margin-left: -1em;\n}\n.ph-duotone.ph-question-mark:before {\n content: '\\e3e9';\n opacity: 0.2;\n}\n.ph-duotone.ph-question-mark:after {\n content: '\\e3ed';\n margin-left: -1em;\n}\n.ph-duotone.ph-queue:before {\n content: '\\e6ac';\n opacity: 0.2;\n}\n.ph-duotone.ph-queue:after {\n content: '\\e6ad';\n margin-left: -1em;\n}\n.ph-duotone.ph-quotes:before {\n content: '\\e660';\n opacity: 0.2;\n}\n.ph-duotone.ph-quotes:after {\n content: '\\e661';\n margin-left: -1em;\n}\n.ph-duotone.ph-rabbit:before {\n content: '\\eac2';\n opacity: 0.2;\n}\n.ph-duotone.ph-rabbit:after {\n content: '\\eac3';\n margin-left: -1em;\n}\n.ph-duotone.ph-racquet:before {\n content: '\\ee02';\n opacity: 0.2;\n}\n.ph-duotone.ph-racquet:after {\n content: '\\ee03';\n margin-left: -1em;\n}\n.ph-duotone.ph-radical:before {\n content: '\\e3ea';\n opacity: 0.2;\n}\n.ph-duotone.ph-radical:after {\n content: '\\e3ef';\n margin-left: -1em;\n}\n.ph-duotone.ph-radio:before {\n content: '\\e77e';\n opacity: 0.2;\n}\n.ph-duotone.ph-radio:after {\n content: '\\e77f';\n margin-left: -1em;\n}\n.ph-duotone.ph-radio-button:before {\n content: '\\eb08';\n opacity: 0.2;\n}\n.ph-duotone.ph-radio-button:after {\n content: '\\eb09';\n margin-left: -1em;\n}\n.ph-duotone.ph-radioactive:before {\n content: '\\e9dc';\n opacity: 0.2;\n}\n.ph-duotone.ph-radioactive:after {\n content: '\\e9dd';\n margin-left: -1em;\n}\n.ph-duotone.ph-rainbow:before {\n content: '\\e598';\n opacity: 0.2;\n}\n.ph-duotone.ph-rainbow:after {\n content: '\\e599';\n margin-left: -1em;\n}\n.ph-duotone.ph-rainbow-cloud:before {\n content: '\\e59a';\n opacity: 0.2;\n}\n.ph-duotone.ph-rainbow-cloud:after {\n content: '\\e59b';\n margin-left: -1em;\n}\n.ph-duotone.ph-ranking:before {\n content: '\\ed62';\n opacity: 0.2;\n}\n.ph-duotone.ph-ranking:after {\n content: '\\ed63';\n margin-left: -1em;\n}\n.ph-duotone.ph-read-cv-logo:before {\n content: '\\ed0c';\n opacity: 0.2;\n}\n.ph-duotone.ph-read-cv-logo:after {\n content: '\\ed0d';\n margin-left: -1em;\n}\n.ph-duotone.ph-receipt:before {\n content: '\\e3ec';\n opacity: 0.2;\n}\n.ph-duotone.ph-receipt:after {\n content: '\\e3f1';\n margin-left: -1em;\n}\n.ph-duotone.ph-receipt-x:before {\n content: '\\ed40';\n opacity: 0.2;\n}\n.ph-duotone.ph-receipt-x:after {\n content: '\\ed41';\n margin-left: -1em;\n}\n.ph-duotone.ph-record:before {\n content: '\\e3ee';\n opacity: 0.2;\n}\n.ph-duotone.ph-record:after {\n content: '\\e3f3';\n margin-left: -1em;\n}\n.ph-duotone.ph-rectangle:before {\n content: '\\e3f0';\n opacity: 0.2;\n}\n.ph-duotone.ph-rectangle:after {\n content: '\\e3f5';\n margin-left: -1em;\n}\n.ph-duotone.ph-rectangle-dashed:before {\n content: '\\e3f2';\n opacity: 0.2;\n}\n.ph-duotone.ph-rectangle-dashed:after {\n content: '\\e3f7';\n margin-left: -1em;\n}\n.ph-duotone.ph-recycle:before {\n content: '\\e75a';\n opacity: 0.2;\n}\n.ph-duotone.ph-recycle:after {\n content: '\\e75b';\n margin-left: -1em;\n}\n.ph-duotone.ph-reddit-logo:before {\n content: '\\e59c';\n opacity: 0.2;\n}\n.ph-duotone.ph-reddit-logo:after {\n content: '\\e59d';\n margin-left: -1em;\n}\n.ph-duotone.ph-repeat:before {\n content: '\\e3f6';\n opacity: 0.2;\n}\n.ph-duotone.ph-repeat:after {\n content: '\\e3f9';\n margin-left: -1em;\n}\n.ph-duotone.ph-repeat-once:before {\n content: '\\e3f8';\n opacity: 0.2;\n}\n.ph-duotone.ph-repeat-once:after {\n content: '\\e3fb';\n margin-left: -1em;\n}\n.ph-duotone.ph-replit-logo:before {\n content: '\\eb8a';\n opacity: 0.2;\n}\n.ph-duotone.ph-replit-logo:after {\n content: '\\eb8b';\n margin-left: -1em;\n}\n.ph-duotone.ph-resize:before {\n content: '\\ed6e';\n opacity: 0.2;\n}\n.ph-duotone.ph-resize:after {\n content: '\\ed6f';\n margin-left: -1em;\n}\n.ph-duotone.ph-rewind:before {\n content: '\\e6a8';\n opacity: 0.2;\n}\n.ph-duotone.ph-rewind:after {\n content: '\\e6a9';\n margin-left: -1em;\n}\n.ph-duotone.ph-rewind-circle:before {\n content: '\\e3fa';\n opacity: 0.2;\n}\n.ph-duotone.ph-rewind-circle:after {\n content: '\\e3fd';\n margin-left: -1em;\n}\n.ph-duotone.ph-road-horizon:before {\n content: '\\e838';\n opacity: 0.2;\n}\n.ph-duotone.ph-road-horizon:after {\n content: '\\e839';\n margin-left: -1em;\n}\n.ph-duotone.ph-robot:before {\n content: '\\e762';\n opacity: 0.2;\n}\n.ph-duotone.ph-robot:after {\n content: '\\e763';\n margin-left: -1em;\n}\n.ph-duotone.ph-rocket:before {\n content: '\\e3fc';\n opacity: 0.2;\n}\n.ph-duotone.ph-rocket:after {\n content: '\\e3ff';\n margin-left: -1em;\n}\n.ph-duotone.ph-rocket-launch:before {\n content: '\\e3fe';\n opacity: 0.2;\n}\n.ph-duotone.ph-rocket-launch:after {\n content: '\\e401';\n margin-left: -1em;\n}\n.ph-duotone.ph-rows:before {\n content: '\\e5a2';\n opacity: 0.2;\n}\n.ph-duotone.ph-rows:after {\n content: '\\e5a3';\n margin-left: -1em;\n}\n.ph-duotone.ph-rows-plus-bottom:before {\n content: '\\e59e';\n opacity: 0.2;\n}\n.ph-duotone.ph-rows-plus-bottom:after {\n content: '\\e59f';\n margin-left: -1em;\n}\n.ph-duotone.ph-rows-plus-top:before {\n content: '\\e5a0';\n opacity: 0.2;\n}\n.ph-duotone.ph-rows-plus-top:after {\n content: '\\e5a1';\n margin-left: -1em;\n}\n.ph-duotone.ph-rss:before {\n content: '\\e400';\n opacity: 0.2;\n}\n.ph-duotone.ph-rss:after {\n content: '\\e403';\n margin-left: -1em;\n}\n.ph-duotone.ph-rss-simple:before {\n content: '\\e402';\n opacity: 0.2;\n}\n.ph-duotone.ph-rss-simple:after {\n content: '\\e405';\n margin-left: -1em;\n}\n.ph-duotone.ph-rug:before {\n content: '\\ea1a';\n opacity: 0.2;\n}\n.ph-duotone.ph-rug:after {\n content: '\\ea1b';\n margin-left: -1em;\n}\n.ph-duotone.ph-ruler:before {\n content: '\\e6b8';\n opacity: 0.2;\n}\n.ph-duotone.ph-ruler:after {\n content: '\\e6b9';\n margin-left: -1em;\n}\n.ph-duotone.ph-sailboat:before {\n content: '\\e78a';\n opacity: 0.2;\n}\n.ph-duotone.ph-sailboat:after {\n content: '\\e78b';\n margin-left: -1em;\n}\n.ph-duotone.ph-scales:before {\n content: '\\e750';\n opacity: 0.2;\n}\n.ph-duotone.ph-scales:after {\n content: '\\e751';\n margin-left: -1em;\n}\n.ph-duotone.ph-scan:before {\n content: '\\ebb6';\n opacity: 0.2;\n}\n.ph-duotone.ph-scan:after {\n content: '\\ebb7';\n margin-left: -1em;\n}\n.ph-duotone.ph-scan-smiley:before {\n content: '\\ebb4';\n opacity: 0.2;\n}\n.ph-duotone.ph-scan-smiley:after {\n content: '\\ebb5';\n margin-left: -1em;\n}\n.ph-duotone.ph-scissors:before {\n content: '\\eae0';\n opacity: 0.2;\n}\n.ph-duotone.ph-scissors:after {\n content: '\\eae1';\n margin-left: -1em;\n}\n.ph-duotone.ph-scooter:before {\n content: '\\e820';\n opacity: 0.2;\n}\n.ph-duotone.ph-scooter:after {\n content: '\\e821';\n margin-left: -1em;\n}\n.ph-duotone.ph-screencast:before {\n content: '\\e404';\n opacity: 0.2;\n}\n.ph-duotone.ph-screencast:after {\n content: '\\e407';\n margin-left: -1em;\n}\n.ph-duotone.ph-screwdriver:before {\n content: '\\e86e';\n opacity: 0.2;\n}\n.ph-duotone.ph-screwdriver:after {\n content: '\\e86f';\n margin-left: -1em;\n}\n.ph-duotone.ph-scribble:before {\n content: '\\e806';\n opacity: 0.2;\n}\n.ph-duotone.ph-scribble:after {\n content: '\\e807';\n margin-left: -1em;\n}\n.ph-duotone.ph-scribble-loop:before {\n content: '\\e662';\n opacity: 0.2;\n}\n.ph-duotone.ph-scribble-loop:after {\n content: '\\e663';\n margin-left: -1em;\n}\n.ph-duotone.ph-scroll:before {\n content: '\\eb7a';\n opacity: 0.2;\n}\n.ph-duotone.ph-scroll:after {\n content: '\\eb7b';\n margin-left: -1em;\n}\n.ph-duotone.ph-seal:before {\n content: '\\e604';\n opacity: 0.2;\n}\n.ph-duotone.ph-seal:after {\n content: '\\e605';\n margin-left: -1em;\n}\n.ph-duotone.ph-seal-check:before {\n content: '\\e606';\n opacity: 0.2;\n}\n.ph-duotone.ph-seal-check:after {\n content: '\\e607';\n margin-left: -1em;\n}\n.ph-duotone.ph-seal-percent:before {\n content: '\\e60a';\n opacity: 0.2;\n}\n.ph-duotone.ph-seal-percent:after {\n content: '\\e60b';\n margin-left: -1em;\n}\n.ph-duotone.ph-seal-question:before {\n content: '\\e608';\n opacity: 0.2;\n}\n.ph-duotone.ph-seal-question:after {\n content: '\\e609';\n margin-left: -1em;\n}\n.ph-duotone.ph-seal-warning:before {\n content: '\\e60c';\n opacity: 0.2;\n}\n.ph-duotone.ph-seal-warning:after {\n content: '\\e60d';\n margin-left: -1em;\n}\n.ph-duotone.ph-seat:before {\n content: '\\eb8e';\n opacity: 0.2;\n}\n.ph-duotone.ph-seat:after {\n content: '\\eb8f';\n margin-left: -1em;\n}\n.ph-duotone.ph-seatbelt:before {\n content: '\\edfe';\n opacity: 0.2;\n}\n.ph-duotone.ph-seatbelt:after {\n content: '\\edff';\n margin-left: -1em;\n}\n.ph-duotone.ph-security-camera:before {\n content: '\\eca4';\n opacity: 0.2;\n}\n.ph-duotone.ph-security-camera:after {\n content: '\\eca5';\n margin-left: -1em;\n}\n.ph-duotone.ph-selection:before {\n content: '\\e69a';\n opacity: 0.2;\n}\n.ph-duotone.ph-selection:after {\n content: '\\e69b';\n margin-left: -1em;\n}\n.ph-duotone.ph-selection-all:before {\n content: '\\e746';\n opacity: 0.2;\n}\n.ph-duotone.ph-selection-all:after {\n content: '\\e747';\n margin-left: -1em;\n}\n.ph-duotone.ph-selection-background:before {\n content: '\\eaf8';\n opacity: 0.2;\n}\n.ph-duotone.ph-selection-background:after {\n content: '\\eaf9';\n margin-left: -1em;\n}\n.ph-duotone.ph-selection-foreground:before {\n content: '\\eaf6';\n opacity: 0.2;\n}\n.ph-duotone.ph-selection-foreground:after {\n content: '\\eaf7';\n margin-left: -1em;\n}\n.ph-duotone.ph-selection-inverse:before {\n content: '\\e744';\n opacity: 0.2;\n}\n.ph-duotone.ph-selection-inverse:after {\n content: '\\e745';\n margin-left: -1em;\n}\n.ph-duotone.ph-selection-plus:before {\n content: '\\e69c';\n opacity: 0.2;\n}\n.ph-duotone.ph-selection-plus:after {\n content: '\\e69d';\n margin-left: -1em;\n}\n.ph-duotone.ph-selection-slash:before {\n content: '\\e69e';\n opacity: 0.2;\n}\n.ph-duotone.ph-selection-slash:after {\n content: '\\e69f';\n margin-left: -1em;\n}\n.ph-duotone.ph-shapes:before {\n content: '\\ec5e';\n opacity: 0.2;\n}\n.ph-duotone.ph-shapes:after {\n content: '\\ec5f';\n margin-left: -1em;\n}\n.ph-duotone.ph-share:before {\n content: '\\e406';\n opacity: 0.2;\n}\n.ph-duotone.ph-share:after {\n content: '\\e409';\n margin-left: -1em;\n}\n.ph-duotone.ph-share-fat:before {\n content: '\\ed52';\n opacity: 0.2;\n}\n.ph-duotone.ph-share-fat:after {\n content: '\\ed57';\n margin-left: -1em;\n}\n.ph-duotone.ph-share-network:before {\n content: '\\e408';\n opacity: 0.2;\n}\n.ph-duotone.ph-share-network:after {\n content: '\\e40b';\n margin-left: -1em;\n}\n.ph-duotone.ph-shield:before {\n content: '\\e40a';\n opacity: 0.2;\n}\n.ph-duotone.ph-shield:after {\n content: '\\e40d';\n margin-left: -1em;\n}\n.ph-duotone.ph-shield-check:before {\n content: '\\e40c';\n opacity: 0.2;\n}\n.ph-duotone.ph-shield-check:after {\n content: '\\e40f';\n margin-left: -1em;\n}\n.ph-duotone.ph-shield-checkered:before {\n content: '\\e708';\n opacity: 0.2;\n}\n.ph-duotone.ph-shield-checkered:after {\n content: '\\e709';\n margin-left: -1em;\n}\n.ph-duotone.ph-shield-chevron:before {\n content: '\\e40e';\n opacity: 0.2;\n}\n.ph-duotone.ph-shield-chevron:after {\n content: '\\e411';\n margin-left: -1em;\n}\n.ph-duotone.ph-shield-plus:before {\n content: '\\e706';\n opacity: 0.2;\n}\n.ph-duotone.ph-shield-plus:after {\n content: '\\e707';\n margin-left: -1em;\n}\n.ph-duotone.ph-shield-slash:before {\n content: '\\e410';\n opacity: 0.2;\n}\n.ph-duotone.ph-shield-slash:after {\n content: '\\e413';\n margin-left: -1em;\n}\n.ph-duotone.ph-shield-star:before {\n content: '\\ec34';\n opacity: 0.2;\n}\n.ph-duotone.ph-shield-star:after {\n content: '\\ec35';\n margin-left: -1em;\n}\n.ph-duotone.ph-shield-warning:before {\n content: '\\e412';\n opacity: 0.2;\n}\n.ph-duotone.ph-shield-warning:after {\n content: '\\e414';\n margin-left: -1em;\n}\n.ph-duotone.ph-shipping-container:before {\n content: '\\e78c';\n opacity: 0.2;\n}\n.ph-duotone.ph-shipping-container:after {\n content: '\\e78d';\n margin-left: -1em;\n}\n.ph-duotone.ph-shirt-folded:before {\n content: '\\ea92';\n opacity: 0.2;\n}\n.ph-duotone.ph-shirt-folded:after {\n content: '\\ea93';\n margin-left: -1em;\n}\n.ph-duotone.ph-shooting-star:before {\n content: '\\ecfa';\n opacity: 0.2;\n}\n.ph-duotone.ph-shooting-star:after {\n content: '\\ecfb';\n margin-left: -1em;\n}\n.ph-duotone.ph-shopping-bag:before {\n content: '\\e416';\n opacity: 0.2;\n}\n.ph-duotone.ph-shopping-bag:after {\n content: '\\e417';\n margin-left: -1em;\n}\n.ph-duotone.ph-shopping-bag-open:before {\n content: '\\e418';\n opacity: 0.2;\n}\n.ph-duotone.ph-shopping-bag-open:after {\n content: '\\e419';\n margin-left: -1em;\n}\n.ph-duotone.ph-shopping-cart:before {\n content: '\\e41e';\n opacity: 0.2;\n}\n.ph-duotone.ph-shopping-cart:after {\n content: '\\e41f';\n margin-left: -1em;\n}\n.ph-duotone.ph-shopping-cart-simple:before {\n content: '\\e420';\n opacity: 0.2;\n}\n.ph-duotone.ph-shopping-cart-simple:after {\n content: '\\e421';\n margin-left: -1em;\n}\n.ph-duotone.ph-shovel:before {\n content: '\\e9e6';\n opacity: 0.2;\n}\n.ph-duotone.ph-shovel:after {\n content: '\\e9e7';\n margin-left: -1em;\n}\n.ph-duotone.ph-shower:before {\n content: '\\e776';\n opacity: 0.2;\n}\n.ph-duotone.ph-shower:after {\n content: '\\e777';\n margin-left: -1em;\n}\n.ph-duotone.ph-shrimp:before {\n content: '\\eab4';\n opacity: 0.2;\n}\n.ph-duotone.ph-shrimp:after {\n content: '\\eab5';\n margin-left: -1em;\n}\n.ph-duotone.ph-shuffle:before {\n content: '\\e422';\n opacity: 0.2;\n}\n.ph-duotone.ph-shuffle:after {\n content: '\\e423';\n margin-left: -1em;\n}\n.ph-duotone.ph-shuffle-angular:before {\n content: '\\e424';\n opacity: 0.2;\n}\n.ph-duotone.ph-shuffle-angular:after {\n content: '\\e425';\n margin-left: -1em;\n}\n.ph-duotone.ph-shuffle-simple:before {\n content: '\\e426';\n opacity: 0.2;\n}\n.ph-duotone.ph-shuffle-simple:after {\n content: '\\e427';\n margin-left: -1em;\n}\n.ph-duotone.ph-sidebar:before {\n content: '\\eab6';\n opacity: 0.2;\n}\n.ph-duotone.ph-sidebar:after {\n content: '\\eab7';\n margin-left: -1em;\n}\n.ph-duotone.ph-sidebar-simple:before {\n content: '\\ec24';\n opacity: 0.2;\n}\n.ph-duotone.ph-sidebar-simple:after {\n content: '\\ec25';\n margin-left: -1em;\n}\n.ph-duotone.ph-sigma:before {\n content: '\\eab8';\n opacity: 0.2;\n}\n.ph-duotone.ph-sigma:after {\n content: '\\eab9';\n margin-left: -1em;\n}\n.ph-duotone.ph-sign-in:before {\n content: '\\e428';\n opacity: 0.2;\n}\n.ph-duotone.ph-sign-in:after {\n content: '\\e429';\n margin-left: -1em;\n}\n.ph-duotone.ph-sign-out:before {\n content: '\\e42a';\n opacity: 0.2;\n}\n.ph-duotone.ph-sign-out:after {\n content: '\\e42b';\n margin-left: -1em;\n}\n.ph-duotone.ph-signature:before {\n content: '\\ebac';\n opacity: 0.2;\n}\n.ph-duotone.ph-signature:after {\n content: '\\ebad';\n margin-left: -1em;\n}\n.ph-duotone.ph-signpost:before {\n content: '\\e89c';\n opacity: 0.2;\n}\n.ph-duotone.ph-signpost:after {\n content: '\\e89d';\n margin-left: -1em;\n}\n.ph-duotone.ph-sim-card:before {\n content: '\\e664';\n opacity: 0.2;\n}\n.ph-duotone.ph-sim-card:after {\n content: '\\e665';\n margin-left: -1em;\n}\n.ph-duotone.ph-siren:before {\n content: '\\e9b8';\n opacity: 0.2;\n}\n.ph-duotone.ph-siren:after {\n content: '\\e9b9';\n margin-left: -1em;\n}\n.ph-duotone.ph-sketch-logo:before {\n content: '\\e42c';\n opacity: 0.2;\n}\n.ph-duotone.ph-sketch-logo:after {\n content: '\\e42d';\n margin-left: -1em;\n}\n.ph-duotone.ph-skip-back:before {\n content: '\\e5a4';\n opacity: 0.2;\n}\n.ph-duotone.ph-skip-back:after {\n content: '\\e5a5';\n margin-left: -1em;\n}\n.ph-duotone.ph-skip-back-circle:before {\n content: '\\e42e';\n opacity: 0.2;\n}\n.ph-duotone.ph-skip-back-circle:after {\n content: '\\e42f';\n margin-left: -1em;\n}\n.ph-duotone.ph-skip-forward:before {\n content: '\\e5a6';\n opacity: 0.2;\n}\n.ph-duotone.ph-skip-forward:after {\n content: '\\e5a7';\n margin-left: -1em;\n}\n.ph-duotone.ph-skip-forward-circle:before {\n content: '\\e430';\n opacity: 0.2;\n}\n.ph-duotone.ph-skip-forward-circle:after {\n content: '\\e431';\n margin-left: -1em;\n}\n.ph-duotone.ph-skull:before {\n content: '\\e916';\n opacity: 0.2;\n}\n.ph-duotone.ph-skull:after {\n content: '\\e917';\n margin-left: -1em;\n}\n.ph-duotone.ph-skype-logo:before {\n content: '\\e8dc';\n opacity: 0.2;\n}\n.ph-duotone.ph-skype-logo:after {\n content: '\\e8dd';\n margin-left: -1em;\n}\n.ph-duotone.ph-slack-logo:before {\n content: '\\e5a8';\n opacity: 0.2;\n}\n.ph-duotone.ph-slack-logo:after {\n content: '\\e5a9';\n margin-left: -1em;\n}\n.ph-duotone.ph-sliders:before {\n content: '\\e432';\n opacity: 0.2;\n}\n.ph-duotone.ph-sliders:after {\n content: '\\e433';\n margin-left: -1em;\n}\n.ph-duotone.ph-sliders-horizontal:before {\n content: '\\e434';\n opacity: 0.2;\n}\n.ph-duotone.ph-sliders-horizontal:after {\n content: '\\e435';\n margin-left: -1em;\n}\n.ph-duotone.ph-slideshow:before {\n content: '\\ed32';\n opacity: 0.2;\n}\n.ph-duotone.ph-slideshow:after {\n content: '\\ed33';\n margin-left: -1em;\n}\n.ph-duotone.ph-smiley:before {\n content: '\\e436';\n opacity: 0.2;\n}\n.ph-duotone.ph-smiley:after {\n content: '\\e437';\n margin-left: -1em;\n}\n.ph-duotone.ph-smiley-angry:before {\n content: '\\ec62';\n opacity: 0.2;\n}\n.ph-duotone.ph-smiley-angry:after {\n content: '\\ec63';\n margin-left: -1em;\n}\n.ph-duotone.ph-smiley-blank:before {\n content: '\\e438';\n opacity: 0.2;\n}\n.ph-duotone.ph-smiley-blank:after {\n content: '\\e439';\n margin-left: -1em;\n}\n.ph-duotone.ph-smiley-meh:before {\n content: '\\e43a';\n opacity: 0.2;\n}\n.ph-duotone.ph-smiley-meh:after {\n content: '\\e43b';\n margin-left: -1em;\n}\n.ph-duotone.ph-smiley-melting:before {\n content: '\\ee56';\n opacity: 0.2;\n}\n.ph-duotone.ph-smiley-melting:after {\n content: '\\ee57';\n margin-left: -1em;\n}\n.ph-duotone.ph-smiley-nervous:before {\n content: '\\e43c';\n opacity: 0.2;\n}\n.ph-duotone.ph-smiley-nervous:after {\n content: '\\e43d';\n margin-left: -1em;\n}\n.ph-duotone.ph-smiley-sad:before {\n content: '\\e43e';\n opacity: 0.2;\n}\n.ph-duotone.ph-smiley-sad:after {\n content: '\\e43f';\n margin-left: -1em;\n}\n.ph-duotone.ph-smiley-sticker:before {\n content: '\\e440';\n opacity: 0.2;\n}\n.ph-duotone.ph-smiley-sticker:after {\n content: '\\e441';\n margin-left: -1em;\n}\n.ph-duotone.ph-smiley-wink:before {\n content: '\\e666';\n opacity: 0.2;\n}\n.ph-duotone.ph-smiley-wink:after {\n content: '\\e667';\n margin-left: -1em;\n}\n.ph-duotone.ph-smiley-x-eyes:before {\n content: '\\e442';\n opacity: 0.2;\n}\n.ph-duotone.ph-smiley-x-eyes:after {\n content: '\\e443';\n margin-left: -1em;\n}\n.ph-duotone.ph-snapchat-logo:before {\n content: '\\e668';\n opacity: 0.2;\n}\n.ph-duotone.ph-snapchat-logo:after {\n content: '\\e669';\n margin-left: -1em;\n}\n.ph-duotone.ph-sneaker:before {\n content: '\\e80c';\n opacity: 0.2;\n}\n.ph-duotone.ph-sneaker:after {\n content: '\\e80d';\n margin-left: -1em;\n}\n.ph-duotone.ph-sneaker-move:before {\n content: '\\ed60';\n opacity: 0.2;\n}\n.ph-duotone.ph-sneaker-move:after {\n content: '\\ed61';\n margin-left: -1em;\n}\n.ph-duotone.ph-snowflake:before {\n content: '\\e5aa';\n opacity: 0.2;\n}\n.ph-duotone.ph-snowflake:after {\n content: '\\e5ab';\n margin-left: -1em;\n}\n.ph-duotone.ph-soccer-ball:before {\n content: '\\e716';\n opacity: 0.2;\n}\n.ph-duotone.ph-soccer-ball:after {\n content: '\\e717';\n margin-left: -1em;\n}\n.ph-duotone.ph-sock:before {\n content: '\\ecce';\n opacity: 0.2;\n}\n.ph-duotone.ph-sock:after {\n content: '\\eccf';\n margin-left: -1em;\n}\n.ph-duotone.ph-solar-panel:before {\n content: '\\ed7a';\n opacity: 0.2;\n}\n.ph-duotone.ph-solar-panel:after {\n content: '\\ed7e';\n margin-left: -1em;\n}\n.ph-duotone.ph-solar-roof:before {\n content: '\\ed7b';\n opacity: 0.2;\n}\n.ph-duotone.ph-solar-roof:after {\n content: '\\ed7f';\n margin-left: -1em;\n}\n.ph-duotone.ph-sort-ascending:before {\n content: '\\e444';\n opacity: 0.2;\n}\n.ph-duotone.ph-sort-ascending:after {\n content: '\\e445';\n margin-left: -1em;\n}\n.ph-duotone.ph-sort-descending:before {\n content: '\\e446';\n opacity: 0.2;\n}\n.ph-duotone.ph-sort-descending:after {\n content: '\\e447';\n margin-left: -1em;\n}\n.ph-duotone.ph-soundcloud-logo:before {\n content: '\\e8de';\n opacity: 0.2;\n}\n.ph-duotone.ph-soundcloud-logo:after {\n content: '\\e8df';\n margin-left: -1em;\n}\n.ph-duotone.ph-spade:before {\n content: '\\e448';\n opacity: 0.2;\n}\n.ph-duotone.ph-spade:after {\n content: '\\e449';\n margin-left: -1em;\n}\n.ph-duotone.ph-sparkle:before {\n content: '\\e6a2';\n opacity: 0.2;\n}\n.ph-duotone.ph-sparkle:after {\n content: '\\e6a3';\n margin-left: -1em;\n}\n.ph-duotone.ph-speaker-hifi:before {\n content: '\\ea08';\n opacity: 0.2;\n}\n.ph-duotone.ph-speaker-hifi:after {\n content: '\\ea09';\n margin-left: -1em;\n}\n.ph-duotone.ph-speaker-high:before {\n content: '\\e44a';\n opacity: 0.2;\n}\n.ph-duotone.ph-speaker-high:after {\n content: '\\e44b';\n margin-left: -1em;\n}\n.ph-duotone.ph-speaker-low:before {\n content: '\\e44c';\n opacity: 0.2;\n}\n.ph-duotone.ph-speaker-low:after {\n content: '\\e44d';\n margin-left: -1em;\n}\n.ph-duotone.ph-speaker-none:before {\n content: '\\e44e';\n opacity: 0.2;\n}\n.ph-duotone.ph-speaker-none:after {\n content: '\\e44f';\n margin-left: -1em;\n}\n.ph-duotone.ph-speaker-simple-high:before {\n content: '\\e450';\n opacity: 0.2;\n}\n.ph-duotone.ph-speaker-simple-high:after {\n content: '\\e451';\n margin-left: -1em;\n}\n.ph-duotone.ph-speaker-simple-low:before {\n content: '\\e452';\n opacity: 0.2;\n}\n.ph-duotone.ph-speaker-simple-low:after {\n content: '\\e453';\n margin-left: -1em;\n}\n.ph-duotone.ph-speaker-simple-none:before {\n content: '\\e454';\n opacity: 0.2;\n}\n.ph-duotone.ph-speaker-simple-none:after {\n content: '\\e455';\n margin-left: -1em;\n}\n.ph-duotone.ph-speaker-simple-slash:before {\n content: '\\e456';\n opacity: 0.2;\n}\n.ph-duotone.ph-speaker-simple-slash:after {\n content: '\\e457';\n margin-left: -1em;\n}\n.ph-duotone.ph-speaker-simple-x:before {\n content: '\\e458';\n opacity: 0.2;\n}\n.ph-duotone.ph-speaker-simple-x:after {\n content: '\\e459';\n margin-left: -1em;\n}\n.ph-duotone.ph-speaker-slash:before {\n content: '\\e45a';\n opacity: 0.2;\n}\n.ph-duotone.ph-speaker-slash:after {\n content: '\\e45b';\n margin-left: -1em;\n}\n.ph-duotone.ph-speaker-x:before {\n content: '\\e45c';\n opacity: 0.2;\n}\n.ph-duotone.ph-speaker-x:after {\n content: '\\e45d';\n margin-left: -1em;\n}\n.ph-duotone.ph-speedometer:before {\n content: '\\ee74';\n opacity: 0.2;\n}\n.ph-duotone.ph-speedometer:after {\n content: '\\ee75';\n margin-left: -1em;\n}\n.ph-duotone.ph-sphere:before {\n content: '\\ee66';\n opacity: 0.2;\n}\n.ph-duotone.ph-sphere:after {\n content: '\\ee67';\n margin-left: -1em;\n}\n.ph-duotone.ph-spinner:before {\n content: '\\e66a';\n opacity: 0.2;\n}\n.ph-duotone.ph-spinner:after {\n content: '\\e66b';\n margin-left: -1em;\n}\n.ph-duotone.ph-spinner-ball:before {\n content: '\\ee28';\n opacity: 0.2;\n}\n.ph-duotone.ph-spinner-ball:after {\n content: '\\ee29';\n margin-left: -1em;\n}\n.ph-duotone.ph-spinner-gap:before {\n content: '\\e66c';\n opacity: 0.2;\n}\n.ph-duotone.ph-spinner-gap:after {\n content: '\\e66d';\n margin-left: -1em;\n}\n.ph-duotone.ph-spiral:before {\n content: '\\e9fa';\n opacity: 0.2;\n}\n.ph-duotone.ph-spiral:after {\n content: '\\e9fb';\n margin-left: -1em;\n}\n.ph-duotone.ph-split-horizontal:before {\n content: '\\e872';\n opacity: 0.2;\n}\n.ph-duotone.ph-split-horizontal:after {\n content: '\\e873';\n margin-left: -1em;\n}\n.ph-duotone.ph-split-vertical:before {\n content: '\\e876';\n opacity: 0.2;\n}\n.ph-duotone.ph-split-vertical:after {\n content: '\\e877';\n margin-left: -1em;\n}\n.ph-duotone.ph-spotify-logo:before {\n content: '\\e66e';\n opacity: 0.2;\n}\n.ph-duotone.ph-spotify-logo:after {\n content: '\\e66f';\n margin-left: -1em;\n}\n.ph-duotone.ph-spray-bottle:before {\n content: '\\e7e4';\n opacity: 0.2;\n}\n.ph-duotone.ph-spray-bottle:after {\n content: '\\e7e8';\n margin-left: -1em;\n}\n.ph-duotone.ph-square:before {\n content: '\\e45e';\n opacity: 0.2;\n}\n.ph-duotone.ph-square:after {\n content: '\\e45f';\n margin-left: -1em;\n}\n.ph-duotone.ph-square-half:before {\n content: '\\e462';\n opacity: 0.2;\n}\n.ph-duotone.ph-square-half:after {\n content: '\\e463';\n margin-left: -1em;\n}\n.ph-duotone.ph-square-half-bottom:before {\n content: '\\eb16';\n opacity: 0.2;\n}\n.ph-duotone.ph-square-half-bottom:after {\n content: '\\eb17';\n margin-left: -1em;\n}\n.ph-duotone.ph-square-logo:before {\n content: '\\e690';\n opacity: 0.2;\n}\n.ph-duotone.ph-square-logo:after {\n content: '\\e691';\n margin-left: -1em;\n}\n.ph-duotone.ph-square-split-horizontal:before {\n content: '\\e870';\n opacity: 0.2;\n}\n.ph-duotone.ph-square-split-horizontal:after {\n content: '\\e871';\n margin-left: -1em;\n}\n.ph-duotone.ph-square-split-vertical:before {\n content: '\\e874';\n opacity: 0.2;\n}\n.ph-duotone.ph-square-split-vertical:after {\n content: '\\e875';\n margin-left: -1em;\n}\n.ph-duotone.ph-squares-four:before {\n content: '\\e464';\n opacity: 0.2;\n}\n.ph-duotone.ph-squares-four:after {\n content: '\\e465';\n margin-left: -1em;\n}\n.ph-duotone.ph-stack:before {\n content: '\\e466';\n opacity: 0.2;\n}\n.ph-duotone.ph-stack:after {\n content: '\\e467';\n margin-left: -1em;\n}\n.ph-duotone.ph-stack-minus:before {\n content: '\\edf4';\n opacity: 0.2;\n}\n.ph-duotone.ph-stack-minus:after {\n content: '\\edf5';\n margin-left: -1em;\n}\n.ph-duotone.ph-stack-overflow-logo:before {\n content: '\\eb78';\n opacity: 0.2;\n}\n.ph-duotone.ph-stack-overflow-logo:after {\n content: '\\eb79';\n margin-left: -1em;\n}\n.ph-duotone.ph-stack-plus:before {\n content: '\\edf6';\n opacity: 0.2;\n}\n.ph-duotone.ph-stack-plus:after {\n content: '\\edf7';\n margin-left: -1em;\n}\n.ph-duotone.ph-stack-simple:before {\n content: '\\e468';\n opacity: 0.2;\n}\n.ph-duotone.ph-stack-simple:after {\n content: '\\e469';\n margin-left: -1em;\n}\n.ph-duotone.ph-stairs:before {\n content: '\\e8ec';\n opacity: 0.2;\n}\n.ph-duotone.ph-stairs:after {\n content: '\\e8ed';\n margin-left: -1em;\n}\n.ph-duotone.ph-stamp:before {\n content: '\\ea48';\n opacity: 0.2;\n}\n.ph-duotone.ph-stamp:after {\n content: '\\ea49';\n margin-left: -1em;\n}\n.ph-duotone.ph-standard-definition:before {\n content: '\\ea90';\n opacity: 0.2;\n}\n.ph-duotone.ph-standard-definition:after {\n content: '\\ea91';\n margin-left: -1em;\n}\n.ph-duotone.ph-star:before {\n content: '\\e46a';\n opacity: 0.2;\n}\n.ph-duotone.ph-star:after {\n content: '\\e46b';\n margin-left: -1em;\n}\n.ph-duotone.ph-star-and-crescent:before {\n content: '\\ecf4';\n opacity: 0.2;\n}\n.ph-duotone.ph-star-and-crescent:after {\n content: '\\ecf5';\n margin-left: -1em;\n}\n.ph-duotone.ph-star-four:before {\n content: '\\e6a4';\n opacity: 0.2;\n}\n.ph-duotone.ph-star-four:after {\n content: '\\e6a5';\n margin-left: -1em;\n}\n.ph-duotone.ph-star-half:before {\n content: '\\e70a';\n opacity: 0.2;\n}\n.ph-duotone.ph-star-half:after {\n content: '\\e70b';\n margin-left: -1em;\n}\n.ph-duotone.ph-star-of-david:before {\n content: '\\e89e';\n opacity: 0.2;\n}\n.ph-duotone.ph-star-of-david:after {\n content: '\\e89f';\n margin-left: -1em;\n}\n.ph-duotone.ph-steam-logo:before {\n content: '\\ead4';\n opacity: 0.2;\n}\n.ph-duotone.ph-steam-logo:after {\n content: '\\ead5';\n margin-left: -1em;\n}\n.ph-duotone.ph-steering-wheel:before {\n content: '\\e9ac';\n opacity: 0.2;\n}\n.ph-duotone.ph-steering-wheel:after {\n content: '\\e9ad';\n margin-left: -1em;\n}\n.ph-duotone.ph-steps:before {\n content: '\\ecbe';\n opacity: 0.2;\n}\n.ph-duotone.ph-steps:after {\n content: '\\ecbf';\n margin-left: -1em;\n}\n.ph-duotone.ph-stethoscope:before {\n content: '\\e7ea';\n opacity: 0.2;\n}\n.ph-duotone.ph-stethoscope:after {\n content: '\\e7eb';\n margin-left: -1em;\n}\n.ph-duotone.ph-sticker:before {\n content: '\\e5ac';\n opacity: 0.2;\n}\n.ph-duotone.ph-sticker:after {\n content: '\\e5ad';\n margin-left: -1em;\n}\n.ph-duotone.ph-stool:before {\n content: '\\ea44';\n opacity: 0.2;\n}\n.ph-duotone.ph-stool:after {\n content: '\\ea45';\n margin-left: -1em;\n}\n.ph-duotone.ph-stop:before {\n content: '\\e46c';\n opacity: 0.2;\n}\n.ph-duotone.ph-stop:after {\n content: '\\e46d';\n margin-left: -1em;\n}\n.ph-duotone.ph-stop-circle:before {\n content: '\\e46e';\n opacity: 0.2;\n}\n.ph-duotone.ph-stop-circle:after {\n content: '\\e46f';\n margin-left: -1em;\n}\n.ph-duotone.ph-storefront:before {\n content: '\\e470';\n opacity: 0.2;\n}\n.ph-duotone.ph-storefront:after {\n content: '\\e471';\n margin-left: -1em;\n}\n.ph-duotone.ph-strategy:before {\n content: '\\ea3a';\n opacity: 0.2;\n}\n.ph-duotone.ph-strategy:after {\n content: '\\ea3b';\n margin-left: -1em;\n}\n.ph-duotone.ph-stripe-logo:before {\n content: '\\e698';\n opacity: 0.2;\n}\n.ph-duotone.ph-stripe-logo:after {\n content: '\\e699';\n margin-left: -1em;\n}\n.ph-duotone.ph-student:before {\n content: '\\e73e';\n opacity: 0.2;\n}\n.ph-duotone.ph-student:after {\n content: '\\e73f';\n margin-left: -1em;\n}\n.ph-duotone.ph-subset-of:before {\n content: '\\edc0';\n opacity: 0.2;\n}\n.ph-duotone.ph-subset-of:after {\n content: '\\edc1';\n margin-left: -1em;\n}\n.ph-duotone.ph-subset-proper-of:before {\n content: '\\edb6';\n opacity: 0.2;\n}\n.ph-duotone.ph-subset-proper-of:after {\n content: '\\edb7';\n margin-left: -1em;\n}\n.ph-duotone.ph-subtitles:before {\n content: '\\e1a8';\n opacity: 0.2;\n}\n.ph-duotone.ph-subtitles:after {\n content: '\\e1a9';\n margin-left: -1em;\n}\n.ph-duotone.ph-subtitles-slash:before {\n content: '\\e1a6';\n opacity: 0.2;\n}\n.ph-duotone.ph-subtitles-slash:after {\n content: '\\e1a7';\n margin-left: -1em;\n}\n.ph-duotone.ph-subtract:before {\n content: '\\ebd6';\n opacity: 0.2;\n}\n.ph-duotone.ph-subtract:after {\n content: '\\ebd7';\n margin-left: -1em;\n}\n.ph-duotone.ph-subtract-square:before {\n content: '\\ebd4';\n opacity: 0.2;\n}\n.ph-duotone.ph-subtract-square:after {\n content: '\\ebd5';\n margin-left: -1em;\n}\n.ph-duotone.ph-subway:before {\n content: '\\e498';\n opacity: 0.2;\n}\n.ph-duotone.ph-subway:after {\n content: '\\e499';\n margin-left: -1em;\n}\n.ph-duotone.ph-suitcase:before {\n content: '\\e5ae';\n opacity: 0.2;\n}\n.ph-duotone.ph-suitcase:after {\n content: '\\e5af';\n margin-left: -1em;\n}\n.ph-duotone.ph-suitcase-rolling:before {\n content: '\\e9b0';\n opacity: 0.2;\n}\n.ph-duotone.ph-suitcase-rolling:after {\n content: '\\e9b1';\n margin-left: -1em;\n}\n.ph-duotone.ph-suitcase-simple:before {\n content: '\\e5b0';\n opacity: 0.2;\n}\n.ph-duotone.ph-suitcase-simple:after {\n content: '\\e5b1';\n margin-left: -1em;\n}\n.ph-duotone.ph-sun:before {\n content: '\\e472';\n opacity: 0.2;\n}\n.ph-duotone.ph-sun:after {\n content: '\\e473';\n margin-left: -1em;\n}\n.ph-duotone.ph-sun-dim:before {\n content: '\\e474';\n opacity: 0.2;\n}\n.ph-duotone.ph-sun-dim:after {\n content: '\\e475';\n margin-left: -1em;\n}\n.ph-duotone.ph-sun-horizon:before {\n content: '\\e5b6';\n opacity: 0.2;\n}\n.ph-duotone.ph-sun-horizon:after {\n content: '\\e5b7';\n margin-left: -1em;\n}\n.ph-duotone.ph-sunglasses:before {\n content: '\\e816';\n opacity: 0.2;\n}\n.ph-duotone.ph-sunglasses:after {\n content: '\\e817';\n margin-left: -1em;\n}\n.ph-duotone.ph-superset-of:before {\n content: '\\edb8';\n opacity: 0.2;\n}\n.ph-duotone.ph-superset-of:after {\n content: '\\edb9';\n margin-left: -1em;\n}\n.ph-duotone.ph-superset-proper-of:before {\n content: '\\edb4';\n opacity: 0.2;\n}\n.ph-duotone.ph-superset-proper-of:after {\n content: '\\edb5';\n margin-left: -1em;\n}\n.ph-duotone.ph-swap:before {\n content: '\\e83c';\n opacity: 0.2;\n}\n.ph-duotone.ph-swap:after {\n content: '\\e83d';\n margin-left: -1em;\n}\n.ph-duotone.ph-swatches:before {\n content: '\\e5b8';\n opacity: 0.2;\n}\n.ph-duotone.ph-swatches:after {\n content: '\\e5b9';\n margin-left: -1em;\n}\n.ph-duotone.ph-swimming-pool:before {\n content: '\\ecb6';\n opacity: 0.2;\n}\n.ph-duotone.ph-swimming-pool:after {\n content: '\\ecb7';\n margin-left: -1em;\n}\n.ph-duotone.ph-sword:before {\n content: '\\e5ba';\n opacity: 0.2;\n}\n.ph-duotone.ph-sword:after {\n content: '\\e5bb';\n margin-left: -1em;\n}\n.ph-duotone.ph-synagogue:before {\n content: '\\ecec';\n opacity: 0.2;\n}\n.ph-duotone.ph-synagogue:after {\n content: '\\eced';\n margin-left: -1em;\n}\n.ph-duotone.ph-syringe:before {\n content: '\\e968';\n opacity: 0.2;\n}\n.ph-duotone.ph-syringe:after {\n content: '\\e969';\n margin-left: -1em;\n}\n.ph-duotone.ph-t-shirt:before {\n content: '\\e670';\n opacity: 0.2;\n}\n.ph-duotone.ph-t-shirt:after {\n content: '\\e671';\n margin-left: -1em;\n}\n.ph-duotone.ph-table:before {\n content: '\\e476';\n opacity: 0.2;\n}\n.ph-duotone.ph-table:after {\n content: '\\e477';\n margin-left: -1em;\n}\n.ph-duotone.ph-tabs:before {\n content: '\\e778';\n opacity: 0.2;\n}\n.ph-duotone.ph-tabs:after {\n content: '\\e779';\n margin-left: -1em;\n}\n.ph-duotone.ph-tag:before {\n content: '\\e478';\n opacity: 0.2;\n}\n.ph-duotone.ph-tag:after {\n content: '\\e479';\n margin-left: -1em;\n}\n.ph-duotone.ph-tag-chevron:before {\n content: '\\e672';\n opacity: 0.2;\n}\n.ph-duotone.ph-tag-chevron:after {\n content: '\\e673';\n margin-left: -1em;\n}\n.ph-duotone.ph-tag-simple:before {\n content: '\\e47a';\n opacity: 0.2;\n}\n.ph-duotone.ph-tag-simple:after {\n content: '\\e47b';\n margin-left: -1em;\n}\n.ph-duotone.ph-target:before {\n content: '\\e47c';\n opacity: 0.2;\n}\n.ph-duotone.ph-target:after {\n content: '\\e47d';\n margin-left: -1em;\n}\n.ph-duotone.ph-taxi:before {\n content: '\\e902';\n opacity: 0.2;\n}\n.ph-duotone.ph-taxi:after {\n content: '\\e903';\n margin-left: -1em;\n}\n.ph-duotone.ph-tea-bag:before {\n content: '\\e8e6';\n opacity: 0.2;\n}\n.ph-duotone.ph-tea-bag:after {\n content: '\\e8e7';\n margin-left: -1em;\n}\n.ph-duotone.ph-telegram-logo:before {\n content: '\\e5bc';\n opacity: 0.2;\n}\n.ph-duotone.ph-telegram-logo:after {\n content: '\\e5bd';\n margin-left: -1em;\n}\n.ph-duotone.ph-television:before {\n content: '\\e754';\n opacity: 0.2;\n}\n.ph-duotone.ph-television:after {\n content: '\\e755';\n margin-left: -1em;\n}\n.ph-duotone.ph-television-simple:before {\n content: '\\eae6';\n opacity: 0.2;\n}\n.ph-duotone.ph-television-simple:after {\n content: '\\eae7';\n margin-left: -1em;\n}\n.ph-duotone.ph-tennis-ball:before {\n content: '\\e720';\n opacity: 0.2;\n}\n.ph-duotone.ph-tennis-ball:after {\n content: '\\e721';\n margin-left: -1em;\n}\n.ph-duotone.ph-tent:before {\n content: '\\e8ba';\n opacity: 0.2;\n}\n.ph-duotone.ph-tent:after {\n content: '\\e8bb';\n margin-left: -1em;\n}\n.ph-duotone.ph-terminal:before {\n content: '\\e47e';\n opacity: 0.2;\n}\n.ph-duotone.ph-terminal:after {\n content: '\\e47f';\n margin-left: -1em;\n}\n.ph-duotone.ph-terminal-window:before {\n content: '\\eae8';\n opacity: 0.2;\n}\n.ph-duotone.ph-terminal-window:after {\n content: '\\eae9';\n margin-left: -1em;\n}\n.ph-duotone.ph-test-tube:before {\n content: '\\e7a0';\n opacity: 0.2;\n}\n.ph-duotone.ph-test-tube:after {\n content: '\\e7a1';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-a-underline:before {\n content: '\\ed34';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-a-underline:after {\n content: '\\ed35';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-aa:before {\n content: '\\e6ee';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-aa:after {\n content: '\\e6ef';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-align-center:before {\n content: '\\e480';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-align-center:after {\n content: '\\e481';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-align-justify:before {\n content: '\\e482';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-align-justify:after {\n content: '\\e483';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-align-left:before {\n content: '\\e484';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-align-left:after {\n content: '\\e485';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-align-right:before {\n content: '\\e486';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-align-right:after {\n content: '\\e487';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-b:before {\n content: '\\e5be';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-b:after {\n content: '\\e5bf';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-columns:before {\n content: '\\ec96';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-columns:after {\n content: '\\ec97';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-h:before {\n content: '\\e6ba';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-h:after {\n content: '\\e6bb';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-h-five:before {\n content: '\\e6c4';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-h-five:after {\n content: '\\e6c5';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-h-four:before {\n content: '\\e6c2';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-h-four:after {\n content: '\\e6c3';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-h-one:before {\n content: '\\e6bc';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-h-one:after {\n content: '\\e6bd';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-h-six:before {\n content: '\\e6c6';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-h-six:after {\n content: '\\e6c7';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-h-three:before {\n content: '\\e6c0';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-h-three:after {\n content: '\\e6c1';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-h-two:before {\n content: '\\e6be';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-h-two:after {\n content: '\\e6bf';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-indent:before {\n content: '\\ea1e';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-indent:after {\n content: '\\ea1f';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-italic:before {\n content: '\\e5c0';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-italic:after {\n content: '\\e5c1';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-outdent:before {\n content: '\\ea1c';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-outdent:after {\n content: '\\ea1d';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-strikethrough:before {\n content: '\\e5c2';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-strikethrough:after {\n content: '\\e5c3';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-subscript:before {\n content: '\\ec98';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-subscript:after {\n content: '\\ec99';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-superscript:before {\n content: '\\ec9a';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-superscript:after {\n content: '\\ec9b';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-t:before {\n content: '\\e48a';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-t:after {\n content: '\\e48b';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-t-slash:before {\n content: '\\e488';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-t-slash:after {\n content: '\\e489';\n margin-left: -1em;\n}\n.ph-duotone.ph-text-underline:before {\n content: '\\e5c4';\n opacity: 0.2;\n}\n.ph-duotone.ph-text-underline:after {\n content: '\\e5c5';\n margin-left: -1em;\n}\n.ph-duotone.ph-textbox:before {\n content: '\\eb0a';\n opacity: 0.2;\n}\n.ph-duotone.ph-textbox:after {\n content: '\\eb0b';\n margin-left: -1em;\n}\n.ph-duotone.ph-thermometer:before {\n content: '\\e5c6';\n opacity: 0.2;\n}\n.ph-duotone.ph-thermometer:after {\n content: '\\e5c7';\n margin-left: -1em;\n}\n.ph-duotone.ph-thermometer-cold:before {\n content: '\\e5c8';\n opacity: 0.2;\n}\n.ph-duotone.ph-thermometer-cold:after {\n content: '\\e5c9';\n margin-left: -1em;\n}\n.ph-duotone.ph-thermometer-hot:before {\n content: '\\e5ca';\n opacity: 0.2;\n}\n.ph-duotone.ph-thermometer-hot:after {\n content: '\\e5cb';\n margin-left: -1em;\n}\n.ph-duotone.ph-thermometer-simple:before {\n content: '\\e5cc';\n opacity: 0.2;\n}\n.ph-duotone.ph-thermometer-simple:after {\n content: '\\e5cd';\n margin-left: -1em;\n}\n.ph-duotone.ph-threads-logo:before {\n content: '\\ed9e';\n opacity: 0.2;\n}\n.ph-duotone.ph-threads-logo:after {\n content: '\\ed9f';\n margin-left: -1em;\n}\n.ph-duotone.ph-three-d:before {\n content: '\\ea5a';\n opacity: 0.2;\n}\n.ph-duotone.ph-three-d:after {\n content: '\\ea5b';\n margin-left: -1em;\n}\n.ph-duotone.ph-thumbs-down:before {\n content: '\\e48c';\n opacity: 0.2;\n}\n.ph-duotone.ph-thumbs-down:after {\n content: '\\e48d';\n margin-left: -1em;\n}\n.ph-duotone.ph-thumbs-up:before {\n content: '\\e48e';\n opacity: 0.2;\n}\n.ph-duotone.ph-thumbs-up:after {\n content: '\\e48f';\n margin-left: -1em;\n}\n.ph-duotone.ph-ticket:before {\n content: '\\e490';\n opacity: 0.2;\n}\n.ph-duotone.ph-ticket:after {\n content: '\\e491';\n margin-left: -1em;\n}\n.ph-duotone.ph-tidal-logo:before {\n content: '\\ed1c';\n opacity: 0.2;\n}\n.ph-duotone.ph-tidal-logo:after {\n content: '\\ed1d';\n margin-left: -1em;\n}\n.ph-duotone.ph-tiktok-logo:before {\n content: '\\eaf2';\n opacity: 0.2;\n}\n.ph-duotone.ph-tiktok-logo:after {\n content: '\\eaf3';\n margin-left: -1em;\n}\n.ph-duotone.ph-tilde:before {\n content: '\\eda8';\n opacity: 0.2;\n}\n.ph-duotone.ph-tilde:after {\n content: '\\eda9';\n margin-left: -1em;\n}\n.ph-duotone.ph-timer:before {\n content: '\\e492';\n opacity: 0.2;\n}\n.ph-duotone.ph-timer:after {\n content: '\\e493';\n margin-left: -1em;\n}\n.ph-duotone.ph-tip-jar:before {\n content: '\\e7e2';\n opacity: 0.2;\n}\n.ph-duotone.ph-tip-jar:after {\n content: '\\e7e9';\n margin-left: -1em;\n}\n.ph-duotone.ph-tipi:before {\n content: '\\ed30';\n opacity: 0.2;\n}\n.ph-duotone.ph-tipi:after {\n content: '\\ed31';\n margin-left: -1em;\n}\n.ph-duotone.ph-tire:before {\n content: '\\edd2';\n opacity: 0.2;\n}\n.ph-duotone.ph-tire:after {\n content: '\\edd3';\n margin-left: -1em;\n}\n.ph-duotone.ph-toggle-left:before {\n content: '\\e674';\n opacity: 0.2;\n}\n.ph-duotone.ph-toggle-left:after {\n content: '\\e675';\n margin-left: -1em;\n}\n.ph-duotone.ph-toggle-right:before {\n content: '\\e676';\n opacity: 0.2;\n}\n.ph-duotone.ph-toggle-right:after {\n content: '\\e677';\n margin-left: -1em;\n}\n.ph-duotone.ph-toilet:before {\n content: '\\e79a';\n opacity: 0.2;\n}\n.ph-duotone.ph-toilet:after {\n content: '\\e79b';\n margin-left: -1em;\n}\n.ph-duotone.ph-toilet-paper:before {\n content: '\\e79c';\n opacity: 0.2;\n}\n.ph-duotone.ph-toilet-paper:after {\n content: '\\e79d';\n margin-left: -1em;\n}\n.ph-duotone.ph-toolbox:before {\n content: '\\eca0';\n opacity: 0.2;\n}\n.ph-duotone.ph-toolbox:after {\n content: '\\eca1';\n margin-left: -1em;\n}\n.ph-duotone.ph-tooth:before {\n content: '\\e9cc';\n opacity: 0.2;\n}\n.ph-duotone.ph-tooth:after {\n content: '\\e9cd';\n margin-left: -1em;\n}\n.ph-duotone.ph-tornado:before {\n content: '\\e88c';\n opacity: 0.2;\n}\n.ph-duotone.ph-tornado:after {\n content: '\\e88d';\n margin-left: -1em;\n}\n.ph-duotone.ph-tote:before {\n content: '\\e494';\n opacity: 0.2;\n}\n.ph-duotone.ph-tote:after {\n content: '\\e495';\n margin-left: -1em;\n}\n.ph-duotone.ph-tote-simple:before {\n content: '\\e678';\n opacity: 0.2;\n}\n.ph-duotone.ph-tote-simple:after {\n content: '\\e679';\n margin-left: -1em;\n}\n.ph-duotone.ph-towel:before {\n content: '\\ede6';\n opacity: 0.2;\n}\n.ph-duotone.ph-towel:after {\n content: '\\ede7';\n margin-left: -1em;\n}\n.ph-duotone.ph-tractor:before {\n content: '\\ec6e';\n opacity: 0.2;\n}\n.ph-duotone.ph-tractor:after {\n content: '\\ec6f';\n margin-left: -1em;\n}\n.ph-duotone.ph-trademark:before {\n content: '\\e9f0';\n opacity: 0.2;\n}\n.ph-duotone.ph-trademark:after {\n content: '\\e9f1';\n margin-left: -1em;\n}\n.ph-duotone.ph-trademark-registered:before {\n content: '\\e3f4';\n opacity: 0.2;\n}\n.ph-duotone.ph-trademark-registered:after {\n content: '\\e415';\n margin-left: -1em;\n}\n.ph-duotone.ph-traffic-cone:before {\n content: '\\e9a8';\n opacity: 0.2;\n}\n.ph-duotone.ph-traffic-cone:after {\n content: '\\e9a9';\n margin-left: -1em;\n}\n.ph-duotone.ph-traffic-sign:before {\n content: '\\e67a';\n opacity: 0.2;\n}\n.ph-duotone.ph-traffic-sign:after {\n content: '\\e67b';\n margin-left: -1em;\n}\n.ph-duotone.ph-traffic-signal:before {\n content: '\\e9aa';\n opacity: 0.2;\n}\n.ph-duotone.ph-traffic-signal:after {\n content: '\\e9ab';\n margin-left: -1em;\n}\n.ph-duotone.ph-train:before {\n content: '\\e496';\n opacity: 0.2;\n}\n.ph-duotone.ph-train:after {\n content: '\\e497';\n margin-left: -1em;\n}\n.ph-duotone.ph-train-regional:before {\n content: '\\e49e';\n opacity: 0.2;\n}\n.ph-duotone.ph-train-regional:after {\n content: '\\e49f';\n margin-left: -1em;\n}\n.ph-duotone.ph-train-simple:before {\n content: '\\e4a0';\n opacity: 0.2;\n}\n.ph-duotone.ph-train-simple:after {\n content: '\\e4a1';\n margin-left: -1em;\n}\n.ph-duotone.ph-tram:before {\n content: '\\e9ec';\n opacity: 0.2;\n}\n.ph-duotone.ph-tram:after {\n content: '\\e9ed';\n margin-left: -1em;\n}\n.ph-duotone.ph-translate:before {\n content: '\\e4a2';\n opacity: 0.2;\n}\n.ph-duotone.ph-translate:after {\n content: '\\e4a3';\n margin-left: -1em;\n}\n.ph-duotone.ph-trash:before {\n content: '\\e4a6';\n opacity: 0.2;\n}\n.ph-duotone.ph-trash:after {\n content: '\\e4a7';\n margin-left: -1em;\n}\n.ph-duotone.ph-trash-simple:before {\n content: '\\e4a8';\n opacity: 0.2;\n}\n.ph-duotone.ph-trash-simple:after {\n content: '\\e4a9';\n margin-left: -1em;\n}\n.ph-duotone.ph-tray:before {\n content: '\\e4aa';\n opacity: 0.2;\n}\n.ph-duotone.ph-tray:after {\n content: '\\e4ab';\n margin-left: -1em;\n}\n.ph-duotone.ph-tray-arrow-down:before {\n content: '\\e010';\n opacity: 0.2;\n}\n.ph-duotone.ph-tray-arrow-down:after {\n content: '\\e011';\n margin-left: -1em;\n}\n.ph-duotone.ph-tray-arrow-up:before {\n content: '\\ee52';\n opacity: 0.2;\n}\n.ph-duotone.ph-tray-arrow-up:after {\n content: '\\ee53';\n margin-left: -1em;\n}\n.ph-duotone.ph-treasure-chest:before {\n content: '\\ede2';\n opacity: 0.2;\n}\n.ph-duotone.ph-treasure-chest:after {\n content: '\\ede3';\n margin-left: -1em;\n}\n.ph-duotone.ph-tree:before {\n content: '\\e6da';\n opacity: 0.2;\n}\n.ph-duotone.ph-tree:after {\n content: '\\e6db';\n margin-left: -1em;\n}\n.ph-duotone.ph-tree-evergreen:before {\n content: '\\e6dc';\n opacity: 0.2;\n}\n.ph-duotone.ph-tree-evergreen:after {\n content: '\\e6dd';\n margin-left: -1em;\n}\n.ph-duotone.ph-tree-palm:before {\n content: '\\e91a';\n opacity: 0.2;\n}\n.ph-duotone.ph-tree-palm:after {\n content: '\\e91b';\n margin-left: -1em;\n}\n.ph-duotone.ph-tree-structure:before {\n content: '\\e67c';\n opacity: 0.2;\n}\n.ph-duotone.ph-tree-structure:after {\n content: '\\e67d';\n margin-left: -1em;\n}\n.ph-duotone.ph-tree-view:before {\n content: '\\ee48';\n opacity: 0.2;\n}\n.ph-duotone.ph-tree-view:after {\n content: '\\ee49';\n margin-left: -1em;\n}\n.ph-duotone.ph-trend-down:before {\n content: '\\e4ac';\n opacity: 0.2;\n}\n.ph-duotone.ph-trend-down:after {\n content: '\\e4ad';\n margin-left: -1em;\n}\n.ph-duotone.ph-trend-up:before {\n content: '\\e4ae';\n opacity: 0.2;\n}\n.ph-duotone.ph-trend-up:after {\n content: '\\e4af';\n margin-left: -1em;\n}\n.ph-duotone.ph-triangle:before {\n content: '\\e4b0';\n opacity: 0.2;\n}\n.ph-duotone.ph-triangle:after {\n content: '\\e4b1';\n margin-left: -1em;\n}\n.ph-duotone.ph-triangle-dashed:before {\n content: '\\e4b2';\n opacity: 0.2;\n}\n.ph-duotone.ph-triangle-dashed:after {\n content: '\\e4b3';\n margin-left: -1em;\n}\n.ph-duotone.ph-trolley:before {\n content: '\\e5b2';\n opacity: 0.2;\n}\n.ph-duotone.ph-trolley:after {\n content: '\\e5b3';\n margin-left: -1em;\n}\n.ph-duotone.ph-trolley-suitcase:before {\n content: '\\e5b4';\n opacity: 0.2;\n}\n.ph-duotone.ph-trolley-suitcase:after {\n content: '\\e5b5';\n margin-left: -1em;\n}\n.ph-duotone.ph-trophy:before {\n content: '\\e67e';\n opacity: 0.2;\n}\n.ph-duotone.ph-trophy:after {\n content: '\\e67f';\n margin-left: -1em;\n}\n.ph-duotone.ph-truck:before {\n content: '\\e4b4';\n opacity: 0.2;\n}\n.ph-duotone.ph-truck:after {\n content: '\\e4b5';\n margin-left: -1em;\n}\n.ph-duotone.ph-truck-trailer:before {\n content: '\\e4b6';\n opacity: 0.2;\n}\n.ph-duotone.ph-truck-trailer:after {\n content: '\\e4b7';\n margin-left: -1em;\n}\n.ph-duotone.ph-tumblr-logo:before {\n content: '\\e8d4';\n opacity: 0.2;\n}\n.ph-duotone.ph-tumblr-logo:after {\n content: '\\e8d5';\n margin-left: -1em;\n}\n.ph-duotone.ph-twitch-logo:before {\n content: '\\e5ce';\n opacity: 0.2;\n}\n.ph-duotone.ph-twitch-logo:after {\n content: '\\e5cf';\n margin-left: -1em;\n}\n.ph-duotone.ph-twitter-logo:before {\n content: '\\e4ba';\n opacity: 0.2;\n}\n.ph-duotone.ph-twitter-logo:after {\n content: '\\e4bb';\n margin-left: -1em;\n}\n.ph-duotone.ph-umbrella:before {\n content: '\\e684';\n opacity: 0.2;\n}\n.ph-duotone.ph-umbrella:after {\n content: '\\e685';\n margin-left: -1em;\n}\n.ph-duotone.ph-umbrella-simple:before {\n content: '\\e686';\n opacity: 0.2;\n}\n.ph-duotone.ph-umbrella-simple:after {\n content: '\\e687';\n margin-left: -1em;\n}\n.ph-duotone.ph-union:before {\n content: '\\edbe';\n opacity: 0.2;\n}\n.ph-duotone.ph-union:after {\n content: '\\edbf';\n margin-left: -1em;\n}\n.ph-duotone.ph-unite:before {\n content: '\\e87e';\n opacity: 0.2;\n}\n.ph-duotone.ph-unite:after {\n content: '\\e87f';\n margin-left: -1em;\n}\n.ph-duotone.ph-unite-square:before {\n content: '\\e878';\n opacity: 0.2;\n}\n.ph-duotone.ph-unite-square:after {\n content: '\\e879';\n margin-left: -1em;\n}\n.ph-duotone.ph-upload:before {\n content: '\\e4be';\n opacity: 0.2;\n}\n.ph-duotone.ph-upload:after {\n content: '\\e4bf';\n margin-left: -1em;\n}\n.ph-duotone.ph-upload-simple:before {\n content: '\\e4c0';\n opacity: 0.2;\n}\n.ph-duotone.ph-upload-simple:after {\n content: '\\e4c1';\n margin-left: -1em;\n}\n.ph-duotone.ph-usb:before {\n content: '\\e956';\n opacity: 0.2;\n}\n.ph-duotone.ph-usb:after {\n content: '\\e957';\n margin-left: -1em;\n}\n.ph-duotone.ph-user:before {\n content: '\\e4c2';\n opacity: 0.2;\n}\n.ph-duotone.ph-user:after {\n content: '\\e4c3';\n margin-left: -1em;\n}\n.ph-duotone.ph-user-check:before {\n content: '\\eafa';\n opacity: 0.2;\n}\n.ph-duotone.ph-user-check:after {\n content: '\\eafb';\n margin-left: -1em;\n}\n.ph-duotone.ph-user-circle:before {\n content: '\\e4c4';\n opacity: 0.2;\n}\n.ph-duotone.ph-user-circle:after {\n content: '\\e4c5';\n margin-left: -1em;\n}\n.ph-duotone.ph-user-circle-check:before {\n content: '\\ec38';\n opacity: 0.2;\n}\n.ph-duotone.ph-user-circle-check:after {\n content: '\\ec39';\n margin-left: -1em;\n}\n.ph-duotone.ph-user-circle-dashed:before {\n content: '\\ec36';\n opacity: 0.2;\n}\n.ph-duotone.ph-user-circle-dashed:after {\n content: '\\ec37';\n margin-left: -1em;\n}\n.ph-duotone.ph-user-circle-gear:before {\n content: '\\e4c6';\n opacity: 0.2;\n}\n.ph-duotone.ph-user-circle-gear:after {\n content: '\\e4c7';\n margin-left: -1em;\n}\n.ph-duotone.ph-user-circle-minus:before {\n content: '\\e4c8';\n opacity: 0.2;\n}\n.ph-duotone.ph-user-circle-minus:after {\n content: '\\e4c9';\n margin-left: -1em;\n}\n.ph-duotone.ph-user-circle-plus:before {\n content: '\\e4ca';\n opacity: 0.2;\n}\n.ph-duotone.ph-user-circle-plus:after {\n content: '\\e4cb';\n margin-left: -1em;\n}\n.ph-duotone.ph-user-focus:before {\n content: '\\e6fc';\n opacity: 0.2;\n}\n.ph-duotone.ph-user-focus:after {\n content: '\\e6fd';\n margin-left: -1em;\n}\n.ph-duotone.ph-user-gear:before {\n content: '\\e4cc';\n opacity: 0.2;\n}\n.ph-duotone.ph-user-gear:after {\n content: '\\e4cd';\n margin-left: -1em;\n}\n.ph-duotone.ph-user-list:before {\n content: '\\e73c';\n opacity: 0.2;\n}\n.ph-duotone.ph-user-list:after {\n content: '\\e73d';\n margin-left: -1em;\n}\n.ph-duotone.ph-user-minus:before {\n content: '\\e4ce';\n opacity: 0.2;\n}\n.ph-duotone.ph-user-minus:after {\n content: '\\e4cf';\n margin-left: -1em;\n}\n.ph-duotone.ph-user-plus:before {\n content: '\\e4d0';\n opacity: 0.2;\n}\n.ph-duotone.ph-user-plus:after {\n content: '\\e4d1';\n margin-left: -1em;\n}\n.ph-duotone.ph-user-rectangle:before {\n content: '\\e4d2';\n opacity: 0.2;\n}\n.ph-duotone.ph-user-rectangle:after {\n content: '\\e4d3';\n margin-left: -1em;\n}\n.ph-duotone.ph-user-sound:before {\n content: '\\eca8';\n opacity: 0.2;\n}\n.ph-duotone.ph-user-sound:after {\n content: '\\eca9';\n margin-left: -1em;\n}\n.ph-duotone.ph-user-square:before {\n content: '\\e4d4';\n opacity: 0.2;\n}\n.ph-duotone.ph-user-square:after {\n content: '\\e4d5';\n margin-left: -1em;\n}\n.ph-duotone.ph-user-switch:before {\n content: '\\e756';\n opacity: 0.2;\n}\n.ph-duotone.ph-user-switch:after {\n content: '\\e757';\n margin-left: -1em;\n}\n.ph-duotone.ph-users:before {\n content: '\\e4d6';\n opacity: 0.2;\n}\n.ph-duotone.ph-users:after {\n content: '\\e4d7';\n margin-left: -1em;\n}\n.ph-duotone.ph-users-four:before {\n content: '\\e68c';\n opacity: 0.2;\n}\n.ph-duotone.ph-users-four:after {\n content: '\\e68d';\n margin-left: -1em;\n}\n.ph-duotone.ph-users-three:before {\n content: '\\e68e';\n opacity: 0.2;\n}\n.ph-duotone.ph-users-three:after {\n content: '\\e68f';\n margin-left: -1em;\n}\n.ph-duotone.ph-van:before {\n content: '\\e826';\n opacity: 0.2;\n}\n.ph-duotone.ph-van:after {\n content: '\\e827';\n margin-left: -1em;\n}\n.ph-duotone.ph-vault:before {\n content: '\\e76e';\n opacity: 0.2;\n}\n.ph-duotone.ph-vault:after {\n content: '\\e76f';\n margin-left: -1em;\n}\n.ph-duotone.ph-vector-three:before {\n content: '\\ee62';\n opacity: 0.2;\n}\n.ph-duotone.ph-vector-three:after {\n content: '\\ee63';\n margin-left: -1em;\n}\n.ph-duotone.ph-vector-two:before {\n content: '\\ee64';\n opacity: 0.2;\n}\n.ph-duotone.ph-vector-two:after {\n content: '\\ee65';\n margin-left: -1em;\n}\n.ph-duotone.ph-vibrate:before {\n content: '\\e4d8';\n opacity: 0.2;\n}\n.ph-duotone.ph-vibrate:after {\n content: '\\e4d9';\n margin-left: -1em;\n}\n.ph-duotone.ph-video:before {\n content: '\\e740';\n opacity: 0.2;\n}\n.ph-duotone.ph-video:after {\n content: '\\e741';\n margin-left: -1em;\n}\n.ph-duotone.ph-video-camera:before {\n content: '\\e4da';\n opacity: 0.2;\n}\n.ph-duotone.ph-video-camera:after {\n content: '\\e4db';\n margin-left: -1em;\n}\n.ph-duotone.ph-video-camera-slash:before {\n content: '\\e4dc';\n opacity: 0.2;\n}\n.ph-duotone.ph-video-camera-slash:after {\n content: '\\e4dd';\n margin-left: -1em;\n}\n.ph-duotone.ph-video-conference:before {\n content: '\\edce';\n opacity: 0.2;\n}\n.ph-duotone.ph-video-conference:after {\n content: '\\edcf';\n margin-left: -1em;\n}\n.ph-duotone.ph-vignette:before {\n content: '\\eba2';\n opacity: 0.2;\n}\n.ph-duotone.ph-vignette:after {\n content: '\\eba3';\n margin-left: -1em;\n}\n.ph-duotone.ph-vinyl-record:before {\n content: '\\ecac';\n opacity: 0.2;\n}\n.ph-duotone.ph-vinyl-record:after {\n content: '\\ecad';\n margin-left: -1em;\n}\n.ph-duotone.ph-virtual-reality:before {\n content: '\\e7b8';\n opacity: 0.2;\n}\n.ph-duotone.ph-virtual-reality:after {\n content: '\\e7b9';\n margin-left: -1em;\n}\n.ph-duotone.ph-virus:before {\n content: '\\e7d6';\n opacity: 0.2;\n}\n.ph-duotone.ph-virus:after {\n content: '\\e7d7';\n margin-left: -1em;\n}\n.ph-duotone.ph-visor:before {\n content: '\\ee2a';\n opacity: 0.2;\n}\n.ph-duotone.ph-visor:after {\n content: '\\ee2b';\n margin-left: -1em;\n}\n.ph-duotone.ph-voicemail:before {\n content: '\\e4de';\n opacity: 0.2;\n}\n.ph-duotone.ph-voicemail:after {\n content: '\\e4df';\n margin-left: -1em;\n}\n.ph-duotone.ph-volleyball:before {\n content: '\\e726';\n opacity: 0.2;\n}\n.ph-duotone.ph-volleyball:after {\n content: '\\e727';\n margin-left: -1em;\n}\n.ph-duotone.ph-wall:before {\n content: '\\e688';\n opacity: 0.2;\n}\n.ph-duotone.ph-wall:after {\n content: '\\e689';\n margin-left: -1em;\n}\n.ph-duotone.ph-wallet:before {\n content: '\\e68a';\n opacity: 0.2;\n}\n.ph-duotone.ph-wallet:after {\n content: '\\e68b';\n margin-left: -1em;\n}\n.ph-duotone.ph-warehouse:before {\n content: '\\ecd4';\n opacity: 0.2;\n}\n.ph-duotone.ph-warehouse:after {\n content: '\\ecd5';\n margin-left: -1em;\n}\n.ph-duotone.ph-warning:before {\n content: '\\e4e0';\n opacity: 0.2;\n}\n.ph-duotone.ph-warning:after {\n content: '\\e4e1';\n margin-left: -1em;\n}\n.ph-duotone.ph-warning-circle:before {\n content: '\\e4e2';\n opacity: 0.2;\n}\n.ph-duotone.ph-warning-circle:after {\n content: '\\e4e3';\n margin-left: -1em;\n}\n.ph-duotone.ph-warning-diamond:before {\n content: '\\e7fc';\n opacity: 0.2;\n}\n.ph-duotone.ph-warning-diamond:after {\n content: '\\e7fd';\n margin-left: -1em;\n}\n.ph-duotone.ph-warning-octagon:before {\n content: '\\e4e4';\n opacity: 0.2;\n}\n.ph-duotone.ph-warning-octagon:after {\n content: '\\e4e5';\n margin-left: -1em;\n}\n.ph-duotone.ph-washing-machine:before {\n content: '\\ede8';\n opacity: 0.2;\n}\n.ph-duotone.ph-washing-machine:after {\n content: '\\ede9';\n margin-left: -1em;\n}\n.ph-duotone.ph-watch:before {\n content: '\\e4e6';\n opacity: 0.2;\n}\n.ph-duotone.ph-watch:after {\n content: '\\e4e7';\n margin-left: -1em;\n}\n.ph-duotone.ph-wave-sawtooth:before {\n content: '\\ea9c';\n opacity: 0.2;\n}\n.ph-duotone.ph-wave-sawtooth:after {\n content: '\\ea9d';\n margin-left: -1em;\n}\n.ph-duotone.ph-wave-sine:before {\n content: '\\ea9a';\n opacity: 0.2;\n}\n.ph-duotone.ph-wave-sine:after {\n content: '\\ea9b';\n margin-left: -1em;\n}\n.ph-duotone.ph-wave-square:before {\n content: '\\ea9e';\n opacity: 0.2;\n}\n.ph-duotone.ph-wave-square:after {\n content: '\\ea9f';\n margin-left: -1em;\n}\n.ph-duotone.ph-wave-triangle:before {\n content: '\\eaa0';\n opacity: 0.2;\n}\n.ph-duotone.ph-wave-triangle:after {\n content: '\\eaa1';\n margin-left: -1em;\n}\n.ph-duotone.ph-waveform:before {\n content: '\\e802';\n opacity: 0.2;\n}\n.ph-duotone.ph-waveform:after {\n content: '\\e803';\n margin-left: -1em;\n}\n.ph-duotone.ph-waveform-slash:before {\n content: '\\e800';\n opacity: 0.2;\n}\n.ph-duotone.ph-waveform-slash:after {\n content: '\\e801';\n margin-left: -1em;\n}\n.ph-duotone.ph-waves:before {\n content: '\\e6de';\n opacity: 0.2;\n}\n.ph-duotone.ph-waves:after {\n content: '\\e6df';\n margin-left: -1em;\n}\n.ph-duotone.ph-webcam:before {\n content: '\\e9b2';\n opacity: 0.2;\n}\n.ph-duotone.ph-webcam:after {\n content: '\\e9b3';\n margin-left: -1em;\n}\n.ph-duotone.ph-webcam-slash:before {\n content: '\\ecdc';\n opacity: 0.2;\n}\n.ph-duotone.ph-webcam-slash:after {\n content: '\\ecdd';\n margin-left: -1em;\n}\n.ph-duotone.ph-webhooks-logo:before {\n content: '\\ecae';\n opacity: 0.2;\n}\n.ph-duotone.ph-webhooks-logo:after {\n content: '\\ecaf';\n margin-left: -1em;\n}\n.ph-duotone.ph-wechat-logo:before {\n content: '\\e8d2';\n opacity: 0.2;\n}\n.ph-duotone.ph-wechat-logo:after {\n content: '\\e8d3';\n margin-left: -1em;\n}\n.ph-duotone.ph-whatsapp-logo:before {\n content: '\\e5d0';\n opacity: 0.2;\n}\n.ph-duotone.ph-whatsapp-logo:after {\n content: '\\e5d1';\n margin-left: -1em;\n}\n.ph-duotone.ph-wheelchair:before {\n content: '\\e4e8';\n opacity: 0.2;\n}\n.ph-duotone.ph-wheelchair:after {\n content: '\\e4e9';\n margin-left: -1em;\n}\n.ph-duotone.ph-wheelchair-motion:before {\n content: '\\e89a';\n opacity: 0.2;\n}\n.ph-duotone.ph-wheelchair-motion:after {\n content: '\\e89b';\n margin-left: -1em;\n}\n.ph-duotone.ph-wifi-high:before {\n content: '\\e4ea';\n opacity: 0.2;\n}\n.ph-duotone.ph-wifi-high:after {\n content: '\\e4eb';\n margin-left: -1em;\n}\n.ph-duotone.ph-wifi-low:before {\n content: '\\e4ec';\n opacity: 0.2;\n}\n.ph-duotone.ph-wifi-low:after {\n content: '\\e4ed';\n margin-left: -1em;\n}\n.ph-duotone.ph-wifi-medium:before {\n content: '\\e4ee';\n opacity: 0.2;\n}\n.ph-duotone.ph-wifi-medium:after {\n content: '\\e4ef';\n margin-left: -1em;\n}\n.ph-duotone.ph-wifi-none:before {\n content: '\\e4f0';\n color: #444;\n}\n.ph-duotone.ph-wifi-slash:before {\n content: '\\e4f2';\n opacity: 0.2;\n}\n.ph-duotone.ph-wifi-slash:after {\n content: '\\e4f3';\n margin-left: -1em;\n}\n.ph-duotone.ph-wifi-x:before {\n content: '\\e4f4';\n opacity: 0.2;\n}\n.ph-duotone.ph-wifi-x:after {\n content: '\\e4f5';\n margin-left: -1em;\n}\n.ph-duotone.ph-wind:before {\n content: '\\e5d2';\n opacity: 0.2;\n}\n.ph-duotone.ph-wind:after {\n content: '\\e5d3';\n margin-left: -1em;\n}\n.ph-duotone.ph-windmill:before {\n content: '\\e9f8';\n opacity: 0.2;\n}\n.ph-duotone.ph-windmill:after {\n content: '\\e9f9';\n margin-left: -1em;\n}\n.ph-duotone.ph-windows-logo:before {\n content: '\\e692';\n opacity: 0.2;\n}\n.ph-duotone.ph-windows-logo:after {\n content: '\\e693';\n margin-left: -1em;\n}\n.ph-duotone.ph-wine:before {\n content: '\\e6b2';\n opacity: 0.2;\n}\n.ph-duotone.ph-wine:after {\n content: '\\e6b3';\n margin-left: -1em;\n}\n.ph-duotone.ph-wrench:before {\n content: '\\e5d4';\n opacity: 0.2;\n}\n.ph-duotone.ph-wrench:after {\n content: '\\e5d5';\n margin-left: -1em;\n}\n.ph-duotone.ph-x:before {\n content: '\\e4f6';\n opacity: 0.2;\n}\n.ph-duotone.ph-x:after {\n content: '\\e4f7';\n margin-left: -1em;\n}\n.ph-duotone.ph-x-circle:before {\n content: '\\e4f8';\n opacity: 0.2;\n}\n.ph-duotone.ph-x-circle:after {\n content: '\\e4f9';\n margin-left: -1em;\n}\n.ph-duotone.ph-x-logo:before {\n content: '\\e4bc';\n opacity: 0.2;\n}\n.ph-duotone.ph-x-logo:after {\n content: '\\e4bd';\n margin-left: -1em;\n}\n.ph-duotone.ph-x-square:before {\n content: '\\e4fa';\n opacity: 0.2;\n}\n.ph-duotone.ph-x-square:after {\n content: '\\e4fb';\n margin-left: -1em;\n}\n.ph-duotone.ph-yarn:before {\n content: '\\ed9a';\n opacity: 0.2;\n}\n.ph-duotone.ph-yarn:after {\n content: '\\ed9b';\n margin-left: -1em;\n}\n.ph-duotone.ph-yin-yang:before {\n content: '\\e92a';\n opacity: 0.2;\n}\n.ph-duotone.ph-yin-yang:after {\n content: '\\e92b';\n margin-left: -1em;\n}\n.ph-duotone.ph-youtube-logo:before {\n content: '\\e4fc';\n opacity: 0.2;\n}\n.ph-duotone.ph-youtube-logo:after {\n content: '\\e4fd';\n margin-left: -1em;\n}\n","import { Component, Host, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'sula-icon',\n styleUrl: 'sula-icon.scss',\n shadow: false,\n})\nexport class SulaIcon {\n /**\n * The icon name\n */\n @Prop() icon: string;\n\n /**\n * Custom class to be applied to the icon\n */\n @Prop() customClass?: string = '';\n\n render() {\n return (\n <Host>\n <i class={`${this.icon} ${this.customClass} sula-icon`}></i>\n </Host>\n );\n }\n}\n",":host {\n display: block;\n}\n\nbutton:focus-visible {\n outline: 2px solid var(--color-feedback-informational) !important;\n outline-offset: 2px !important;\n}\n","import { Component, Event, EventEmitter, Host, Prop, State, Watch, h } from '@stencil/core';\nimport iconsData from '../assets/icons/regular/selection.json';\nimport { SulaIconPickerIcon } from './model/sula-icon-picker.model';\n\nconst MAX_VISIBLE_ICONS = 50;\n\nconst ALL_ICONS: SulaIconPickerIcon[] = (iconsData?.icons || []).map((icon: any) => {\n const aliases = String(icon.properties.name || '')\n .split(',')\n .map((alias: string) => alias.trim())\n .filter(Boolean);\n const name = icon.properties.ligatures || aliases[0];\n\n return {\n name,\n code: icon.properties.code,\n className: `ph ph-${name}`,\n aliases,\n };\n});\n\n@Component({\n tag: 'sula-icon-picker',\n styleUrl: 'sula-icon-picker.scss',\n shadow: true,\n})\nexport class SulaIconPicker {\n /**\n * Icon picker label\n */\n @Prop({ mutable: true })\n label: string;\n\n /**\n * Marks the field as required and shows a required indicator next to the label\n */\n @Prop({ mutable: true })\n required: boolean = false;\n\n /**\n * Icon picker is disabled\n */\n @Prop({ mutable: true })\n disabled: boolean = false;\n\n /**\n * Error message displayed below the picker\n */\n @Prop({ mutable: true })\n error?: string;\n\n /**\n * Selected icon class (e.g. \"ph ph-house\")\n */\n @Prop({ mutable: true })\n value?: string;\n\n /**\n * Show or hide the icon search input\n */\n @Prop()\n showSearch: boolean = true;\n\n /**\n * Placeholder for the icon search input\n */\n @Prop()\n searchPlaceholder: string = 'Buscar ícone...';\n\n /**\n * Custom list of icons to display. When not provided, the full built-in icon library is used\n */\n @Prop({ mutable: true })\n icons?: SulaIconPickerIcon[];\n\n /**\n * Maximum number of icons rendered at once\n */\n @Prop()\n maxVisibleIcons: number = MAX_VISIBLE_ICONS;\n\n /**\n * Maximum height for the icon list in pixels\n */\n @Prop()\n menuMaxHeight: number = 300;\n\n /**\n * Event emitted when the picker is clicked\n */\n @Event()\n pickerClicked: EventEmitter<void>;\n\n /**\n * Event emitted when the picker is focused\n */\n @Event()\n pickerFocused: EventEmitter<void>;\n\n /**\n * Event emitted when the picker is focused out\n */\n @Event()\n pickerFocusedOut: EventEmitter<void>;\n\n /**\n * Event emitted when an icon is selected\n */\n @Event()\n iconSelected: EventEmitter<SulaIconPickerIcon>;\n\n @State()\n selectedIcon?: SulaIconPickerIcon;\n\n @State()\n searchTerm: string = '';\n\n dropdownEl?: HTMLSulaDropdownElement;\n\n @Watch('value')\n handleValueChange(newValue?: string) {\n this.selectedIcon = this.findIconByValue(newValue);\n }\n\n @Watch('icons')\n handleIconsChange() {\n this.selectedIcon = this.findIconByValue(this.value);\n }\n\n componentWillLoad() {\n this.selectedIcon = this.findIconByValue(this.value);\n }\n\n get iconsList(): SulaIconPickerIcon[] {\n return this.icons && this.icons.length > 0 ? this.icons : ALL_ICONS;\n }\n\n findIconByValue(value?: string): SulaIconPickerIcon | undefined {\n if (!value) return undefined;\n\n return this.iconsList.find(icon => icon.className === value || icon.name === value);\n }\n\n filterIcons(): SulaIconPickerIcon[] {\n const term = this.searchTerm.trim().toLowerCase();\n const icons = term\n ? this.iconsList.filter(\n icon => icon.name.toLowerCase().includes(term) || icon.aliases?.some(alias => alias.toLowerCase().includes(term)),\n )\n : this.iconsList;\n\n return icons.slice(0, this.maxVisibleIcons);\n }\n\n handleDropdownClicked = () => {\n this.pickerClicked.emit();\n };\n\n handleDropdownFocused = () => {\n this.pickerFocused.emit();\n };\n\n handleDropdownFocusedOut = () => {\n this.searchTerm = '';\n this.pickerFocusedOut.emit();\n };\n\n handleSearchChange = (event: CustomEvent<string>) => {\n this.searchTerm = event.detail ?? '';\n };\n\n handleSelectIcon = (icon: SulaIconPickerIcon) => {\n if (this.disabled) return;\n\n this.selectedIcon = icon;\n this.value = icon.className;\n this.searchTerm = '';\n this.iconSelected.emit(icon);\n\n if (this.dropdownEl) {\n this.dropdownEl.showContent = false;\n }\n };\n\n handleContentClick = (event: MouseEvent) => {\n event.stopPropagation();\n };\n\n render() {\n const filteredIcons = this.filterIcons();\n const dropdownValue = this.selectedIcon\n ? { id: this.selectedIcon.className, title: this.selectedIcon.name, icon: this.selectedIcon.className }\n : undefined;\n const dropdownLabel = this.required && this.label ? `${this.label} *` : this.label;\n\n return (\n <Host>\n <div class=\"relative\">\n <sula-dropdown\n ref={el => (this.dropdownEl = el)}\n label={dropdownLabel}\n disabled={this.disabled}\n hasError={!!this.error}\n customContent={true}\n contentMaxHeight={this.menuMaxHeight}\n value={dropdownValue}\n onDropdownClicked={this.handleDropdownClicked}\n onDropdownFocused={this.handleDropdownFocused}\n onDropdownFocusedOut={this.handleDropdownFocusedOut}\n >\n {this.showSearch && (\n <div class=\"border-b border-line-general bg-surface-body p-16\" onClick={this.handleContentClick}>\n <sula-search-bar value={this.searchTerm} placeholder={this.searchPlaceholder} onValueChanged={this.handleSearchChange}></sula-search-bar>\n </div>\n )}\n\n <div class=\"overflow-y-auto\" role=\"listbox\" onClick={this.handleContentClick}>\n {filteredIcons.length > 0 ? (\n <div class=\"grid gap-12 p-16\" style={{ gridTemplateColumns: 'repeat(auto-fill, minmax(56px, 56px))' }}>\n {filteredIcons.map(icon => (\n <button\n key={icon.name}\n type=\"button\"\n onClick={() => this.handleSelectIcon(icon)}\n class={{\n 'flex h-56 w-56 items-center justify-center rounded-sm border-2 border-line-general transition-all hover:border-brand-primary hover:bg-surface-on-body-brand': true,\n 'border-brand-primary bg-surface-on-body-brand': this.selectedIcon?.name === icon.name,\n }}\n aria-label={`Selecionar ícone ${icon.name}`}\n aria-selected={this.selectedIcon?.name === icon.name ? 'true' : 'false'}\n role=\"option\"\n >\n <sula-icon\n icon={icon.className}\n customClass={`text-2xl ${this.selectedIcon?.name === icon.name ? 'text-brand-primary' : 'text-icon-primary'}`}\n ></sula-icon>\n </button>\n ))}\n </div>\n ) : (\n <div class=\"p-32 text-center\">\n <span class=\"text-base-paragraph-medium-regular text-text-tertiary\">Nenhum ícone encontrado</span>\n </div>\n )}\n </div>\n </sula-dropdown>\n\n {this.error && (\n <span class=\"text-base-label-small-regular text-feedback-error mt-8 block\" role=\"alert\">\n {this.error}\n </span>\n )}\n </div>\n </Host>\n );\n }\n}\n","(typeof document !== \"undefined\") && (typeof navigator !== \"undefined\") && (function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lottie = factory());\n})(this, (function () { 'use strict';\n\n var svgNS = 'http://www.w3.org/2000/svg';\n var locationHref = '';\n var _useWebWorker = false;\n var initialDefaultFrame = -999999;\n var setWebWorker = function setWebWorker(flag) {\n _useWebWorker = !!flag;\n };\n var getWebWorker = function getWebWorker() {\n return _useWebWorker;\n };\n var setLocationHref = function setLocationHref(value) {\n locationHref = value;\n };\n var getLocationHref = function getLocationHref() {\n return locationHref;\n };\n\n function createTag(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElement(type);\n }\n\n function extendPrototype(sources, destination) {\n var i;\n var len = sources.length;\n var sourcePrototype;\n for (i = 0; i < len; i += 1) {\n sourcePrototype = sources[i].prototype;\n for (var attr in sourcePrototype) {\n if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n }\n }\n }\n function getDescriptor(object, prop) {\n return Object.getOwnPropertyDescriptor(object, prop);\n }\n function createProxyFunction(prototype) {\n function ProxyFunction() {}\n ProxyFunction.prototype = prototype;\n return ProxyFunction;\n }\n\n // import Howl from '../../3rd_party/howler';\n\n var audioControllerFactory = function () {\n function AudioController(audioFactory) {\n this.audios = [];\n this.audioFactory = audioFactory;\n this._volume = 1;\n this._isMuted = false;\n }\n AudioController.prototype = {\n addAudio: function addAudio(audio) {\n this.audios.push(audio);\n },\n pause: function pause() {\n var i;\n var len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].pause();\n }\n },\n resume: function resume() {\n var i;\n var len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].resume();\n }\n },\n setRate: function setRate(rateValue) {\n var i;\n var len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].setRate(rateValue);\n }\n },\n createAudio: function createAudio(assetPath) {\n if (this.audioFactory) {\n return this.audioFactory(assetPath);\n }\n if (window.Howl) {\n return new window.Howl({\n src: [assetPath]\n });\n }\n return {\n isPlaying: false,\n play: function play() {\n this.isPlaying = true;\n },\n seek: function seek() {\n this.isPlaying = false;\n },\n playing: function playing() {},\n rate: function rate() {},\n setVolume: function setVolume() {}\n };\n },\n setAudioFactory: function setAudioFactory(audioFactory) {\n this.audioFactory = audioFactory;\n },\n setVolume: function setVolume(value) {\n this._volume = value;\n this._updateVolume();\n },\n mute: function mute() {\n this._isMuted = true;\n this._updateVolume();\n },\n unmute: function unmute() {\n this._isMuted = false;\n this._updateVolume();\n },\n getVolume: function getVolume() {\n return this._volume;\n },\n _updateVolume: function _updateVolume() {\n var i;\n var len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n }\n }\n };\n return function () {\n return new AudioController();\n };\n }();\n\n var createTypedArray = function () {\n function createRegularArray(type, len) {\n var i = 0;\n var arr = [];\n var value;\n switch (type) {\n case 'int16':\n case 'uint8c':\n value = 1;\n break;\n default:\n value = 1.1;\n break;\n }\n for (i = 0; i < len; i += 1) {\n arr.push(value);\n }\n return arr;\n }\n function createTypedArrayFactory(type, len) {\n if (type === 'float32') {\n return new Float32Array(len);\n }\n if (type === 'int16') {\n return new Int16Array(len);\n }\n if (type === 'uint8c') {\n return new Uint8ClampedArray(len);\n }\n return createRegularArray(type, len);\n }\n if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n return createTypedArrayFactory;\n }\n return createRegularArray;\n }();\n function createSizedArray(len) {\n return Array.apply(null, {\n length: len\n });\n }\n\n function _typeof$6(o) { \"@babel/helpers - typeof\"; return _typeof$6 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof$6(o); }\n var subframeEnabled = true;\n var expressionsPlugin = null;\n var expressionsInterfaces = null;\n var idPrefix$1 = '';\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n var _shouldRoundValues = false;\n var bmPow = Math.pow;\n var bmSqrt = Math.sqrt;\n var bmFloor = Math.floor;\n var bmMax = Math.max;\n var bmMin = Math.min;\n var BMMath = {};\n (function () {\n var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\n var i;\n var len = propertyNames.length;\n for (i = 0; i < len; i += 1) {\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\n }\n })();\n function ProjectInterface$1() {\n return {};\n }\n BMMath.random = Math.random;\n BMMath.abs = function (val) {\n var tOfVal = _typeof$6(val);\n if (tOfVal === 'object' && val.length) {\n var absArr = createSizedArray(val.length);\n var i;\n var len = val.length;\n for (i = 0; i < len; i += 1) {\n absArr[i] = Math.abs(val[i]);\n }\n return absArr;\n }\n return Math.abs(val);\n };\n var defaultCurveSegments = 150;\n var degToRads = Math.PI / 180;\n var roundCorner = 0.5519;\n function roundValues(flag) {\n _shouldRoundValues = !!flag;\n }\n function bmRnd(value) {\n if (_shouldRoundValues) {\n return Math.round(value);\n }\n return value;\n }\n function styleDiv(element) {\n element.style.position = 'absolute';\n element.style.top = 0;\n element.style.left = 0;\n element.style.display = 'block';\n element.style.transformOrigin = '0 0';\n element.style.webkitTransformOrigin = '0 0';\n element.style.backfaceVisibility = 'visible';\n element.style.webkitBackfaceVisibility = 'visible';\n element.style.transformStyle = 'preserve-3d';\n element.style.webkitTransformStyle = 'preserve-3d';\n element.style.mozTransformStyle = 'preserve-3d';\n }\n function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n this.type = type;\n this.currentTime = currentTime;\n this.totalTime = totalTime;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n function BMCompleteEvent(type, frameMultiplier) {\n this.type = type;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n this.type = type;\n this.currentLoop = currentLoop;\n this.totalLoops = totalLoops;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n this.type = type;\n this.firstFrame = firstFrame;\n this.totalFrames = totalFrames;\n }\n function BMDestroyEvent(type, target) {\n this.type = type;\n this.target = target;\n }\n function BMRenderFrameErrorEvent(nativeError, currentTime) {\n this.type = 'renderFrameError';\n this.nativeError = nativeError;\n this.currentTime = currentTime;\n }\n function BMConfigErrorEvent(nativeError) {\n this.type = 'configError';\n this.nativeError = nativeError;\n }\n function BMAnimationConfigErrorEvent(type, nativeError) {\n this.type = type;\n this.nativeError = nativeError;\n }\n var createElementID = function () {\n var _count = 0;\n return function createID() {\n _count += 1;\n return idPrefix$1 + '__lottie_element_' + _count;\n };\n }();\n function HSVtoRGB(h, s, v) {\n var r;\n var g;\n var b;\n var i;\n var f;\n var p;\n var q;\n var t;\n i = Math.floor(h * 6);\n f = h * 6 - i;\n p = v * (1 - s);\n q = v * (1 - f * s);\n t = v * (1 - (1 - f) * s);\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n default:\n break;\n }\n return [r, g, b];\n }\n function RGBtoHSV(r, g, b) {\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var d = max - min;\n var h;\n var s = max === 0 ? 0 : d / max;\n var v = max / 255;\n switch (max) {\n case min:\n h = 0;\n break;\n case r:\n h = g - b + d * (g < b ? 6 : 0);\n h /= 6 * d;\n break;\n case g:\n h = b - r + d * 2;\n h /= 6 * d;\n break;\n case b:\n h = r - g + d * 4;\n h /= 6 * d;\n break;\n default:\n break;\n }\n return [h, s, v];\n }\n function addSaturationToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[1] += offset;\n if (hsv[1] > 1) {\n hsv[1] = 1;\n } else if (hsv[1] <= 0) {\n hsv[1] = 0;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n function addBrightnessToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[2] += offset;\n if (hsv[2] > 1) {\n hsv[2] = 1;\n } else if (hsv[2] < 0) {\n hsv[2] = 0;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n function addHueToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[0] += offset / 360;\n if (hsv[0] > 1) {\n hsv[0] -= 1;\n } else if (hsv[0] < 0) {\n hsv[0] += 1;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n var rgbToHex = function () {\n var colorMap = [];\n var i;\n var hex;\n for (i = 0; i < 256; i += 1) {\n hex = i.toString(16);\n colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n }\n return function (r, g, b) {\n if (r < 0) {\n r = 0;\n }\n if (g < 0) {\n g = 0;\n }\n if (b < 0) {\n b = 0;\n }\n return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n };\n }();\n var setSubframeEnabled = function setSubframeEnabled(flag) {\n subframeEnabled = !!flag;\n };\n var getSubframeEnabled = function getSubframeEnabled() {\n return subframeEnabled;\n };\n var setExpressionsPlugin = function setExpressionsPlugin(value) {\n expressionsPlugin = value;\n };\n var getExpressionsPlugin = function getExpressionsPlugin() {\n return expressionsPlugin;\n };\n var setExpressionInterfaces = function setExpressionInterfaces(value) {\n expressionsInterfaces = value;\n };\n var getExpressionInterfaces = function getExpressionInterfaces() {\n return expressionsInterfaces;\n };\n var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\n defaultCurveSegments = value;\n };\n var getDefaultCurveSegments = function getDefaultCurveSegments() {\n return defaultCurveSegments;\n };\n var setIdPrefix = function setIdPrefix(value) {\n idPrefix$1 = value;\n };\n var getIdPrefix = function getIdPrefix() {\n return idPrefix$1;\n };\n\n function createNS(type) {\n // return {appendChild:function(){},setAttribute:function(){},style:{}}\n return document.createElementNS(svgNS, type);\n }\n\n function _typeof$5(o) { \"@babel/helpers - typeof\"; return _typeof$5 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof$5(o); }\n var dataManager = function () {\n var _counterId = 1;\n var processes = [];\n var workerFn;\n var workerInstance;\n var workerProxy = {\n onmessage: function onmessage() {},\n postMessage: function postMessage(path) {\n workerFn({\n data: path\n });\n }\n };\n var _workerSelf = {\n postMessage: function postMessage(data) {\n workerProxy.onmessage({\n data: data\n });\n }\n };\n function createWorker(fn) {\n if (window.Worker && window.Blob && getWebWorker()) {\n var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {\n type: 'text/javascript'\n });\n // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n var url = URL.createObjectURL(blob);\n return new Worker(url);\n }\n workerFn = fn;\n return workerProxy;\n }\n function setupWorker() {\n if (!workerInstance) {\n workerInstance = createWorker(function workerStart(e) {\n function dataFunctionManager() {\n function completeLayers(layers, comps) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n if ('ks' in layerData && !layerData.completed) {\n layerData.completed = true;\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k);\n } else {\n kLen = maskProps[j].pt.k.length;\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n }\n if (maskProps[j].pt.k[k].e) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n }\n }\n }\n }\n }\n if (layerData.ty === 0) {\n layerData.layers = findCompLayers(layerData.refId, comps);\n completeLayers(layerData.layers, comps);\n } else if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n } else if (layerData.ty === 5) {\n completeText(layerData);\n }\n }\n }\n }\n function completeChars(chars, assets) {\n if (chars) {\n var i = 0;\n var len = chars.length;\n for (i = 0; i < len; i += 1) {\n if (chars[i].t === 1) {\n // var compData = findComp(chars[i].data.refId, assets);\n chars[i].data.layers = findCompLayers(chars[i].data.refId, assets);\n // chars[i].data.ip = 0;\n // chars[i].data.op = 99999;\n // chars[i].data.st = 0;\n // chars[i].data.sr = 1;\n // chars[i].w = compData.w;\n // chars[i].data.ks = {\n // a: { k: [0, 0, 0], a: 0 },\n // p: { k: [0, -compData.h, 0], a: 0 },\n // r: { k: 0, a: 0 },\n // s: { k: [100, 100], a: 0 },\n // o: { k: 100, a: 0 },\n // };\n completeLayers(chars[i].data.layers, assets);\n }\n }\n }\n }\n function findComp(id, comps) {\n var i = 0;\n var len = comps.length;\n while (i < len) {\n if (comps[i].id === id) {\n return comps[i];\n }\n i += 1;\n }\n return null;\n }\n function findCompLayers(id, comps) {\n var comp = findComp(id, comps);\n if (comp) {\n if (!comp.layers.__used) {\n comp.layers.__used = true;\n return comp.layers;\n }\n return JSON.parse(JSON.stringify(comp.layers));\n }\n return null;\n }\n function completeShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n convertPathsToAbsoluteValues(arr[i].ks.k);\n } else {\n jLen = arr[i].ks.k.length;\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n }\n if (arr[i].ks.k[j].e) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeShapes(arr[i].it);\n }\n }\n }\n function convertPathsToAbsoluteValues(path) {\n var i;\n var len = path.i.length;\n for (i = 0; i < len; i += 1) {\n path.i[i][0] += path.v[i][0];\n path.i[i][1] += path.v[i][1];\n path.o[i][0] += path.v[i][0];\n path.o[i][1] += path.v[i][1];\n }\n }\n function checkVersion(minimum, animVersionString) {\n var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n if (minimum[0] > animVersion[0]) {\n return true;\n }\n if (animVersion[0] > minimum[0]) {\n return false;\n }\n if (minimum[1] > animVersion[1]) {\n return true;\n }\n if (animVersion[1] > minimum[1]) {\n return false;\n }\n if (minimum[2] > animVersion[2]) {\n return true;\n }\n if (animVersion[2] > minimum[2]) {\n return false;\n }\n return null;\n }\n var checkText = function () {\n var minimumVersion = [4, 4, 14];\n function updateTextLayer(textLayer) {\n var documentData = textLayer.t.d;\n textLayer.t.d = {\n k: [{\n s: documentData,\n t: 0\n }]\n };\n }\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n var checkChars = function () {\n var minimumVersion = [4, 7, 99];\n return function (animationData) {\n if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n var i;\n var len = animationData.chars.length;\n for (i = 0; i < len; i += 1) {\n var charData = animationData.chars[i];\n if (charData.data && charData.data.shapes) {\n completeShapes(charData.data.shapes);\n charData.data.ip = 0;\n charData.data.op = 99999;\n charData.data.st = 0;\n charData.data.sr = 1;\n charData.data.ks = {\n p: {\n k: [0, 0],\n a: 0\n },\n s: {\n k: [100, 100],\n a: 0\n },\n a: {\n k: [0, 0],\n a: 0\n },\n r: {\n k: 0,\n a: 0\n },\n o: {\n k: 100,\n a: 0\n }\n };\n if (!animationData.chars[i].t) {\n charData.data.shapes.push({\n ty: 'no'\n });\n charData.data.shapes[0].it.push({\n p: {\n k: [0, 0],\n a: 0\n },\n s: {\n k: [100, 100],\n a: 0\n },\n a: {\n k: [0, 0],\n a: 0\n },\n r: {\n k: 0,\n a: 0\n },\n o: {\n k: 100,\n a: 0\n },\n sk: {\n k: 0,\n a: 0\n },\n sa: {\n k: 0,\n a: 0\n },\n ty: 'tr'\n });\n }\n }\n }\n }\n };\n }();\n var checkPathProperties = function () {\n var minimumVersion = [5, 7, 15];\n function updateTextLayer(textLayer) {\n var pathData = textLayer.t.p;\n if (typeof pathData.a === 'number') {\n pathData.a = {\n a: 0,\n k: pathData.a\n };\n }\n if (typeof pathData.p === 'number') {\n pathData.p = {\n a: 0,\n k: pathData.p\n };\n }\n if (typeof pathData.r === 'number') {\n pathData.r = {\n a: 0,\n k: pathData.r\n };\n }\n }\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n var checkColors = function () {\n var minimumVersion = [4, 1, 9];\n function iterateShapes(shapes) {\n var i;\n var len = shapes.length;\n var j;\n var jLen;\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n iterateShapes(shapes[i].it);\n } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n if (shapes[i].c.k && shapes[i].c.k[0].i) {\n jLen = shapes[i].c.k.length;\n for (j = 0; j < jLen; j += 1) {\n if (shapes[i].c.k[j].s) {\n shapes[i].c.k[j].s[0] /= 255;\n shapes[i].c.k[j].s[1] /= 255;\n shapes[i].c.k[j].s[2] /= 255;\n shapes[i].c.k[j].s[3] /= 255;\n }\n if (shapes[i].c.k[j].e) {\n shapes[i].c.k[j].e[0] /= 255;\n shapes[i].c.k[j].e[1] /= 255;\n shapes[i].c.k[j].e[2] /= 255;\n shapes[i].c.k[j].e[3] /= 255;\n }\n }\n } else {\n shapes[i].c.k[0] /= 255;\n shapes[i].c.k[1] /= 255;\n shapes[i].c.k[2] /= 255;\n shapes[i].c.k[3] /= 255;\n }\n }\n }\n }\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 4) {\n iterateShapes(layers[i].shapes);\n }\n }\n }\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n var checkShapes = function () {\n var minimumVersion = [4, 4, 18];\n function completeClosingShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === 'sh') {\n if (arr[i].ks.k.i) {\n arr[i].ks.k.c = arr[i].closed;\n } else {\n jLen = arr[i].ks.k.length;\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n arr[i].ks.k[j].s[0].c = arr[i].closed;\n }\n if (arr[i].ks.k[j].e) {\n arr[i].ks.k[j].e[0].c = arr[i].closed;\n }\n }\n }\n } else if (arr[i].ty === 'gr') {\n completeClosingShapes(arr[i].it);\n }\n }\n }\n function iterateLayers(layers) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n maskProps[j].pt.k.c = maskProps[j].cl;\n } else {\n kLen = maskProps[j].pt.k.length;\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n }\n if (maskProps[j].pt.k[k].e) {\n maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n }\n }\n }\n }\n }\n if (layerData.ty === 4) {\n completeClosingShapes(layerData.shapes);\n }\n }\n }\n return function (animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n function completeData(animationData) {\n if (animationData.__complete) {\n return;\n }\n checkColors(animationData);\n checkText(animationData);\n checkChars(animationData);\n checkPathProperties(animationData);\n checkShapes(animationData);\n completeLayers(animationData.layers, animationData.assets);\n completeChars(animationData.chars, animationData.assets);\n animationData.__complete = true;\n }\n function completeText(data) {\n if (data.t.a.length === 0 && !('m' in data.t.p)) {\n // data.singleShape = true;\n }\n }\n var moduleOb = {};\n moduleOb.completeData = completeData;\n moduleOb.checkColors = checkColors;\n moduleOb.checkChars = checkChars;\n moduleOb.checkPathProperties = checkPathProperties;\n moduleOb.checkShapes = checkShapes;\n moduleOb.completeLayers = completeLayers;\n return moduleOb;\n }\n if (!_workerSelf.dataManager) {\n _workerSelf.dataManager = dataFunctionManager();\n }\n if (!_workerSelf.assetLoader) {\n _workerSelf.assetLoader = function () {\n function formatResponse(xhr) {\n // using typeof doubles the time of execution of this method,\n // so if available, it's better to use the header to validate the type\n var contentTypeHeader = xhr.getResponseHeader('content-type');\n if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n return xhr.response;\n }\n if (xhr.response && _typeof$5(xhr.response) === 'object') {\n return xhr.response;\n }\n if (xhr.response && typeof xhr.response === 'string') {\n return JSON.parse(xhr.response);\n }\n if (xhr.responseText) {\n return JSON.parse(xhr.responseText);\n }\n return null;\n }\n function loadAsset(path, fullPath, callback, errorCallback) {\n var response;\n var xhr = new XMLHttpRequest();\n // set responseType after calling open or IE will break.\n try {\n // This crashes on Android WebView prior to KitKat\n xhr.responseType = 'json';\n } catch (err) {} // eslint-disable-line no-empty\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n response = formatResponse(xhr);\n callback(response);\n } else {\n try {\n response = formatResponse(xhr);\n callback(response);\n } catch (err) {\n if (errorCallback) {\n errorCallback(err);\n }\n }\n }\n }\n };\n try {\n // Hack to workaround banner validation\n xhr.open(['G', 'E', 'T'].join(''), path, true);\n } catch (error) {\n // Hack to workaround banner validation\n xhr.open(['G', 'E', 'T'].join(''), fullPath + '/' + path, true);\n }\n xhr.send();\n }\n return {\n load: loadAsset\n };\n }();\n }\n if (e.data.type === 'loadAnimation') {\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n _workerSelf.dataManager.completeData(data);\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success'\n });\n }, function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error'\n });\n });\n } else if (e.data.type === 'complete') {\n var animation = e.data.animation;\n _workerSelf.dataManager.completeData(animation);\n _workerSelf.postMessage({\n id: e.data.id,\n payload: animation,\n status: 'success'\n });\n } else if (e.data.type === 'loadData') {\n _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: 'success'\n });\n }, function () {\n _workerSelf.postMessage({\n id: e.data.id,\n status: 'error'\n });\n });\n }\n });\n workerInstance.onmessage = function (event) {\n var data = event.data;\n var id = data.id;\n var process = processes[id];\n processes[id] = null;\n if (data.status === 'success') {\n process.onComplete(data.payload);\n } else if (process.onError) {\n process.onError();\n }\n };\n }\n }\n function createProcess(onComplete, onError) {\n _counterId += 1;\n var id = 'processId_' + _counterId;\n processes[id] = {\n onComplete: onComplete,\n onError: onError\n };\n return id;\n }\n function loadAnimation(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadAnimation',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n function loadData(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'loadData',\n path: path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n function completeAnimation(anim, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: 'complete',\n animation: anim,\n id: processId\n });\n }\n return {\n loadAnimation: loadAnimation,\n loadData: loadData,\n completeAnimation: completeAnimation\n };\n }();\n\n var ImagePreloader = function () {\n var proxyImage = function () {\n var canvas = createTag('canvas');\n canvas.width = 1;\n canvas.height = 1;\n var ctx = canvas.getContext('2d');\n ctx.fillStyle = 'rgba(0,0,0,0)';\n ctx.fillRect(0, 0, 1, 1);\n return canvas;\n }();\n function imageLoaded() {\n this.loadedAssets += 1;\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n function footageLoaded() {\n this.loadedFootagesCount += 1;\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n function getAssetsPath(assetData, assetsPath, originalPath) {\n var path = '';\n if (assetData.e) {\n path = assetData.p;\n } else if (assetsPath) {\n var imagePath = assetData.p;\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n path = assetsPath + imagePath;\n } else {\n path = originalPath;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n return path;\n }\n function testImageLoaded(img) {\n var _count = 0;\n var intervalId = setInterval(function () {\n var box = img.getBBox();\n if (box.width || _count > 500) {\n this._imageLoaded();\n clearInterval(intervalId);\n }\n _count += 1;\n }.bind(this), 50);\n }\n function createImageData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createNS('image');\n if (isSafari) {\n this.testImageLoaded(img);\n } else {\n img.addEventListener('load', this._imageLoaded, false);\n }\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n this._imageLoaded();\n }.bind(this), false);\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n if (this._elementHelper.append) {\n this._elementHelper.append(img);\n } else {\n this._elementHelper.appendChild(img);\n }\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n function createImgData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createTag('img');\n img.crossOrigin = 'anonymous';\n img.addEventListener('load', this._imageLoaded, false);\n img.addEventListener('error', function () {\n ob.img = proxyImage;\n this._imageLoaded();\n }.bind(this), false);\n img.src = path;\n var ob = {\n img: img,\n assetData: assetData\n };\n return ob;\n }\n function createFootageData(data) {\n var ob = {\n assetData: data\n };\n var path = getAssetsPath(data, this.assetsPath, this.path);\n dataManager.loadData(path, function (footageData) {\n ob.img = footageData;\n this._footageLoaded();\n }.bind(this), function () {\n ob.img = {};\n this._footageLoaded();\n }.bind(this));\n return ob;\n }\n function loadAssets(assets, cb) {\n this.imagesLoadedCb = cb;\n var i;\n var len = assets.length;\n for (i = 0; i < len; i += 1) {\n if (!assets[i].layers) {\n if (!assets[i].t || assets[i].t === 'seq') {\n this.totalImages += 1;\n this.images.push(this._createImageData(assets[i]));\n } else if (assets[i].t === 3) {\n this.totalFootages += 1;\n this.images.push(this.createFootageData(assets[i]));\n }\n }\n }\n }\n function setPath(path) {\n this.path = path || '';\n }\n function setAssetsPath(path) {\n this.assetsPath = path || '';\n }\n function getAsset(assetData) {\n var i = 0;\n var len = this.images.length;\n while (i < len) {\n if (this.images[i].assetData === assetData) {\n return this.images[i].img;\n }\n i += 1;\n }\n return null;\n }\n function destroy() {\n this.imagesLoadedCb = null;\n this.images.length = 0;\n }\n function loadedImages() {\n return this.totalImages === this.loadedAssets;\n }\n function loadedFootages() {\n return this.totalFootages === this.loadedFootagesCount;\n }\n function setCacheType(type, elementHelper) {\n if (type === 'svg') {\n this._elementHelper = elementHelper;\n this._createImageData = this.createImageData.bind(this);\n } else {\n this._createImageData = this.createImgData.bind(this);\n }\n }\n function ImagePreloaderFactory() {\n this._imageLoaded = imageLoaded.bind(this);\n this._footageLoaded = footageLoaded.bind(this);\n this.testImageLoaded = testImageLoaded.bind(this);\n this.createFootageData = createFootageData.bind(this);\n this.assetsPath = '';\n this.path = '';\n this.totalImages = 0;\n this.totalFootages = 0;\n this.loadedAssets = 0;\n this.loadedFootagesCount = 0;\n this.imagesLoadedCb = null;\n this.images = [];\n }\n ImagePreloaderFactory.prototype = {\n loadAssets: loadAssets,\n setAssetsPath: setAssetsPath,\n setPath: setPath,\n loadedImages: loadedImages,\n loadedFootages: loadedFootages,\n destroy: destroy,\n getAsset: getAsset,\n createImgData: createImgData,\n createImageData: createImageData,\n imageLoaded: imageLoaded,\n footageLoaded: footageLoaded,\n setCacheType: setCacheType\n };\n return ImagePreloaderFactory;\n }();\n\n function BaseEvent() {}\n BaseEvent.prototype = {\n triggerEvent: function triggerEvent(eventName, args) {\n if (this._cbs[eventName]) {\n var callbacks = this._cbs[eventName];\n for (var i = 0; i < callbacks.length; i += 1) {\n callbacks[i](args);\n }\n }\n },\n addEventListener: function addEventListener(eventName, callback) {\n if (!this._cbs[eventName]) {\n this._cbs[eventName] = [];\n }\n this._cbs[eventName].push(callback);\n return function () {\n this.removeEventListener(eventName, callback);\n }.bind(this);\n },\n removeEventListener: function removeEventListener(eventName, callback) {\n if (!callback) {\n this._cbs[eventName] = null;\n } else if (this._cbs[eventName]) {\n var i = 0;\n var len = this._cbs[eventName].length;\n while (i < len) {\n if (this._cbs[eventName][i] === callback) {\n this._cbs[eventName].splice(i, 1);\n i -= 1;\n len -= 1;\n }\n i += 1;\n }\n if (!this._cbs[eventName].length) {\n this._cbs[eventName] = null;\n }\n }\n }\n };\n\n var markerParser = function () {\n function parsePayloadLines(payload) {\n var lines = payload.split('\\r\\n');\n var keys = {};\n var line;\n var keysCount = 0;\n for (var i = 0; i < lines.length; i += 1) {\n line = lines[i].split(':');\n if (line.length === 2) {\n keys[line[0]] = line[1].trim();\n keysCount += 1;\n }\n }\n if (keysCount === 0) {\n throw new Error();\n }\n return keys;\n }\n return function (_markers) {\n var markers = [];\n for (var i = 0; i < _markers.length; i += 1) {\n var _marker = _markers[i];\n var markerData = {\n time: _marker.tm,\n duration: _marker.dr\n };\n try {\n markerData.payload = JSON.parse(_markers[i].cm);\n } catch (_) {\n try {\n markerData.payload = parsePayloadLines(_markers[i].cm);\n } catch (__) {\n markerData.payload = {\n name: _markers[i].cm\n };\n }\n }\n markers.push(markerData);\n }\n return markers;\n };\n }();\n\n var ProjectInterface = function () {\n function registerComposition(comp) {\n this.compositions.push(comp);\n }\n return function () {\n function _thisProjectFunction(name) {\n var i = 0;\n var len = this.compositions.length;\n while (i < len) {\n if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n this.compositions[i].prepareFrame(this.currentFrame);\n }\n return this.compositions[i].compInterface;\n }\n i += 1;\n }\n return null;\n }\n _thisProjectFunction.compositions = [];\n _thisProjectFunction.currentFrame = 0;\n _thisProjectFunction.registerComposition = registerComposition;\n return _thisProjectFunction;\n };\n }();\n\n var renderers = {};\n var registerRenderer = function registerRenderer(key, value) {\n renderers[key] = value;\n };\n function getRenderer(key) {\n return renderers[key];\n }\n function getRegisteredRenderer() {\n // Returns canvas by default for compatibility\n if (renderers.canvas) {\n return 'canvas';\n }\n // Returns any renderer that is registered\n for (var key in renderers) {\n if (renderers[key]) {\n return key;\n }\n }\n return '';\n }\n\n function _typeof$4(o) { \"@babel/helpers - typeof\"; return _typeof$4 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof$4(o); }\n var AnimationItem = function AnimationItem() {\n this._cbs = [];\n this.name = '';\n this.path = '';\n this.isLoaded = false;\n this.currentFrame = 0;\n this.currentRawFrame = 0;\n this.firstFrame = 0;\n this.totalFrames = 0;\n this.frameRate = 0;\n this.frameMult = 0;\n this.playSpeed = 1;\n this.playDirection = 1;\n this.playCount = 0;\n this.animationData = {};\n this.assets = [];\n this.isPaused = true;\n this.autoplay = false;\n this.loop = true;\n this.renderer = null;\n this.animationID = createElementID();\n this.assetsPath = '';\n this.timeCompleted = 0;\n this.segmentPos = 0;\n this.isSubframeEnabled = getSubframeEnabled();\n this.segments = [];\n this._idle = true;\n this._completedLoop = false;\n this.projectInterface = ProjectInterface();\n this.imagePreloader = new ImagePreloader();\n this.audioController = audioControllerFactory();\n this.markers = [];\n this.configAnimation = this.configAnimation.bind(this);\n this.onSetupError = this.onSetupError.bind(this);\n this.onSegmentComplete = this.onSegmentComplete.bind(this);\n this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\n this.expressionsPlugin = getExpressionsPlugin();\n };\n extendPrototype([BaseEvent], AnimationItem);\n AnimationItem.prototype.setParams = function (params) {\n if (params.wrapper || params.container) {\n this.wrapper = params.wrapper || params.container;\n }\n var animType = 'svg';\n if (params.animType) {\n animType = params.animType;\n } else if (params.renderer) {\n animType = params.renderer;\n }\n var RendererClass = getRenderer(animType);\n this.renderer = new RendererClass(this, params.rendererSettings);\n this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n this.renderer.setProjectInterface(this.projectInterface);\n this.animType = animType;\n if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\n this.loop = true;\n } else if (params.loop === false) {\n this.loop = false;\n } else {\n this.loop = parseInt(params.loop, 10);\n }\n this.autoplay = 'autoplay' in params ? params.autoplay : true;\n this.name = params.name ? params.name : '';\n this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\n this.assetsPath = params.assetsPath;\n this.initialSegment = params.initialSegment;\n if (params.audioFactory) {\n this.audioController.setAudioFactory(params.audioFactory);\n }\n if (params.animationData) {\n this.setupAnimation(params.animationData);\n } else if (params.path) {\n if (params.path.lastIndexOf('\\\\') !== -1) {\n this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n } else {\n this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n }\n this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);\n }\n };\n AnimationItem.prototype.onSetupError = function () {\n this.trigger('data_failed');\n };\n AnimationItem.prototype.setupAnimation = function (data) {\n dataManager.completeAnimation(data, this.configAnimation);\n };\n AnimationItem.prototype.setData = function (wrapper, animationData) {\n if (animationData) {\n if (_typeof$4(animationData) !== 'object') {\n animationData = JSON.parse(animationData);\n }\n }\n var params = {\n wrapper: wrapper,\n animationData: animationData\n };\n var wrapperAttributes = wrapper.attributes;\n params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : getRegisteredRenderer() || 'canvas';\n var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n if (loop === 'false') {\n params.loop = false;\n } else if (loop === 'true') {\n params.loop = true;\n } else if (loop !== '') {\n params.loop = parseInt(loop, 10);\n }\n var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\n params.autoplay = autoplay !== 'false';\n params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\n if (prerender === 'false') {\n params.prerender = false;\n }\n if (!params.path) {\n this.trigger('destroy');\n } else {\n this.setParams(params);\n }\n };\n AnimationItem.prototype.includeLayers = function (data) {\n if (data.op > this.animationData.op) {\n this.animationData.op = data.op;\n this.totalFrames = Math.floor(data.op - this.animationData.ip);\n }\n var layers = this.animationData.layers;\n var i;\n var len = layers.length;\n var newLayers = data.layers;\n var j;\n var jLen = newLayers.length;\n for (j = 0; j < jLen; j += 1) {\n i = 0;\n while (i < len) {\n if (layers[i].id === newLayers[j].id) {\n layers[i] = newLayers[j];\n break;\n }\n i += 1;\n }\n }\n if (data.chars || data.fonts) {\n this.renderer.globalData.fontManager.addChars(data.chars);\n this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n }\n if (data.assets) {\n len = data.assets.length;\n for (i = 0; i < len; i += 1) {\n this.animationData.assets.push(data.assets[i]);\n }\n }\n this.animationData.__complete = false;\n dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n };\n AnimationItem.prototype.onSegmentComplete = function (data) {\n this.animationData = data;\n var expressionsPlugin = getExpressionsPlugin();\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n this.loadNextSegment();\n };\n AnimationItem.prototype.loadNextSegment = function () {\n var segments = this.animationData.segments;\n if (!segments || segments.length === 0 || !this.autoloadSegments) {\n this.trigger('data_ready');\n this.timeCompleted = this.totalFrames;\n return;\n }\n var segment = segments.shift();\n this.timeCompleted = segment.time * this.frameRate;\n var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n this.segmentPos += 1;\n dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n this.trigger('data_failed');\n }.bind(this));\n };\n AnimationItem.prototype.loadSegments = function () {\n var segments = this.animationData.segments;\n if (!segments) {\n this.timeCompleted = this.totalFrames;\n }\n this.loadNextSegment();\n };\n AnimationItem.prototype.imagesLoaded = function () {\n this.trigger('loaded_images');\n this.checkLoaded();\n };\n AnimationItem.prototype.preloadImages = function () {\n this.imagePreloader.setAssetsPath(this.assetsPath);\n this.imagePreloader.setPath(this.path);\n this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n };\n AnimationItem.prototype.configAnimation = function (animData) {\n if (!this.renderer) {\n return;\n }\n try {\n this.animationData = animData;\n if (this.initialSegment) {\n this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n this.firstFrame = Math.round(this.initialSegment[0]);\n } else {\n this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n this.firstFrame = Math.round(this.animationData.ip);\n }\n this.renderer.configAnimation(animData);\n if (!animData.assets) {\n animData.assets = [];\n }\n this.assets = this.animationData.assets;\n this.frameRate = this.animationData.fr;\n this.frameMult = this.animationData.fr / 1000;\n this.renderer.searchExtraCompositions(animData.assets);\n this.markers = markerParser(animData.markers || []);\n this.trigger('config_ready');\n this.preloadImages();\n this.loadSegments();\n this.updaFrameModifier();\n this.waitForFontsLoaded();\n if (this.isPaused) {\n this.audioController.pause();\n }\n } catch (error) {\n this.triggerConfigError(error);\n }\n };\n AnimationItem.prototype.waitForFontsLoaded = function () {\n if (!this.renderer) {\n return;\n }\n if (this.renderer.globalData.fontManager.isLoaded) {\n this.checkLoaded();\n } else {\n setTimeout(this.waitForFontsLoaded.bind(this), 20);\n }\n };\n AnimationItem.prototype.checkLoaded = function () {\n if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {\n this.isLoaded = true;\n var expressionsPlugin = getExpressionsPlugin();\n if (expressionsPlugin) {\n expressionsPlugin.initExpressions(this);\n }\n this.renderer.initItems();\n setTimeout(function () {\n this.trigger('DOMLoaded');\n }.bind(this), 0);\n this.gotoFrame();\n if (this.autoplay) {\n this.play();\n }\n }\n };\n AnimationItem.prototype.resize = function (width, height) {\n // Adding this validation for backwards compatibility in case an event object was being passed down\n var _width = typeof width === 'number' ? width : undefined;\n var _height = typeof height === 'number' ? height : undefined;\n this.renderer.updateContainerSize(_width, _height);\n };\n AnimationItem.prototype.setSubframe = function (flag) {\n this.isSubframeEnabled = !!flag;\n };\n AnimationItem.prototype.gotoFrame = function () {\n this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n this.currentFrame = this.timeCompleted;\n }\n this.trigger('enterFrame');\n this.renderFrame();\n this.trigger('drawnFrame');\n };\n AnimationItem.prototype.renderFrame = function () {\n if (this.isLoaded === false || !this.renderer) {\n return;\n }\n try {\n if (this.expressionsPlugin) {\n this.expressionsPlugin.resetFrame();\n }\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n } catch (error) {\n this.triggerRenderFrameError(error);\n }\n };\n AnimationItem.prototype.play = function (name) {\n if (name && this.name !== name) {\n return;\n }\n if (this.isPaused === true) {\n this.isPaused = false;\n this.trigger('_play');\n this.audioController.resume();\n if (this._idle) {\n this._idle = false;\n this.trigger('_active');\n }\n }\n };\n AnimationItem.prototype.pause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n if (this.isPaused === false) {\n this.isPaused = true;\n this.trigger('_pause');\n this._idle = true;\n this.trigger('_idle');\n this.audioController.pause();\n }\n };\n AnimationItem.prototype.togglePause = function (name) {\n if (name && this.name !== name) {\n return;\n }\n if (this.isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n };\n AnimationItem.prototype.stop = function (name) {\n if (name && this.name !== name) {\n return;\n }\n this.pause();\n this.playCount = 0;\n this._completedLoop = false;\n this.setCurrentRawFrameValue(0);\n };\n AnimationItem.prototype.getMarkerData = function (markerName) {\n var marker;\n for (var i = 0; i < this.markers.length; i += 1) {\n marker = this.markers[i];\n if (marker.payload && marker.payload.name === markerName) {\n return marker;\n }\n }\n return null;\n };\n AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n var numValue = Number(value);\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n if (marker) {\n this.goToAndStop(marker.time, true);\n }\n } else if (isFrame) {\n this.setCurrentRawFrameValue(value);\n } else {\n this.setCurrentRawFrameValue(value * this.frameModifier);\n }\n this.pause();\n };\n AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n var numValue = Number(value);\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n if (marker) {\n if (!marker.duration) {\n this.goToAndStop(marker.time, true);\n } else {\n this.playSegments([marker.time, marker.time + marker.duration], true);\n }\n }\n } else {\n this.goToAndStop(numValue, isFrame, name);\n }\n this.play();\n };\n AnimationItem.prototype.advanceTime = function (value) {\n if (this.isPaused === true || this.isLoaded === false) {\n return;\n }\n var nextValue = this.currentRawFrame + value * this.frameModifier;\n var _isComplete = false;\n // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n if (!this.loop || this.playCount === this.loop) {\n if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n _isComplete = true;\n nextValue = this.totalFrames - 1;\n }\n } else if (nextValue >= this.totalFrames) {\n this.playCount += 1;\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n this._completedLoop = true;\n this.trigger('loopComplete');\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n } else if (nextValue < 0) {\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n // eslint-disable-line no-plusplus\n this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n if (!this._completedLoop) {\n this._completedLoop = true;\n } else {\n this.trigger('loopComplete');\n }\n } else {\n _isComplete = true;\n nextValue = 0;\n }\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n if (_isComplete) {\n this.setCurrentRawFrameValue(nextValue);\n this.pause();\n this.trigger('complete');\n }\n };\n AnimationItem.prototype.adjustSegment = function (arr, offset) {\n this.playCount = 0;\n if (arr[1] < arr[0]) {\n if (this.frameModifier > 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(-1);\n }\n }\n this.totalFrames = arr[0] - arr[1];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[1];\n this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\n } else if (arr[1] > arr[0]) {\n if (this.frameModifier < 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(1);\n }\n }\n this.totalFrames = arr[1] - arr[0];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[0];\n this.setCurrentRawFrameValue(0.001 + offset);\n }\n this.trigger('segmentStart');\n };\n AnimationItem.prototype.setSegment = function (init, end) {\n var pendingFrame = -1;\n if (this.isPaused) {\n if (this.currentRawFrame + this.firstFrame < init) {\n pendingFrame = init;\n } else if (this.currentRawFrame + this.firstFrame > end) {\n pendingFrame = end - init;\n }\n }\n this.firstFrame = init;\n this.totalFrames = end - init;\n this.timeCompleted = this.totalFrames;\n if (pendingFrame !== -1) {\n this.goToAndStop(pendingFrame, true);\n }\n };\n AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n if (forceFlag) {\n this.segments.length = 0;\n }\n if (_typeof$4(arr[0]) === 'object') {\n var i;\n var len = arr.length;\n for (i = 0; i < len; i += 1) {\n this.segments.push(arr[i]);\n }\n } else {\n this.segments.push(arr);\n }\n if (this.segments.length && forceFlag) {\n this.adjustSegment(this.segments.shift(), 0);\n }\n if (this.isPaused) {\n this.play();\n }\n };\n AnimationItem.prototype.resetSegments = function (forceFlag) {\n this.segments.length = 0;\n this.segments.push([this.animationData.ip, this.animationData.op]);\n if (forceFlag) {\n this.checkSegments(0);\n }\n };\n AnimationItem.prototype.checkSegments = function (offset) {\n if (this.segments.length) {\n this.adjustSegment(this.segments.shift(), offset);\n return true;\n }\n return false;\n };\n AnimationItem.prototype.destroy = function (name) {\n if (name && this.name !== name || !this.renderer) {\n return;\n }\n this.renderer.destroy();\n this.imagePreloader.destroy();\n this.trigger('destroy');\n this._cbs = null;\n this.onEnterFrame = null;\n this.onLoopComplete = null;\n this.onComplete = null;\n this.onSegmentStart = null;\n this.onDestroy = null;\n this.renderer = null;\n this.expressionsPlugin = null;\n this.imagePreloader = null;\n this.projectInterface = null;\n };\n AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n this.currentRawFrame = value;\n this.gotoFrame();\n };\n AnimationItem.prototype.setSpeed = function (val) {\n this.playSpeed = val;\n this.updaFrameModifier();\n };\n AnimationItem.prototype.setDirection = function (val) {\n this.playDirection = val < 0 ? -1 : 1;\n this.updaFrameModifier();\n };\n AnimationItem.prototype.setLoop = function (isLooping) {\n this.loop = isLooping;\n };\n AnimationItem.prototype.setVolume = function (val, name) {\n if (name && this.name !== name) {\n return;\n }\n this.audioController.setVolume(val);\n };\n AnimationItem.prototype.getVolume = function () {\n return this.audioController.getVolume();\n };\n AnimationItem.prototype.mute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n this.audioController.mute();\n };\n AnimationItem.prototype.unmute = function (name) {\n if (name && this.name !== name) {\n return;\n }\n this.audioController.unmute();\n };\n AnimationItem.prototype.updaFrameModifier = function () {\n this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n this.audioController.setRate(this.playSpeed * this.playDirection);\n };\n AnimationItem.prototype.getPath = function () {\n return this.path;\n };\n AnimationItem.prototype.getAssetsPath = function (assetData) {\n var path = '';\n if (assetData.e) {\n path = assetData.p;\n } else if (this.assetsPath) {\n var imagePath = assetData.p;\n if (imagePath.indexOf('images/') !== -1) {\n imagePath = imagePath.split('/')[1];\n }\n path = this.assetsPath + imagePath;\n } else {\n path = this.path;\n path += assetData.u ? assetData.u : '';\n path += assetData.p;\n }\n return path;\n };\n AnimationItem.prototype.getAssetData = function (id) {\n var i = 0;\n var len = this.assets.length;\n while (i < len) {\n if (id === this.assets[i].id) {\n return this.assets[i];\n }\n i += 1;\n }\n return null;\n };\n AnimationItem.prototype.hide = function () {\n this.renderer.hide();\n };\n AnimationItem.prototype.show = function () {\n this.renderer.show();\n };\n AnimationItem.prototype.getDuration = function (isFrame) {\n return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n };\n AnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\n try {\n var element = this.renderer.getElementByPath(path);\n element.updateDocumentData(documentData, index);\n } catch (error) {\n // TODO: decide how to handle catch case\n }\n };\n AnimationItem.prototype.trigger = function (name) {\n if (this._cbs && this._cbs[name]) {\n switch (name) {\n case 'enterFrame':\n this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n break;\n case 'drawnFrame':\n this.drawnFrameEvent.currentTime = this.currentFrame;\n this.drawnFrameEvent.totalTime = this.totalFrames;\n this.drawnFrameEvent.direction = this.frameModifier;\n this.triggerEvent(name, this.drawnFrameEvent);\n break;\n case 'loopComplete':\n this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n break;\n case 'complete':\n this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n break;\n case 'segmentStart':\n this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n break;\n case 'destroy':\n this.triggerEvent(name, new BMDestroyEvent(name, this));\n break;\n default:\n this.triggerEvent(name);\n }\n }\n if (name === 'enterFrame' && this.onEnterFrame) {\n this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n }\n if (name === 'loopComplete' && this.onLoopComplete) {\n this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n }\n if (name === 'complete' && this.onComplete) {\n this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n }\n if (name === 'segmentStart' && this.onSegmentStart) {\n this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n }\n if (name === 'destroy' && this.onDestroy) {\n this.onDestroy.call(this, new BMDestroyEvent(name, this));\n }\n };\n AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n AnimationItem.prototype.triggerConfigError = function (nativeError) {\n var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent('error', error);\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n\n var animationManager = function () {\n var moduleOb = {};\n var registeredAnimations = [];\n var initTime = 0;\n var len = 0;\n var playingAnimationsNum = 0;\n var _stopped = true;\n var _isFrozen = false;\n function removeElement(ev) {\n var i = 0;\n var animItem = ev.target;\n while (i < len) {\n if (registeredAnimations[i].animation === animItem) {\n registeredAnimations.splice(i, 1);\n i -= 1;\n len -= 1;\n if (!animItem.isPaused) {\n subtractPlayingCount();\n }\n }\n i += 1;\n }\n }\n function registerAnimation(element, animationData) {\n if (!element) {\n return null;\n }\n var i = 0;\n while (i < len) {\n if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n return registeredAnimations[i].animation;\n }\n i += 1;\n }\n var animItem = new AnimationItem();\n setupAnimation(animItem, element);\n animItem.setData(element, animationData);\n return animItem;\n }\n function getRegisteredAnimations() {\n var i;\n var lenAnims = registeredAnimations.length;\n var animations = [];\n for (i = 0; i < lenAnims; i += 1) {\n animations.push(registeredAnimations[i].animation);\n }\n return animations;\n }\n function addPlayingCount() {\n playingAnimationsNum += 1;\n activate();\n }\n function subtractPlayingCount() {\n playingAnimationsNum -= 1;\n }\n function setupAnimation(animItem, element) {\n animItem.addEventListener('destroy', removeElement);\n animItem.addEventListener('_active', addPlayingCount);\n animItem.addEventListener('_idle', subtractPlayingCount);\n registeredAnimations.push({\n elem: element,\n animation: animItem\n });\n len += 1;\n }\n function loadAnimation(params) {\n var animItem = new AnimationItem();\n setupAnimation(animItem, null);\n animItem.setParams(params);\n return animItem;\n }\n function setSpeed(val, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setSpeed(val, animation);\n }\n }\n function setDirection(val, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setDirection(val, animation);\n }\n }\n function play(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.play(animation);\n }\n }\n function resume(nowTime) {\n var elapsedTime = nowTime - initTime;\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.advanceTime(elapsedTime);\n }\n initTime = nowTime;\n if (playingAnimationsNum && !_isFrozen) {\n window.requestAnimationFrame(resume);\n } else {\n _stopped = true;\n }\n }\n function first(nowTime) {\n initTime = nowTime;\n window.requestAnimationFrame(resume);\n }\n function pause(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.pause(animation);\n }\n }\n function goToAndStop(value, isFrame, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n }\n }\n function stop(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.stop(animation);\n }\n }\n function togglePause(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.togglePause(animation);\n }\n }\n function destroy(animation) {\n var i;\n for (i = len - 1; i >= 0; i -= 1) {\n registeredAnimations[i].animation.destroy(animation);\n }\n }\n function searchAnimations(animationData, standalone, renderer) {\n var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n var i;\n var lenAnims = animElements.length;\n for (i = 0; i < lenAnims; i += 1) {\n if (renderer) {\n animElements[i].setAttribute('data-bm-type', renderer);\n }\n registerAnimation(animElements[i], animationData);\n }\n if (standalone && lenAnims === 0) {\n if (!renderer) {\n renderer = 'svg';\n }\n var body = document.getElementsByTagName('body')[0];\n body.innerText = '';\n var div = createTag('div');\n div.style.width = '100%';\n div.style.height = '100%';\n div.setAttribute('data-bm-type', renderer);\n body.appendChild(div);\n registerAnimation(div, animationData);\n }\n }\n function resize() {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.resize();\n }\n }\n function activate() {\n if (!_isFrozen && playingAnimationsNum) {\n if (_stopped) {\n window.requestAnimationFrame(first);\n _stopped = false;\n }\n }\n }\n function freeze() {\n _isFrozen = true;\n }\n function unfreeze() {\n _isFrozen = false;\n activate();\n }\n function setVolume(val, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setVolume(val, animation);\n }\n }\n function mute(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.mute(animation);\n }\n }\n function unmute(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.unmute(animation);\n }\n }\n moduleOb.registerAnimation = registerAnimation;\n moduleOb.loadAnimation = loadAnimation;\n moduleOb.setSpeed = setSpeed;\n moduleOb.setDirection = setDirection;\n moduleOb.play = play;\n moduleOb.pause = pause;\n moduleOb.stop = stop;\n moduleOb.togglePause = togglePause;\n moduleOb.searchAnimations = searchAnimations;\n moduleOb.resize = resize;\n // moduleOb.start = start;\n moduleOb.goToAndStop = goToAndStop;\n moduleOb.destroy = destroy;\n moduleOb.freeze = freeze;\n moduleOb.unfreeze = unfreeze;\n moduleOb.setVolume = setVolume;\n moduleOb.mute = mute;\n moduleOb.unmute = unmute;\n moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n return moduleOb;\n }();\n\n /* eslint-disable */\n var BezierFactory = function () {\n /**\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n *\n * Credits: is based on Firefox's nsSMILKeySpline.cpp\n * Usage:\n * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\n * spline.get(x) => returns the easing value | x must be in [0, 1] range\n *\n */\n\n var ob = {};\n ob.getBezierEasing = getBezierEasing;\n var beziers = {};\n function getBezierEasing(a, b, c, d, nm) {\n var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n if (beziers[str]) {\n return beziers[str];\n }\n var bezEasing = new BezierEasing([a, b, c, d]);\n beziers[str] = bezEasing;\n return bezEasing;\n }\n\n // These values are established by empiricism with tests (tradeoff: performance VS precision)\n var NEWTON_ITERATIONS = 4;\n var NEWTON_MIN_SLOPE = 0.001;\n var SUBDIVISION_PRECISION = 0.0000001;\n var SUBDIVISION_MAX_ITERATIONS = 10;\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n var float32ArraySupported = typeof Float32Array === 'function';\n function A(aA1, aA2) {\n return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n }\n function B(aA1, aA2) {\n return 3.0 * aA2 - 6.0 * aA1;\n }\n function C(aA1) {\n return 3.0 * aA1;\n }\n\n // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n }\n\n // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n function getSlope(aT, aA1, aA2) {\n return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n }\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX,\n currentT,\n i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n }\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) return aGuessT;\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n }\n\n /**\n * points is an array of [ mX1, mY1, mX2, mY2 ]\n */\n function BezierEasing(points) {\n this._p = points;\n this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n this._precomputed = false;\n this.get = this.get.bind(this);\n }\n BezierEasing.prototype = {\n get: function get(x) {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n if (!this._precomputed) this._precompute();\n if (mX1 === mY1 && mX2 === mY2) return x; // linear\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) return 0;\n if (x === 1) return 1;\n return calcBezier(this._getTForX(x), mY1, mY2);\n },\n // Private part\n\n _precompute: function _precompute() {\n var mX1 = this._p[0],\n mY1 = this._p[1],\n mX2 = this._p[2],\n mY2 = this._p[3];\n this._precomputed = true;\n if (mX1 !== mY1 || mX2 !== mY2) {\n this._calcSampleValues();\n }\n },\n _calcSampleValues: function _calcSampleValues() {\n var mX1 = this._p[0],\n mX2 = this._p[2];\n for (var i = 0; i < kSplineTableSize; ++i) {\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n },\n /**\n * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\n */\n _getTForX: function _getTForX(aX) {\n var mX1 = this._p[0],\n mX2 = this._p[2],\n mSampleValues = this._mSampleValues;\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n }\n if (initialSlope === 0.0) {\n return guessForT;\n }\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n };\n return ob;\n }();\n\n var pooling = function () {\n function _double(arr) {\n return arr.concat(createSizedArray(arr.length));\n }\n return {\n \"double\": _double\n };\n }();\n\n var poolFactory = function () {\n return function (initialLength, _create, _release) {\n var _length = 0;\n var _maxLength = initialLength;\n var pool = createSizedArray(_maxLength);\n var ob = {\n newElement: newElement,\n release: release\n };\n function newElement() {\n var element;\n if (_length) {\n _length -= 1;\n element = pool[_length];\n } else {\n element = _create();\n }\n return element;\n }\n function release(element) {\n if (_length === _maxLength) {\n pool = pooling[\"double\"](pool);\n _maxLength *= 2;\n }\n if (_release) {\n _release(element);\n }\n pool[_length] = element;\n _length += 1;\n }\n return ob;\n };\n }();\n\n var bezierLengthPool = function () {\n function create() {\n return {\n addedLength: 0,\n percents: createTypedArray('float32', getDefaultCurveSegments()),\n lengths: createTypedArray('float32', getDefaultCurveSegments())\n };\n }\n return poolFactory(8, create);\n }();\n\n var segmentsLengthPool = function () {\n function create() {\n return {\n lengths: [],\n totalLength: 0\n };\n }\n function release(element) {\n var i;\n var len = element.lengths.length;\n for (i = 0; i < len; i += 1) {\n bezierLengthPool.release(element.lengths[i]);\n }\n element.lengths.length = 0;\n }\n return poolFactory(8, create, release);\n }();\n\n function bezFunction() {\n var math = Math;\n function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n return det1 > -0.001 && det1 < 0.001;\n }\n function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n if (z1 === 0 && z2 === 0 && z3 === 0) {\n return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n }\n var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n var diffDist;\n if (dist1 > dist2) {\n if (dist1 > dist3) {\n diffDist = dist1 - dist2 - dist3;\n } else {\n diffDist = dist3 - dist2 - dist1;\n }\n } else if (dist3 > dist2) {\n diffDist = dist3 - dist2 - dist1;\n } else {\n diffDist = dist2 - dist1 - dist3;\n }\n return diffDist > -0.0001 && diffDist < 0.0001;\n }\n var getBezierLength = function () {\n return function (pt1, pt2, pt3, pt4) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point = [];\n var lastPoint = [];\n var lengthData = bezierLengthPool.newElement();\n len = pt3.length;\n for (k = 0; k < curveSegments; k += 1) {\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n if (lastPoint[i] !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n lastPoint[i] = point[i];\n }\n if (ptDistance) {\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n }\n lengthData.percents[k] = perc;\n lengthData.lengths[k] = addedLength;\n }\n lengthData.addedLength = addedLength;\n return lengthData;\n };\n }();\n function getSegmentsLength(shapeData) {\n var segmentsLength = segmentsLengthPool.newElement();\n var closed = shapeData.c;\n var pathV = shapeData.v;\n var pathO = shapeData.o;\n var pathI = shapeData.i;\n var i;\n var len = shapeData._length;\n var lengths = segmentsLength.lengths;\n var totalLength = 0;\n for (i = 0; i < len - 1; i += 1) {\n lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n totalLength += lengths[i].addedLength;\n }\n if (closed && len) {\n lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n totalLength += lengths[i].addedLength;\n }\n segmentsLength.totalLength = totalLength;\n return segmentsLength;\n }\n function BezierData(length) {\n this.segmentLength = 0;\n this.points = new Array(length);\n }\n function PointData(partial, point) {\n this.partialLength = partial;\n this.point = point;\n }\n var buildBezierData = function () {\n var storedData = {};\n return function (pt1, pt2, pt3, pt4) {\n var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n if (!storedData[bezierName]) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point;\n var lastPoint = null;\n if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n curveSegments = 2;\n }\n var bezierData = new BezierData(curveSegments);\n len = pt3.length;\n for (k = 0; k < curveSegments; k += 1) {\n point = createSizedArray(len);\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n if (lastPoint !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n }\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n bezierData.points[k] = new PointData(ptDistance, point);\n lastPoint = point;\n }\n bezierData.segmentLength = addedLength;\n storedData[bezierName] = bezierData;\n }\n return storedData[bezierName];\n };\n }();\n function getDistancePerc(perc, bezierData) {\n var percents = bezierData.percents;\n var lengths = bezierData.lengths;\n var len = percents.length;\n var initPos = bmFloor((len - 1) * perc);\n var lengthPos = perc * bezierData.addedLength;\n var lPerc = 0;\n if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n return percents[initPos];\n }\n var dir = lengths[initPos] > lengthPos ? -1 : 1;\n var flag = true;\n while (flag) {\n if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n flag = false;\n } else {\n initPos += dir;\n }\n if (initPos < 0 || initPos >= len - 1) {\n // FIX for TypedArrays that don't store floating point values with enough accuracy\n if (initPos === len - 1) {\n return percents[initPos];\n }\n flag = false;\n }\n }\n return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n }\n function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n var t1 = getDistancePerc(percent, bezierData);\n var u1 = 1 - t1;\n var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n return [ptX, ptY];\n }\n var bezierSegmentPoints = createTypedArray('float32', 8);\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n if (startPerc < 0) {\n startPerc = 0;\n } else if (startPerc > 1) {\n startPerc = 1;\n }\n var t0 = getDistancePerc(startPerc, bezierData);\n endPerc = endPerc > 1 ? 1 : endPerc;\n var t1 = getDistancePerc(endPerc, bezierData);\n var i;\n var len = pt1.length;\n var u0 = 1 - t0;\n var u1 = 1 - t1;\n var u0u0u0 = u0 * u0 * u0;\n var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\n var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\n var t0t0t0 = t0 * t0 * t0;\n //\n var u0u0u1 = u0 * u0 * u1;\n var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\n var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\n var t0t0t1 = t0 * t0 * t1;\n //\n var u0u1u1 = u0 * u1 * u1;\n var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\n var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\n var t0t1t1 = t0 * t1 * t1;\n //\n var u1u1u1 = u1 * u1 * u1;\n var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\n var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n var t1t1t1 = t1 * t1 * t1;\n for (i = 0; i < len; i += 1) {\n bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n }\n return bezierSegmentPoints;\n }\n return {\n getSegmentsLength: getSegmentsLength,\n getNewSegment: getNewSegment,\n getPointInSegment: getPointInSegment,\n buildBezierData: buildBezierData,\n pointOnLine2D: pointOnLine2D,\n pointOnLine3D: pointOnLine3D\n };\n }\n var bez = bezFunction();\n\n var initFrame = initialDefaultFrame;\n var mathAbs = Math.abs;\n function interpolateValue(frameNum, caching) {\n var offsetTime = this.offsetTime;\n var newValue;\n if (this.propType === 'multidimensional') {\n newValue = createTypedArray('float32', this.pv.length);\n }\n var iterationIndex = caching.lastIndex;\n var i = iterationIndex;\n var len = this.keyframes.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n while (flag) {\n keyData = this.keyframes[i];\n nextKeyData = this.keyframes[i + 1];\n if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n if (keyData.h) {\n keyData = nextKeyData;\n }\n iterationIndex = 0;\n break;\n }\n if (nextKeyData.t - offsetTime > frameNum) {\n iterationIndex = i;\n break;\n }\n if (i < len - 1) {\n i += 1;\n } else {\n iterationIndex = 0;\n flag = false;\n }\n }\n keyframeMetadata = this.keyframesMetadata[i] || {};\n var k;\n var kLen;\n var perc;\n var jLen;\n var j;\n var fnc;\n var nextKeyTime = nextKeyData.t - offsetTime;\n var keyTime = keyData.t - offsetTime;\n var endValue;\n if (keyData.to) {\n if (!keyframeMetadata.bezierData) {\n keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n }\n var bezierData = keyframeMetadata.bezierData;\n if (frameNum >= nextKeyTime || frameNum < keyTime) {\n var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n kLen = bezierData.points[ind].point.length;\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[ind].point[k];\n }\n // caching._lastKeyframeIndex = -1;\n } else {\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n keyframeMetadata.__fnct = fnc;\n }\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n var distanceInLine = bezierData.segmentLength * perc;\n var segmentPerc;\n var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n flag = true;\n jLen = bezierData.points.length;\n while (flag) {\n addedLength += bezierData.points[j].partialLength;\n if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n kLen = bezierData.points[j].point.length;\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k];\n }\n break;\n } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n kLen = bezierData.points[j].point.length;\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n }\n break;\n }\n if (j < jLen - 1) {\n j += 1;\n } else {\n flag = false;\n }\n }\n caching._lastPoint = j;\n caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n caching._lastKeyframeIndex = i;\n }\n } else {\n var outX;\n var outY;\n var inX;\n var inY;\n var keyValue;\n len = keyData.s.length;\n endValue = nextKeyData.s || keyData.e;\n if (this.sh && keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n newValue[0] = endValue[0];\n newValue[1] = endValue[1];\n newValue[2] = endValue[2];\n } else if (frameNum <= keyTime) {\n newValue[0] = keyData.s[0];\n newValue[1] = keyData.s[1];\n newValue[2] = keyData.s[2];\n } else {\n var quatStart = createQuaternion(keyData.s);\n var quatEnd = createQuaternion(endValue);\n var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n }\n } else {\n for (i = 0; i < len; i += 1) {\n if (keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n perc = 1;\n } else if (frameNum < keyTime) {\n perc = 0;\n } else {\n if (keyData.o.x.constructor === Array) {\n if (!keyframeMetadata.__fnct) {\n keyframeMetadata.__fnct = [];\n }\n if (!keyframeMetadata.__fnct[i]) {\n outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\n outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\n inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\n inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyframeMetadata.__fnct[i] = fnc;\n } else {\n fnc = keyframeMetadata.__fnct[i];\n }\n } else if (!keyframeMetadata.__fnct) {\n outX = keyData.o.x;\n outY = keyData.o.y;\n inX = keyData.i.x;\n inY = keyData.i.y;\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyData.keyframeMetadata = fnc;\n } else {\n fnc = keyframeMetadata.__fnct;\n }\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n }\n }\n endValue = nextKeyData.s || keyData.e;\n keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n if (this.propType === 'multidimensional') {\n newValue[i] = keyValue;\n } else {\n newValue = keyValue;\n }\n }\n }\n }\n caching.lastIndex = iterationIndex;\n return newValue;\n }\n\n // based on @Toji's https://github.com/toji/gl-matrix/\n function slerp(a, b, t) {\n var out = [];\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n var bx = b[0];\n var by = b[1];\n var bz = b[2];\n var bw = b[3];\n var omega;\n var cosom;\n var sinom;\n var scale0;\n var scale1;\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n if (cosom < 0.0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n if (1.0 - cosom > 0.000001) {\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1.0 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n scale0 = 1.0 - t;\n scale1 = t;\n }\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n }\n function quaternionToEuler(out, quat) {\n var qx = quat[0];\n var qy = quat[1];\n var qz = quat[2];\n var qw = quat[3];\n var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n out[0] = heading / degToRads;\n out[1] = attitude / degToRads;\n out[2] = bank / degToRads;\n }\n function createQuaternion(values) {\n var heading = values[0] * degToRads;\n var attitude = values[1] * degToRads;\n var bank = values[2] * degToRads;\n var c1 = Math.cos(heading / 2);\n var c2 = Math.cos(attitude / 2);\n var c3 = Math.cos(bank / 2);\n var s1 = Math.sin(heading / 2);\n var s2 = Math.sin(attitude / 2);\n var s3 = Math.sin(bank / 2);\n var w = c1 * c2 * c3 - s1 * s2 * s3;\n var x = s1 * s2 * c3 + c1 * c2 * s3;\n var y = s1 * c2 * c3 + c1 * s2 * s3;\n var z = c1 * s2 * c3 - s1 * c2 * s3;\n return [x, y, z, w];\n }\n function getValueAtCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n if (this._caching.lastFrame >= frameNum) {\n this._caching._lastKeyframeIndex = -1;\n this._caching.lastIndex = 0;\n }\n var renderResult = this.interpolateValue(frameNum, this._caching);\n this.pv = renderResult;\n }\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n function setVValue(val) {\n var multipliedValue;\n if (this.propType === 'unidimensional') {\n multipliedValue = val * this.mult;\n if (mathAbs(this.v - multipliedValue) > 0.00001) {\n this.v = multipliedValue;\n this._mdf = true;\n }\n } else {\n var i = 0;\n var len = this.v.length;\n while (i < len) {\n multipliedValue = val[i] * this.mult;\n if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n this.v[i] = multipliedValue;\n this._mdf = true;\n }\n i += 1;\n }\n }\n }\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n return;\n }\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n this.lock = true;\n this._mdf = this._isFirstFrame;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = this.kf ? this.pv : this.data.k;\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n this.setVValue(finalValue);\n this._isFirstFrame = false;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n function ValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.mult = mult || 1;\n this.data = data;\n this.v = mult ? data.k * mult : data.k;\n this.pv = data.k;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.vel = 0;\n this.effectsSequence = [];\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n function MultiDimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n this.mult = mult || 1;\n this.data = data;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.frameId = -1;\n var i;\n var len = data.k.length;\n this.v = createTypedArray('float32', len);\n this.pv = createTypedArray('float32', len);\n this.vel = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n this.v[i] = data.k[i] * this.mult;\n this.pv[i] = data.k[i];\n }\n this._isFirstFrame = true;\n this.effectsSequence = [];\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n function KeyframedValueProperty(elem, data, mult, container) {\n this.propType = 'unidimensional';\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.frameId = -1;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: 0,\n _lastKeyframeIndex: -1\n };\n this.k = true;\n this.kf = true;\n this.data = data;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.v = initFrame;\n this.pv = initFrame;\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.addEffect = addEffect;\n }\n function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n this.propType = 'multidimensional';\n var i;\n var len = data.k.length;\n var s;\n var e;\n var to;\n var ti;\n for (i = 0; i < len - 1; i += 1) {\n if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n s = data.k[i].s;\n e = data.k[i + 1].s;\n to = data.k[i].to;\n ti = data.k[i].ti;\n if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n }\n }\n }\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.data = data;\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.k = true;\n this.kf = true;\n this._isFirstFrame = true;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.frameId = -1;\n var arrLen = data.k[0].s.length;\n this.v = createTypedArray('float32', arrLen);\n this.pv = createTypedArray('float32', arrLen);\n for (i = 0; i < arrLen; i += 1) {\n this.v[i] = initFrame;\n this.pv[i] = initFrame;\n }\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: createTypedArray('float32', arrLen)\n };\n this.addEffect = addEffect;\n }\n var PropertyFactory = function () {\n function getProp(elem, data, type, mult, container) {\n if (data.sid) {\n data = elem.globalData.slotManager.getProp(data);\n }\n var p;\n if (!data.k.length) {\n p = new ValueProperty(elem, data, mult, container);\n } else if (typeof data.k[0] === 'number') {\n p = new MultiDimensionalProperty(elem, data, mult, container);\n } else {\n switch (type) {\n case 0:\n p = new KeyframedValueProperty(elem, data, mult, container);\n break;\n case 1:\n p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n break;\n default:\n break;\n }\n }\n if (p.effectsSequence.length) {\n container.addDynamicProperty(p);\n }\n return p;\n }\n var ob = {\n getProp: getProp\n };\n return ob;\n }();\n\n function DynamicPropertyContainer() {}\n DynamicPropertyContainer.prototype = {\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n this.container.addDynamicProperty(this);\n this._isAnimated = true;\n }\n },\n iterateDynamicProperties: function iterateDynamicProperties() {\n this._mdf = false;\n var i;\n var len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n if (this.dynamicProperties[i]._mdf) {\n this._mdf = true;\n }\n }\n },\n initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n this.container = container;\n this.dynamicProperties = [];\n this._mdf = false;\n this._isAnimated = false;\n }\n };\n\n var pointPool = function () {\n function create() {\n return createTypedArray('float32', 2);\n }\n return poolFactory(8, create);\n }();\n\n function ShapePath() {\n this.c = false;\n this._length = 0;\n this._maxLength = 8;\n this.v = createSizedArray(this._maxLength);\n this.o = createSizedArray(this._maxLength);\n this.i = createSizedArray(this._maxLength);\n }\n ShapePath.prototype.setPathData = function (closed, len) {\n this.c = closed;\n this.setLength(len);\n var i = 0;\n while (i < len) {\n this.v[i] = pointPool.newElement();\n this.o[i] = pointPool.newElement();\n this.i[i] = pointPool.newElement();\n i += 1;\n }\n };\n ShapePath.prototype.setLength = function (len) {\n while (this._maxLength < len) {\n this.doubleArrayLength();\n }\n this._length = len;\n };\n ShapePath.prototype.doubleArrayLength = function () {\n this.v = this.v.concat(createSizedArray(this._maxLength));\n this.i = this.i.concat(createSizedArray(this._maxLength));\n this.o = this.o.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n };\n ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n var arr;\n this._length = Math.max(this._length, pos + 1);\n if (this._length >= this._maxLength) {\n this.doubleArrayLength();\n }\n switch (type) {\n case 'v':\n arr = this.v;\n break;\n case 'i':\n arr = this.i;\n break;\n case 'o':\n arr = this.o;\n break;\n default:\n arr = [];\n break;\n }\n if (!arr[pos] || arr[pos] && !replace) {\n arr[pos] = pointPool.newElement();\n }\n arr[pos][0] = x;\n arr[pos][1] = y;\n };\n ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n this.setXYAt(vX, vY, 'v', pos, replace);\n this.setXYAt(oX, oY, 'o', pos, replace);\n this.setXYAt(iX, iY, 'i', pos, replace);\n };\n ShapePath.prototype.reverse = function () {\n var newPath = new ShapePath();\n newPath.setPathData(this.c, this._length);\n var vertices = this.v;\n var outPoints = this.o;\n var inPoints = this.i;\n var init = 0;\n if (this.c) {\n newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n init = 1;\n }\n var cnt = this._length - 1;\n var len = this._length;\n var i;\n for (i = init; i < len; i += 1) {\n newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n cnt -= 1;\n }\n return newPath;\n };\n ShapePath.prototype.length = function () {\n return this._length;\n };\n\n var shapePool = function () {\n function create() {\n return new ShapePath();\n }\n function release(shapePath) {\n var len = shapePath._length;\n var i;\n for (i = 0; i < len; i += 1) {\n pointPool.release(shapePath.v[i]);\n pointPool.release(shapePath.i[i]);\n pointPool.release(shapePath.o[i]);\n shapePath.v[i] = null;\n shapePath.i[i] = null;\n shapePath.o[i] = null;\n }\n shapePath._length = 0;\n shapePath.c = false;\n }\n function clone(shape) {\n var cloned = factory.newElement();\n var i;\n var len = shape._length === undefined ? shape.v.length : shape._length;\n cloned.setLength(len);\n cloned.c = shape.c;\n for (i = 0; i < len; i += 1) {\n cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n }\n return cloned;\n }\n var factory = poolFactory(4, create, release);\n factory.clone = clone;\n return factory;\n }();\n\n function ShapeCollection() {\n this._length = 0;\n this._maxLength = 4;\n this.shapes = createSizedArray(this._maxLength);\n }\n ShapeCollection.prototype.addShape = function (shapeData) {\n if (this._length === this._maxLength) {\n this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n }\n this.shapes[this._length] = shapeData;\n this._length += 1;\n };\n ShapeCollection.prototype.releaseShapes = function () {\n var i;\n for (i = 0; i < this._length; i += 1) {\n shapePool.release(this.shapes[i]);\n }\n this._length = 0;\n };\n\n var shapeCollectionPool = function () {\n var ob = {\n newShapeCollection: newShapeCollection,\n release: release\n };\n var _length = 0;\n var _maxLength = 4;\n var pool = createSizedArray(_maxLength);\n function newShapeCollection() {\n var shapeCollection;\n if (_length) {\n _length -= 1;\n shapeCollection = pool[_length];\n } else {\n shapeCollection = new ShapeCollection();\n }\n return shapeCollection;\n }\n function release(shapeCollection) {\n var i;\n var len = shapeCollection._length;\n for (i = 0; i < len; i += 1) {\n shapePool.release(shapeCollection.shapes[i]);\n }\n shapeCollection._length = 0;\n if (_length === _maxLength) {\n pool = pooling[\"double\"](pool);\n _maxLength *= 2;\n }\n pool[_length] = shapeCollection;\n _length += 1;\n }\n return ob;\n }();\n\n var ShapePropertyFactory = function () {\n var initFrame = -999999;\n function interpolateShape(frameNum, previousValue, caching) {\n var iterationIndex = caching.lastIndex;\n var keyPropS;\n var keyPropE;\n var isHold;\n var j;\n var k;\n var jLen;\n var kLen;\n var perc;\n var vertexValue;\n var kf = this.keyframes;\n if (frameNum < kf[0].t - this.offsetTime) {\n keyPropS = kf[0].s[0];\n isHold = true;\n iterationIndex = 0;\n } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n /* if(kf[kf.length - 1].s){\n keyPropS = kf[kf.length - 1].s[0];\n }else{\n keyPropS = kf[kf.length - 2].e[0];\n } */\n isHold = true;\n } else {\n var i = iterationIndex;\n var len = kf.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n while (flag) {\n keyData = kf[i];\n nextKeyData = kf[i + 1];\n if (nextKeyData.t - this.offsetTime > frameNum) {\n break;\n }\n if (i < len - 1) {\n i += 1;\n } else {\n flag = false;\n }\n }\n keyframeMetadata = this.keyframesMetadata[i] || {};\n isHold = keyData.h === 1;\n iterationIndex = i;\n if (!isHold) {\n if (frameNum >= nextKeyData.t - this.offsetTime) {\n perc = 1;\n } else if (frameNum < keyData.t - this.offsetTime) {\n perc = 0;\n } else {\n var fnc;\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n keyframeMetadata.__fnct = fnc;\n }\n perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n }\n keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n }\n keyPropS = keyData.s[0];\n }\n jLen = previousValue._length;\n kLen = keyPropS.i[0].length;\n caching.lastIndex = iterationIndex;\n for (j = 0; j < jLen; j += 1) {\n for (k = 0; k < kLen; k += 1) {\n vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n previousValue.i[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n previousValue.o[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n previousValue.v[j][k] = vertexValue;\n }\n }\n }\n function interpolateShapeCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n var lastFrame = this._caching.lastFrame;\n if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n /// /\n this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n this.interpolateShape(frameNum, this.pv, this._caching);\n /// /\n }\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n function resetShape() {\n this.paths = this.localShapeCollection;\n }\n function shapesEqual(shape1, shape2) {\n if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n return false;\n }\n var i;\n var len = shape1._length;\n for (i = 0; i < len; i += 1) {\n if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n return false;\n }\n }\n return true;\n }\n function setVValue(newPath) {\n if (!shapesEqual(this.v, newPath)) {\n this.v = shapePool.clone(newPath);\n this.localShapeCollection.releaseShapes();\n this.localShapeCollection.addShape(this.v);\n this._mdf = true;\n this.paths = this.localShapeCollection;\n }\n }\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n if (!this.effectsSequence.length) {\n this._mdf = false;\n return;\n }\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n this.lock = true;\n this._mdf = false;\n var finalValue;\n if (this.kf) {\n finalValue = this.pv;\n } else if (this.data.ks) {\n finalValue = this.data.ks.k;\n } else {\n finalValue = this.data.pt.k;\n }\n var i;\n var len = this.effectsSequence.length;\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n this.setVValue(finalValue);\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n function ShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.container = elem;\n this.elem = elem;\n this.data = data;\n this.k = false;\n this.kf = false;\n this._mdf = false;\n var pathData = type === 3 ? data.pt.k : data.ks.k;\n this.v = shapePool.clone(pathData);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.reset = resetShape;\n this.effectsSequence = [];\n }\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n ShapeProperty.prototype.interpolateShape = interpolateShape;\n ShapeProperty.prototype.getValue = processEffectsSequence;\n ShapeProperty.prototype.setVValue = setVValue;\n ShapeProperty.prototype.addEffect = addEffect;\n function KeyframedShapeProperty(elem, data, type) {\n this.propType = 'shape';\n this.comp = elem.comp;\n this.elem = elem;\n this.container = elem;\n this.offsetTime = elem.data.st;\n this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n this.keyframesMetadata = [];\n this.k = true;\n this.kf = true;\n var len = this.keyframes[0].s[0].i.length;\n this.v = shapePool.newElement();\n this.v.setPathData(this.keyframes[0].s[0].c, len);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.lastFrame = initFrame;\n this.reset = resetShape;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0\n };\n this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n }\n KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n KeyframedShapeProperty.prototype.setVValue = setVValue;\n KeyframedShapeProperty.prototype.addEffect = addEffect;\n var EllShapeProperty = function () {\n var cPoint = roundCorner;\n function EllShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 4);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.localShapeCollection.addShape(this.v);\n this.d = data.d;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertEllToPath();\n }\n }\n EllShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n if (this._mdf) {\n this.convertEllToPath();\n }\n },\n convertEllToPath: function convertEllToPath() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var s0 = this.s.v[0] / 2;\n var s1 = this.s.v[1] / 2;\n var _cw = this.d !== 3;\n var _v = this.v;\n _v.v[0][0] = p0;\n _v.v[0][1] = p1 - s1;\n _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.v[1][1] = p1;\n _v.v[2][0] = p0;\n _v.v[2][1] = p1 + s1;\n _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.v[3][1] = p1;\n _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.i[0][1] = p1 - s1;\n _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.i[1][1] = p1 - s1 * cPoint;\n _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.i[2][1] = p1 + s1;\n _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.i[3][1] = p1 + s1 * cPoint;\n _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.o[0][1] = p1 - s1;\n _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.o[1][1] = p1 + s1 * cPoint;\n _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.o[2][1] = p1 + s1;\n _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.o[3][1] = p1 - s1 * cPoint;\n }\n };\n extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n return EllShapePropertyFactory;\n }();\n var StarShapeProperty = function () {\n function StarShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 0);\n this.elem = elem;\n this.comp = elem.comp;\n this.data = data;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n if (data.sy === 1) {\n this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n this.convertToPath = this.convertStarToPath;\n } else {\n this.convertToPath = this.convertPolygonToPath;\n }\n this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertToPath();\n }\n }\n StarShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n if (this._mdf) {\n this.convertToPath();\n }\n },\n convertStarToPath: function convertStarToPath() {\n var numPts = Math.floor(this.pt.v) * 2;\n var angle = Math.PI * 2 / numPts;\n /* this.v.v.length = numPts;\n this.v.i.length = numPts;\n this.v.o.length = numPts; */\n var longFlag = true;\n var longRad = this.or.v;\n var shortRad = this.ir.v;\n var longRound = this.os.v;\n var shortRound = this.is.v;\n var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n var i;\n var rad;\n var roundness;\n var perimSegment;\n var currentAng = -Math.PI / 2;\n currentAng += this.r.v;\n var dir = this.data.d === 3 ? -1 : 1;\n this.v._length = 0;\n for (i = 0; i < numPts; i += 1) {\n rad = longFlag ? longRad : shortRad;\n roundness = longFlag ? longRound : shortRound;\n perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n\n /* this.v.v[i] = [x,y];\n this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\n this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\n this.v._length = numPts; */\n longFlag = !longFlag;\n currentAng += angle * dir;\n }\n },\n convertPolygonToPath: function convertPolygonToPath() {\n var numPts = Math.floor(this.pt.v);\n var angle = Math.PI * 2 / numPts;\n var rad = this.or.v;\n var roundness = this.os.v;\n var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n var i;\n var currentAng = -Math.PI * 0.5;\n var dir = this.data.d === 3 ? -1 : 1;\n currentAng += this.r.v;\n this.v._length = 0;\n for (i = 0; i < numPts; i += 1) {\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n currentAng += angle * dir;\n }\n this.paths.length = 0;\n this.paths[0] = this.v;\n }\n };\n extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n return StarShapePropertyFactory;\n }();\n var RectShapeProperty = function () {\n function RectShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.c = true;\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertRectToPath();\n }\n }\n RectShapePropertyFactory.prototype = {\n convertRectToPath: function convertRectToPath() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var v0 = this.s.v[0] / 2;\n var v1 = this.s.v[1] / 2;\n var round = bmMin(v0, v1, this.r.v);\n var cPoint = round * (1 - roundCorner);\n this.v._length = 0;\n if (this.d === 2 || this.d === 1) {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n }\n } else {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n }\n }\n },\n getValue: function getValue() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n if (this._mdf) {\n this.convertRectToPath();\n }\n },\n reset: resetShape\n };\n extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n return RectShapePropertyFactory;\n }();\n function getShapeProp(elem, data, type) {\n var prop;\n if (type === 3 || type === 4) {\n var dataProp = type === 3 ? data.pt : data.ks;\n var keys = dataProp.k;\n if (keys.length) {\n prop = new KeyframedShapeProperty(elem, data, type);\n } else {\n prop = new ShapeProperty(elem, data, type);\n }\n } else if (type === 5) {\n prop = new RectShapeProperty(elem, data);\n } else if (type === 6) {\n prop = new EllShapeProperty(elem, data);\n } else if (type === 7) {\n prop = new StarShapeProperty(elem, data);\n }\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n return prop;\n }\n function getConstructorFunction() {\n return ShapeProperty;\n }\n function getKeyframedConstructorFunction() {\n return KeyframedShapeProperty;\n }\n var ob = {};\n ob.getShapeProp = getShapeProp;\n ob.getConstructorFunction = getConstructorFunction;\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n return ob;\n }();\n\n /*!\n Transformation Matrix v2.0\n (c) Epistemex 2014-2015\n www.epistemex.com\n By Ken Fyrstenberg\n Contributions by leeoniya.\n License: MIT, header required.\n */\n\n /**\n * 2D transformation matrix object initialized with identity matrix.\n *\n * The matrix can synchronize a canvas context by supplying the context\n * as an argument, or later apply current absolute transform to an\n * existing context.\n *\n * All values are handled as floating point values.\n *\n * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\n * @prop {number} a - scale x\n * @prop {number} b - shear y\n * @prop {number} c - shear x\n * @prop {number} d - scale y\n * @prop {number} e - translate x\n * @prop {number} f - translate y\n * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\n * @constructor\n */\n\n var Matrix = function () {\n var _cos = Math.cos;\n var _sin = Math.sin;\n var _tan = Math.tan;\n var _rnd = Math.round;\n function reset() {\n this.props[0] = 1;\n this.props[1] = 0;\n this.props[2] = 0;\n this.props[3] = 0;\n this.props[4] = 0;\n this.props[5] = 1;\n this.props[6] = 0;\n this.props[7] = 0;\n this.props[8] = 0;\n this.props[9] = 0;\n this.props[10] = 1;\n this.props[11] = 0;\n this.props[12] = 0;\n this.props[13] = 0;\n this.props[14] = 0;\n this.props[15] = 1;\n return this;\n }\n function rotate(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n function rotateX(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n }\n function rotateY(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n }\n function rotateZ(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n function shear(sx, sy) {\n return this._t(1, sy, sx, 1, 0, 0);\n }\n function skew(ax, ay) {\n return this.shear(_tan(ax), _tan(ay));\n }\n function skewFromAxis(ax, angle) {\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n }\n function scale(sx, sy, sz) {\n if (!sz && sz !== 0) {\n sz = 1;\n }\n if (sx === 1 && sy === 1 && sz === 1) {\n return this;\n }\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n }\n function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n this.props[0] = a;\n this.props[1] = b;\n this.props[2] = c;\n this.props[3] = d;\n this.props[4] = e;\n this.props[5] = f;\n this.props[6] = g;\n this.props[7] = h;\n this.props[8] = i;\n this.props[9] = j;\n this.props[10] = k;\n this.props[11] = l;\n this.props[12] = m;\n this.props[13] = n;\n this.props[14] = o;\n this.props[15] = p;\n return this;\n }\n function translate(tx, ty, tz) {\n tz = tz || 0;\n if (tx !== 0 || ty !== 0 || tz !== 0) {\n return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n }\n return this;\n }\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n var _p = this.props;\n if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n // NOTE: commenting this condition because TurboFan deoptimizes code when present\n // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n _p[12] = _p[12] * a2 + _p[15] * m2;\n _p[13] = _p[13] * f2 + _p[15] * n2;\n _p[14] = _p[14] * k2 + _p[15] * o2;\n _p[15] *= p2;\n // }\n this._identityCalculated = false;\n return this;\n }\n var a1 = _p[0];\n var b1 = _p[1];\n var c1 = _p[2];\n var d1 = _p[3];\n var e1 = _p[4];\n var f1 = _p[5];\n var g1 = _p[6];\n var h1 = _p[7];\n var i1 = _p[8];\n var j1 = _p[9];\n var k1 = _p[10];\n var l1 = _p[11];\n var m1 = _p[12];\n var n1 = _p[13];\n var o1 = _p[14];\n var p1 = _p[15];\n\n /* matrix order (canvas compatible):\n * ace\n * bdf\n * 001\n */\n _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n this._identityCalculated = false;\n return this;\n }\n function multiply(matrix) {\n var matrixProps = matrix.props;\n return this.transform(matrixProps[0], matrixProps[1], matrixProps[2], matrixProps[3], matrixProps[4], matrixProps[5], matrixProps[6], matrixProps[7], matrixProps[8], matrixProps[9], matrixProps[10], matrixProps[11], matrixProps[12], matrixProps[13], matrixProps[14], matrixProps[15]);\n }\n function isIdentity() {\n if (!this._identityCalculated) {\n this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n this._identityCalculated = true;\n }\n return this._identity;\n }\n function equals(matr) {\n var i = 0;\n while (i < 16) {\n if (matr.props[i] !== this.props[i]) {\n return false;\n }\n i += 1;\n }\n return true;\n }\n function clone(matr) {\n var i;\n for (i = 0; i < 16; i += 1) {\n matr.props[i] = this.props[i];\n }\n return matr;\n }\n function cloneFromProps(props) {\n var i;\n for (i = 0; i < 16; i += 1) {\n this.props[i] = props[i];\n }\n }\n function applyToPoint(x, y, z) {\n return {\n x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n };\n /* return {\n x: x * me.a + y * me.c + me.e,\n y: x * me.b + y * me.d + me.f\n }; */\n }\n function applyToX(x, y, z) {\n return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n }\n function applyToY(x, y, z) {\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n }\n function applyToZ(x, y, z) {\n return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n }\n function getInverseMatrix() {\n var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n var a = this.props[5] / determinant;\n var b = -this.props[1] / determinant;\n var c = -this.props[4] / determinant;\n var d = this.props[0] / determinant;\n var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n var inverseMatrix = new Matrix();\n inverseMatrix.props[0] = a;\n inverseMatrix.props[1] = b;\n inverseMatrix.props[4] = c;\n inverseMatrix.props[5] = d;\n inverseMatrix.props[12] = e;\n inverseMatrix.props[13] = f;\n return inverseMatrix;\n }\n function inversePoint(pt) {\n var inverseMatrix = this.getInverseMatrix();\n return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n }\n function inversePoints(pts) {\n var i;\n var len = pts.length;\n var retPts = [];\n for (i = 0; i < len; i += 1) {\n retPts[i] = inversePoint(pts[i]);\n }\n return retPts;\n }\n function applyToTriplePoints(pt1, pt2, pt3) {\n var arr = createTypedArray('float32', 6);\n if (this.isIdentity()) {\n arr[0] = pt1[0];\n arr[1] = pt1[1];\n arr[2] = pt2[0];\n arr[3] = pt2[1];\n arr[4] = pt3[0];\n arr[5] = pt3[1];\n } else {\n var p0 = this.props[0];\n var p1 = this.props[1];\n var p4 = this.props[4];\n var p5 = this.props[5];\n var p12 = this.props[12];\n var p13 = this.props[13];\n arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n }\n return arr;\n }\n function applyToPointArray(x, y, z) {\n var arr;\n if (this.isIdentity()) {\n arr = [x, y, z];\n } else {\n arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\n }\n return arr;\n }\n function applyToPointStringified(x, y) {\n if (this.isIdentity()) {\n return x + ',' + y;\n }\n var _p = this.props;\n return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n }\n function toCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n /* if(this.isIdentity()) {\n return '';\n } */\n var i = 0;\n var props = this.props;\n var cssValue = 'matrix3d(';\n var v = 10000;\n while (i < 16) {\n cssValue += _rnd(props[i] * v) / v;\n cssValue += i === 15 ? ')' : ',';\n i += 1;\n }\n return cssValue;\n }\n function roundMatrixProperty(val) {\n var v = 10000;\n if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n return _rnd(val * v) / v;\n }\n return val;\n }\n function to2dCSS() {\n // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n /* if(this.isIdentity()) {\n return '';\n } */\n var props = this.props;\n var _a = roundMatrixProperty(props[0]);\n var _b = roundMatrixProperty(props[1]);\n var _c = roundMatrixProperty(props[4]);\n var _d = roundMatrixProperty(props[5]);\n var _e = roundMatrixProperty(props[12]);\n var _f = roundMatrixProperty(props[13]);\n return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n }\n return function () {\n this.reset = reset;\n this.rotate = rotate;\n this.rotateX = rotateX;\n this.rotateY = rotateY;\n this.rotateZ = rotateZ;\n this.skew = skew;\n this.skewFromAxis = skewFromAxis;\n this.shear = shear;\n this.scale = scale;\n this.setTransform = setTransform;\n this.translate = translate;\n this.transform = transform;\n this.multiply = multiply;\n this.applyToPoint = applyToPoint;\n this.applyToX = applyToX;\n this.applyToY = applyToY;\n this.applyToZ = applyToZ;\n this.applyToPointArray = applyToPointArray;\n this.applyToTriplePoints = applyToTriplePoints;\n this.applyToPointStringified = applyToPointStringified;\n this.toCSS = toCSS;\n this.to2dCSS = to2dCSS;\n this.clone = clone;\n this.cloneFromProps = cloneFromProps;\n this.equals = equals;\n this.inversePoints = inversePoints;\n this.inversePoint = inversePoint;\n this.getInverseMatrix = getInverseMatrix;\n this._t = this.transform;\n this.isIdentity = isIdentity;\n this._identity = true;\n this._identityCalculated = false;\n this.props = createTypedArray('float32', 16);\n this.reset();\n };\n }();\n\n function _typeof$3(o) { \"@babel/helpers - typeof\"; return _typeof$3 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof$3(o); }\n var lottie = {};\n var standalone = '__[STANDALONE]__';\n var animationData = '__[ANIMATIONDATA]__';\n var renderer = '';\n function setLocation(href) {\n setLocationHref(href);\n }\n function searchAnimations() {\n if (standalone === true) {\n animationManager.searchAnimations(animationData, standalone, renderer);\n } else {\n animationManager.searchAnimations();\n }\n }\n function setSubframeRendering(flag) {\n setSubframeEnabled(flag);\n }\n function setPrefix(prefix) {\n setIdPrefix(prefix);\n }\n function loadAnimation(params) {\n if (standalone === true) {\n params.animationData = JSON.parse(animationData);\n }\n return animationManager.loadAnimation(params);\n }\n function setQuality(value) {\n if (typeof value === 'string') {\n switch (value) {\n case 'high':\n setDefaultCurveSegments(200);\n break;\n default:\n case 'medium':\n setDefaultCurveSegments(50);\n break;\n case 'low':\n setDefaultCurveSegments(10);\n break;\n }\n } else if (!isNaN(value) && value > 1) {\n setDefaultCurveSegments(value);\n }\n if (getDefaultCurveSegments() >= 50) {\n roundValues(false);\n } else {\n roundValues(true);\n }\n }\n function inBrowser() {\n return typeof navigator !== 'undefined';\n }\n function installPlugin(type, plugin) {\n if (type === 'expressions') {\n setExpressionsPlugin(plugin);\n }\n }\n function getFactory(name) {\n switch (name) {\n case 'propertyFactory':\n return PropertyFactory;\n case 'shapePropertyFactory':\n return ShapePropertyFactory;\n case 'matrix':\n return Matrix;\n default:\n return null;\n }\n }\n lottie.play = animationManager.play;\n lottie.pause = animationManager.pause;\n lottie.setLocationHref = setLocation;\n lottie.togglePause = animationManager.togglePause;\n lottie.setSpeed = animationManager.setSpeed;\n lottie.setDirection = animationManager.setDirection;\n lottie.stop = animationManager.stop;\n lottie.searchAnimations = searchAnimations;\n lottie.registerAnimation = animationManager.registerAnimation;\n lottie.loadAnimation = loadAnimation;\n lottie.setSubframeRendering = setSubframeRendering;\n lottie.resize = animationManager.resize;\n // lottie.start = start;\n lottie.goToAndStop = animationManager.goToAndStop;\n lottie.destroy = animationManager.destroy;\n lottie.setQuality = setQuality;\n lottie.inBrowser = inBrowser;\n lottie.installPlugin = installPlugin;\n lottie.freeze = animationManager.freeze;\n lottie.unfreeze = animationManager.unfreeze;\n lottie.setVolume = animationManager.setVolume;\n lottie.mute = animationManager.mute;\n lottie.unmute = animationManager.unmute;\n lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n lottie.useWebWorker = setWebWorker;\n lottie.setIDPrefix = setPrefix;\n lottie.__getFactory = getFactory;\n lottie.version = '5.13.0';\n function checkReady() {\n if (document.readyState === 'complete') {\n clearInterval(readyStateCheckInterval);\n searchAnimations();\n }\n }\n function getQueryVariable(variable) {\n var vars = queryString.split('&');\n for (var i = 0; i < vars.length; i += 1) {\n var pair = vars[i].split('=');\n if (decodeURIComponent(pair[0]) == variable) {\n // eslint-disable-line eqeqeq\n return decodeURIComponent(pair[1]);\n }\n }\n return null;\n }\n var queryString = '';\n if (standalone) {\n var scripts = document.getElementsByTagName('script');\n var index = scripts.length - 1;\n var myScript = scripts[index] || {\n src: ''\n };\n queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\n renderer = getQueryVariable('renderer');\n }\n var readyStateCheckInterval = setInterval(checkReady, 100);\n\n // this adds bodymovin to the window object for backwards compatibility\n try {\n if (!((typeof exports === \"undefined\" ? \"undefined\" : _typeof$3(exports)) === 'object' && typeof module !== 'undefined') && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n ) {\n window.bodymovin = lottie;\n }\n } catch (err) {\n //\n }\n\n var ShapeModifiers = function () {\n var ob = {};\n var modifiers = {};\n ob.registerModifier = registerModifier;\n ob.getModifier = getModifier;\n function registerModifier(nm, factory) {\n if (!modifiers[nm]) {\n modifiers[nm] = factory;\n }\n }\n function getModifier(nm, elem, data) {\n return new modifiers[nm](elem, data);\n }\n return ob;\n }();\n function ShapeModifier() {}\n ShapeModifier.prototype.initModifierProperties = function () {};\n ShapeModifier.prototype.addShapeToModifier = function () {};\n ShapeModifier.prototype.addShape = function (data) {\n if (!this.closed) {\n // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n data.sh.container.addDynamicProperty(data.sh);\n var shapeData = {\n shape: data.sh,\n data: data,\n localShapeCollection: shapeCollectionPool.newShapeCollection()\n };\n this.shapes.push(shapeData);\n this.addShapeToModifier(shapeData);\n if (this._isAnimated) {\n data.setAsAnimated();\n }\n }\n };\n ShapeModifier.prototype.init = function (elem, data) {\n this.shapes = [];\n this.elem = elem;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, data);\n this.frameId = initialDefaultFrame;\n this.closed = false;\n this.k = false;\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n ShapeModifier.prototype.processKeys = function () {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n extendPrototype([DynamicPropertyContainer], ShapeModifier);\n\n function TrimModifier() {}\n extendPrototype([ShapeModifier], TrimModifier);\n TrimModifier.prototype.initModifierProperties = function (elem, data) {\n this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n this.sValue = 0;\n this.eValue = 0;\n this.getValue = this.processKeys;\n this.m = data.m;\n this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n };\n TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n shapeData.pathsData = [];\n };\n TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n var segments = [];\n if (e <= 1) {\n segments.push({\n s: s,\n e: e\n });\n } else if (s >= 1) {\n segments.push({\n s: s - 1,\n e: e - 1\n });\n } else {\n segments.push({\n s: s,\n e: 1\n });\n segments.push({\n s: 0,\n e: e - 1\n });\n }\n var shapeSegments = [];\n var i;\n var len = segments.length;\n var segmentOb;\n for (i = 0; i < len; i += 1) {\n segmentOb = segments[i];\n if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n var shapeS;\n var shapeE;\n if (segmentOb.s * totalModifierLength <= addedLength) {\n shapeS = 0;\n } else {\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n }\n if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n shapeE = 1;\n } else {\n shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n }\n shapeSegments.push([shapeS, shapeE]);\n }\n }\n if (!shapeSegments.length) {\n shapeSegments.push([0, 0]);\n }\n return shapeSegments;\n };\n TrimModifier.prototype.releasePathsData = function (pathsData) {\n var i;\n var len = pathsData.length;\n for (i = 0; i < len; i += 1) {\n segmentsLengthPool.release(pathsData[i]);\n }\n pathsData.length = 0;\n return pathsData;\n };\n TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n var s;\n var e;\n if (this._mdf || _isFirstFrame) {\n var o = this.o.v % 360 / 360;\n if (o < 0) {\n o += 1;\n }\n if (this.s.v > 1) {\n s = 1 + o;\n } else if (this.s.v < 0) {\n s = 0 + o;\n } else {\n s = this.s.v + o;\n }\n if (this.e.v > 1) {\n e = 1 + o;\n } else if (this.e.v < 0) {\n e = 0 + o;\n } else {\n e = this.e.v + o;\n }\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n s = Math.round(s * 10000) * 0.0001;\n e = Math.round(e * 10000) * 0.0001;\n this.sValue = s;\n this.eValue = e;\n } else {\n s = this.sValue;\n e = this.eValue;\n }\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var pathsData;\n var pathData;\n var totalShapeLength;\n var totalModifierLength = 0;\n if (e === s) {\n for (i = 0; i < len; i += 1) {\n this.shapes[i].localShapeCollection.releaseShapes();\n this.shapes[i].shape._mdf = true;\n this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n if (this._mdf) {\n this.shapes[i].pathsData.length = 0;\n }\n }\n } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n var segments = [];\n var shapeData;\n var localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n shapeData.shape.paths = shapeData.localShapeCollection;\n } else {\n shapePaths = shapeData.shape.paths;\n jLen = shapePaths._length;\n totalShapeLength = 0;\n if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n totalShapeLength = shapeData.totalShapeLength;\n } else {\n pathsData = this.releasePathsData(shapeData.pathsData);\n for (j = 0; j < jLen; j += 1) {\n pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n pathsData.push(pathData);\n totalShapeLength += pathData.totalLength;\n }\n shapeData.totalShapeLength = totalShapeLength;\n shapeData.pathsData = pathsData;\n }\n totalModifierLength += totalShapeLength;\n shapeData.shape._mdf = true;\n }\n }\n var shapeS = s;\n var shapeE = e;\n var addedLength = 0;\n var edges;\n for (i = len - 1; i >= 0; i -= 1) {\n shapeData = this.shapes[i];\n if (shapeData.shape._mdf) {\n localShapeCollection = shapeData.localShapeCollection;\n localShapeCollection.releaseShapes();\n // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n if (this.m === 2 && len > 1) {\n edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n addedLength += shapeData.totalShapeLength;\n } else {\n edges = [[shapeS, shapeE]];\n }\n jLen = edges.length;\n for (j = 0; j < jLen; j += 1) {\n shapeS = edges[j][0];\n shapeE = edges[j][1];\n segments.length = 0;\n if (shapeE <= 1) {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength * shapeE\n });\n } else if (shapeS >= 1) {\n segments.push({\n s: shapeData.totalShapeLength * (shapeS - 1),\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n } else {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength\n });\n segments.push({\n s: 0,\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n }\n var newShapesData = this.addShapes(shapeData, segments[0]);\n if (segments[0].s !== segments[0].e) {\n if (segments.length > 1) {\n var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n if (lastShapeInCollection.c) {\n var lastShape = newShapesData.pop();\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n } else {\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1]);\n }\n }\n this.addPaths(newShapesData, localShapeCollection);\n }\n }\n shapeData.shape.paths = localShapeCollection;\n }\n }\n } else if (this._mdf) {\n for (i = 0; i < len; i += 1) {\n // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n // Don't remove this even if it's losing cached info.\n this.shapes[i].pathsData.length = 0;\n this.shapes[i].shape._mdf = true;\n }\n }\n };\n TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n var i;\n var len = newPaths.length;\n for (i = 0; i < len; i += 1) {\n localShapeCollection.addShape(newPaths[i]);\n }\n };\n TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n if (newShape) {\n shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n }\n shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n };\n TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n shapePath.setXYAt(points[1], points[5], 'o', pos);\n shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n if (newShape) {\n shapePath.setXYAt(points[0], points[4], 'v', pos);\n }\n shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n };\n TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n var pathsData = shapeData.pathsData;\n var shapePaths = shapeData.shape.paths.shapes;\n var i;\n var len = shapeData.shape.paths._length;\n var j;\n var jLen;\n var addedLength = 0;\n var currentLengthData;\n var segmentCount;\n var lengths;\n var segment;\n var shapes = [];\n var initPos;\n var newShape = true;\n if (!shapePath) {\n shapePath = shapePool.newElement();\n segmentCount = 0;\n initPos = 0;\n } else {\n segmentCount = shapePath._length;\n initPos = shapePath._length;\n }\n shapes.push(shapePath);\n for (i = 0; i < len; i += 1) {\n lengths = pathsData[i].lengths;\n shapePath.c = shapePaths[i].c;\n jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n for (j = 1; j < jLen; j += 1) {\n currentLengthData = lengths[j - 1];\n if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n addedLength += currentLengthData.addedLength;\n shapePath.c = false;\n } else if (addedLength > shapeSegment.e) {\n shapePath.c = false;\n break;\n } else {\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape);\n // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n newShape = false;\n shapePath.c = false;\n }\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n }\n if (shapePaths[i].c && lengths.length) {\n currentLengthData = lengths[j - 1];\n if (addedLength <= shapeSegment.e) {\n var segmentLength = lengths[j - 1].addedLength;\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n newShape = false;\n } else {\n segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape);\n // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n newShape = false;\n shapePath.c = false;\n }\n } else {\n shapePath.c = false;\n }\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n if (shapePath._length) {\n shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n }\n if (addedLength > shapeSegment.e) {\n break;\n }\n if (i < len - 1) {\n shapePath = shapePool.newElement();\n newShape = true;\n shapes.push(shapePath);\n segmentCount = 0;\n }\n }\n return shapes;\n };\n\n function PuckerAndBloatModifier() {}\n extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this._isAnimated = !!this.amount.effectsSequence.length;\n };\n PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n var percent = amount / 100;\n var centerPoint = [0, 0];\n var pathLength = path._length;\n var i = 0;\n for (i = 0; i < pathLength; i += 1) {\n centerPoint[0] += path.v[i][0];\n centerPoint[1] += path.v[i][1];\n }\n centerPoint[0] /= pathLength;\n centerPoint[1] /= pathLength;\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n for (i = 0; i < pathLength; i += 1) {\n vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n }\n return clonedPath;\n };\n PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amount = this.amount.v;\n if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n }\n }\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n var TransformPropertyFactory = function () {\n var defaultVector = [0, 0];\n function applyToMatrix(mat) {\n var _mdf = this._mdf;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || _mdf;\n if (this.a) {\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n if (this.s) {\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n if (this.sk) {\n mat.skewFromAxis(-this.sk.v, this.sa.v);\n }\n if (this.r) {\n mat.rotate(-this.r.v);\n } else {\n mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n if (this.data.p.s) {\n if (this.data.p.z) {\n mat.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n mat.translate(this.px.v, this.py.v, 0);\n }\n } else {\n mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n function processKeys(forceRender) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n if (this._isDirty) {\n this.precalculateMatrix();\n this._isDirty = false;\n }\n this.iterateDynamicProperties();\n if (this._mdf || forceRender) {\n var frameRate;\n this.v.cloneFromProps(this.pre.props);\n if (this.appliedTransformations < 1) {\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n if (this.appliedTransformations < 2) {\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n if (this.sk && this.appliedTransformations < 3) {\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\n }\n if (this.r && this.appliedTransformations < 4) {\n this.v.rotate(-this.r.v);\n } else if (!this.r && this.appliedTransformations < 4) {\n this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n if (this.autoOriented) {\n var v1;\n var v2;\n frameRate = this.elem.globalData.frameRate;\n if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\n v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n } else {\n v1 = this.p.pv;\n v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n }\n } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n v1 = [];\n v2 = [];\n var px = this.px;\n var py = this.py;\n if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\n v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\n } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\n v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\n v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n } else {\n v1 = [px.pv, py.pv];\n v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n }\n } else {\n v2 = defaultVector;\n v1 = v2;\n }\n this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n }\n if (this.data.p && this.data.p.s) {\n if (this.data.p.z) {\n this.v.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n this.v.translate(this.px.v, this.py.v, 0);\n }\n } else {\n this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n this.frameId = this.elem.globalData.frameId;\n }\n function precalculateMatrix() {\n this.appliedTransformations = 0;\n this.pre.reset();\n if (!this.a.effectsSequence.length) {\n this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n this.appliedTransformations = 1;\n } else {\n return;\n }\n if (!this.s.effectsSequence.length) {\n this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n this.appliedTransformations = 2;\n } else {\n return;\n }\n if (this.sk) {\n if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n this.appliedTransformations = 3;\n } else {\n return;\n }\n }\n if (this.r) {\n if (!this.r.effectsSequence.length) {\n this.pre.rotate(-this.r.v);\n this.appliedTransformations = 4;\n }\n } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n this.appliedTransformations = 4;\n }\n }\n function autoOrient() {\n //\n // var prevP = this.getValueAtTime();\n }\n function addDynamicProperty(prop) {\n this._addDynamicProperty(prop);\n this.elem.addDynamicProperty(prop);\n this._isDirty = true;\n }\n function TransformProperty(elem, data, container) {\n this.elem = elem;\n this.frameId = -1;\n this.propType = 'transform';\n this.data = data;\n this.v = new Matrix();\n // Precalculated matrix with non animated properties\n this.pre = new Matrix();\n this.appliedTransformations = 0;\n this.initDynamicPropertyContainer(container || elem);\n if (data.p && data.p.s) {\n this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n if (data.p.z) {\n this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n }\n } else {\n this.p = PropertyFactory.getProp(elem, data.p || {\n k: [0, 0, 0]\n }, 1, 0, this);\n }\n if (data.rx) {\n this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n if (data.or.k[0].ti) {\n var i;\n var len = data.or.k.length;\n for (i = 0; i < len; i += 1) {\n data.or.k[i].to = null;\n data.or.k[i].ti = null;\n }\n }\n this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this);\n // sh Indicates it needs to be capped between -180 and 180\n this.or.sh = true;\n } else {\n this.r = PropertyFactory.getProp(elem, data.r || {\n k: 0\n }, 0, degToRads, this);\n }\n if (data.sk) {\n this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n }\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: [0, 0, 0]\n }, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: [100, 100, 100]\n }, 1, 0.01, this);\n // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n if (data.o) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n } else {\n this.o = {\n _mdf: false,\n v: 1\n };\n }\n this._isDirty = true;\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n }\n TransformProperty.prototype = {\n applyToMatrix: applyToMatrix,\n getValue: processKeys,\n precalculateMatrix: precalculateMatrix,\n autoOrient: autoOrient\n };\n extendPrototype([DynamicPropertyContainer], TransformProperty);\n TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n function getTransformProperty(elem, data, container) {\n return new TransformProperty(elem, data, container);\n }\n return {\n getTransformProperty: getTransformProperty\n };\n }();\n\n function RepeaterModifier() {}\n extendPrototype([ShapeModifier], RepeaterModifier);\n RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n this.data = data;\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n this._isAnimated = !!this.dynamicProperties.length;\n this.pMatrix = new Matrix();\n this.rMatrix = new Matrix();\n this.sMatrix = new Matrix();\n this.tMatrix = new Matrix();\n this.matrix = new Matrix();\n };\n RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n var dir = inv ? -1 : 1;\n var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n rMatrix.rotate(-transform.r.v * dir * perc);\n rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n };\n RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\n this.elem = elem;\n this.arr = arr;\n this.pos = pos;\n this.elemsData = elemsData;\n this._currentCopies = 0;\n this._elements = [];\n this._groups = [];\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, arr[pos]);\n while (pos > 0) {\n pos -= 1;\n // this._elements.unshift(arr.splice(pos,1)[0]);\n this._elements.unshift(arr[pos]);\n }\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n RepeaterModifier.prototype.resetElements = function (elements) {\n var i;\n var len = elements.length;\n for (i = 0; i < len; i += 1) {\n elements[i]._processed = false;\n if (elements[i].ty === 'gr') {\n this.resetElements(elements[i].it);\n }\n }\n };\n RepeaterModifier.prototype.cloneElements = function (elements) {\n var newElements = JSON.parse(JSON.stringify(elements));\n this.resetElements(newElements);\n return newElements;\n };\n RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n var i;\n var len = elements.length;\n for (i = 0; i < len; i += 1) {\n elements[i]._render = renderFlag;\n if (elements[i].ty === 'gr') {\n this.changeGroupRender(elements[i].it, renderFlag);\n }\n }\n };\n RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n var items;\n var itemsTransform;\n var i;\n var dir;\n var cont;\n var hasReloaded = false;\n if (this._mdf || _isFirstFrame) {\n var copies = Math.ceil(this.c.v);\n if (this._groups.length < copies) {\n while (this._groups.length < copies) {\n var group = {\n it: this.cloneElements(this._elements),\n ty: 'gr'\n };\n group.it.push({\n a: {\n a: 0,\n ix: 1,\n k: [0, 0]\n },\n nm: 'Transform',\n o: {\n a: 0,\n ix: 7,\n k: 100\n },\n p: {\n a: 0,\n ix: 2,\n k: [0, 0]\n },\n r: {\n a: 1,\n ix: 6,\n k: [{\n s: 0,\n e: 0,\n t: 0\n }, {\n s: 0,\n e: 0,\n t: 1\n }]\n },\n s: {\n a: 0,\n ix: 3,\n k: [100, 100]\n },\n sa: {\n a: 0,\n ix: 5,\n k: 0\n },\n sk: {\n a: 0,\n ix: 4,\n k: 0\n },\n ty: 'tr'\n });\n this.arr.splice(0, 0, group);\n this._groups.splice(0, 0, group);\n this._currentCopies += 1;\n }\n this.elem.reloadShapes();\n hasReloaded = true;\n }\n cont = 0;\n var renderFlag;\n for (i = 0; i <= this._groups.length - 1; i += 1) {\n renderFlag = cont < copies;\n this._groups[i]._render = renderFlag;\n this.changeGroupRender(this._groups[i].it, renderFlag);\n if (!renderFlag) {\n var elems = this.elemsData[i].it;\n var transformData = elems[elems.length - 1];\n if (transformData.transform.op.v !== 0) {\n transformData.transform.op._mdf = true;\n transformData.transform.op.v = 0;\n } else {\n transformData.transform.op._mdf = false;\n }\n }\n cont += 1;\n }\n this._currentCopies = copies;\n /// /\n\n var offset = this.o.v;\n var offsetModulo = offset % 1;\n var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n var pProps = this.pMatrix.props;\n var rProps = this.rMatrix.props;\n var sProps = this.sMatrix.props;\n this.pMatrix.reset();\n this.rMatrix.reset();\n this.sMatrix.reset();\n this.tMatrix.reset();\n this.matrix.reset();\n var iteration = 0;\n if (offset > 0) {\n while (iteration < roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n iteration += 1;\n }\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n iteration += offsetModulo;\n }\n } else if (offset < 0) {\n while (iteration > roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n iteration -= 1;\n }\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n iteration -= offsetModulo;\n }\n }\n i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n dir = this.data.m === 1 ? 1 : -1;\n cont = this._currentCopies;\n var j;\n var jLen;\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n jLen = itemsTransform.length;\n items[items.length - 1].transform.mProps._mdf = true;\n items[items.length - 1].transform.op._mdf = true;\n items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n if (iteration !== 0) {\n if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n }\n this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n this.matrix.reset();\n } else {\n this.matrix.reset();\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n }\n iteration += 1;\n cont -= 1;\n i += dir;\n }\n } else {\n cont = this._currentCopies;\n i = 0;\n dir = 1;\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n items[items.length - 1].transform.mProps._mdf = false;\n items[items.length - 1].transform.op._mdf = false;\n cont -= 1;\n i += dir;\n }\n }\n return hasReloaded;\n };\n RepeaterModifier.prototype.addShape = function () {};\n\n function RoundCornersModifier() {}\n extendPrototype([ShapeModifier], RoundCornersModifier);\n RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this._isAnimated = !!this.rd.effectsSequence.length;\n };\n RoundCornersModifier.prototype.processPath = function (path, round) {\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var i;\n var len = path._length;\n var currentV;\n var currentI;\n var currentO;\n var closerV;\n var distance;\n var newPosPerc;\n var index = 0;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n for (i = 0; i < len; i += 1) {\n currentV = path.v[i];\n currentO = path.o[i];\n currentI = path.i[i];\n if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n if ((i === 0 || i === len - 1) && !path.c) {\n clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n /* clonedPath.v[index] = currentV;\n clonedPath.o[index] = currentO;\n clonedPath.i[index] = currentI; */\n index += 1;\n } else {\n if (i === 0) {\n closerV = path.v[len - 1];\n } else {\n closerV = path.v[i - 1];\n }\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = iX;\n iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n vY = iY;\n oX = vX - (vX - currentV[0]) * roundCorner;\n oY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n if (i === len - 1) {\n closerV = path.v[0];\n } else {\n closerV = path.v[i + 1];\n }\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = oX;\n oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n vY = oY;\n iX = vX - (vX - currentV[0]) * roundCorner;\n iY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n index += 1;\n }\n } else {\n clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n index += 1;\n }\n }\n return clonedPath;\n };\n RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var rd = this.rd.v;\n if (rd !== 0) {\n var shapeData;\n var localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n }\n }\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n function floatEqual(a, b) {\n return Math.abs(a - b) * 100000 <= Math.min(Math.abs(a), Math.abs(b));\n }\n function floatZero(f) {\n return Math.abs(f) <= 0.00001;\n }\n function lerp(p0, p1, amount) {\n return p0 * (1 - amount) + p1 * amount;\n }\n function lerpPoint(p0, p1, amount) {\n return [lerp(p0[0], p1[0], amount), lerp(p0[1], p1[1], amount)];\n }\n function quadRoots(a, b, c) {\n // no root\n if (a === 0) return [];\n var s = b * b - 4 * a * c;\n // Complex roots\n if (s < 0) return [];\n var singleRoot = -b / (2 * a);\n // 1 root\n if (s === 0) return [singleRoot];\n var delta = Math.sqrt(s) / (2 * a);\n // 2 roots\n return [singleRoot - delta, singleRoot + delta];\n }\n function polynomialCoefficients(p0, p1, p2, p3) {\n return [-p0 + 3 * p1 - 3 * p2 + p3, 3 * p0 - 6 * p1 + 3 * p2, -3 * p0 + 3 * p1, p0];\n }\n function singlePoint(p) {\n return new PolynomialBezier(p, p, p, p, false);\n }\n function PolynomialBezier(p0, p1, p2, p3, linearize) {\n if (linearize && pointEqual(p0, p1)) {\n p1 = lerpPoint(p0, p3, 1 / 3);\n }\n if (linearize && pointEqual(p2, p3)) {\n p2 = lerpPoint(p0, p3, 2 / 3);\n }\n var coeffx = polynomialCoefficients(p0[0], p1[0], p2[0], p3[0]);\n var coeffy = polynomialCoefficients(p0[1], p1[1], p2[1], p3[1]);\n this.a = [coeffx[0], coeffy[0]];\n this.b = [coeffx[1], coeffy[1]];\n this.c = [coeffx[2], coeffy[2]];\n this.d = [coeffx[3], coeffy[3]];\n this.points = [p0, p1, p2, p3];\n }\n PolynomialBezier.prototype.point = function (t) {\n return [((this.a[0] * t + this.b[0]) * t + this.c[0]) * t + this.d[0], ((this.a[1] * t + this.b[1]) * t + this.c[1]) * t + this.d[1]];\n };\n PolynomialBezier.prototype.derivative = function (t) {\n return [(3 * t * this.a[0] + 2 * this.b[0]) * t + this.c[0], (3 * t * this.a[1] + 2 * this.b[1]) * t + this.c[1]];\n };\n PolynomialBezier.prototype.tangentAngle = function (t) {\n var p = this.derivative(t);\n return Math.atan2(p[1], p[0]);\n };\n PolynomialBezier.prototype.normalAngle = function (t) {\n var p = this.derivative(t);\n return Math.atan2(p[0], p[1]);\n };\n PolynomialBezier.prototype.inflectionPoints = function () {\n var denom = this.a[1] * this.b[0] - this.a[0] * this.b[1];\n if (floatZero(denom)) return [];\n var tcusp = -0.5 * (this.a[1] * this.c[0] - this.a[0] * this.c[1]) / denom;\n var square = tcusp * tcusp - 1 / 3 * (this.b[1] * this.c[0] - this.b[0] * this.c[1]) / denom;\n if (square < 0) return [];\n var root = Math.sqrt(square);\n if (floatZero(root)) {\n if (root > 0 && root < 1) return [tcusp];\n return [];\n }\n return [tcusp - root, tcusp + root].filter(function (r) {\n return r > 0 && r < 1;\n });\n };\n PolynomialBezier.prototype.split = function (t) {\n if (t <= 0) return [singlePoint(this.points[0]), this];\n if (t >= 1) return [this, singlePoint(this.points[this.points.length - 1])];\n var p10 = lerpPoint(this.points[0], this.points[1], t);\n var p11 = lerpPoint(this.points[1], this.points[2], t);\n var p12 = lerpPoint(this.points[2], this.points[3], t);\n var p20 = lerpPoint(p10, p11, t);\n var p21 = lerpPoint(p11, p12, t);\n var p3 = lerpPoint(p20, p21, t);\n return [new PolynomialBezier(this.points[0], p10, p20, p3, true), new PolynomialBezier(p3, p21, p12, this.points[3], true)];\n };\n function extrema(bez, comp) {\n var min = bez.points[0][comp];\n var max = bez.points[bez.points.length - 1][comp];\n if (min > max) {\n var e = max;\n max = min;\n min = e;\n }\n // Derivative roots to find min/max\n var f = quadRoots(3 * bez.a[comp], 2 * bez.b[comp], bez.c[comp]);\n for (var i = 0; i < f.length; i += 1) {\n if (f[i] > 0 && f[i] < 1) {\n var val = bez.point(f[i])[comp];\n if (val < min) min = val;else if (val > max) max = val;\n }\n }\n return {\n min: min,\n max: max\n };\n }\n PolynomialBezier.prototype.bounds = function () {\n return {\n x: extrema(this, 0),\n y: extrema(this, 1)\n };\n };\n PolynomialBezier.prototype.boundingBox = function () {\n var bounds = this.bounds();\n return {\n left: bounds.x.min,\n right: bounds.x.max,\n top: bounds.y.min,\n bottom: bounds.y.max,\n width: bounds.x.max - bounds.x.min,\n height: bounds.y.max - bounds.y.min,\n cx: (bounds.x.max + bounds.x.min) / 2,\n cy: (bounds.y.max + bounds.y.min) / 2\n };\n };\n function intersectData(bez, t1, t2) {\n var box = bez.boundingBox();\n return {\n cx: box.cx,\n cy: box.cy,\n width: box.width,\n height: box.height,\n bez: bez,\n t: (t1 + t2) / 2,\n t1: t1,\n t2: t2\n };\n }\n function splitData(data) {\n var split = data.bez.split(0.5);\n return [intersectData(split[0], data.t1, data.t), intersectData(split[1], data.t, data.t2)];\n }\n function boxIntersect(b1, b2) {\n return Math.abs(b1.cx - b2.cx) * 2 < b1.width + b2.width && Math.abs(b1.cy - b2.cy) * 2 < b1.height + b2.height;\n }\n function intersectsImpl(d1, d2, depth, tolerance, intersections, maxRecursion) {\n if (!boxIntersect(d1, d2)) return;\n if (depth >= maxRecursion || d1.width <= tolerance && d1.height <= tolerance && d2.width <= tolerance && d2.height <= tolerance) {\n intersections.push([d1.t, d2.t]);\n return;\n }\n var d1s = splitData(d1);\n var d2s = splitData(d2);\n intersectsImpl(d1s[0], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n intersectsImpl(d1s[0], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n intersectsImpl(d1s[1], d2s[0], depth + 1, tolerance, intersections, maxRecursion);\n intersectsImpl(d1s[1], d2s[1], depth + 1, tolerance, intersections, maxRecursion);\n }\n PolynomialBezier.prototype.intersections = function (other, tolerance, maxRecursion) {\n if (tolerance === undefined) tolerance = 2;\n if (maxRecursion === undefined) maxRecursion = 7;\n var intersections = [];\n intersectsImpl(intersectData(this, 0, 1), intersectData(other, 0, 1), 0, tolerance, intersections, maxRecursion);\n return intersections;\n };\n PolynomialBezier.shapeSegment = function (shapePath, index) {\n var nextIndex = (index + 1) % shapePath.length();\n return new PolynomialBezier(shapePath.v[index], shapePath.o[index], shapePath.i[nextIndex], shapePath.v[nextIndex], true);\n };\n PolynomialBezier.shapeSegmentInverted = function (shapePath, index) {\n var nextIndex = (index + 1) % shapePath.length();\n return new PolynomialBezier(shapePath.v[nextIndex], shapePath.i[nextIndex], shapePath.o[index], shapePath.v[index], true);\n };\n function crossProduct(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n }\n function lineIntersection(start1, end1, start2, end2) {\n var v1 = [start1[0], start1[1], 1];\n var v2 = [end1[0], end1[1], 1];\n var v3 = [start2[0], start2[1], 1];\n var v4 = [end2[0], end2[1], 1];\n var r = crossProduct(crossProduct(v1, v2), crossProduct(v3, v4));\n if (floatZero(r[2])) return null;\n return [r[0] / r[2], r[1] / r[2]];\n }\n function polarOffset(p, angle, length) {\n return [p[0] + Math.cos(angle) * length, p[1] - Math.sin(angle) * length];\n }\n function pointDistance(p1, p2) {\n return Math.hypot(p1[0] - p2[0], p1[1] - p2[1]);\n }\n function pointEqual(p1, p2) {\n return floatEqual(p1[0], p2[0]) && floatEqual(p1[1], p2[1]);\n }\n\n function ZigZagModifier() {}\n extendPrototype([ShapeModifier], ZigZagModifier);\n ZigZagModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amplitude = PropertyFactory.getProp(elem, data.s, 0, null, this);\n this.frequency = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this.pointsType = PropertyFactory.getProp(elem, data.pt, 0, null, this);\n this._isAnimated = this.amplitude.effectsSequence.length !== 0 || this.frequency.effectsSequence.length !== 0 || this.pointsType.effectsSequence.length !== 0;\n };\n function setPoint(outputBezier, point, angle, direction, amplitude, outAmplitude, inAmplitude) {\n var angO = angle - Math.PI / 2;\n var angI = angle + Math.PI / 2;\n var px = point[0] + Math.cos(angle) * direction * amplitude;\n var py = point[1] - Math.sin(angle) * direction * amplitude;\n outputBezier.setTripleAt(px, py, px + Math.cos(angO) * outAmplitude, py - Math.sin(angO) * outAmplitude, px + Math.cos(angI) * inAmplitude, py - Math.sin(angI) * inAmplitude, outputBezier.length());\n }\n function getPerpendicularVector(pt1, pt2) {\n var vector = [pt2[0] - pt1[0], pt2[1] - pt1[1]];\n var rot = -Math.PI * 0.5;\n var rotatedVector = [Math.cos(rot) * vector[0] - Math.sin(rot) * vector[1], Math.sin(rot) * vector[0] + Math.cos(rot) * vector[1]];\n return rotatedVector;\n }\n function getProjectingAngle(path, cur) {\n var prevIndex = cur === 0 ? path.length() - 1 : cur - 1;\n var nextIndex = (cur + 1) % path.length();\n var prevPoint = path.v[prevIndex];\n var nextPoint = path.v[nextIndex];\n var pVector = getPerpendicularVector(prevPoint, nextPoint);\n return Math.atan2(0, 1) - Math.atan2(pVector[1], pVector[0]);\n }\n function zigZagCorner(outputBezier, path, cur, amplitude, frequency, pointType, direction) {\n var angle = getProjectingAngle(path, cur);\n var point = path.v[cur % path._length];\n var prevPoint = path.v[cur === 0 ? path._length - 1 : cur - 1];\n var nextPoint = path.v[(cur + 1) % path._length];\n var prevDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - prevPoint[0], 2) + Math.pow(point[1] - prevPoint[1], 2)) : 0;\n var nextDist = pointType === 2 ? Math.sqrt(Math.pow(point[0] - nextPoint[0], 2) + Math.pow(point[1] - nextPoint[1], 2)) : 0;\n setPoint(outputBezier, path.v[cur % path._length], angle, direction, amplitude, nextDist / ((frequency + 1) * 2), prevDist / ((frequency + 1) * 2), pointType);\n }\n function zigZagSegment(outputBezier, segment, amplitude, frequency, pointType, direction) {\n for (var i = 0; i < frequency; i += 1) {\n var t = (i + 1) / (frequency + 1);\n var dist = pointType === 2 ? Math.sqrt(Math.pow(segment.points[3][0] - segment.points[0][0], 2) + Math.pow(segment.points[3][1] - segment.points[0][1], 2)) : 0;\n var angle = segment.normalAngle(t);\n var point = segment.point(t);\n setPoint(outputBezier, point, angle, direction, amplitude, dist / ((frequency + 1) * 2), dist / ((frequency + 1) * 2), pointType);\n direction = -direction;\n }\n return direction;\n }\n ZigZagModifier.prototype.processPath = function (path, amplitude, frequency, pointType) {\n var count = path._length;\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n if (!path.c) {\n count -= 1;\n }\n if (count === 0) return clonedPath;\n var direction = -1;\n var segment = PolynomialBezier.shapeSegment(path, 0);\n zigZagCorner(clonedPath, path, 0, amplitude, frequency, pointType, direction);\n for (var i = 0; i < count; i += 1) {\n direction = zigZagSegment(clonedPath, segment, amplitude, frequency, pointType, -direction);\n if (i === count - 1 && !path.c) {\n segment = null;\n } else {\n segment = PolynomialBezier.shapeSegment(path, (i + 1) % count);\n }\n zigZagCorner(clonedPath, path, i + 1, amplitude, frequency, pointType, direction);\n }\n return clonedPath;\n };\n ZigZagModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amplitude = this.amplitude.v;\n var frequency = Math.max(0, Math.round(this.frequency.v));\n var pointType = this.pointsType.v;\n if (amplitude !== 0) {\n var shapeData;\n var localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amplitude, frequency, pointType));\n }\n }\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n function linearOffset(p1, p2, amount) {\n var angle = Math.atan2(p2[0] - p1[0], p2[1] - p1[1]);\n return [polarOffset(p1, angle, amount), polarOffset(p2, angle, amount)];\n }\n function offsetSegment(segment, amount) {\n var p0;\n var p1a;\n var p1b;\n var p2b;\n var p2a;\n var p3;\n var e;\n e = linearOffset(segment.points[0], segment.points[1], amount);\n p0 = e[0];\n p1a = e[1];\n e = linearOffset(segment.points[1], segment.points[2], amount);\n p1b = e[0];\n p2b = e[1];\n e = linearOffset(segment.points[2], segment.points[3], amount);\n p2a = e[0];\n p3 = e[1];\n var p1 = lineIntersection(p0, p1a, p1b, p2b);\n if (p1 === null) p1 = p1a;\n var p2 = lineIntersection(p2a, p3, p1b, p2b);\n if (p2 === null) p2 = p2a;\n return new PolynomialBezier(p0, p1, p2, p3);\n }\n function joinLines(outputBezier, seg1, seg2, lineJoin, miterLimit) {\n var p0 = seg1.points[3];\n var p1 = seg2.points[0];\n\n // Bevel\n if (lineJoin === 3) return p0;\n\n // Connected, they don't need a joint\n if (pointEqual(p0, p1)) return p0;\n\n // Round\n if (lineJoin === 2) {\n var angleOut = -seg1.tangentAngle(1);\n var angleIn = -seg2.tangentAngle(0) + Math.PI;\n var center = lineIntersection(p0, polarOffset(p0, angleOut + Math.PI / 2, 100), p1, polarOffset(p1, angleOut + Math.PI / 2, 100));\n var radius = center ? pointDistance(center, p0) : pointDistance(p0, p1) / 2;\n var tan = polarOffset(p0, angleOut, 2 * radius * roundCorner);\n outputBezier.setXYAt(tan[0], tan[1], 'o', outputBezier.length() - 1);\n tan = polarOffset(p1, angleIn, 2 * radius * roundCorner);\n outputBezier.setTripleAt(p1[0], p1[1], p1[0], p1[1], tan[0], tan[1], outputBezier.length());\n return p1;\n }\n\n // Miter\n var t0 = pointEqual(p0, seg1.points[2]) ? seg1.points[0] : seg1.points[2];\n var t1 = pointEqual(p1, seg2.points[1]) ? seg2.points[3] : seg2.points[1];\n var intersection = lineIntersection(t0, p0, p1, t1);\n if (intersection && pointDistance(intersection, p0) < miterLimit) {\n outputBezier.setTripleAt(intersection[0], intersection[1], intersection[0], intersection[1], intersection[0], intersection[1], outputBezier.length());\n return intersection;\n }\n return p0;\n }\n function getIntersection(a, b) {\n var intersect = a.intersections(b);\n if (intersect.length && floatEqual(intersect[0][0], 1)) intersect.shift();\n if (intersect.length) return intersect[0];\n return null;\n }\n function pruneSegmentIntersection(a, b) {\n var outa = a.slice();\n var outb = b.slice();\n var intersect = getIntersection(a[a.length - 1], b[0]);\n if (intersect) {\n outa[a.length - 1] = a[a.length - 1].split(intersect[0])[0];\n outb[0] = b[0].split(intersect[1])[1];\n }\n if (a.length > 1 && b.length > 1) {\n intersect = getIntersection(a[0], b[b.length - 1]);\n if (intersect) {\n return [[a[0].split(intersect[0])[0]], [b[b.length - 1].split(intersect[1])[1]]];\n }\n }\n return [outa, outb];\n }\n function pruneIntersections(segments) {\n var e;\n for (var i = 1; i < segments.length; i += 1) {\n e = pruneSegmentIntersection(segments[i - 1], segments[i]);\n segments[i - 1] = e[0];\n segments[i] = e[1];\n }\n if (segments.length > 1) {\n e = pruneSegmentIntersection(segments[segments.length - 1], segments[0]);\n segments[segments.length - 1] = e[0];\n segments[0] = e[1];\n }\n return segments;\n }\n function offsetSegmentSplit(segment, amount) {\n /*\n We split each bezier segment into smaller pieces based\n on inflection points, this ensures the control point\n polygon is convex.\n (A cubic bezier can have none, one, or two inflection points)\n */\n var flex = segment.inflectionPoints();\n var left;\n var right;\n var split;\n var mid;\n if (flex.length === 0) {\n return [offsetSegment(segment, amount)];\n }\n if (flex.length === 1 || floatEqual(flex[1], 1)) {\n split = segment.split(flex[0]);\n left = split[0];\n right = split[1];\n return [offsetSegment(left, amount), offsetSegment(right, amount)];\n }\n split = segment.split(flex[0]);\n left = split[0];\n var t = (flex[1] - flex[0]) / (1 - flex[0]);\n split = split[1].split(t);\n mid = split[0];\n right = split[1];\n return [offsetSegment(left, amount), offsetSegment(mid, amount), offsetSegment(right, amount)];\n }\n function OffsetPathModifier() {}\n extendPrototype([ShapeModifier], OffsetPathModifier);\n OffsetPathModifier.prototype.initModifierProperties = function (elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this.miterLimit = PropertyFactory.getProp(elem, data.ml, 0, null, this);\n this.lineJoin = data.lj;\n this._isAnimated = this.amount.effectsSequence.length !== 0;\n };\n OffsetPathModifier.prototype.processPath = function (inputBezier, amount, lineJoin, miterLimit) {\n var outputBezier = shapePool.newElement();\n outputBezier.c = inputBezier.c;\n var count = inputBezier.length();\n if (!inputBezier.c) {\n count -= 1;\n }\n var i;\n var j;\n var segment;\n var multiSegments = [];\n for (i = 0; i < count; i += 1) {\n segment = PolynomialBezier.shapeSegment(inputBezier, i);\n multiSegments.push(offsetSegmentSplit(segment, amount));\n }\n if (!inputBezier.c) {\n for (i = count - 1; i >= 0; i -= 1) {\n segment = PolynomialBezier.shapeSegmentInverted(inputBezier, i);\n multiSegments.push(offsetSegmentSplit(segment, amount));\n }\n }\n multiSegments = pruneIntersections(multiSegments);\n\n // Add bezier segments to the output and apply line joints\n var lastPoint = null;\n var lastSeg = null;\n for (i = 0; i < multiSegments.length; i += 1) {\n var multiSegment = multiSegments[i];\n if (lastSeg) lastPoint = joinLines(outputBezier, lastSeg, multiSegment[0], lineJoin, miterLimit);\n lastSeg = multiSegment[multiSegment.length - 1];\n for (j = 0; j < multiSegment.length; j += 1) {\n segment = multiSegment[j];\n if (lastPoint && pointEqual(segment.points[0], lastPoint)) {\n outputBezier.setXYAt(segment.points[1][0], segment.points[1][1], 'o', outputBezier.length() - 1);\n } else {\n outputBezier.setTripleAt(segment.points[0][0], segment.points[0][1], segment.points[1][0], segment.points[1][1], segment.points[0][0], segment.points[0][1], outputBezier.length());\n }\n outputBezier.setTripleAt(segment.points[3][0], segment.points[3][1], segment.points[3][0], segment.points[3][1], segment.points[2][0], segment.points[2][1], outputBezier.length());\n lastPoint = segment.points[3];\n }\n }\n if (multiSegments.length) joinLines(outputBezier, lastSeg, multiSegments[0][0], lineJoin, miterLimit);\n return outputBezier;\n };\n OffsetPathModifier.prototype.processShapes = function (_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amount = this.amount.v;\n var miterLimit = this.miterLimit.v;\n var lineJoin = this.lineJoin;\n if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount, lineJoin, miterLimit));\n }\n }\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n\n function getFontProperties(fontData) {\n var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n var fWeight = 'normal';\n var fStyle = 'normal';\n var len = styles.length;\n var styleName;\n for (var i = 0; i < len; i += 1) {\n styleName = styles[i].toLowerCase();\n switch (styleName) {\n case 'italic':\n fStyle = 'italic';\n break;\n case 'bold':\n fWeight = '700';\n break;\n case 'black':\n fWeight = '900';\n break;\n case 'medium':\n fWeight = '500';\n break;\n case 'regular':\n case 'normal':\n fWeight = '400';\n break;\n case 'light':\n case 'thin':\n fWeight = '200';\n break;\n default:\n break;\n }\n }\n return {\n style: fStyle,\n weight: fontData.fWeight || fWeight\n };\n }\n\n var FontManager = function () {\n var maxWaitingTime = 5000;\n var emptyChar = {\n w: 0,\n size: 0,\n shapes: [],\n data: {\n shapes: []\n }\n };\n var combinedCharacters = [];\n // Hindi characters\n combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n var BLACK_FLAG_CODE_POINT = 127988;\n var CANCEL_TAG_CODE_POINT = 917631;\n var A_TAG_CODE_POINT = 917601;\n var Z_TAG_CODE_POINT = 917626;\n var VARIATION_SELECTOR_16_CODE_POINT = 65039;\n var ZERO_WIDTH_JOINER_CODE_POINT = 8205;\n var REGIONAL_CHARACTER_A_CODE_POINT = 127462;\n var REGIONAL_CHARACTER_Z_CODE_POINT = 127487;\n var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\n function trimFontOptions(font) {\n var familyArray = font.split(',');\n var i;\n var len = familyArray.length;\n var enabledFamilies = [];\n for (i = 0; i < len; i += 1) {\n if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n enabledFamilies.push(familyArray[i]);\n }\n }\n return enabledFamilies.join(',');\n }\n function setUpNode(font, family) {\n var parentNode = createTag('span');\n // Node is invisible to screen readers.\n parentNode.setAttribute('aria-hidden', true);\n parentNode.style.fontFamily = family;\n var node = createTag('span');\n // Characters that vary significantly among different fonts\n node.innerText = 'giItT1WQy@!-/#';\n // Visible - so we can measure it - but not on the screen\n parentNode.style.position = 'absolute';\n parentNode.style.left = '-10000px';\n parentNode.style.top = '-10000px';\n // Large font size makes even subtle changes obvious\n parentNode.style.fontSize = '300px';\n // Reset any font properties\n parentNode.style.fontVariant = 'normal';\n parentNode.style.fontStyle = 'normal';\n parentNode.style.fontWeight = 'normal';\n parentNode.style.letterSpacing = '0';\n parentNode.appendChild(node);\n document.body.appendChild(parentNode);\n\n // Remember width with no applied web font\n var width = node.offsetWidth;\n node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n return {\n node: node,\n w: width,\n parent: parentNode\n };\n }\n function checkLoadedFonts() {\n var i;\n var len = this.fonts.length;\n var node;\n var w;\n var loadedCount = len;\n for (i = 0; i < len; i += 1) {\n if (this.fonts[i].loaded) {\n loadedCount -= 1;\n } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].monoCase.node;\n w = this.fonts[i].monoCase.w;\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].sansCase.node;\n w = this.fonts[i].sansCase.w;\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n }\n }\n if (this.fonts[i].loaded) {\n this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n }\n }\n }\n if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n setTimeout(this.checkLoadedFontsBinded, 20);\n } else {\n setTimeout(this.setIsLoadedBinded, 10);\n }\n }\n function createHelper(fontData, def) {\n var engine = document.body && def ? 'svg' : 'canvas';\n var helper;\n var fontProps = getFontProperties(fontData);\n if (engine === 'svg') {\n var tHelper = createNS('text');\n tHelper.style.fontSize = '100px';\n // tHelper.style.fontFamily = fontData.fFamily;\n tHelper.setAttribute('font-family', fontData.fFamily);\n tHelper.setAttribute('font-style', fontProps.style);\n tHelper.setAttribute('font-weight', fontProps.weight);\n tHelper.textContent = '1';\n if (fontData.fClass) {\n tHelper.style.fontFamily = 'inherit';\n tHelper.setAttribute('class', fontData.fClass);\n } else {\n tHelper.style.fontFamily = fontData.fFamily;\n }\n def.appendChild(tHelper);\n helper = tHelper;\n } else {\n var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\n tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\n helper = tCanvasHelper;\n }\n function measure(text) {\n if (engine === 'svg') {\n helper.textContent = text;\n return helper.getComputedTextLength();\n }\n return helper.measureText(text).width;\n }\n return {\n measureText: measure\n };\n }\n function addFonts(fontData, defs) {\n if (!fontData) {\n this.isLoaded = true;\n return;\n }\n if (this.chars) {\n this.isLoaded = true;\n this.fonts = fontData.list;\n return;\n }\n if (!document.body) {\n this.isLoaded = true;\n fontData.list.forEach(function (data) {\n data.helper = createHelper(data);\n data.cache = {};\n });\n this.fonts = fontData.list;\n return;\n }\n var fontArr = fontData.list;\n var i;\n var len = fontArr.length;\n var _pendingFonts = len;\n for (i = 0; i < len; i += 1) {\n var shouldLoadFont = true;\n var loadedSelector;\n var j;\n fontArr[i].loaded = false;\n fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n if (!fontArr[i].fPath) {\n fontArr[i].loaded = true;\n _pendingFonts -= 1;\n } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n if (loadedSelector.length > 0) {\n shouldLoadFont = false;\n }\n if (shouldLoadFont) {\n var s = createTag('style');\n s.setAttribute('f-forigin', fontArr[i].fOrigin);\n s.setAttribute('f-origin', fontArr[i].origin);\n s.setAttribute('f-family', fontArr[i].fFamily);\n s.type = 'text/css';\n s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n defs.appendChild(s);\n }\n } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n if (shouldLoadFont) {\n var l = createTag('link');\n l.setAttribute('f-forigin', fontArr[i].fOrigin);\n l.setAttribute('f-origin', fontArr[i].origin);\n l.type = 'text/css';\n l.rel = 'stylesheet';\n l.href = fontArr[i].fPath;\n document.body.appendChild(l);\n }\n } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (fontArr[i].fPath === loadedSelector[j].src) {\n // Font is already loaded\n shouldLoadFont = false;\n }\n }\n if (shouldLoadFont) {\n var sc = createTag('link');\n sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n sc.setAttribute('f-origin', fontArr[i].origin);\n sc.setAttribute('rel', 'stylesheet');\n sc.setAttribute('href', fontArr[i].fPath);\n defs.appendChild(sc);\n }\n }\n fontArr[i].helper = createHelper(fontArr[i], defs);\n fontArr[i].cache = {};\n this.fonts.push(fontArr[i]);\n }\n if (_pendingFonts === 0) {\n this.isLoaded = true;\n } else {\n // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n // Adding this timeout seems to fix it\n setTimeout(this.checkLoadedFonts.bind(this), 100);\n }\n }\n function addChars(chars) {\n if (!chars) {\n return;\n }\n if (!this.chars) {\n this.chars = [];\n }\n var i;\n var len = chars.length;\n var j;\n var jLen = this.chars.length;\n var found;\n for (i = 0; i < len; i += 1) {\n j = 0;\n found = false;\n while (j < jLen) {\n if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n found = true;\n }\n j += 1;\n }\n if (!found) {\n this.chars.push(chars[i]);\n jLen += 1;\n }\n }\n }\n function getCharData(_char, style, font) {\n var i = 0;\n var len = this.chars.length;\n while (i < len) {\n if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n return this.chars[i];\n }\n i += 1;\n }\n if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console\n && !this._warned) {\n this._warned = true;\n console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console\n }\n return emptyChar;\n }\n function measureText(_char2, fontName, size) {\n var fontData = this.getFontByName(fontName);\n // Using the char instead of char.charCodeAt(0)\n // to avoid collisions between equal chars\n var index = _char2;\n if (!fontData.cache[index]) {\n var tHelper = fontData.helper;\n if (_char2 === ' ') {\n var doubleSize = tHelper.measureText('|' + _char2 + '|');\n var singleSize = tHelper.measureText('||');\n fontData.cache[index] = (doubleSize - singleSize) / 100;\n } else {\n fontData.cache[index] = tHelper.measureText(_char2) / 100;\n }\n }\n return fontData.cache[index] * size;\n }\n function getFontByName(name) {\n var i = 0;\n var len = this.fonts.length;\n while (i < len) {\n if (this.fonts[i].fName === name) {\n return this.fonts[i];\n }\n i += 1;\n }\n return this.fonts[0];\n }\n function getCodePoint(string) {\n var codePoint = 0;\n var first = string.charCodeAt(0);\n if (first >= 0xD800 && first <= 0xDBFF) {\n var second = string.charCodeAt(1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n codePoint = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n return codePoint;\n }\n\n // Skin tone modifiers\n function isModifier(firstCharCode, secondCharCode) {\n var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n return surrogateModifiers.indexOf(sum) !== -1;\n }\n function isZeroWidthJoiner(charCode) {\n return charCode === ZERO_WIDTH_JOINER_CODE_POINT;\n }\n\n // This codepoint may change the appearance of the preceding character.\n // If that is a symbol, dingbat or emoji, U+FE0F forces it to be rendered\n // as a colorful image as compared to a monochrome text variant.\n function isVariationSelector(charCode) {\n return charCode === VARIATION_SELECTOR_16_CODE_POINT;\n }\n\n // The regional indicator symbols are a set of 26 alphabetic Unicode\n /// characters (A–Z) intended to be used to encode ISO 3166-1 alpha-2\n // two-letter country codes in a way that allows optional special treatment.\n function isRegionalCode(string) {\n var codePoint = getCodePoint(string);\n if (codePoint >= REGIONAL_CHARACTER_A_CODE_POINT && codePoint <= REGIONAL_CHARACTER_Z_CODE_POINT) {\n return true;\n }\n return false;\n }\n\n // Some Emoji implementations represent combinations of\n // two “regional indicator” letters as a single flag symbol.\n function isFlagEmoji(string) {\n return isRegionalCode(string.substr(0, 2)) && isRegionalCode(string.substr(2, 2));\n }\n function isCombinedCharacter(_char3) {\n return combinedCharacters.indexOf(_char3) !== -1;\n }\n\n // Regional flags start with a BLACK_FLAG_CODE_POINT\n // folowed by 5 chars in the TAG range\n // and end with a CANCEL_TAG_CODE_POINT\n function isRegionalFlag(text, index) {\n var codePoint = getCodePoint(text.substr(index, 2));\n if (codePoint !== BLACK_FLAG_CODE_POINT) {\n return false;\n }\n var count = 0;\n index += 2;\n while (count < 5) {\n codePoint = getCodePoint(text.substr(index, 2));\n if (codePoint < A_TAG_CODE_POINT || codePoint > Z_TAG_CODE_POINT) {\n return false;\n }\n count += 1;\n index += 2;\n }\n return getCodePoint(text.substr(index, 2)) === CANCEL_TAG_CODE_POINT;\n }\n function setIsLoaded() {\n this.isLoaded = true;\n }\n var Font = function Font() {\n this.fonts = [];\n this.chars = null;\n this.typekitLoaded = 0;\n this.isLoaded = false;\n this._warned = false;\n this.initTime = Date.now();\n this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n };\n Font.isModifier = isModifier;\n Font.isZeroWidthJoiner = isZeroWidthJoiner;\n Font.isFlagEmoji = isFlagEmoji;\n Font.isRegionalCode = isRegionalCode;\n Font.isCombinedCharacter = isCombinedCharacter;\n Font.isRegionalFlag = isRegionalFlag;\n Font.isVariationSelector = isVariationSelector;\n Font.BLACK_FLAG_CODE_POINT = BLACK_FLAG_CODE_POINT;\n var fontPrototype = {\n addChars: addChars,\n addFonts: addFonts,\n getCharData: getCharData,\n getFontByName: getFontByName,\n measureText: measureText,\n checkLoadedFonts: checkLoadedFonts,\n setIsLoaded: setIsLoaded\n };\n Font.prototype = fontPrototype;\n return Font;\n }();\n\n function SlotManager(animationData) {\n this.animationData = animationData;\n }\n SlotManager.prototype.getProp = function (data) {\n if (this.animationData.slots && this.animationData.slots[data.sid]) {\n return Object.assign(data, this.animationData.slots[data.sid].p);\n }\n return data;\n };\n function slotFactory(animationData) {\n return new SlotManager(animationData);\n }\n\n function RenderableElement() {}\n RenderableElement.prototype = {\n initRenderable: function initRenderable() {\n // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n this.isInRange = false;\n // layer's display state\n this.hidden = false;\n // If layer's transparency equals 0, it can be hidden\n this.isTransparent = false;\n // list of animated components\n this.renderableComponents = [];\n },\n addRenderableComponent: function addRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) === -1) {\n this.renderableComponents.push(component);\n }\n },\n removeRenderableComponent: function removeRenderableComponent(component) {\n if (this.renderableComponents.indexOf(component) !== -1) {\n this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n }\n },\n prepareRenderableFrame: function prepareRenderableFrame(num) {\n this.checkLayerLimits(num);\n },\n checkTransparency: function checkTransparency() {\n if (this.finalTransform.mProp.o.v <= 0) {\n if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n this.isTransparent = true;\n this.hide();\n }\n } else if (this.isTransparent) {\n this.isTransparent = false;\n this.show();\n }\n },\n /**\n * @function\n * Initializes frame related properties.\n *\n * @param {number} num\n * current frame number in Layer's time\n *\n */\n checkLayerLimits: function checkLayerLimits(num) {\n if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n if (this.isInRange !== true) {\n this.globalData._mdf = true;\n this._mdf = true;\n this.isInRange = true;\n this.show();\n }\n } else if (this.isInRange !== false) {\n this.globalData._mdf = true;\n this.isInRange = false;\n this.hide();\n }\n },\n renderRenderable: function renderRenderable() {\n var i;\n var len = this.renderableComponents.length;\n for (i = 0; i < len; i += 1) {\n this.renderableComponents[i].renderFrame(this._isFirstFrame);\n }\n /* this.maskManager.renderFrame(this.finalTransform.mat);\n this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\n },\n sourceRectAtTime: function sourceRectAtTime() {\n return {\n top: 0,\n left: 0,\n width: 100,\n height: 100\n };\n },\n getLayerSize: function getLayerSize() {\n if (this.data.ty === 5) {\n return {\n w: this.data.textData.width,\n h: this.data.textData.height\n };\n }\n return {\n w: this.data.width,\n h: this.data.height\n };\n }\n };\n\n var getBlendMode = function () {\n var blendModeEnums = {\n 0: 'source-over',\n 1: 'multiply',\n 2: 'screen',\n 3: 'overlay',\n 4: 'darken',\n 5: 'lighten',\n 6: 'color-dodge',\n 7: 'color-burn',\n 8: 'hard-light',\n 9: 'soft-light',\n 10: 'difference',\n 11: 'exclusion',\n 12: 'hue',\n 13: 'saturation',\n 14: 'color',\n 15: 'luminosity'\n };\n return function (mode) {\n return blendModeEnums[mode] || '';\n };\n }();\n\n function SliderEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n function AngleEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n function ColorEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n function PointEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n function LayerIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n function MaskIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n function CheckboxEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n function NoValueEffect() {\n this.p = {};\n }\n\n function EffectsManager(data, element) {\n var effects = data.ef || [];\n this.effectElements = [];\n var i;\n var len = effects.length;\n var effectItem;\n for (i = 0; i < len; i += 1) {\n effectItem = new GroupEffect(effects[i], element);\n this.effectElements.push(effectItem);\n }\n }\n function GroupEffect(data, element) {\n this.init(data, element);\n }\n extendPrototype([DynamicPropertyContainer], GroupEffect);\n GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n GroupEffect.prototype.init = function (data, element) {\n this.data = data;\n this.effectElements = [];\n this.initDynamicPropertyContainer(element);\n var i;\n var len = this.data.ef.length;\n var eff;\n var effects = this.data.ef;\n for (i = 0; i < len; i += 1) {\n eff = null;\n switch (effects[i].ty) {\n case 0:\n eff = new SliderEffect(effects[i], element, this);\n break;\n case 1:\n eff = new AngleEffect(effects[i], element, this);\n break;\n case 2:\n eff = new ColorEffect(effects[i], element, this);\n break;\n case 3:\n eff = new PointEffect(effects[i], element, this);\n break;\n case 4:\n case 7:\n eff = new CheckboxEffect(effects[i], element, this);\n break;\n case 10:\n eff = new LayerIndexEffect(effects[i], element, this);\n break;\n case 11:\n eff = new MaskIndexEffect(effects[i], element, this);\n break;\n case 5:\n eff = new EffectsManager(effects[i], element, this);\n break;\n // case 6:\n default:\n eff = new NoValueEffect(effects[i], element, this);\n break;\n }\n if (eff) {\n this.effectElements.push(eff);\n }\n }\n };\n\n function BaseElement() {}\n BaseElement.prototype = {\n checkMasks: function checkMasks() {\n if (!this.data.hasMask) {\n return false;\n }\n var i = 0;\n var len = this.data.masksProperties.length;\n while (i < len) {\n if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n return true;\n }\n i += 1;\n }\n return false;\n },\n initExpressions: function initExpressions() {\n var expressionsInterfaces = getExpressionInterfaces();\n if (!expressionsInterfaces) {\n return;\n }\n var LayerExpressionInterface = expressionsInterfaces('layer');\n var EffectsExpressionInterface = expressionsInterfaces('effects');\n var ShapeExpressionInterface = expressionsInterfaces('shape');\n var TextExpressionInterface = expressionsInterfaces('text');\n var CompExpressionInterface = expressionsInterfaces('comp');\n this.layerInterface = LayerExpressionInterface(this);\n if (this.data.hasMask && this.maskManager) {\n this.layerInterface.registerMaskInterface(this.maskManager);\n }\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n this.layerInterface.registerEffectsInterface(effectsInterface);\n if (this.data.ty === 0 || this.data.xt) {\n this.compInterface = CompExpressionInterface(this);\n } else if (this.data.ty === 4) {\n this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n this.layerInterface.content = this.layerInterface.shapeInterface;\n } else if (this.data.ty === 5) {\n this.layerInterface.textInterface = TextExpressionInterface(this);\n this.layerInterface.text = this.layerInterface.textInterface;\n }\n },\n setBlendMode: function setBlendMode() {\n var blendModeValue = getBlendMode(this.data.bm);\n var elem = this.baseElement || this.layerElement;\n elem.style['mix-blend-mode'] = blendModeValue;\n },\n initBaseData: function initBaseData(data, globalData, comp) {\n this.globalData = globalData;\n this.comp = comp;\n this.data = data;\n this.layerId = createElementID();\n\n // Stretch factor for old animations missing this property.\n if (!this.data.sr) {\n this.data.sr = 1;\n }\n // effects manager\n this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n },\n getType: function getType() {\n return this.type;\n },\n sourceRectAtTime: function sourceRectAtTime() {}\n };\n\n /**\n * @file\n * Handles element's layer frame update.\n * Checks layer in point and out point\n *\n */\n\n function FrameElement() {}\n FrameElement.prototype = {\n /**\n * @function\n * Initializes frame related properties.\n *\n */\n initFrame: function initFrame() {\n // set to true when inpoint is rendered\n this._isFirstFrame = false;\n // list of animated properties\n this.dynamicProperties = [];\n // If layer has been modified in current tick this will be true\n this._mdf = false;\n },\n /**\n * @function\n * Calculates all dynamic values\n *\n * @param {number} num\n * current frame number in Layer's time\n * @param {boolean} isVisible\n * if layers is currently in range\n *\n */\n prepareProperties: function prepareProperties(num, isVisible) {\n var i;\n var len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n this.dynamicProperties[i].getValue();\n if (this.dynamicProperties[i]._mdf) {\n this.globalData._mdf = true;\n this._mdf = true;\n }\n }\n }\n },\n addDynamicProperty: function addDynamicProperty(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n }\n }\n };\n\n function FootageElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.footageData = globalData.imageLoader.getAsset(this.assetData);\n this.initBaseData(data, globalData, comp);\n }\n FootageElement.prototype.prepareFrame = function () {};\n extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n FootageElement.prototype.getBaseElement = function () {\n return null;\n };\n FootageElement.prototype.renderFrame = function () {};\n FootageElement.prototype.destroy = function () {};\n FootageElement.prototype.initExpressions = function () {\n var expressionsInterfaces = getExpressionInterfaces();\n if (!expressionsInterfaces) {\n return;\n }\n var FootageInterface = expressionsInterfaces('footage');\n this.layerInterface = FootageInterface(this);\n };\n FootageElement.prototype.getFootageData = function () {\n return this.footageData;\n };\n\n function AudioElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.initBaseData(data, globalData, comp);\n this._isPlaying = false;\n this._canPlay = false;\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.audio = this.globalData.audioController.createAudio(assetPath);\n this._currentTime = 0;\n this.globalData.audioController.addAudio(this);\n this._volumeMultiplier = 1;\n this._volume = 1;\n this._previousVolume = null;\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : {\n k: [100]\n }, 1, 0.01, this);\n }\n AudioElement.prototype.prepareFrame = function (num) {\n this.prepareRenderableFrame(num, true);\n this.prepareProperties(num, true);\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n this._currentTime = timeRemapped;\n } else {\n this._currentTime = num / this.data.sr;\n }\n this._volume = this.lv.v[0];\n var totalVolume = this._volume * this._volumeMultiplier;\n if (this._previousVolume !== totalVolume) {\n this._previousVolume = totalVolume;\n this.audio.volume(totalVolume);\n }\n };\n extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n AudioElement.prototype.renderFrame = function () {\n if (this.isInRange && this._canPlay) {\n if (!this._isPlaying) {\n this.audio.play();\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n this._isPlaying = true;\n } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n }\n }\n };\n AudioElement.prototype.show = function () {\n // this.audio.play()\n };\n AudioElement.prototype.hide = function () {\n this.audio.pause();\n this._isPlaying = false;\n };\n AudioElement.prototype.pause = function () {\n this.audio.pause();\n this._isPlaying = false;\n this._canPlay = false;\n };\n AudioElement.prototype.resume = function () {\n this._canPlay = true;\n };\n AudioElement.prototype.setRate = function (rateValue) {\n this.audio.rate(rateValue);\n };\n AudioElement.prototype.volume = function (volumeValue) {\n this._volumeMultiplier = volumeValue;\n this._previousVolume = volumeValue * this._volume;\n this.audio.volume(this._previousVolume);\n };\n AudioElement.prototype.getBaseElement = function () {\n return null;\n };\n AudioElement.prototype.destroy = function () {};\n AudioElement.prototype.sourceRectAtTime = function () {};\n AudioElement.prototype.initExpressions = function () {};\n\n function BaseRenderer() {}\n BaseRenderer.prototype.checkLayers = function (num) {\n var i;\n var len = this.layers.length;\n var data;\n this.completeLayers = true;\n for (i = len - 1; i >= 0; i -= 1) {\n if (!this.elements[i]) {\n data = this.layers[i];\n if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n this.buildItem(i);\n }\n }\n this.completeLayers = this.elements[i] ? this.completeLayers : false;\n }\n this.checkPendingElements();\n };\n BaseRenderer.prototype.createItem = function (layer) {\n switch (layer.ty) {\n case 2:\n return this.createImage(layer);\n case 0:\n return this.createComp(layer);\n case 1:\n return this.createSolid(layer);\n case 3:\n return this.createNull(layer);\n case 4:\n return this.createShape(layer);\n case 5:\n return this.createText(layer);\n case 6:\n return this.createAudio(layer);\n case 13:\n return this.createCamera(layer);\n case 15:\n return this.createFootage(layer);\n default:\n return this.createNull(layer);\n }\n };\n BaseRenderer.prototype.createCamera = function () {\n throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n };\n BaseRenderer.prototype.createAudio = function (data) {\n return new AudioElement(data, this.globalData, this);\n };\n BaseRenderer.prototype.createFootage = function (data) {\n return new FootageElement(data, this.globalData, this);\n };\n BaseRenderer.prototype.buildAllItems = function () {\n var i;\n var len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n this.buildItem(i);\n }\n this.checkPendingElements();\n };\n BaseRenderer.prototype.includeLayers = function (newLayers) {\n this.completeLayers = false;\n var i;\n var len = newLayers.length;\n var j;\n var jLen = this.layers.length;\n for (i = 0; i < len; i += 1) {\n j = 0;\n while (j < jLen) {\n if (this.layers[j].id === newLayers[i].id) {\n this.layers[j] = newLayers[i];\n break;\n }\n j += 1;\n }\n }\n };\n BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n this.globalData.projectInterface = pInterface;\n };\n BaseRenderer.prototype.initItems = function () {\n if (!this.globalData.progressiveLoad) {\n this.buildAllItems();\n }\n };\n BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n var elements = this.elements;\n var layers = this.layers;\n var i = 0;\n var len = layers.length;\n while (i < len) {\n if (layers[i].ind == parentName) {\n // eslint-disable-line eqeqeq\n if (!elements[i] || elements[i] === true) {\n this.buildItem(i);\n this.addPendingElement(element);\n } else {\n hierarchy.push(elements[i]);\n elements[i].setAsParent();\n if (layers[i].parent !== undefined) {\n this.buildElementParenting(element, layers[i].parent, hierarchy);\n } else {\n element.setHierarchy(hierarchy);\n }\n }\n }\n i += 1;\n }\n };\n BaseRenderer.prototype.addPendingElement = function (element) {\n this.pendingElements.push(element);\n };\n BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i]);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n BaseRenderer.prototype.getElementById = function (ind) {\n var i;\n var len = this.elements.length;\n for (i = 0; i < len; i += 1) {\n if (this.elements[i].data.ind === ind) {\n return this.elements[i];\n }\n }\n return null;\n };\n BaseRenderer.prototype.getElementByPath = function (path) {\n var pathValue = path.shift();\n var element;\n if (typeof pathValue === 'number') {\n element = this.elements[pathValue];\n } else {\n var i;\n var len = this.elements.length;\n for (i = 0; i < len; i += 1) {\n if (this.elements[i].data.nm === pathValue) {\n element = this.elements[i];\n break;\n }\n }\n }\n if (path.length === 0) {\n return element;\n }\n return element.getElementByPath(path);\n };\n BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n this.globalData.fontManager = new FontManager();\n this.globalData.slotManager = slotFactory(animData);\n this.globalData.fontManager.addChars(animData.chars);\n this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n this.globalData.imageLoader = this.animationItem.imagePreloader;\n this.globalData.audioController = this.animationItem.audioController;\n this.globalData.frameId = 0;\n this.globalData.frameRate = animData.fr;\n this.globalData.nm = animData.nm;\n this.globalData.compSize = {\n w: animData.w,\n h: animData.h\n };\n };\n\n var effectTypes = {\n TRANSFORM_EFFECT: 'transformEFfect'\n };\n\n function TransformElement() {}\n TransformElement.prototype = {\n initTransform: function initTransform() {\n var mat = new Matrix();\n this.finalTransform = {\n mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n o: 0\n },\n _matMdf: false,\n _localMatMdf: false,\n _opMdf: false,\n mat: mat,\n localMat: mat,\n localOpacity: 1\n };\n if (this.data.ao) {\n this.finalTransform.mProp.autoOriented = true;\n }\n\n // TODO: check TYPE 11: Guided elements\n if (this.data.ty !== 11) {\n // this.createElements();\n }\n },\n renderTransform: function renderTransform() {\n this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n if (this.hierarchy) {\n var mat;\n var finalMat = this.finalTransform.mat;\n var i = 0;\n var len = this.hierarchy.length;\n // Checking if any of the transformation matrices in the hierarchy chain has changed.\n if (!this.finalTransform._matMdf) {\n while (i < len) {\n if (this.hierarchy[i].finalTransform.mProp._mdf) {\n this.finalTransform._matMdf = true;\n break;\n }\n i += 1;\n }\n }\n if (this.finalTransform._matMdf) {\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n for (i = 0; i < len; i += 1) {\n finalMat.multiply(this.hierarchy[i].finalTransform.mProp.v);\n }\n }\n }\n if (!this.localTransforms || this.finalTransform._matMdf) {\n this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n }\n if (this.finalTransform._opMdf) {\n this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n }\n },\n renderLocalTransform: function renderLocalTransform() {\n if (this.localTransforms) {\n var i = 0;\n var len = this.localTransforms.length;\n this.finalTransform._localMatMdf = this.finalTransform._matMdf;\n if (!this.finalTransform._localMatMdf || !this.finalTransform._opMdf) {\n while (i < len) {\n if (this.localTransforms[i]._mdf) {\n this.finalTransform._localMatMdf = true;\n }\n if (this.localTransforms[i]._opMdf && !this.finalTransform._opMdf) {\n this.finalTransform.localOpacity = this.finalTransform.mProp.o.v;\n this.finalTransform._opMdf = true;\n }\n i += 1;\n }\n }\n if (this.finalTransform._localMatMdf) {\n var localMat = this.finalTransform.localMat;\n this.localTransforms[0].matrix.clone(localMat);\n for (i = 1; i < len; i += 1) {\n var lmat = this.localTransforms[i].matrix;\n localMat.multiply(lmat);\n }\n localMat.multiply(this.finalTransform.mat);\n }\n if (this.finalTransform._opMdf) {\n var localOp = this.finalTransform.localOpacity;\n for (i = 0; i < len; i += 1) {\n localOp *= this.localTransforms[i].opacity * 0.01;\n }\n this.finalTransform.localOpacity = localOp;\n }\n }\n },\n searchEffectTransforms: function searchEffectTransforms() {\n if (this.renderableEffectsManager) {\n var transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n if (transformEffects.length) {\n this.localTransforms = [];\n this.finalTransform.localMat = new Matrix();\n var i = 0;\n var len = transformEffects.length;\n for (i = 0; i < len; i += 1) {\n this.localTransforms.push(transformEffects[i]);\n }\n }\n }\n },\n globalToLocal: function globalToLocal(pt) {\n var transforms = [];\n transforms.push(this.finalTransform);\n var flag = true;\n var comp = this.comp;\n while (flag) {\n if (comp.finalTransform) {\n if (comp.data.hasMask) {\n transforms.splice(0, 0, comp.finalTransform);\n }\n comp = comp.comp;\n } else {\n flag = false;\n }\n }\n var i;\n var len = transforms.length;\n var ptNew;\n for (i = 0; i < len; i += 1) {\n ptNew = transforms[i].mat.applyToPointArray(0, 0, 0);\n // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n }\n return pt;\n },\n mHelper: new Matrix()\n };\n\n function MaskElement(data, element, globalData) {\n this.data = data;\n this.element = element;\n this.globalData = globalData;\n this.storedData = [];\n this.masksProperties = this.data.masksProperties || [];\n this.maskElement = null;\n var defs = this.globalData.defs;\n var i;\n var len = this.masksProperties ? this.masksProperties.length : 0;\n this.viewData = createSizedArray(len);\n this.solidPath = '';\n var path;\n var properties = this.masksProperties;\n var count = 0;\n var currentMasks = [];\n var j;\n var jLen;\n var layerId = createElementID();\n var rect;\n var expansor;\n var feMorph;\n var x;\n var maskType = 'clipPath';\n var maskRef = 'clip-path';\n for (i = 0; i < len; i += 1) {\n if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n maskType = 'mask';\n maskRef = 'mask';\n }\n if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\n rect = createNS('rect');\n rect.setAttribute('fill', '#ffffff');\n rect.setAttribute('width', this.element.comp.data.w || 0);\n rect.setAttribute('height', this.element.comp.data.h || 0);\n currentMasks.push(rect);\n } else {\n rect = null;\n }\n path = createNS('path');\n if (properties[i].mode === 'n') {\n // TODO move this to a factory or to a constructor\n this.viewData[i] = {\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n elem: path,\n lastPath: ''\n };\n defs.appendChild(path);\n } else {\n count += 1;\n path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n path.setAttribute('clip-rule', 'nonzero');\n var filterID;\n if (properties[i].x.k !== 0) {\n maskType = 'mask';\n maskRef = 'mask';\n x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n filterID = createElementID();\n expansor = createNS('filter');\n expansor.setAttribute('id', filterID);\n feMorph = createNS('feMorphology');\n feMorph.setAttribute('operator', 'erode');\n feMorph.setAttribute('in', 'SourceGraphic');\n feMorph.setAttribute('radius', '0');\n expansor.appendChild(feMorph);\n defs.appendChild(expansor);\n path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n } else {\n feMorph = null;\n x = null;\n }\n\n // TODO move this to a factory or to a constructor\n this.storedData[i] = {\n elem: path,\n x: x,\n expan: feMorph,\n lastPath: '',\n lastOperator: '',\n filterId: filterID,\n lastRadius: 0\n };\n if (properties[i].mode === 'i') {\n jLen = currentMasks.length;\n var g = createNS('g');\n for (j = 0; j < jLen; j += 1) {\n g.appendChild(currentMasks[j]);\n }\n var mask = createNS('mask');\n mask.setAttribute('mask-type', 'alpha');\n mask.setAttribute('id', layerId + '_' + count);\n mask.appendChild(path);\n defs.appendChild(mask);\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\n currentMasks.length = 0;\n currentMasks.push(g);\n } else {\n currentMasks.push(path);\n }\n if (properties[i].inv && !this.solidPath) {\n this.solidPath = this.createLayerSolidPath();\n }\n // TODO move this to a factory or to a constructor\n this.viewData[i] = {\n elem: path,\n lastPath: '',\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n invRect: rect\n };\n if (!this.viewData[i].prop.k) {\n this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n }\n }\n this.maskElement = createNS(maskType);\n len = currentMasks.length;\n for (i = 0; i < len; i += 1) {\n this.maskElement.appendChild(currentMasks[i]);\n }\n if (count > 0) {\n this.maskElement.setAttribute('id', layerId);\n this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\n defs.appendChild(this.maskElement);\n }\n if (this.viewData.length) {\n this.element.addRenderableComponent(this);\n }\n }\n MaskElement.prototype.getMaskProperty = function (pos) {\n return this.viewData[pos].prop;\n };\n MaskElement.prototype.renderFrame = function (isFirstFrame) {\n var finalMat = this.element.finalTransform.mat;\n var i;\n var len = this.masksProperties.length;\n for (i = 0; i < len; i += 1) {\n if (this.viewData[i].prop._mdf || isFirstFrame) {\n this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n if (this.viewData[i].op._mdf || isFirstFrame) {\n this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n }\n if (this.masksProperties[i].mode !== 'n') {\n if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n }\n if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n var feMorph = this.storedData[i].expan;\n if (this.storedData[i].x.v < 0) {\n if (this.storedData[i].lastOperator !== 'erode') {\n this.storedData[i].lastOperator = 'erode';\n this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\n }\n feMorph.setAttribute('radius', -this.storedData[i].x.v);\n } else {\n if (this.storedData[i].lastOperator !== 'dilate') {\n this.storedData[i].lastOperator = 'dilate';\n this.storedData[i].elem.setAttribute('filter', null);\n }\n this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n }\n }\n }\n }\n };\n MaskElement.prototype.getMaskelement = function () {\n return this.maskElement;\n };\n MaskElement.prototype.createLayerSolidPath = function () {\n var path = 'M0,0 ';\n path += ' h' + this.globalData.compSize.w;\n path += ' v' + this.globalData.compSize.h;\n path += ' h-' + this.globalData.compSize.w;\n path += ' v-' + this.globalData.compSize.h + ' ';\n return path;\n };\n MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n var i;\n var len;\n len = pathNodes._length;\n for (i = 1; i < len; i += 1) {\n // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n }\n // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n if (pathNodes.c && len > 1) {\n pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n }\n // pathNodes.__renderedString = pathString;\n\n if (viewData.lastPath !== pathString) {\n var pathShapeValue = '';\n if (viewData.elem) {\n if (pathNodes.c) {\n pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n }\n viewData.elem.setAttribute('d', pathShapeValue);\n }\n viewData.lastPath = pathString;\n }\n };\n MaskElement.prototype.destroy = function () {\n this.element = null;\n this.globalData = null;\n this.maskElement = null;\n this.data = null;\n this.masksProperties = null;\n };\n\n var filtersFactory = function () {\n var ob = {};\n ob.createFilter = createFilter;\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n function createFilter(filId, skipCoordinates) {\n var fil = createNS('filter');\n fil.setAttribute('id', filId);\n if (skipCoordinates !== true) {\n fil.setAttribute('filterUnits', 'objectBoundingBox');\n fil.setAttribute('x', '0%');\n fil.setAttribute('y', '0%');\n fil.setAttribute('width', '100%');\n fil.setAttribute('height', '100%');\n }\n return fil;\n }\n function createAlphaToLuminanceFilter() {\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1');\n return feColorMatrix;\n }\n return ob;\n }();\n\n var featureSupport = function () {\n var ob = {\n maskType: true,\n svgLumaHidden: true,\n offscreenCanvas: typeof OffscreenCanvas !== 'undefined'\n };\n if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n ob.maskType = false;\n }\n if (/firefox/i.test(navigator.userAgent)) {\n ob.svgLumaHidden = false;\n }\n return ob;\n }();\n\n var registeredEffects$1 = {};\n var idPrefix = 'filter_result_';\n function SVGEffects(elem) {\n var i;\n var source = 'SourceGraphic';\n var len = elem.data.ef ? elem.data.ef.length : 0;\n var filId = createElementID();\n var fil = filtersFactory.createFilter(filId, true);\n var count = 0;\n this.filters = [];\n var filterManager;\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n var type = elem.data.ef[i].ty;\n if (registeredEffects$1[type]) {\n var Effect = registeredEffects$1[type].effect;\n filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n source = idPrefix + count;\n if (registeredEffects$1[type].countsAsEffect) {\n count += 1;\n }\n }\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n if (count) {\n elem.globalData.defs.appendChild(fil);\n elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i;\n var len = this.filters.length;\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n SVGEffects.prototype.getEffects = function (type) {\n var i;\n var len = this.filters.length;\n var effects = [];\n for (i = 0; i < len; i += 1) {\n if (this.filters[i].type === type) {\n effects.push(this.filters[i]);\n }\n }\n return effects;\n };\n function registerEffect$1(id, effect, countsAsEffect) {\n registeredEffects$1[id] = {\n effect: effect,\n countsAsEffect: countsAsEffect\n };\n }\n\n function SVGBaseElement() {}\n SVGBaseElement.prototype = {\n initRendererElement: function initRendererElement() {\n this.layerElement = createNS('g');\n },\n createContainerElements: function createContainerElements() {\n this.matteElement = createNS('g');\n this.transformedElement = this.layerElement;\n this.maskedElement = this.layerElement;\n this._sizeChanged = false;\n var layerElementParent = null;\n // If this layer acts as a mask for the following layer\n if (this.data.td) {\n this.matteMasks = {};\n var gg = createNS('g');\n gg.setAttribute('id', this.layerId);\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n this.globalData.defs.appendChild(gg);\n } else if (this.data.tt) {\n this.matteElement.appendChild(this.layerElement);\n layerElementParent = this.matteElement;\n this.baseElement = this.matteElement;\n } else {\n this.baseElement = this.layerElement;\n }\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n if (this.data.ty === 0 && !this.data.hd) {\n var cp = createNS('clipPath');\n var pt = createNS('path');\n pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n var clipId = createElementID();\n cp.setAttribute('id', clipId);\n cp.appendChild(pt);\n this.globalData.defs.appendChild(cp);\n if (this.checkMasks()) {\n var cpGroup = createNS('g');\n cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n cpGroup.appendChild(this.layerElement);\n this.transformedElement = cpGroup;\n if (layerElementParent) {\n layerElementParent.appendChild(this.transformedElement);\n } else {\n this.baseElement = this.transformedElement;\n }\n } else {\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n }\n }\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n if (this.finalTransform._localMatMdf) {\n this.transformedElement.setAttribute('transform', this.finalTransform.localMat.to2dCSS());\n }\n if (this.finalTransform._opMdf) {\n this.transformedElement.setAttribute('opacity', this.finalTransform.localOpacity);\n }\n },\n destroyBaseElement: function destroyBaseElement() {\n this.layerElement = null;\n this.matteElement = null;\n this.maskManager.destroy();\n },\n getBaseElement: function getBaseElement() {\n if (this.data.hd) {\n return null;\n }\n return this.baseElement;\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n this.renderableEffectsManager = new SVGEffects(this);\n this.searchEffectTransforms();\n },\n getMatte: function getMatte(matteType) {\n // This should not be a common case. But for backward compatibility, we'll create the matte object.\n // It solves animations that have two consecutive layers marked as matte masks.\n // Which is an undefined behavior in AE.\n if (!this.matteMasks) {\n this.matteMasks = {};\n }\n if (!this.matteMasks[matteType]) {\n var id = this.layerId + '_' + matteType;\n var filId;\n var fil;\n var useElement;\n var gg;\n if (matteType === 1 || matteType === 3) {\n var masker = createNS('mask');\n masker.setAttribute('id', id);\n masker.setAttribute('mask-type', matteType === 3 ? 'luminance' : 'alpha');\n useElement = createNS('use');\n useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n masker.appendChild(useElement);\n this.globalData.defs.appendChild(masker);\n if (!featureSupport.maskType && matteType === 1) {\n masker.setAttribute('mask-type', 'luminance');\n filId = createElementID();\n fil = filtersFactory.createFilter(filId);\n this.globalData.defs.appendChild(fil);\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n gg.appendChild(useElement);\n masker.appendChild(gg);\n gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n }\n } else if (matteType === 2) {\n var maskGroup = createNS('mask');\n maskGroup.setAttribute('id', id);\n maskGroup.setAttribute('mask-type', 'alpha');\n var maskGrouper = createNS('g');\n maskGroup.appendChild(maskGrouper);\n filId = createElementID();\n fil = filtersFactory.createFilter(filId);\n /// /\n var feCTr = createNS('feComponentTransfer');\n feCTr.setAttribute('in', 'SourceGraphic');\n fil.appendChild(feCTr);\n var feFunc = createNS('feFuncA');\n feFunc.setAttribute('type', 'table');\n feFunc.setAttribute('tableValues', '1.0 0.0');\n feCTr.appendChild(feFunc);\n /// /\n this.globalData.defs.appendChild(fil);\n var alphaRect = createNS('rect');\n alphaRect.setAttribute('width', this.comp.data.w);\n alphaRect.setAttribute('height', this.comp.data.h);\n alphaRect.setAttribute('x', '0');\n alphaRect.setAttribute('y', '0');\n alphaRect.setAttribute('fill', '#ffffff');\n alphaRect.setAttribute('opacity', '0');\n maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n maskGrouper.appendChild(alphaRect);\n useElement = createNS('use');\n useElement.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + this.layerId);\n maskGrouper.appendChild(useElement);\n if (!featureSupport.maskType) {\n maskGroup.setAttribute('mask-type', 'luminance');\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS('g');\n maskGrouper.appendChild(alphaRect);\n gg.appendChild(this.layerElement);\n maskGrouper.appendChild(gg);\n }\n this.globalData.defs.appendChild(maskGroup);\n }\n this.matteMasks[matteType] = id;\n }\n return this.matteMasks[matteType];\n },\n setMatte: function setMatte(id) {\n if (!this.matteElement) {\n return;\n }\n this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n }\n };\n\n /**\n * @file\n * Handles AE's layer parenting property.\n *\n */\n\n function HierarchyElement() {}\n HierarchyElement.prototype = {\n /**\n * @function\n * Initializes hierarchy properties\n *\n */\n initHierarchy: function initHierarchy() {\n // element's parent list\n this.hierarchy = [];\n // if element is parent of another layer _isParent will be true\n this._isParent = false;\n this.checkParenting();\n },\n /**\n * @function\n * Sets layer's hierarchy.\n * @param {array} hierarch\n * layer's parent list\n *\n */\n setHierarchy: function setHierarchy(hierarchy) {\n this.hierarchy = hierarchy;\n },\n /**\n * @function\n * Sets layer as parent.\n *\n */\n setAsParent: function setAsParent() {\n this._isParent = true;\n },\n /**\n * @function\n * Searches layer's parenting chain\n *\n */\n checkParenting: function checkParenting() {\n if (this.data.parent !== undefined) {\n this.comp.buildElementParenting(this, this.data.parent, []);\n }\n }\n };\n\n function RenderableDOMElement() {}\n (function () {\n var _prototype = {\n initElement: function initElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n },\n hide: function hide() {\n // console.log('HIDE', this);\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'none';\n this.hidden = true;\n }\n },\n show: function show() {\n // console.log('SHOW', this);\n if (this.isInRange && !this.isTransparent) {\n if (!this.data.hd) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = 'block';\n }\n this.hidden = false;\n this._isFirstFrame = true;\n }\n },\n renderFrame: function renderFrame() {\n // If it is exported as hidden (data.hd === true) no need to render\n // If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n this.renderTransform();\n this.renderRenderable();\n this.renderLocalTransform();\n this.renderElement();\n this.renderInnerContent();\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n renderInnerContent: function renderInnerContent() {},\n prepareFrame: function prepareFrame(num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n this.checkTransparency();\n },\n destroy: function destroy() {\n this.innerElem = null;\n this.destroyBaseElement();\n }\n };\n extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n })();\n\n function IImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n if (this.assetData && this.assetData.sid) {\n this.assetData = globalData.slotManager.getProp(this.assetData);\n }\n this.initElement(data, globalData, comp);\n this.sourceRect = {\n top: 0,\n left: 0,\n width: this.assetData.w,\n height: this.assetData.h\n };\n }\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n IImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.innerElem = createNS('image');\n this.innerElem.setAttribute('width', this.assetData.w + 'px');\n this.innerElem.setAttribute('height', this.assetData.h + 'px');\n this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.innerElem);\n };\n IImageElement.prototype.sourceRectAtTime = function () {\n return this.sourceRect;\n };\n\n function ProcessedElement(element, position) {\n this.elem = element;\n this.pos = position;\n }\n\n function IShapeElement() {}\n IShapeElement.prototype = {\n addShapeToModifiers: function addShapeToModifiers(data) {\n var i;\n var len = this.shapeModifiers.length;\n for (i = 0; i < len; i += 1) {\n this.shapeModifiers[i].addShape(data);\n }\n },\n isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\n var i = 0;\n var len = this.shapeModifiers.length;\n while (i < len) {\n if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n return true;\n }\n }\n return false;\n },\n renderModifiers: function renderModifiers() {\n if (!this.shapeModifiers.length) {\n return;\n }\n var i;\n var len = this.shapes.length;\n for (i = 0; i < len; i += 1) {\n this.shapes[i].sh.reset();\n }\n len = this.shapeModifiers.length;\n var shouldBreakProcess;\n for (i = len - 1; i >= 0; i -= 1) {\n shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame);\n // workaround to fix cases where a repeater resets the shape so the following processes get called twice\n // TODO: find a better solution for this\n if (shouldBreakProcess) {\n break;\n }\n }\n },\n searchProcessedElement: function searchProcessedElement(elem) {\n var elements = this.processedElements;\n var i = 0;\n var len = elements.length;\n while (i < len) {\n if (elements[i].elem === elem) {\n return elements[i].pos;\n }\n i += 1;\n }\n return 0;\n },\n addProcessedElement: function addProcessedElement(elem, pos) {\n var elements = this.processedElements;\n var i = elements.length;\n while (i) {\n i -= 1;\n if (elements[i].elem === elem) {\n elements[i].pos = pos;\n return;\n }\n }\n elements.push(new ProcessedElement(elem, pos));\n },\n prepareFrame: function prepareFrame(num) {\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n }\n };\n\n var lineCapEnum = {\n 1: 'butt',\n 2: 'round',\n 3: 'square'\n };\n var lineJoinEnum = {\n 1: 'miter',\n 2: 'round',\n 3: 'bevel'\n };\n\n function SVGShapeData(transformers, level, shape) {\n this.caches = [];\n this.styles = [];\n this.transformers = transformers;\n this.lStr = '';\n this.sh = shape;\n this.lvl = level;\n // TODO find if there are some cases where _isAnimated can be false.\n // For now, since shapes add up with other shapes. They have to be calculated every time.\n // One way of finding out is checking if all styles associated to this shape depend only of this shape\n this._isAnimated = !!shape.k;\n // TODO: commenting this for now since all shapes are animated\n var i = 0;\n var len = transformers.length;\n while (i < len) {\n if (transformers[i].mProps.dynamicProperties.length) {\n this._isAnimated = true;\n break;\n }\n i += 1;\n }\n }\n SVGShapeData.prototype.setAsAnimated = function () {\n this._isAnimated = true;\n };\n\n function SVGStyleData(data, level) {\n this.data = data;\n this.type = data.ty;\n this.d = '';\n this.lvl = level;\n this._mdf = false;\n this.closed = data.hd === true;\n this.pElem = createNS('path');\n this.msElem = null;\n }\n SVGStyleData.prototype.reset = function () {\n this.d = '';\n this._mdf = false;\n };\n\n function DashProperty(elem, data, renderer, container) {\n this.elem = elem;\n this.frameId = -1;\n this.dataProps = createSizedArray(data.length);\n this.renderer = renderer;\n this.k = false;\n this.dashStr = '';\n this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n this.dashoffset = createTypedArray('float32', 1);\n this.initDynamicPropertyContainer(container);\n var i;\n var len = data.length || 0;\n var prop;\n for (i = 0; i < len; i += 1) {\n prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n this.k = prop.k || this.k;\n this.dataProps[i] = {\n n: data[i].n,\n p: prop\n };\n }\n if (!this.k) {\n this.getValue(true);\n }\n this._isAnimated = this.k;\n }\n DashProperty.prototype.getValue = function (forceRender) {\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || forceRender;\n if (this._mdf) {\n var i = 0;\n var len = this.dataProps.length;\n if (this.renderer === 'svg') {\n this.dashStr = '';\n }\n for (i = 0; i < len; i += 1) {\n if (this.dataProps[i].n !== 'o') {\n if (this.renderer === 'svg') {\n this.dashStr += ' ' + this.dataProps[i].p.v;\n } else {\n this.dashArray[i] = this.dataProps[i].p.v;\n }\n } else {\n this.dashoffset[0] = this.dataProps[i].p.v;\n }\n }\n }\n };\n extendPrototype([DynamicPropertyContainer], DashProperty);\n\n function SVGStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n this._isAnimated = !!this._isAnimated;\n }\n extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\n function SVGFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n }\n extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\n function SVGNoStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.style = styleOb;\n }\n extendPrototype([DynamicPropertyContainer], SVGNoStyleData);\n\n function GradientProperty(elem, data, container) {\n this.data = data;\n this.c = createTypedArray('uint8c', data.p * 4);\n var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\n this.o = createTypedArray('float32', cLength);\n this._cmdf = false;\n this._omdf = false;\n this._collapsable = this.checkCollapsable();\n this._hasOpacity = cLength;\n this.initDynamicPropertyContainer(container);\n this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n this.k = this.prop.k;\n this.getValue(true);\n }\n GradientProperty.prototype.comparePoints = function (values, points) {\n var i = 0;\n var len = this.o.length / 2;\n var diff;\n while (i < len) {\n diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n if (diff > 0.01) {\n return false;\n }\n i += 1;\n }\n return true;\n };\n GradientProperty.prototype.checkCollapsable = function () {\n if (this.o.length / 2 !== this.c.length / 4) {\n return false;\n }\n if (this.data.k.k[0].s) {\n var i = 0;\n var len = this.data.k.k.length;\n while (i < len) {\n if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n return false;\n }\n i += 1;\n }\n } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n return false;\n }\n return true;\n };\n GradientProperty.prototype.getValue = function (forceRender) {\n this.prop.getValue();\n this._mdf = false;\n this._cmdf = false;\n this._omdf = false;\n if (this.prop._mdf || forceRender) {\n var i;\n var len = this.data.p * 4;\n var mult;\n var val;\n for (i = 0; i < len; i += 1) {\n mult = i % 4 === 0 ? 100 : 255;\n val = Math.round(this.prop.v[i] * mult);\n if (this.c[i] !== val) {\n this.c[i] = val;\n this._cmdf = !forceRender;\n }\n }\n if (this.o.length) {\n len = this.prop.v.length;\n for (i = this.data.p * 4; i < len; i += 1) {\n mult = i % 2 === 0 ? 100 : 1;\n val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n if (this.o[i - this.data.p * 4] !== val) {\n this.o[i - this.data.p * 4] = val;\n this._omdf = !forceRender;\n }\n }\n }\n this._mdf = !forceRender;\n }\n };\n extendPrototype([DynamicPropertyContainer], GradientProperty);\n\n function SVGGradientFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.initGradientData(elem, data, styleOb);\n }\n SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n this.h = PropertyFactory.getProp(elem, data.h || {\n k: 0\n }, 0, 0.01, this);\n this.a = PropertyFactory.getProp(elem, data.a || {\n k: 0\n }, 0, degToRads, this);\n this.g = new GradientProperty(elem, data.g, this);\n this.style = styleOb;\n this.stops = [];\n this.setGradientData(styleOb.pElem, data);\n this.setGradientOpacity(data, styleOb);\n this._isAnimated = !!this._isAnimated;\n };\n SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n var gradientId = createElementID();\n var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n gfill.setAttribute('id', gradientId);\n gfill.setAttribute('spreadMethod', 'pad');\n gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n var stops = [];\n var stop;\n var j;\n var jLen;\n jLen = data.g.p * 4;\n for (j = 0; j < jLen; j += 4) {\n stop = createNS('stop');\n gfill.appendChild(stop);\n stops.push(stop);\n }\n pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n this.gf = gfill;\n this.cst = stops;\n };\n SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n if (this.g._hasOpacity && !this.g._collapsable) {\n var stop;\n var j;\n var jLen;\n var mask = createNS('mask');\n var maskElement = createNS('path');\n mask.appendChild(maskElement);\n var opacityId = createElementID();\n var maskId = createElementID();\n mask.setAttribute('id', maskId);\n var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n opFill.setAttribute('id', opacityId);\n opFill.setAttribute('spreadMethod', 'pad');\n opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n var stops = this.stops;\n for (j = data.g.p * 4; j < jLen; j += 2) {\n stop = createNS('stop');\n stop.setAttribute('stop-color', 'rgb(255,255,255)');\n opFill.appendChild(stop);\n stops.push(stop);\n }\n maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n if (data.ty === 'gs') {\n maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n if (data.lj === 1) {\n maskElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n this.of = opFill;\n this.ms = mask;\n this.ost = stops;\n this.maskId = maskId;\n styleOb.msElem = maskElement;\n }\n };\n extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n\n function SVGGradientStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n this.initGradientData(elem, data, styleOb);\n this._isAnimated = !!this._isAnimated;\n }\n extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\n function ShapeGroupData() {\n this.it = [];\n this.prevViewData = [];\n this.gr = createNS('g');\n }\n\n function SVGTransformData(mProps, op, container) {\n this.transform = {\n mProps: mProps,\n op: op,\n container: container\n };\n this.elements = [];\n this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n }\n\n var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n if (length === 0) {\n return '';\n }\n var _o = pathNodes.o;\n var _i = pathNodes.i;\n var _v = pathNodes.v;\n var i;\n var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n for (i = 1; i < length; i += 1) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n }\n if (closed && length) {\n shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n shapeString += 'z';\n }\n return shapeString;\n };\n\n var SVGElementsRenderer = function () {\n var _identityMatrix = new Matrix();\n var _matrixHelper = new Matrix();\n var ob = {\n createRenderFunction: createRenderFunction\n };\n function createRenderFunction(data) {\n switch (data.ty) {\n case 'fl':\n return renderFill;\n case 'gf':\n return renderGradient;\n case 'gs':\n return renderGradientStroke;\n case 'st':\n return renderStroke;\n case 'sh':\n case 'el':\n case 'rc':\n case 'sr':\n return renderPath;\n case 'tr':\n return renderContentTransform;\n case 'no':\n return renderNoop;\n default:\n return null;\n }\n }\n function renderContentTransform(styleData, itemData, isFirstFrame) {\n if (isFirstFrame || itemData.transform.op._mdf) {\n itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n }\n if (isFirstFrame || itemData.transform.mProps._mdf) {\n itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n }\n }\n function renderNoop() {}\n function renderPath(styleData, itemData, isFirstFrame) {\n var j;\n var jLen;\n var pathStringTransformed;\n var redraw;\n var pathNodes;\n var l;\n var lLen = itemData.styles.length;\n var lvl = itemData.lvl;\n var paths;\n var mat;\n var iterations;\n var k;\n for (l = 0; l < lLen; l += 1) {\n redraw = itemData.sh._mdf || isFirstFrame;\n if (itemData.styles[l].lvl < lvl) {\n mat = _matrixHelper.reset();\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n while (!redraw && iterations > 0) {\n redraw = itemData.transformers[k].mProps._mdf || redraw;\n iterations -= 1;\n k -= 1;\n }\n if (redraw) {\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n while (iterations > 0) {\n mat.multiply(itemData.transformers[k].mProps.v);\n iterations -= 1;\n k -= 1;\n }\n }\n } else {\n mat = _identityMatrix;\n }\n paths = itemData.sh.paths;\n jLen = paths._length;\n if (redraw) {\n pathStringTransformed = '';\n for (j = 0; j < jLen; j += 1) {\n pathNodes = paths.shapes[j];\n if (pathNodes && pathNodes._length) {\n pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n }\n }\n itemData.caches[l] = pathStringTransformed;\n } else {\n pathStringTransformed = itemData.caches[l];\n }\n itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n }\n }\n function renderFill(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n if (itemData.c._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n }\n }\n function renderGradientStroke(styleData, itemData, isFirstFrame) {\n renderGradient(styleData, itemData, isFirstFrame);\n renderStroke(styleData, itemData, isFirstFrame);\n }\n function renderGradient(styleData, itemData, isFirstFrame) {\n var gfill = itemData.gf;\n var hasOpacity = itemData.g._hasOpacity;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n if (itemData.o._mdf || isFirstFrame) {\n var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n itemData.style.pElem.setAttribute(attr, itemData.o.v);\n }\n if (itemData.s._mdf || isFirstFrame) {\n var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n gfill.setAttribute(attr1, pt1[0]);\n gfill.setAttribute(attr2, pt1[1]);\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute(attr1, pt1[0]);\n itemData.of.setAttribute(attr2, pt1[1]);\n }\n }\n var stops;\n var i;\n var len;\n var stop;\n if (itemData.g._cmdf || isFirstFrame) {\n stops = itemData.cst;\n var cValues = itemData.g.c;\n len = stops.length;\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n stop.setAttribute('offset', cValues[i * 4] + '%');\n stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n }\n }\n if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n var oValues = itemData.g.o;\n if (itemData.g._collapsable) {\n stops = itemData.cst;\n } else {\n stops = itemData.ost;\n }\n len = stops.length;\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n if (!itemData.g._collapsable) {\n stop.setAttribute('offset', oValues[i * 2] + '%');\n }\n stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n }\n }\n if (styleData.t === 1) {\n if (itemData.e._mdf || isFirstFrame) {\n gfill.setAttribute('x2', pt2[0]);\n gfill.setAttribute('y2', pt2[1]);\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('x2', pt2[0]);\n itemData.of.setAttribute('y2', pt2[1]);\n }\n }\n } else {\n var rad;\n if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n gfill.setAttribute('r', rad);\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('r', rad);\n }\n }\n if (itemData.s._mdf || itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n if (!rad) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n }\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n gfill.setAttribute('fx', x);\n gfill.setAttribute('fy', y);\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute('fx', x);\n itemData.of.setAttribute('fy', y);\n }\n }\n // gfill.setAttribute('fy','200');\n }\n }\n function renderStroke(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n var d = itemData.d;\n if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n }\n if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n }\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n }\n if (itemData.w._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n if (styleElem.msElem) {\n styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n }\n }\n }\n return ob;\n }();\n\n function SVGShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = [];\n // Full shape data\n this.shapesData = data.shapes;\n // List of styles that will be applied to shapes\n this.stylesList = [];\n // List of modifiers that will be applied to shapes\n this.shapeModifiers = [];\n // List of items in shape tree\n this.itemsData = [];\n // List of items in previous shape tree\n this.processedElements = [];\n // List of animated components\n this.animatedContents = [];\n this.initElement(data, globalData, comp);\n // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n this.prevViewData = [];\n // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n }\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n SVGShapeElement.prototype.initSecondaryElement = function () {};\n SVGShapeElement.prototype.identityMatrix = new Matrix();\n SVGShapeElement.prototype.buildExpressionInterface = function () {};\n SVGShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n };\n\n /*\n This method searches for multiple shapes that affect a single element and one of them is animated\n */\n SVGShapeElement.prototype.filterUniqueShapes = function () {\n var i;\n var len = this.shapes.length;\n var shape;\n var j;\n var jLen = this.stylesList.length;\n var style;\n var tempShapes = [];\n var areAnimated = false;\n for (j = 0; j < jLen; j += 1) {\n style = this.stylesList[j];\n areAnimated = false;\n tempShapes.length = 0;\n for (i = 0; i < len; i += 1) {\n shape = this.shapes[i];\n if (shape.styles.indexOf(style) !== -1) {\n tempShapes.push(shape);\n areAnimated = shape._isAnimated || areAnimated;\n }\n }\n if (tempShapes.length > 1 && areAnimated) {\n this.setShapesAsAnimated(tempShapes);\n }\n }\n };\n SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n var i;\n var len = shapes.length;\n for (i = 0; i < len; i += 1) {\n shapes[i].setAsAnimated();\n }\n };\n SVGShapeElement.prototype.createStyleElement = function (data, level) {\n // TODO: prevent drawing of hidden styles\n var elementData;\n var styleOb = new SVGStyleData(data, level);\n var pathElement = styleOb.pElem;\n if (data.ty === 'st') {\n elementData = new SVGStrokeStyleData(this, data, styleOb);\n } else if (data.ty === 'fl') {\n elementData = new SVGFillStyleData(this, data, styleOb);\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n elementData = new GradientConstructor(this, data, styleOb);\n this.globalData.defs.appendChild(elementData.gf);\n if (elementData.maskId) {\n this.globalData.defs.appendChild(elementData.ms);\n this.globalData.defs.appendChild(elementData.of);\n pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\n }\n } else if (data.ty === 'no') {\n elementData = new SVGNoStyleData(this, data, styleOb);\n }\n if (data.ty === 'st' || data.ty === 'gs') {\n pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n pathElement.setAttribute('fill-opacity', '0');\n if (data.lj === 1) {\n pathElement.setAttribute('stroke-miterlimit', data.ml);\n }\n }\n if (data.r === 2) {\n pathElement.setAttribute('fill-rule', 'evenodd');\n }\n if (data.ln) {\n pathElement.setAttribute('id', data.ln);\n }\n if (data.cl) {\n pathElement.setAttribute('class', data.cl);\n }\n if (data.bm) {\n pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n this.stylesList.push(styleOb);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n SVGShapeElement.prototype.createGroupElement = function (data) {\n var elementData = new ShapeGroupData();\n if (data.ln) {\n elementData.gr.setAttribute('id', data.ln);\n }\n if (data.cl) {\n elementData.gr.setAttribute('class', data.cl);\n }\n if (data.bm) {\n elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n }\n return elementData;\n };\n SVGShapeElement.prototype.createTransformElement = function (data, container) {\n var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n var ty = 4;\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n var i = 0;\n var len = this.animatedContents.length;\n while (i < len) {\n if (this.animatedContents[i].element === element) {\n return;\n }\n i += 1;\n }\n this.animatedContents.push({\n fn: SVGElementsRenderer.createRenderFunction(data),\n element: element,\n data: data\n });\n };\n SVGShapeElement.prototype.setElementStyles = function (elementData) {\n var arr = elementData.styles;\n var j;\n var jLen = this.stylesList.length;\n for (j = 0; j < jLen; j += 1) {\n if (arr.indexOf(this.stylesList[j]) === -1 && !this.stylesList[j].closed) {\n arr.push(this.stylesList[j]);\n }\n }\n };\n SVGShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n this.renderModifiers();\n };\n SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n var ownTransformers = [].concat(transformers);\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var currentTransform;\n var modifier;\n var processedPos;\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n if (!processedPos) {\n arr[i]._render = render;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], level);\n } else {\n itemsData[i].style.closed = arr[i].hd;\n }\n if (arr[i]._render) {\n if (itemsData[i].style.pElem.parentNode !== container) {\n container.appendChild(itemsData[i].style.pElem);\n }\n }\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n if (arr[i]._render) {\n if (itemsData[i].gr.parentNode !== container) {\n container.appendChild(itemsData[i].gr);\n }\n }\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n itemsData[i] = this.createTransformElement(arr[i], container);\n }\n currentTransform = itemsData[i].transform;\n ownTransformers.push(currentTransform);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n }\n this.setElementStyles(itemsData[i]);\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n render = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n ownModifiers.push(modifier);\n }\n this.addProcessedElement(arr[i], i + 1);\n }\n len = ownStyles.length;\n for (i = 0; i < len; i += 1) {\n ownStyles[i].closed = true;\n }\n len = ownModifiers.length;\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n SVGShapeElement.prototype.renderInnerContent = function () {\n this.renderModifiers();\n var i;\n var len = this.stylesList.length;\n for (i = 0; i < len; i += 1) {\n this.stylesList[i].reset();\n }\n this.renderShape();\n for (i = 0; i < len; i += 1) {\n if (this.stylesList[i]._mdf || this._isFirstFrame) {\n if (this.stylesList[i].msElem) {\n this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d);\n // Adding M0 0 fixes same mask bug on all browsers\n this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n }\n this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n }\n }\n };\n SVGShapeElement.prototype.renderShape = function () {\n var i;\n var len = this.animatedContents.length;\n var animatedContent;\n for (i = 0; i < len; i += 1) {\n animatedContent = this.animatedContents[i];\n if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n }\n }\n };\n SVGShapeElement.prototype.destroy = function () {\n this.destroyBaseElement();\n this.shapesData = null;\n this.itemsData = null;\n };\n\n function LetterProps(o, sw, sc, fc, m, p) {\n this.o = o;\n this.sw = sw;\n this.sc = sc;\n this.fc = fc;\n this.m = m;\n this.p = p;\n this._mdf = {\n o: true,\n sw: !!sw,\n sc: !!sc,\n fc: !!fc,\n m: true,\n p: true\n };\n }\n LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n this._mdf.o = false;\n this._mdf.sw = false;\n this._mdf.sc = false;\n this._mdf.fc = false;\n this._mdf.m = false;\n this._mdf.p = false;\n var updated = false;\n if (this.o !== o) {\n this.o = o;\n this._mdf.o = true;\n updated = true;\n }\n if (this.sw !== sw) {\n this.sw = sw;\n this._mdf.sw = true;\n updated = true;\n }\n if (this.sc !== sc) {\n this.sc = sc;\n this._mdf.sc = true;\n updated = true;\n }\n if (this.fc !== fc) {\n this.fc = fc;\n this._mdf.fc = true;\n updated = true;\n }\n if (this.m !== m) {\n this.m = m;\n this._mdf.m = true;\n updated = true;\n }\n if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n this.p = p;\n this._mdf.p = true;\n updated = true;\n }\n return updated;\n };\n\n function TextProperty(elem, data) {\n this._frameId = initialDefaultFrame;\n this.pv = '';\n this.v = '';\n this.kf = false;\n this._isFirstFrame = true;\n this._mdf = false;\n if (data.d && data.d.sid) {\n data.d = elem.globalData.slotManager.getProp(data.d);\n }\n this.data = data;\n this.elem = elem;\n this.comp = this.elem.comp;\n this.keysIndex = 0;\n this.canResize = false;\n this.minimumFontSize = 1;\n this.effectsSequence = [];\n this.currentData = {\n ascent: 0,\n boxWidth: this.defaultBoxWidth,\n f: '',\n fStyle: '',\n fWeight: '',\n fc: '',\n j: '',\n justifyOffset: '',\n l: [],\n lh: 0,\n lineWidths: [],\n ls: '',\n of: '',\n s: '',\n sc: '',\n sw: 0,\n t: 0,\n tr: 0,\n sz: 0,\n ps: null,\n fillColorAnim: false,\n strokeColorAnim: false,\n strokeWidthAnim: false,\n yOffset: 0,\n finalSize: 0,\n finalText: [],\n finalLineHeight: 0,\n __complete: false\n };\n this.copyData(this.currentData, this.data.d.k[0].s);\n if (!this.searchProperty()) {\n this.completeTextData(this.currentData);\n }\n }\n TextProperty.prototype.defaultBoxWidth = [0, 0];\n TextProperty.prototype.copyData = function (obj, data) {\n for (var s in data) {\n if (Object.prototype.hasOwnProperty.call(data, s)) {\n obj[s] = data[s];\n }\n }\n return obj;\n };\n TextProperty.prototype.setCurrentData = function (data) {\n if (!data.__complete) {\n this.completeTextData(data);\n }\n this.currentData = data;\n this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n this._mdf = true;\n };\n TextProperty.prototype.searchProperty = function () {\n return this.searchKeyframes();\n };\n TextProperty.prototype.searchKeyframes = function () {\n this.kf = this.data.d.k.length > 1;\n if (this.kf) {\n this.addEffect(this.getKeyframeValue.bind(this));\n }\n return this.kf;\n };\n TextProperty.prototype.addEffect = function (effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.elem.addDynamicProperty(this);\n };\n TextProperty.prototype.getValue = function (_finalValue) {\n if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n return;\n }\n this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n var currentValue = this.currentData;\n var currentIndex = this.keysIndex;\n if (this.lock) {\n this.setCurrentData(this.currentData);\n return;\n }\n this.lock = true;\n this._mdf = false;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n for (i = 0; i < len; i += 1) {\n // Checking if index changed to prevent creating a new object every time the expression updates.\n if (currentIndex !== this.keysIndex) {\n finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n } else {\n finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n }\n }\n if (currentValue !== finalValue) {\n this.setCurrentData(finalValue);\n }\n this.v = this.currentData;\n this.pv = this.v;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n };\n TextProperty.prototype.getKeyframeValue = function () {\n var textKeys = this.data.d.k;\n var frameNum = this.elem.comp.renderedFrame;\n var i = 0;\n var len = textKeys.length;\n while (i <= len - 1) {\n if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n break;\n }\n i += 1;\n }\n if (this.keysIndex !== i) {\n this.keysIndex = i;\n }\n return this.data.d.k[this.keysIndex].s;\n };\n TextProperty.prototype.buildFinalText = function (text) {\n var charactersArray = [];\n var i = 0;\n var len = text.length;\n var charCode;\n var secondCharCode;\n var shouldCombine = false;\n var shouldCombineNext = false;\n var currentChars = '';\n while (i < len) {\n shouldCombine = shouldCombineNext;\n shouldCombineNext = false;\n charCode = text.charCodeAt(i);\n currentChars = text.charAt(i);\n if (FontManager.isCombinedCharacter(charCode)) {\n shouldCombine = true;\n // It's a potential surrogate pair (this is the High surrogate)\n } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n if (FontManager.isRegionalFlag(text, i)) {\n currentChars = text.substr(i, 14);\n } else {\n secondCharCode = text.charCodeAt(i + 1);\n // It's a surrogate pair (this is the Low surrogate)\n if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n if (FontManager.isModifier(charCode, secondCharCode)) {\n currentChars = text.substr(i, 2);\n shouldCombine = true;\n } else if (FontManager.isFlagEmoji(text.substr(i, 4))) {\n currentChars = text.substr(i, 4);\n } else {\n currentChars = text.substr(i, 2);\n }\n }\n }\n } else if (charCode > 0xDBFF) {\n secondCharCode = text.charCodeAt(i + 1);\n if (FontManager.isVariationSelector(charCode)) {\n shouldCombine = true;\n }\n } else if (FontManager.isZeroWidthJoiner(charCode)) {\n shouldCombine = true;\n shouldCombineNext = true;\n }\n if (shouldCombine) {\n charactersArray[charactersArray.length - 1] += currentChars;\n shouldCombine = false;\n } else {\n charactersArray.push(currentChars);\n }\n i += currentChars.length;\n }\n return charactersArray;\n };\n TextProperty.prototype.completeTextData = function (documentData) {\n documentData.__complete = true;\n var fontManager = this.elem.globalData.fontManager;\n var data = this.data;\n var letters = [];\n var i;\n var len;\n var newLineFlag;\n var index = 0;\n var val;\n var anchorGrouping = data.m.g;\n var currentSize = 0;\n var currentPos = 0;\n var currentLine = 0;\n var lineWidths = [];\n var lineWidth = 0;\n var maxLineWidth = 0;\n var j;\n var jLen;\n var fontData = fontManager.getFontByName(documentData.f);\n var charData;\n var cLength = 0;\n var fontProps = getFontProperties(fontData);\n documentData.fWeight = fontProps.weight;\n documentData.fStyle = fontProps.style;\n documentData.finalSize = documentData.s;\n documentData.finalText = this.buildFinalText(documentData.t);\n len = documentData.finalText.length;\n documentData.finalLineHeight = documentData.lh;\n var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var charCode;\n if (documentData.sz) {\n var flag = true;\n var boxWidth = documentData.sz[0];\n var boxHeight = documentData.sz[1];\n var currentHeight;\n var finalText;\n while (flag) {\n finalText = this.buildFinalText(documentData.t);\n currentHeight = 0;\n lineWidth = 0;\n len = finalText.length;\n trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n var lastSpaceIndex = -1;\n for (i = 0; i < len; i += 1) {\n charCode = finalText[i].charCodeAt(0);\n newLineFlag = false;\n if (finalText[i] === ' ') {\n lastSpaceIndex = i;\n } else if (charCode === 13 || charCode === 3) {\n lineWidth = 0;\n newLineFlag = true;\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n }\n if (fontManager.chars) {\n charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n }\n if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n if (lastSpaceIndex === -1) {\n len += 1;\n } else {\n i = lastSpaceIndex;\n }\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r');\n // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n lastSpaceIndex = -1;\n lineWidth = 0;\n } else {\n lineWidth += cLength;\n lineWidth += trackingOffset;\n }\n }\n currentHeight += fontData.ascent * documentData.finalSize / 100;\n if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n documentData.finalSize -= 1;\n documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n } else {\n documentData.finalText = finalText;\n len = documentData.finalText.length;\n flag = false;\n }\n }\n }\n lineWidth = -trackingOffset;\n cLength = 0;\n var uncollapsedSpaces = 0;\n var currentChar;\n for (i = 0; i < len; i += 1) {\n newLineFlag = false;\n currentChar = documentData.finalText[i];\n charCode = currentChar.charCodeAt(0);\n if (charCode === 13 || charCode === 3) {\n uncollapsedSpaces = 0;\n lineWidths.push(lineWidth);\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidth = -2 * trackingOffset;\n val = '';\n newLineFlag = true;\n currentLine += 1;\n } else {\n val = currentChar;\n }\n if (fontManager.chars) {\n charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n }\n\n //\n if (currentChar === ' ') {\n uncollapsedSpaces += cLength + trackingOffset;\n } else {\n lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n uncollapsedSpaces = 0;\n }\n letters.push({\n l: cLength,\n an: cLength,\n add: currentSize,\n n: newLineFlag,\n anIndexes: [],\n val: val,\n line: currentLine,\n animatorJustifyOffset: 0\n });\n if (anchorGrouping == 2) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n if (val === '' || val === ' ' || i === len - 1) {\n if (val === '' || val === ' ') {\n currentSize -= cLength;\n }\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n index += 1;\n currentSize = 0;\n }\n } else if (anchorGrouping == 3) {\n // eslint-disable-line eqeqeq\n currentSize += cLength;\n if (val === '' || i === len - 1) {\n if (val === '') {\n currentSize -= cLength;\n }\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n currentSize = 0;\n index += 1;\n }\n } else {\n letters[index].ind = index;\n letters[index].extra = 0;\n index += 1;\n }\n }\n documentData.l = letters;\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidths.push(lineWidth);\n if (documentData.sz) {\n documentData.boxWidth = documentData.sz[0];\n documentData.justifyOffset = 0;\n } else {\n documentData.boxWidth = maxLineWidth;\n switch (documentData.j) {\n case 1:\n documentData.justifyOffset = -documentData.boxWidth;\n break;\n case 2:\n documentData.justifyOffset = -documentData.boxWidth / 2;\n break;\n default:\n documentData.justifyOffset = 0;\n }\n }\n documentData.lineWidths = lineWidths;\n var animators = data.a;\n var animatorData;\n var letterData;\n jLen = animators.length;\n var based;\n var ind;\n var indexes = [];\n for (j = 0; j < jLen; j += 1) {\n animatorData = animators[j];\n if (animatorData.a.sc) {\n documentData.strokeColorAnim = true;\n }\n if (animatorData.a.sw) {\n documentData.strokeWidthAnim = true;\n }\n if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n documentData.fillColorAnim = true;\n }\n ind = 0;\n based = animatorData.s.b;\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n letterData.anIndexes[j] = ind;\n if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n // eslint-disable-line eqeqeq\n if (animatorData.s.rn === 1) {\n indexes.push(ind);\n }\n ind += 1;\n }\n }\n data.a[j].s.totalChars = ind;\n var currentInd = -1;\n var newInd;\n if (animatorData.s.rn === 1) {\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n if (currentInd != letterData.anIndexes[j]) {\n // eslint-disable-line eqeqeq\n currentInd = letterData.anIndexes[j];\n newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n }\n letterData.anIndexes[j] = newInd;\n }\n }\n }\n documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n documentData.ls = documentData.ls || 0;\n documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n };\n TextProperty.prototype.updateDocumentData = function (newData, index) {\n index = index === undefined ? this.keysIndex : index;\n var dData = this.copyData({}, this.data.d.k[index].s);\n dData = this.copyData(dData, newData);\n this.data.d.k[index].s = dData;\n this.recalculate(index);\n this.setCurrentData(dData);\n this.elem.addDynamicProperty(this);\n };\n TextProperty.prototype.recalculate = function (index) {\n var dData = this.data.d.k[index].s;\n dData.__complete = false;\n this.keysIndex = 0;\n this._isFirstFrame = true;\n this.getValue(dData);\n };\n TextProperty.prototype.canResizeFont = function (_canResize) {\n this.canResize = _canResize;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n this.minimumFontSize = Math.floor(_fontValue) || 1;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n\n var TextSelectorProp = function () {\n var max = Math.max;\n var min = Math.min;\n var floor = Math.floor;\n function TextSelectorPropFactory(elem, data) {\n this._currentTextLength = -1;\n this.k = false;\n this.data = data;\n this.elem = elem;\n this.comp = elem.comp;\n this.finalS = 0;\n this.finalE = 0;\n this.initDynamicPropertyContainer(elem);\n this.s = PropertyFactory.getProp(elem, data.s || {\n k: 0\n }, 0, 0, this);\n if ('e' in data) {\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n } else {\n this.e = {\n v: 100\n };\n }\n this.o = PropertyFactory.getProp(elem, data.o || {\n k: 0\n }, 0, 0, this);\n this.xe = PropertyFactory.getProp(elem, data.xe || {\n k: 0\n }, 0, 0, this);\n this.ne = PropertyFactory.getProp(elem, data.ne || {\n k: 0\n }, 0, 0, this);\n this.sm = PropertyFactory.getProp(elem, data.sm || {\n k: 100\n }, 0, 0, this);\n this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n if (!this.dynamicProperties.length) {\n this.getValue();\n }\n }\n TextSelectorPropFactory.prototype = {\n getMult: function getMult(ind) {\n if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n this.getValue();\n }\n var x1 = 0;\n var y1 = 0;\n var x2 = 1;\n var y2 = 1;\n if (this.ne.v > 0) {\n x1 = this.ne.v / 100.0;\n } else {\n y1 = -this.ne.v / 100.0;\n }\n if (this.xe.v > 0) {\n x2 = 1.0 - this.xe.v / 100.0;\n } else {\n y2 = 1.0 + this.xe.v / 100.0;\n }\n var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n var mult = 0;\n var s = this.finalS;\n var e = this.finalE;\n var type = this.data.sh;\n if (type === 2) {\n if (e === s) {\n mult = ind >= e ? 1 : 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n mult = easer(mult);\n } else if (type === 3) {\n if (e === s) {\n mult = ind >= e ? 0 : 1;\n } else {\n mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n mult = easer(mult);\n } else if (type === 4) {\n if (e === s) {\n mult = 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n if (mult < 0.5) {\n mult *= 2;\n } else {\n mult = 1 - 2 * (mult - 0.5);\n }\n }\n mult = easer(mult);\n } else if (type === 5) {\n if (e === s) {\n mult = 0;\n } else {\n var tot = e - s;\n /* ind += 0.5;\n mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n ind = min(max(0, ind + 0.5 - s), e - s);\n var x = -tot / 2 + ind;\n var a = tot / 2;\n mult = Math.sqrt(1 - x * x / (a * a));\n }\n mult = easer(mult);\n } else if (type === 6) {\n if (e === s) {\n mult = 0;\n } else {\n ind = min(max(0, ind + 0.5 - s), e - s);\n mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line\n }\n mult = easer(mult);\n } else {\n if (ind >= floor(s)) {\n if (ind - s < 0) {\n mult = max(0, min(min(e, 1) - (s - ind), 1));\n } else {\n mult = max(0, min(e - ind, 1));\n }\n }\n mult = easer(mult);\n }\n // Smoothness implementation.\n // The smoothness represents a reduced range of the original [0; 1] range.\n // if smoothness is 25%, the new range will be [0.375; 0.625]\n // Steps are:\n // - find the lower value of the new range (threshold)\n // - if multiplier is smaller than that value, floor it to 0\n // - if it is larger,\n // - subtract the threshold\n // - divide it by the smoothness (this will return the range to [0; 1])\n // Note: If it doesn't work on some scenarios, consider applying it before the easer.\n if (this.sm.v !== 100) {\n var smoothness = this.sm.v * 0.01;\n if (smoothness === 0) {\n smoothness = 0.00000001;\n }\n var threshold = 0.5 - smoothness * 0.5;\n if (mult < threshold) {\n mult = 0;\n } else {\n mult = (mult - threshold) / smoothness;\n if (mult > 1) {\n mult = 1;\n }\n }\n }\n return mult * this.a.v;\n },\n getValue: function getValue(newCharsFlag) {\n this.iterateDynamicProperties();\n this._mdf = newCharsFlag || this._mdf;\n this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n if (newCharsFlag && this.data.r === 2) {\n this.e.v = this._currentTextLength;\n }\n var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n var o = this.o.v / divisor;\n var s = this.s.v / divisor + o;\n var e = this.e.v / divisor + o;\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n this.finalS = s;\n this.finalE = e;\n }\n };\n extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n function getTextSelectorProp(elem, data, arr) {\n return new TextSelectorPropFactory(elem, data, arr);\n }\n return {\n getTextSelectorProp: getTextSelectorProp\n };\n }();\n\n function TextAnimatorDataProperty(elem, animatorProps, container) {\n var defaultData = {\n propType: false\n };\n var getProp = PropertyFactory.getProp;\n var textAnimatorAnimatables = animatorProps.a;\n this.a = {\n r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData\n };\n this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n this.s.t = animatorProps.s.t;\n }\n\n function TextAnimatorProperty(textData, renderType, elem) {\n this._isFirstFrame = true;\n this._hasMaskedPath = false;\n this._frameId = -1;\n this._textData = textData;\n this._renderType = renderType;\n this._elem = elem;\n this._animatorsData = createSizedArray(this._textData.a.length);\n this._pathData = {};\n this._moreOptions = {\n alignment: {}\n };\n this.renderedLetters = [];\n this.lettersChangedFlag = false;\n this.initDynamicPropertyContainer(elem);\n }\n TextAnimatorProperty.prototype.searchProperties = function () {\n var i;\n var len = this._textData.a.length;\n var animatorProps;\n var getProp = PropertyFactory.getProp;\n for (i = 0; i < len; i += 1) {\n animatorProps = this._textData.a[i];\n this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n }\n if (this._textData.p && 'm' in this._textData.p) {\n this._pathData = {\n a: getProp(this._elem, this._textData.p.a, 0, 0, this),\n f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n r: getProp(this._elem, this._textData.p.r, 0, 0, this),\n p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n };\n this._hasMaskedPath = true;\n } else {\n this._hasMaskedPath = false;\n }\n this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n };\n TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n this.lettersChangedFlag = lettersChangedFlag;\n if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n return;\n }\n this._isFirstFrame = false;\n var alignment = this._moreOptions.alignment.v;\n var animators = this._animatorsData;\n var textData = this._textData;\n var matrixHelper = this.mHelper;\n var renderType = this._renderType;\n var renderedLettersCount = this.renderedLetters.length;\n var xPos;\n var yPos;\n var i;\n var len;\n var letters = documentData.l;\n var pathInfo;\n var currentLength;\n var currentPoint;\n var segmentLength;\n var flag;\n var pointInd;\n var segmentInd;\n var prevPoint;\n var points;\n var segments;\n var partialLength;\n var totalLength;\n var perc;\n var tanAngle;\n var mask;\n if (this._hasMaskedPath) {\n mask = this._pathData.m;\n if (!this._pathData.n || this._pathData._mdf) {\n var paths = mask.v;\n if (this._pathData.r.v) {\n paths = paths.reverse();\n }\n // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n pathInfo = {\n tLength: 0,\n segments: []\n };\n len = paths._length - 1;\n var bezierData;\n totalLength = 0;\n for (i = 0; i < len; i += 1) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n i = len;\n if (mask.v.c) {\n bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n this._pathData.pi = pathInfo;\n }\n pathInfo = this._pathData.pi;\n currentLength = this._pathData.f.v;\n segmentInd = 0;\n pointInd = 1;\n segmentLength = 0;\n flag = true;\n segments = pathInfo.segments;\n if (currentLength < 0 && mask.v.c) {\n if (pathInfo.tLength < Math.abs(currentLength)) {\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n }\n segmentInd = segments.length - 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n while (currentLength < 0) {\n currentLength += points[pointInd].partialLength;\n pointInd -= 1;\n if (pointInd < 0) {\n segmentInd -= 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n }\n }\n }\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n len = letters.length;\n xPos = 0;\n yPos = 0;\n var yOff = documentData.finalSize * 1.2 * 0.714;\n var firstLine = true;\n var animatorProps;\n var animatorSelector;\n var j;\n var jLen;\n var letterValue;\n jLen = animators.length;\n var mult;\n var ind = -1;\n var offf;\n var xPathPos;\n var yPathPos;\n var initPathPos = currentLength;\n var initSegmentInd = segmentInd;\n var initPointInd = pointInd;\n var currentLine = -1;\n var elemOpacity;\n var sc;\n var sw;\n var fc;\n var k;\n var letterSw;\n var letterSc;\n var letterFc;\n var letterM = '';\n var letterP = this.defaultPropsArray;\n var letterO;\n\n //\n if (documentData.j === 2 || documentData.j === 1) {\n var animatorJustifyOffset = 0;\n var animatorFirstCharOffset = 0;\n var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n var lastIndex = 0;\n var isNewLine = true;\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n animatorJustifyOffset = 0;\n isNewLine = true;\n } else {\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.t.propType) {\n if (isNewLine && documentData.j === 2) {\n animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n }\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n } else {\n animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n }\n }\n }\n isNewLine = false;\n }\n }\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n }\n //\n\n for (i = 0; i < len; i += 1) {\n matrixHelper.reset();\n elemOpacity = 1;\n if (letters[i].n) {\n xPos = 0;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n currentLength = initPathPos;\n firstLine = false;\n if (this._hasMaskedPath) {\n segmentInd = initSegmentInd;\n pointInd = initPointInd;\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n segmentLength = 0;\n }\n letterM = '';\n letterFc = '';\n letterSw = '';\n letterO = '';\n letterP = this.defaultPropsArray;\n } else {\n if (this._hasMaskedPath) {\n if (currentLine !== letters[i].line) {\n switch (documentData.j) {\n case 1:\n currentLength += totalLength - documentData.lineWidths[letters[i].line];\n break;\n case 2:\n currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n break;\n default:\n break;\n }\n currentLine = letters[i].line;\n }\n if (ind !== letters[i].ind) {\n if (letters[ind]) {\n currentLength += letters[ind].extra;\n }\n currentLength += letters[i].an / 2;\n ind = letters[i].ind;\n }\n currentLength += alignment[0] * letters[i].an * 0.005;\n var animatorOffset = 0;\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n animatorOffset += animatorProps.p.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.p.v[0] * mult;\n }\n }\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n animatorOffset += animatorProps.a.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.a.v[0] * mult;\n }\n }\n }\n flag = true;\n // Force alignment only works with a single line for now\n if (this._pathData.a.v) {\n currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);\n currentLength += this._pathData.f.v;\n }\n while (flag) {\n if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01);\n flag = false;\n } else if (points) {\n segmentLength += currentPoint.partialLength;\n pointInd += 1;\n if (pointInd >= points.length) {\n pointInd = 0;\n segmentInd += 1;\n if (!segments[segmentInd]) {\n if (mask.v.c) {\n pointInd = 0;\n segmentInd = 0;\n points = segments[segmentInd].points;\n } else {\n segmentLength -= currentPoint.partialLength;\n points = null;\n }\n } else {\n points = segments[segmentInd].points;\n }\n }\n if (points) {\n prevPoint = currentPoint;\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n }\n }\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0);\n } else {\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0);\n\n // Grouping alignment\n matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.t.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n if (xPos !== 0 || documentData.j !== 0) {\n if (this._hasMaskedPath) {\n if (mult.length) {\n currentLength += animatorProps.t.v * mult[0];\n } else {\n currentLength += animatorProps.t.v * mult;\n }\n } else if (mult.length) {\n xPos += animatorProps.t.v * mult[0];\n } else {\n xPos += animatorProps.t.v * mult;\n }\n }\n }\n }\n if (documentData.strokeWidthAnim) {\n sw = documentData.sw || 0;\n }\n if (documentData.strokeColorAnim) {\n if (documentData.sc) {\n sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n } else {\n sc = [0, 0, 0];\n }\n }\n if (documentData.fillColorAnim && documentData.fc) {\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n } else {\n matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n }\n }\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.s.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n } else {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n }\n }\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (animatorProps.sk.propType) {\n if (mult.length) {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n } else {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n }\n }\n if (animatorProps.r.propType) {\n if (mult.length) {\n matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n } else {\n matrixHelper.rotateZ(-animatorProps.r.v * mult);\n }\n }\n if (animatorProps.ry.propType) {\n if (mult.length) {\n matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n } else {\n matrixHelper.rotateY(animatorProps.ry.v * mult);\n }\n }\n if (animatorProps.rx.propType) {\n if (mult.length) {\n matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n } else {\n matrixHelper.rotateX(animatorProps.rx.v * mult);\n }\n }\n if (animatorProps.o.propType) {\n if (mult.length) {\n elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n } else {\n elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n }\n }\n if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n if (mult.length) {\n sw += animatorProps.sw.v * mult[0];\n } else {\n sw += animatorProps.sw.v * mult;\n }\n }\n if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n } else {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n }\n }\n }\n if (documentData.fillColorAnim && documentData.fc) {\n if (animatorProps.fc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n } else {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n }\n }\n }\n if (animatorProps.fh.propType) {\n if (mult.length) {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n } else {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n }\n }\n if (animatorProps.fs.propType) {\n if (mult.length) {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n } else {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n }\n }\n if (animatorProps.fb.propType) {\n if (mult.length) {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n } else {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n }\n }\n }\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (this._hasMaskedPath) {\n if (mult.length) {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n } else {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n } else if (mult.length) {\n matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n } else {\n matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n }\n }\n if (documentData.strokeWidthAnim) {\n letterSw = sw < 0 ? 0 : sw;\n }\n if (documentData.strokeColorAnim) {\n letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n }\n if (documentData.fillColorAnim && documentData.fc) {\n letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n }\n if (this._hasMaskedPath) {\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\n if (this._pathData.p.v) {\n tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n var rot = Math.atan(tanAngle) * 180 / Math.PI;\n if (currentPoint.point[0] < prevPoint.point[0]) {\n rot += 180;\n }\n matrixHelper.rotate(-rot * Math.PI / 180);\n }\n matrixHelper.translate(xPathPos, yPathPos, 0);\n currentLength -= alignment[0] * letters[i].an * 0.005;\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\n currentLength += letters[i].an / 2;\n currentLength += documentData.tr * 0.001 * documentData.finalSize;\n }\n } else {\n matrixHelper.translate(xPos, yPos, 0);\n if (documentData.ps) {\n // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n break;\n case 2:\n matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n break;\n default:\n break;\n }\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(offf, 0, 0);\n matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0);\n xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize;\n }\n if (renderType === 'html') {\n letterM = matrixHelper.toCSS();\n } else if (renderType === 'svg') {\n letterM = matrixHelper.to2dCSS();\n } else {\n letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n }\n letterO = elemOpacity;\n }\n if (renderedLettersCount <= i) {\n letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n this.renderedLetters.push(letterValue);\n renderedLettersCount += 1;\n this.lettersChangedFlag = true;\n } else {\n letterValue = this.renderedLetters[i];\n this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n }\n }\n };\n TextAnimatorProperty.prototype.getValue = function () {\n if (this._elem.globalData.frameId === this._frameId) {\n return;\n }\n this._frameId = this._elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n TextAnimatorProperty.prototype.mHelper = new Matrix();\n TextAnimatorProperty.prototype.defaultPropsArray = [];\n extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n function ITextElement() {}\n ITextElement.prototype.initElement = function (data, globalData, comp) {\n this.lettersChangedFlag = true;\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n this.textAnimator.searchProperties(this.dynamicProperties);\n };\n ITextElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n };\n ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n var j;\n var jLen = shapes.length;\n var pathNodes;\n var shapeStr = '';\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n pathNodes = shapes[j].ks.k;\n shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n }\n }\n return shapeStr;\n };\n ITextElement.prototype.updateDocumentData = function (newData, index) {\n this.textProperty.updateDocumentData(newData, index);\n };\n ITextElement.prototype.canResizeFont = function (_canResize) {\n this.textProperty.canResizeFont(_canResize);\n };\n ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n this.textProperty.setMinimumFontSize(_fontSize);\n };\n ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n if (documentData.ps) {\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n matrixHelper.translate(0, -documentData.ls, 0);\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n break;\n case 2:\n matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n break;\n default:\n break;\n }\n matrixHelper.translate(xPos, yPos, 0);\n };\n ITextElement.prototype.buildColor = function (colorData) {\n return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n };\n ITextElement.prototype.emptyProp = new LetterProps();\n ITextElement.prototype.destroy = function () {};\n ITextElement.prototype.validateText = function () {\n if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n this.buildNewText();\n this.textProperty._isFirstFrame = false;\n this.textProperty._mdf = false;\n }\n };\n\n var emptyShapeData = {\n shapes: []\n };\n function SVGTextLottieElement(data, globalData, comp) {\n this.textSpans = [];\n this.renderType = 'svg';\n this.initElement(data, globalData, comp);\n }\n extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n SVGTextLottieElement.prototype.createContent = function () {\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\n this.textContainer = createNS('text');\n }\n };\n SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n var i = 0;\n var len = textArray.length;\n var textContents = [];\n var currentTextContent = '';\n while (i < len) {\n if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n textContents.push(currentTextContent);\n currentTextContent = '';\n } else {\n currentTextContent += textArray[i];\n }\n i += 1;\n }\n textContents.push(currentTextContent);\n return textContents;\n };\n SVGTextLottieElement.prototype.buildShapeData = function (data, scale) {\n // data should probably be cloned to apply scale separately to each instance of a text on different layers\n // but since text internal content gets only rendered once and then it's never rerendered,\n // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.\n // Avoiding cloning is preferred since cloning each character shape data is expensive\n if (data.shapes && data.shapes.length) {\n var shape = data.shapes[0];\n if (shape.it) {\n var shapeItem = shape.it[shape.it.length - 1];\n if (shapeItem.s) {\n shapeItem.s.k[0] = scale;\n shapeItem.s.k[1] = scale;\n }\n }\n }\n return data;\n };\n SVGTextLottieElement.prototype.buildNewText = function () {\n this.addDynamicProperty(this);\n var i;\n var len;\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n if (documentData.fc) {\n this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n } else {\n this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n }\n if (documentData.sc) {\n this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n this.layerElement.setAttribute('stroke-width', documentData.sw);\n }\n this.layerElement.setAttribute('font-size', documentData.finalSize);\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n if (fontData.fClass) {\n this.layerElement.setAttribute('class', fontData.fClass);\n } else {\n this.layerElement.setAttribute('font-family', fontData.fFamily);\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n this.layerElement.setAttribute('font-style', fStyle);\n this.layerElement.setAttribute('font-weight', fWeight);\n }\n this.layerElement.setAttribute('aria-label', documentData.t);\n var letters = documentData.l || [];\n var usesGlyphs = !!this.globalData.fontManager.chars;\n len = letters.length;\n var tSpan;\n var matrixHelper = this.mHelper;\n var shapeStr = '';\n var singleShape = this.data.singleShape;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n if (singleShape && !usesGlyphs && !documentData.sz) {\n var tElement = this.textContainer;\n var justify = 'start';\n switch (documentData.j) {\n case 1:\n justify = 'end';\n break;\n case 2:\n justify = 'middle';\n break;\n default:\n justify = 'start';\n break;\n }\n tElement.setAttribute('text-anchor', justify);\n tElement.setAttribute('letter-spacing', trackingOffset);\n var textContent = this.buildTextContents(documentData.finalText);\n len = textContent.length;\n yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n for (i = 0; i < len; i += 1) {\n tSpan = this.textSpans[i].span || createNS('tspan');\n tSpan.textContent = textContent[i];\n tSpan.setAttribute('x', 0);\n tSpan.setAttribute('y', yPos);\n tSpan.style.display = 'inherit';\n tElement.appendChild(tSpan);\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n glyph: null\n };\n }\n this.textSpans[i].span = tSpan;\n yPos += documentData.finalLineHeight;\n }\n this.layerElement.appendChild(tElement);\n } else {\n var cachedSpansLength = this.textSpans.length;\n var charData;\n for (i = 0; i < len; i += 1) {\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n childSpan: null,\n glyph: null\n };\n }\n if (!usesGlyphs || !singleShape || i === 0) {\n tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\n if (cachedSpansLength <= i) {\n tSpan.setAttribute('stroke-linecap', 'butt');\n tSpan.setAttribute('stroke-linejoin', 'round');\n tSpan.setAttribute('stroke-miterlimit', '4');\n this.textSpans[i].span = tSpan;\n if (usesGlyphs) {\n var childSpan = createNS('g');\n tSpan.appendChild(childSpan);\n this.textSpans[i].childSpan = childSpan;\n }\n this.textSpans[i].span = tSpan;\n this.layerElement.appendChild(tSpan);\n }\n tSpan.style.display = 'inherit';\n }\n matrixHelper.reset();\n if (singleShape) {\n if (letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n xPos += letters[i].l || 0;\n // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n xPos += trackingOffset;\n }\n if (usesGlyphs) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n var glyphElement;\n // t === 1 means the character has been replaced with an animated shaped\n if (charData.t === 1) {\n glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n } else {\n var data = emptyShapeData;\n if (charData.data && charData.data.shapes) {\n data = this.buildShapeData(charData.data, documentData.finalSize);\n }\n glyphElement = new SVGShapeElement(data, this.globalData, this);\n }\n if (this.textSpans[i].glyph) {\n var glyph = this.textSpans[i].glyph;\n this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n glyph.destroy();\n }\n this.textSpans[i].glyph = glyphElement;\n glyphElement._debug = true;\n glyphElement.prepareFrame(0);\n glyphElement.renderFrame();\n this.textSpans[i].childSpan.appendChild(glyphElement.layerElement);\n // when using animated shapes, the layer will be scaled instead of replacing the internal scale\n // this might have issues with strokes and might need a different solution\n if (charData.t === 1) {\n this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\n }\n } else {\n if (singleShape) {\n tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\n }\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n }\n //\n }\n if (singleShape && tSpan) {\n tSpan.setAttribute('d', shapeStr);\n }\n }\n while (i < this.textSpans.length) {\n this.textSpans[i].span.style.display = 'none';\n i += 1;\n }\n this._sizeChanged = true;\n };\n SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\n this.renderInnerContent();\n if (this._sizeChanged) {\n this._sizeChanged = false;\n var textBox = this.layerElement.getBBox();\n this.bbox = {\n top: textBox.y,\n left: textBox.x,\n width: textBox.width,\n height: textBox.height\n };\n }\n return this.bbox;\n };\n SVGTextLottieElement.prototype.getValue = function () {\n var i;\n var len = this.textSpans.length;\n var glyphElement;\n this.renderedFrame = this.comp.renderedFrame;\n for (i = 0; i < len; i += 1) {\n glyphElement = this.textSpans[i].glyph;\n if (glyphElement) {\n glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n if (glyphElement._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n SVGTextLottieElement.prototype.renderInnerContent = function () {\n this.validateText();\n if (!this.data.singleShape || this._mdf) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n this._sizeChanged = true;\n var i;\n var len;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var glyphElement;\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n textSpan = this.textSpans[i].span;\n glyphElement = this.textSpans[i].glyph;\n if (glyphElement) {\n glyphElement.renderFrame();\n }\n if (renderedLetter._mdf.m) {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n if (renderedLetter._mdf.o) {\n textSpan.setAttribute('opacity', renderedLetter.o);\n }\n if (renderedLetter._mdf.sw) {\n textSpan.setAttribute('stroke-width', renderedLetter.sw);\n }\n if (renderedLetter._mdf.sc) {\n textSpan.setAttribute('stroke', renderedLetter.sc);\n }\n if (renderedLetter._mdf.fc) {\n textSpan.setAttribute('fill', renderedLetter.fc);\n }\n }\n }\n }\n }\n };\n\n function ISolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n extendPrototype([IImageElement], ISolidElement);\n ISolidElement.prototype.createContent = function () {\n var rect = createNS('rect');\n /// /rect.style.width = this.data.sw;\n /// /rect.style.height = this.data.sh;\n /// /rect.style.fill = this.data.sc;\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.layerElement.appendChild(rect);\n };\n\n function NullElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initFrame();\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n }\n NullElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n NullElement.prototype.renderFrame = function () {};\n NullElement.prototype.getBaseElement = function () {\n return null;\n };\n NullElement.prototype.destroy = function () {};\n NullElement.prototype.sourceRectAtTime = function () {};\n NullElement.prototype.hide = function () {};\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n function SVGRendererBase() {}\n extendPrototype([BaseRenderer], SVGRendererBase);\n SVGRendererBase.prototype.createNull = function (data) {\n return new NullElement(data, this.globalData, this);\n };\n SVGRendererBase.prototype.createShape = function (data) {\n return new SVGShapeElement(data, this.globalData, this);\n };\n SVGRendererBase.prototype.createText = function (data) {\n return new SVGTextLottieElement(data, this.globalData, this);\n };\n SVGRendererBase.prototype.createImage = function (data) {\n return new IImageElement(data, this.globalData, this);\n };\n SVGRendererBase.prototype.createSolid = function (data) {\n return new ISolidElement(data, this.globalData, this);\n };\n SVGRendererBase.prototype.configAnimation = function (animData) {\n this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n this.svgElement.setAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink');\n if (this.renderConfig.viewBoxSize) {\n this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n } else {\n this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n }\n if (!this.renderConfig.viewBoxOnly) {\n this.svgElement.setAttribute('width', animData.w);\n this.svgElement.setAttribute('height', animData.h);\n this.svgElement.style.width = '100%';\n this.svgElement.style.height = '100%';\n this.svgElement.style.transform = 'translate3d(0,0,0)';\n this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n }\n if (this.renderConfig.width) {\n this.svgElement.setAttribute('width', this.renderConfig.width);\n }\n if (this.renderConfig.height) {\n this.svgElement.setAttribute('height', this.renderConfig.height);\n }\n if (this.renderConfig.className) {\n this.svgElement.setAttribute('class', this.renderConfig.className);\n }\n if (this.renderConfig.id) {\n this.svgElement.setAttribute('id', this.renderConfig.id);\n }\n if (this.renderConfig.focusable !== undefined) {\n this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n }\n this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio);\n // this.layerElement.style.transform = 'translate3d(0,0,0)';\n // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n this.animationItem.wrapper.appendChild(this.svgElement);\n // Mask animation\n var defs = this.globalData.defs;\n this.setupGlobalData(animData, defs);\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.data = animData;\n var maskElement = createNS('clipPath');\n var rect = createNS('rect');\n rect.setAttribute('width', animData.w);\n rect.setAttribute('height', animData.h);\n rect.setAttribute('x', 0);\n rect.setAttribute('y', 0);\n var maskId = createElementID();\n maskElement.setAttribute('id', maskId);\n maskElement.appendChild(rect);\n this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\n defs.appendChild(maskElement);\n this.layers = animData.layers;\n this.elements = createSizedArray(animData.layers.length);\n };\n SVGRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n this.layerElement = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n for (i = 0; i < len; i += 1) {\n if (this.elements[i] && this.elements[i].destroy) {\n this.elements[i].destroy();\n }\n }\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n SVGRendererBase.prototype.updateContainerSize = function () {};\n SVGRendererBase.prototype.findIndexByInd = function (ind) {\n var i = 0;\n var len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n if (this.layers[i].ind === ind) {\n return i;\n }\n }\n return -1;\n };\n SVGRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n elements[pos] = true;\n var element = this.createItem(this.layers[pos]);\n elements[pos] = element;\n if (getExpressionsPlugin()) {\n if (this.layers[pos].ty === 0) {\n this.globalData.projectInterface.registerComposition(element);\n }\n element.initExpressions();\n }\n this.appendElementInPos(element, pos);\n if (this.layers[pos].tt) {\n var elementIndex = 'tp' in this.layers[pos] ? this.findIndexByInd(this.layers[pos].tp) : pos - 1;\n if (elementIndex === -1) {\n return;\n }\n if (!this.elements[elementIndex] || this.elements[elementIndex] === true) {\n this.buildItem(elementIndex);\n this.addPendingElement(element);\n } else {\n var matteElement = elements[elementIndex];\n var matteMask = matteElement.getMatte(this.layers[pos].tt);\n element.setMatte(matteMask);\n }\n }\n };\n SVGRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n if (element.data.tt) {\n var i = 0;\n var len = this.elements.length;\n while (i < len) {\n if (this.elements[i] === element) {\n var elementIndex = 'tp' in element.data ? this.findIndexByInd(element.data.tp) : i - 1;\n var matteElement = this.elements[elementIndex];\n var matteMask = matteElement.getMatte(this.layers[i].tt);\n element.setMatte(matteMask);\n break;\n }\n i += 1;\n }\n }\n }\n };\n SVGRendererBase.prototype.renderFrame = function (num) {\n if (this.renderedFrame === num || this.destroyed) {\n return;\n }\n if (num === null) {\n num = this.renderedFrame;\n } else {\n this.renderedFrame = num;\n }\n // console.log('-------');\n // console.log('FRAME ',num);\n this.globalData.frameNum = num;\n this.globalData.frameId += 1;\n this.globalData.projectInterface.currentFrame = num;\n this.globalData._mdf = false;\n var i;\n var len = this.layers.length;\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n if (this.globalData._mdf) {\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n }\n };\n SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newElement = element.getBaseElement();\n if (!newElement) {\n return;\n }\n var i = 0;\n var nextElement;\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n nextElement = this.elements[i].getBaseElement();\n }\n i += 1;\n }\n if (nextElement) {\n this.layerElement.insertBefore(newElement, nextElement);\n } else {\n this.layerElement.appendChild(newElement);\n }\n };\n SVGRendererBase.prototype.hide = function () {\n this.layerElement.style.display = 'none';\n };\n SVGRendererBase.prototype.show = function () {\n this.layerElement.style.display = 'block';\n };\n\n function ICompElement() {}\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n ICompElement.prototype.initElement = function (data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initRenderable();\n this.initHierarchy();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n if (this.data.xt || !globalData.progressiveLoad) {\n this.buildAllItems();\n }\n this.hide();\n };\n\n /* ICompElement.prototype.hide = function(){\n if(!this.hidden){\n this.hideElement();\n var i,len = this.elements.length;\n for( i = 0; i < len; i+=1 ){\n if(this.elements[i]){\n this.elements[i].hide();\n }\n }\n }\n }; */\n\n ICompElement.prototype.prepareFrame = function (num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n if (!this.isInRange && !this.data.xt) {\n return;\n }\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n if (timeRemapped === this.data.op) {\n timeRemapped = this.data.op - 1;\n }\n this.renderedFrame = timeRemapped;\n } else {\n this.renderedFrame = num / this.data.sr;\n }\n var i;\n var len = this.elements.length;\n if (!this.completeLayers) {\n this.checkLayers(this.renderedFrame);\n }\n // This iteration needs to be backwards because of how expressions connect between each other\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n if (this.elements[i]._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n ICompElement.prototype.renderInnerContent = function () {\n var i;\n var len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n ICompElement.prototype.setElements = function (elems) {\n this.elements = elems;\n };\n ICompElement.prototype.getElements = function () {\n return this.elements;\n };\n ICompElement.prototype.destroyElements = function () {\n var i;\n var len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n };\n ICompElement.prototype.destroy = function () {\n this.destroyElements();\n this.destroyBaseElement();\n };\n\n function SVGCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = true;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n SVGCompElement.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n function SVGRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.svgElement = createNS('svg');\n var ariaLabel = '';\n if (config && config.title) {\n var titleElement = createNS('title');\n var titleId = createElementID();\n titleElement.setAttribute('id', titleId);\n titleElement.textContent = config.title;\n this.svgElement.appendChild(titleElement);\n ariaLabel += titleId;\n }\n if (config && config.description) {\n var descElement = createNS('desc');\n var descId = createElementID();\n descElement.setAttribute('id', descId);\n descElement.textContent = config.description;\n this.svgElement.appendChild(descElement);\n ariaLabel += ' ' + descId;\n }\n if (ariaLabel) {\n this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n }\n var defs = createNS('defs');\n this.svgElement.appendChild(defs);\n var maskElement = createNS('g');\n this.svgElement.appendChild(maskElement);\n this.layerElement = maskElement;\n this.renderConfig = {\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n progressiveLoad: config && config.progressiveLoad || false,\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n viewBoxOnly: config && config.viewBoxOnly || false,\n viewBoxSize: config && config.viewBoxSize || false,\n className: config && config.className || '',\n id: config && config.id || '',\n focusable: config && config.focusable,\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '100%',\n height: config && config.filterSize && config.filterSize.height || '100%',\n x: config && config.filterSize && config.filterSize.x || '0%',\n y: config && config.filterSize && config.filterSize.y || '0%'\n },\n width: config && config.width,\n height: config && config.height,\n runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n defs: defs,\n renderConfig: this.renderConfig\n };\n this.elements = [];\n this.pendingElements = [];\n this.destroyed = false;\n this.rendererType = 'svg';\n }\n extendPrototype([SVGRendererBase], SVGRenderer);\n SVGRenderer.prototype.createComp = function (data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n\n function ShapeTransformManager() {\n this.sequences = {};\n this.sequenceList = [];\n this.transform_key_count = 0;\n }\n ShapeTransformManager.prototype = {\n addTransformSequence: function addTransformSequence(transforms) {\n var i;\n var len = transforms.length;\n var key = '_';\n for (i = 0; i < len; i += 1) {\n key += transforms[i].transform.key + '_';\n }\n var sequence = this.sequences[key];\n if (!sequence) {\n sequence = {\n transforms: [].concat(transforms),\n finalTransform: new Matrix(),\n _mdf: false\n };\n this.sequences[key] = sequence;\n this.sequenceList.push(sequence);\n }\n return sequence;\n },\n processSequence: function processSequence(sequence, isFirstFrame) {\n var i = 0;\n var len = sequence.transforms.length;\n var _mdf = isFirstFrame;\n while (i < len && !isFirstFrame) {\n if (sequence.transforms[i].transform.mProps._mdf) {\n _mdf = true;\n break;\n }\n i += 1;\n }\n if (_mdf) {\n sequence.finalTransform.reset();\n for (i = len - 1; i >= 0; i -= 1) {\n sequence.finalTransform.multiply(sequence.transforms[i].transform.mProps.v);\n }\n }\n sequence._mdf = _mdf;\n },\n processSequences: function processSequences(isFirstFrame) {\n var i;\n var len = this.sequenceList.length;\n for (i = 0; i < len; i += 1) {\n this.processSequence(this.sequenceList[i], isFirstFrame);\n }\n },\n getNewKey: function getNewKey() {\n this.transform_key_count += 1;\n return '_' + this.transform_key_count;\n }\n };\n\n var lumaLoader = function lumaLoader() {\n var id = '__lottie_element_luma_buffer';\n var lumaBuffer = null;\n var lumaBufferCtx = null;\n var svg = null;\n\n // This alternate solution has a slight delay before the filter is applied, resulting in a flicker on the first frame.\n // Keeping this here for reference, and in the future, if offscreen canvas supports url filters, this can be used.\n // For now, neither of them work for offscreen canvas, so canvas workers can't support the luma track matte mask.\n // Naming it solution 2 to mark the extra comment lines.\n /*\n var svgString = [\n '<svg xmlns=\"http://www.w3.org/2000/svg\">',\n '<filter id=\"' + id + '\">',\n '<feColorMatrix type=\"matrix\" color-interpolation-filters=\"sRGB\" values=\"',\n '0.3, 0.3, 0.3, 0, 0, ',\n '0.3, 0.3, 0.3, 0, 0, ',\n '0.3, 0.3, 0.3, 0, 0, ',\n '0.3, 0.3, 0.3, 0, 0',\n '\"/>',\n '</filter>',\n '</svg>',\n ].join('');\n var blob = new Blob([svgString], { type: 'image/svg+xml' });\n var url = URL.createObjectURL(blob);\n */\n\n function createLumaSvgFilter() {\n var _svg = createNS('svg');\n var fil = createNS('filter');\n var matrix = createNS('feColorMatrix');\n fil.setAttribute('id', id);\n matrix.setAttribute('type', 'matrix');\n matrix.setAttribute('color-interpolation-filters', 'sRGB');\n matrix.setAttribute('values', '0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0');\n fil.appendChild(matrix);\n _svg.appendChild(fil);\n _svg.setAttribute('id', id + '_svg');\n if (featureSupport.svgLumaHidden) {\n _svg.style.display = 'none';\n }\n return _svg;\n }\n function loadLuma() {\n if (!lumaBuffer) {\n svg = createLumaSvgFilter();\n document.body.appendChild(svg);\n lumaBuffer = createTag('canvas');\n lumaBufferCtx = lumaBuffer.getContext('2d');\n // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n lumaBufferCtx.filter = 'url(#' + id + ')';\n lumaBufferCtx.fillStyle = 'rgba(0,0,0,0)';\n lumaBufferCtx.fillRect(0, 0, 1, 1);\n }\n }\n function getLuma(canvas) {\n if (!lumaBuffer) {\n loadLuma();\n }\n lumaBuffer.width = canvas.width;\n lumaBuffer.height = canvas.height;\n // lumaBufferCtx.filter = `url('${url}#__lottie_element_luma_buffer')`; // part of solution 2\n lumaBufferCtx.filter = 'url(#' + id + ')';\n return lumaBuffer;\n }\n return {\n load: loadLuma,\n get: getLuma\n };\n };\n function createCanvas(width, height) {\n if (featureSupport.offscreenCanvas) {\n return new OffscreenCanvas(width, height);\n }\n var canvas = createTag('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n }\n var assetLoader = function () {\n return {\n loadLumaCanvas: lumaLoader.load,\n getLumaCanvas: lumaLoader.get,\n createCanvas: createCanvas\n };\n }();\n\n var registeredEffects = {};\n function CVEffects(elem) {\n var i;\n var len = elem.data.ef ? elem.data.ef.length : 0;\n this.filters = [];\n var filterManager;\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n var type = elem.data.ef[i].ty;\n if (registeredEffects[type]) {\n var Effect = registeredEffects[type].effect;\n filterManager = new Effect(elem.effectsManager.effectElements[i], elem);\n }\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n CVEffects.prototype.renderFrame = function (_isFirstFrame) {\n var i;\n var len = this.filters.length;\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n CVEffects.prototype.getEffects = function (type) {\n var i;\n var len = this.filters.length;\n var effects = [];\n for (i = 0; i < len; i += 1) {\n if (this.filters[i].type === type) {\n effects.push(this.filters[i]);\n }\n }\n return effects;\n };\n function registerEffect(id, effect) {\n registeredEffects[id] = {\n effect: effect\n };\n }\n\n function CVMaskElement(data, element) {\n this.data = data;\n this.element = element;\n this.masksProperties = this.data.masksProperties || [];\n this.viewData = createSizedArray(this.masksProperties.length);\n var i;\n var len = this.masksProperties.length;\n var hasMasks = false;\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n hasMasks = true;\n }\n this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n }\n this.hasMasks = hasMasks;\n if (hasMasks) {\n this.element.addRenderableComponent(this);\n }\n }\n CVMaskElement.prototype.renderFrame = function () {\n if (!this.hasMasks) {\n return;\n }\n var transform = this.element.finalTransform.mat;\n var ctx = this.element.canvasContext;\n var i;\n var len = this.masksProperties.length;\n var pt;\n var pts;\n var data;\n ctx.beginPath();\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== 'n') {\n if (this.masksProperties[i].inv) {\n ctx.moveTo(0, 0);\n ctx.lineTo(this.element.globalData.compSize.w, 0);\n ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n ctx.lineTo(0, this.element.globalData.compSize.h);\n ctx.lineTo(0, 0);\n }\n data = this.viewData[i].v;\n pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n ctx.moveTo(pt[0], pt[1]);\n var j;\n var jLen = data._length;\n for (j = 1; j < jLen; j += 1) {\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n }\n this.element.globalData.renderer.save(true);\n ctx.clip();\n };\n CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n CVMaskElement.prototype.destroy = function () {\n this.element = null;\n };\n\n function CVBaseElement() {}\n var operationsMap = {\n 1: 'source-in',\n 2: 'source-out',\n 3: 'source-in',\n 4: 'source-out'\n };\n CVBaseElement.prototype = {\n createElements: function createElements() {},\n initRendererElement: function initRendererElement() {},\n createContainerElements: function createContainerElements() {\n // If the layer is masked we will use two buffers to store each different states of the drawing\n // This solution is not ideal for several reason. But unfortunately, because of the recursive\n // nature of the render tree, it's the only simple way to make sure one inner mask doesn't override an outer mask.\n // TODO: try to reduce the size of these buffers to the size of the composition contaning the layer\n // It might be challenging because the layer most likely is transformed in some way\n if (this.data.tt >= 1) {\n this.buffers = [];\n var canvasContext = this.globalData.canvasContext;\n var bufferCanvas = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n this.buffers.push(bufferCanvas);\n var bufferCanvas2 = assetLoader.createCanvas(canvasContext.canvas.width, canvasContext.canvas.height);\n this.buffers.push(bufferCanvas2);\n if (this.data.tt >= 3 && !document._isProxy) {\n assetLoader.loadLumaCanvas();\n }\n }\n this.canvasContext = this.globalData.canvasContext;\n this.transformCanvas = this.globalData.transformCanvas;\n this.renderableEffectsManager = new CVEffects(this);\n this.searchEffectTransforms();\n },\n createContent: function createContent() {},\n setBlendMode: function setBlendMode() {\n var globalData = this.globalData;\n if (globalData.blendMode !== this.data.bm) {\n globalData.blendMode = this.data.bm;\n var blendModeValue = getBlendMode(this.data.bm);\n globalData.canvasContext.globalCompositeOperation = blendModeValue;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new CVMaskElement(this.data, this);\n this.transformEffects = this.renderableEffectsManager.getEffects(effectTypes.TRANSFORM_EFFECT);\n },\n hideElement: function hideElement() {\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n this.hidden = true;\n }\n },\n showElement: function showElement() {\n if (this.isInRange && !this.isTransparent) {\n this.hidden = false;\n this._isFirstFrame = true;\n this.maskManager._isFirstFrame = true;\n }\n },\n clearCanvas: function clearCanvas(canvasContext) {\n canvasContext.clearRect(this.transformCanvas.tx, this.transformCanvas.ty, this.transformCanvas.w * this.transformCanvas.sx, this.transformCanvas.h * this.transformCanvas.sy);\n },\n prepareLayer: function prepareLayer() {\n if (this.data.tt >= 1) {\n var buffer = this.buffers[0];\n var bufferCtx = buffer.getContext('2d');\n this.clearCanvas(bufferCtx);\n // on the first buffer we store the current state of the global drawing\n bufferCtx.drawImage(this.canvasContext.canvas, 0, 0);\n // The next four lines are to clear the canvas\n // TODO: Check if there is a way to clear the canvas without resetting the transform\n this.currentTransform = this.canvasContext.getTransform();\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n this.clearCanvas(this.canvasContext);\n this.canvasContext.setTransform(this.currentTransform);\n }\n },\n exitLayer: function exitLayer() {\n if (this.data.tt >= 1) {\n var buffer = this.buffers[1];\n // On the second buffer we store the current state of the global drawing\n // that only contains the content of this layer\n // (if it is a composition, it also includes the nested layers)\n var bufferCtx = buffer.getContext('2d');\n this.clearCanvas(bufferCtx);\n bufferCtx.drawImage(this.canvasContext.canvas, 0, 0);\n // We clear the canvas again\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n this.clearCanvas(this.canvasContext);\n this.canvasContext.setTransform(this.currentTransform);\n // We draw the mask\n var mask = this.comp.getElementById('tp' in this.data ? this.data.tp : this.data.ind - 1);\n mask.renderFrame(true);\n // We draw the second buffer (that contains the content of this layer)\n this.canvasContext.setTransform(1, 0, 0, 1, 0, 0);\n\n // If the mask is a Luma matte, we need to do two extra painting operations\n // the _isProxy check is to avoid drawing a fake canvas in workers that will throw an error\n if (this.data.tt >= 3 && !document._isProxy) {\n // We copy the painted mask to a buffer that has a color matrix filter applied to it\n // that applies the rgb values to the alpha channel\n var lumaBuffer = assetLoader.getLumaCanvas(this.canvasContext.canvas);\n var lumaBufferCtx = lumaBuffer.getContext('2d');\n lumaBufferCtx.drawImage(this.canvasContext.canvas, 0, 0);\n this.clearCanvas(this.canvasContext);\n // we repaint the context with the mask applied to it\n this.canvasContext.drawImage(lumaBuffer, 0, 0);\n }\n this.canvasContext.globalCompositeOperation = operationsMap[this.data.tt];\n this.canvasContext.drawImage(buffer, 0, 0);\n // We finally draw the first buffer (that contains the content of the global drawing)\n // We use destination-over to draw the global drawing below the current layer\n this.canvasContext.globalCompositeOperation = 'destination-over';\n this.canvasContext.drawImage(this.buffers[0], 0, 0);\n this.canvasContext.setTransform(this.currentTransform);\n // We reset the globalCompositeOperation to source-over, the standard type of operation\n this.canvasContext.globalCompositeOperation = 'source-over';\n }\n },\n renderFrame: function renderFrame(forceRender) {\n if (this.hidden || this.data.hd) {\n return;\n }\n if (this.data.td === 1 && !forceRender) {\n return;\n }\n this.renderTransform();\n this.renderRenderable();\n this.renderLocalTransform();\n this.setBlendMode();\n var forceRealStack = this.data.ty === 0;\n this.prepareLayer();\n this.globalData.renderer.save(forceRealStack);\n this.globalData.renderer.ctxTransform(this.finalTransform.localMat.props);\n this.globalData.renderer.ctxOpacity(this.finalTransform.localOpacity);\n this.renderInnerContent();\n this.globalData.renderer.restore(forceRealStack);\n this.exitLayer();\n if (this.maskManager.hasMasks) {\n this.globalData.renderer.restore(true);\n }\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.canvasContext = null;\n this.data = null;\n this.globalData = null;\n this.maskManager.destroy();\n },\n mHelper: new Matrix()\n };\n CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\n CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n\n function CVShapeData(element, data, styles, transformsManager) {\n this.styledShapes = [];\n this.tr = [0, 0, 0, 0, 0, 0];\n var ty = 4;\n if (data.ty === 'rc') {\n ty = 5;\n } else if (data.ty === 'el') {\n ty = 6;\n } else if (data.ty === 'sr') {\n ty = 7;\n }\n this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n var i;\n var len = styles.length;\n var styledShape;\n for (i = 0; i < len; i += 1) {\n if (!styles[i].closed) {\n styledShape = {\n transforms: transformsManager.addTransformSequence(styles[i].transforms),\n trNodes: []\n };\n this.styledShapes.push(styledShape);\n styles[i].elements.push(styledShape);\n }\n }\n }\n CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n\n function CVShapeElement(data, globalData, comp) {\n this.shapes = [];\n this.shapesData = data.shapes;\n this.stylesList = [];\n this.itemsData = [];\n this.prevViewData = [];\n this.shapeModifiers = [];\n this.processedElements = [];\n this.transformsManager = new ShapeTransformManager();\n this.initElement(data, globalData, comp);\n }\n extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n CVShapeElement.prototype.transformHelper = {\n opacity: 1,\n _opMdf: false\n };\n CVShapeElement.prototype.dashResetter = [];\n CVShapeElement.prototype.createContent = function () {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n };\n CVShapeElement.prototype.createStyleElement = function (data, transforms) {\n var styleElem = {\n data: data,\n type: data.ty,\n preTransforms: this.transformsManager.addTransformSequence(transforms),\n transforms: [],\n elements: [],\n closed: data.hd === true\n };\n var elementData = {};\n if (data.ty === 'fl' || data.ty === 'st') {\n elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n if (!elementData.c.k) {\n styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\n }\n } else if (data.ty === 'gf' || data.ty === 'gs') {\n elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n elementData.h = PropertyFactory.getProp(this, data.h || {\n k: 0\n }, 0, 0.01, this);\n elementData.a = PropertyFactory.getProp(this, data.a || {\n k: 0\n }, 0, degToRads, this);\n elementData.g = new GradientProperty(this, data.g, this);\n }\n elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n if (data.ty === 'st' || data.ty === 'gs') {\n styleElem.lc = lineCapEnum[data.lc || 2];\n styleElem.lj = lineJoinEnum[data.lj || 2];\n if (data.lj == 1) {\n // eslint-disable-line eqeqeq\n styleElem.ml = data.ml;\n }\n elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n if (!elementData.w.k) {\n styleElem.wi = elementData.w.v;\n }\n if (data.d) {\n var d = new DashProperty(this, data.d, 'canvas', this);\n elementData.d = d;\n if (!elementData.d.k) {\n styleElem.da = elementData.d.dashArray;\n styleElem[\"do\"] = elementData.d.dashoffset[0];\n }\n }\n } else {\n styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n }\n this.stylesList.push(styleElem);\n elementData.style = styleElem;\n return elementData;\n };\n CVShapeElement.prototype.createGroupElement = function () {\n var elementData = {\n it: [],\n prevViewData: []\n };\n return elementData;\n };\n CVShapeElement.prototype.createTransformElement = function (data) {\n var elementData = {\n transform: {\n opacity: 1,\n _opMdf: false,\n key: this.transformsManager.getNewKey(),\n op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\n }\n };\n return elementData;\n };\n CVShapeElement.prototype.createShapeElement = function (data) {\n var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n return elementData;\n };\n CVShapeElement.prototype.reloadShapes = function () {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n };\n CVShapeElement.prototype.addTransformToStyleList = function (transform) {\n var i;\n var len = this.stylesList.length;\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.push(transform);\n }\n }\n };\n CVShapeElement.prototype.removeTransformFromStyleList = function () {\n var i;\n var len = this.stylesList.length;\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.pop();\n }\n }\n };\n CVShapeElement.prototype.closeStyles = function (styles) {\n var i;\n var len = styles.length;\n for (i = 0; i < len; i += 1) {\n styles[i].closed = true;\n }\n };\n CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var processedPos;\n var modifier;\n var currentTransform;\n var ownTransforms = [].concat(transforms);\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n if (!processedPos) {\n arr[i]._shouldRender = shouldRender;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n } else {\n itemsData[i].style.closed = false;\n }\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === 'gr') {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n } else if (arr[i].ty === 'tr') {\n if (!processedPos) {\n currentTransform = this.createTransformElement(arr[i]);\n itemsData[i] = currentTransform;\n }\n ownTransforms.push(itemsData[i]);\n this.addTransformToStyleList(itemsData[i]);\n } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i]);\n }\n } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n ownModifiers.push(modifier);\n } else if (arr[i].ty === 'rp') {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n shouldRender = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n ownModifiers.push(modifier);\n }\n this.addProcessedElement(arr[i], i + 1);\n }\n this.removeTransformFromStyleList();\n this.closeStyles(ownStyles);\n len = ownModifiers.length;\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n CVShapeElement.prototype.renderInnerContent = function () {\n this.transformHelper.opacity = 1;\n this.transformHelper._opMdf = false;\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n };\n CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n groupTransform.opacity = parentTransform.opacity;\n groupTransform.opacity *= groupTransform.op.v;\n groupTransform._opMdf = true;\n }\n };\n CVShapeElement.prototype.drawLayer = function () {\n var i;\n var len = this.stylesList.length;\n var j;\n var jLen;\n var k;\n var kLen;\n var elems;\n var nodes;\n var renderer = this.globalData.renderer;\n var ctx = this.globalData.canvasContext;\n var type;\n var currentStyle;\n for (i = 0; i < len; i += 1) {\n currentStyle = this.stylesList[i];\n type = currentStyle.type;\n\n // Skipping style when\n // Stroke width equals 0\n // style should not be rendered (extra unused repeaters)\n // current opacity equals 0\n // global opacity equals 0\n if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\n renderer.save();\n elems = currentStyle.elements;\n if (type === 'st' || type === 'gs') {\n renderer.ctxStrokeStyle(type === 'st' ? currentStyle.co : currentStyle.grd);\n // ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n renderer.ctxLineWidth(currentStyle.wi);\n // ctx.lineWidth = currentStyle.wi;\n renderer.ctxLineCap(currentStyle.lc);\n // ctx.lineCap = currentStyle.lc;\n renderer.ctxLineJoin(currentStyle.lj);\n // ctx.lineJoin = currentStyle.lj;\n renderer.ctxMiterLimit(currentStyle.ml || 0);\n // ctx.miterLimit = currentStyle.ml || 0;\n } else {\n renderer.ctxFillStyle(type === 'fl' ? currentStyle.co : currentStyle.grd);\n // ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n }\n renderer.ctxOpacity(currentStyle.coOp);\n if (type !== 'st' && type !== 'gs') {\n ctx.beginPath();\n }\n renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n jLen = elems.length;\n for (j = 0; j < jLen; j += 1) {\n if (type === 'st' || type === 'gs') {\n ctx.beginPath();\n if (currentStyle.da) {\n ctx.setLineDash(currentStyle.da);\n ctx.lineDashOffset = currentStyle[\"do\"];\n }\n }\n nodes = elems[j].trNodes;\n kLen = nodes.length;\n for (k = 0; k < kLen; k += 1) {\n if (nodes[k].t === 'm') {\n ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n } else if (nodes[k].t === 'c') {\n ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\n } else {\n ctx.closePath();\n }\n }\n if (type === 'st' || type === 'gs') {\n // ctx.stroke();\n renderer.ctxStroke();\n if (currentStyle.da) {\n ctx.setLineDash(this.dashResetter);\n }\n }\n }\n if (type !== 'st' && type !== 'gs') {\n // ctx.fill(currentStyle.r);\n this.globalData.renderer.ctxFill(currentStyle.r);\n }\n renderer.restore();\n }\n }\n };\n CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n var i;\n var len = items.length - 1;\n var groupTransform;\n groupTransform = parentTransform;\n for (i = len; i >= 0; i -= 1) {\n if (items[i].ty === 'tr') {\n groupTransform = data[i].transform;\n this.renderShapeTransform(parentTransform, groupTransform);\n } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\n this.renderPath(items[i], data[i]);\n } else if (items[i].ty === 'fl') {\n this.renderFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'st') {\n this.renderStroke(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\n this.renderGradientFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === 'gr') {\n this.renderShape(groupTransform, items[i].it, data[i].it);\n } else if (items[i].ty === 'tm') {\n //\n }\n }\n if (isMain) {\n this.drawLayer();\n }\n };\n CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n var shapeNodes = styledShape.trNodes;\n var paths = shape.paths;\n var i;\n var len;\n var j;\n var jLen = paths._length;\n shapeNodes.length = 0;\n var groupTransformMat = styledShape.transforms.finalTransform;\n for (j = 0; j < jLen; j += 1) {\n var pathNodes = paths.shapes[j];\n if (pathNodes && pathNodes.v) {\n len = pathNodes._length;\n for (i = 1; i < len; i += 1) {\n if (i === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\n });\n }\n if (len === 1) {\n shapeNodes.push({\n t: 'm',\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n if (pathNodes.c && len) {\n shapeNodes.push({\n t: 'c',\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\n });\n shapeNodes.push({\n t: 'z'\n });\n }\n }\n }\n styledShape.trNodes = shapeNodes;\n }\n };\n CVShapeElement.prototype.renderPath = function (pathData, itemData) {\n if (pathData.hd !== true && pathData._shouldRender) {\n var i;\n var len = itemData.styledShapes.length;\n for (i = 0; i < len; i += 1) {\n this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n }\n }\n };\n CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n }\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n };\n CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var grd;\n if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\n var ctx = this.globalData.canvasContext;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n if (styleData.t === 1) {\n grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n } else {\n var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n }\n var i;\n var len = styleData.g.p;\n var cValues = itemData.g.c;\n var opacity = 1;\n for (i = 0; i < len; i += 1) {\n if (itemData.g._hasOpacity && itemData.g._collapsable) {\n opacity = itemData.g.o[i * 2 + 1];\n }\n grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n }\n styleElem.grd = grd;\n }\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n };\n CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var d = itemData.d;\n if (d && (d._mdf || this._isFirstFrame)) {\n styleElem.da = d.dashArray;\n styleElem[\"do\"] = d.dashoffset[0];\n }\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n }\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n if (itemData.w._mdf || this._isFirstFrame) {\n styleElem.wi = itemData.w.v;\n }\n };\n CVShapeElement.prototype.destroy = function () {\n this.shapesData = null;\n this.globalData = null;\n this.canvasContext = null;\n this.stylesList.length = 0;\n this.itemsData.length = 0;\n };\n\n function CVTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.yOffset = 0;\n this.fillColorAnim = false;\n this.strokeColorAnim = false;\n this.strokeWidthAnim = false;\n this.stroke = false;\n this.fill = false;\n this.justifyOffset = 0;\n this.currentRender = null;\n this.renderType = 'canvas';\n this.values = {\n fill: 'rgba(0,0,0,0)',\n stroke: 'rgba(0,0,0,0)',\n sWidth: 0,\n fValue: ''\n };\n this.initElement(data, globalData, comp);\n }\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n CVTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var hasFill = false;\n if (documentData.fc) {\n hasFill = true;\n this.values.fill = this.buildColor(documentData.fc);\n } else {\n this.values.fill = 'rgba(0,0,0,0)';\n }\n this.fill = hasFill;\n var hasStroke = false;\n if (documentData.sc) {\n hasStroke = true;\n this.values.stroke = this.buildColor(documentData.sc);\n this.values.sWidth = documentData.sw;\n }\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n var i;\n var len;\n var letters = documentData.l;\n var matrixHelper = this.mHelper;\n this.stroke = hasStroke;\n this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n len = documentData.finalText.length;\n // this.tHelper.font = this.values.fValue;\n var charData;\n var shapeData;\n var k;\n var kLen;\n var shapes;\n var j;\n var jLen;\n var pathNodes;\n var commands;\n var pathArr;\n var singleShape = this.data.singleShape;\n var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var cnt = 0;\n for (i = 0; i < len; i += 1) {\n charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n shapeData = charData && charData.data || {};\n matrixHelper.reset();\n if (singleShape && letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n jLen = shapes.length;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n if (singleShape) {\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n }\n commands = createSizedArray(jLen - 1);\n var commandsCounter = 0;\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === 'sh') {\n kLen = shapes[j].ks.k.i.length;\n pathNodes = shapes[j].ks.k;\n pathArr = [];\n for (k = 1; k < kLen; k += 1) {\n if (k === 1) {\n pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n }\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n }\n pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n commands[commandsCounter] = pathArr;\n commandsCounter += 1;\n }\n }\n if (singleShape) {\n xPos += letters[i].l;\n xPos += trackingOffset;\n }\n if (this.textSpans[cnt]) {\n this.textSpans[cnt].elem = commands;\n } else {\n this.textSpans[cnt] = {\n elem: commands\n };\n }\n cnt += 1;\n }\n };\n CVTextElement.prototype.renderInnerContent = function () {\n this.validateText();\n var ctx = this.canvasContext;\n ctx.font = this.values.fValue;\n this.globalData.renderer.ctxLineCap('butt');\n // ctx.lineCap = 'butt';\n this.globalData.renderer.ctxLineJoin('miter');\n // ctx.lineJoin = 'miter';\n this.globalData.renderer.ctxMiterLimit(4);\n // ctx.miterLimit = 4;\n\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n }\n var i;\n var len;\n var j;\n var jLen;\n var k;\n var kLen;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var lastFill = null;\n var lastStroke = null;\n var lastStrokeW = null;\n var commands;\n var pathArr;\n var renderer = this.globalData.renderer;\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n if (renderedLetter) {\n renderer.save();\n renderer.ctxTransform(renderedLetter.p);\n renderer.ctxOpacity(renderedLetter.o);\n }\n if (this.fill) {\n if (renderedLetter && renderedLetter.fc) {\n if (lastFill !== renderedLetter.fc) {\n renderer.ctxFillStyle(renderedLetter.fc);\n lastFill = renderedLetter.fc;\n // ctx.fillStyle = renderedLetter.fc;\n }\n } else if (lastFill !== this.values.fill) {\n lastFill = this.values.fill;\n renderer.ctxFillStyle(this.values.fill);\n // ctx.fillStyle = this.values.fill;\n }\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n this.globalData.canvasContext.closePath();\n renderer.ctxFill();\n // this.globalData.canvasContext.fill();\n /// ctx.fillText(this.textSpans[i].val,0,0);\n }\n if (this.stroke) {\n if (renderedLetter && renderedLetter.sw) {\n if (lastStrokeW !== renderedLetter.sw) {\n lastStrokeW = renderedLetter.sw;\n renderer.ctxLineWidth(renderedLetter.sw);\n // ctx.lineWidth = renderedLetter.sw;\n }\n } else if (lastStrokeW !== this.values.sWidth) {\n lastStrokeW = this.values.sWidth;\n renderer.ctxLineWidth(this.values.sWidth);\n // ctx.lineWidth = this.values.sWidth;\n }\n if (renderedLetter && renderedLetter.sc) {\n if (lastStroke !== renderedLetter.sc) {\n lastStroke = renderedLetter.sc;\n renderer.ctxStrokeStyle(renderedLetter.sc);\n // ctx.strokeStyle = renderedLetter.sc;\n }\n } else if (lastStroke !== this.values.stroke) {\n lastStroke = this.values.stroke;\n renderer.ctxStrokeStyle(this.values.stroke);\n // ctx.strokeStyle = this.values.stroke;\n }\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n }\n }\n this.globalData.canvasContext.closePath();\n renderer.ctxStroke();\n // this.globalData.canvasContext.stroke();\n /// ctx.strokeText(letters[i].val,0,0);\n }\n if (renderedLetter) {\n this.globalData.renderer.restore();\n }\n }\n }\n };\n\n function CVImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.img = globalData.imageLoader.getAsset(this.assetData);\n this.initElement(data, globalData, comp);\n }\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n CVImageElement.prototype.createContent = function () {\n if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n var canvas = createTag('canvas');\n canvas.width = this.assetData.w;\n canvas.height = this.assetData.h;\n var ctx = canvas.getContext('2d');\n var imgW = this.img.width;\n var imgH = this.img.height;\n var imgRel = imgW / imgH;\n var canvasRel = this.assetData.w / this.assetData.h;\n var widthCrop;\n var heightCrop;\n var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {\n heightCrop = imgH;\n widthCrop = heightCrop * canvasRel;\n } else {\n widthCrop = imgW;\n heightCrop = widthCrop / canvasRel;\n }\n ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n this.img = canvas;\n }\n };\n CVImageElement.prototype.renderInnerContent = function () {\n this.canvasContext.drawImage(this.img, 0, 0);\n };\n CVImageElement.prototype.destroy = function () {\n this.img = null;\n };\n\n function CVSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n CVSolidElement.prototype.renderInnerContent = function () {\n // var ctx = this.canvasContext;\n this.globalData.renderer.ctxFillStyle(this.data.sc);\n // ctx.fillStyle = this.data.sc;\n this.globalData.renderer.ctxFillRect(0, 0, this.data.sw, this.data.sh);\n // ctx.fillRect(0, 0, this.data.sw, this.data.sh);\n //\n };\n\n function CanvasRendererBase() {}\n extendPrototype([BaseRenderer], CanvasRendererBase);\n CanvasRendererBase.prototype.createShape = function (data) {\n return new CVShapeElement(data, this.globalData, this);\n };\n CanvasRendererBase.prototype.createText = function (data) {\n return new CVTextElement(data, this.globalData, this);\n };\n CanvasRendererBase.prototype.createImage = function (data) {\n return new CVImageElement(data, this.globalData, this);\n };\n CanvasRendererBase.prototype.createSolid = function (data) {\n return new CVSolidElement(data, this.globalData, this);\n };\n CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n CanvasRendererBase.prototype.ctxTransform = function (props) {\n if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n return;\n }\n this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n };\n CanvasRendererBase.prototype.ctxOpacity = function (op) {\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n };\n CanvasRendererBase.prototype.ctxFillStyle = function (value) {\n this.canvasContext.fillStyle = value;\n };\n CanvasRendererBase.prototype.ctxStrokeStyle = function (value) {\n this.canvasContext.strokeStyle = value;\n };\n CanvasRendererBase.prototype.ctxLineWidth = function (value) {\n this.canvasContext.lineWidth = value;\n };\n CanvasRendererBase.prototype.ctxLineCap = function (value) {\n this.canvasContext.lineCap = value;\n };\n CanvasRendererBase.prototype.ctxLineJoin = function (value) {\n this.canvasContext.lineJoin = value;\n };\n CanvasRendererBase.prototype.ctxMiterLimit = function (value) {\n this.canvasContext.miterLimit = value;\n };\n CanvasRendererBase.prototype.ctxFill = function (rule) {\n this.canvasContext.fill(rule);\n };\n CanvasRendererBase.prototype.ctxFillRect = function (x, y, w, h) {\n this.canvasContext.fillRect(x, y, w, h);\n };\n CanvasRendererBase.prototype.ctxStroke = function () {\n this.canvasContext.stroke();\n };\n CanvasRendererBase.prototype.reset = function () {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n this.contextData.reset();\n };\n CanvasRendererBase.prototype.save = function () {\n this.canvasContext.save();\n };\n CanvasRendererBase.prototype.restore = function (actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n if (actionFlag) {\n this.globalData.blendMode = 'source-over';\n }\n this.contextData.restore(actionFlag);\n };\n CanvasRendererBase.prototype.configAnimation = function (animData) {\n if (this.animationItem.wrapper) {\n this.animationItem.container = createTag('canvas');\n var containerStyle = this.animationItem.container.style;\n containerStyle.width = '100%';\n containerStyle.height = '100%';\n var origin = '0px 0px 0px';\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n containerStyle['-webkit-transform'] = origin;\n containerStyle.contentVisibility = this.renderConfig.contentVisibility;\n this.animationItem.wrapper.appendChild(this.animationItem.container);\n this.canvasContext = this.animationItem.container.getContext('2d');\n if (this.renderConfig.className) {\n this.animationItem.container.setAttribute('class', this.renderConfig.className);\n }\n if (this.renderConfig.id) {\n this.animationItem.container.setAttribute('id', this.renderConfig.id);\n }\n } else {\n this.canvasContext = this.renderConfig.context;\n }\n this.contextData.setContext(this.canvasContext);\n this.data = animData;\n this.layers = animData.layers;\n this.transformCanvas = {\n w: animData.w,\n h: animData.h,\n sx: 0,\n sy: 0,\n tx: 0,\n ty: 0\n };\n this.setupGlobalData(animData, document.body);\n this.globalData.canvasContext = this.canvasContext;\n this.globalData.renderer = this;\n this.globalData.isDashed = false;\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.globalData.transformCanvas = this.transformCanvas;\n this.elements = createSizedArray(animData.layers.length);\n this.updateContainerSize();\n };\n CanvasRendererBase.prototype.updateContainerSize = function (width, height) {\n this.reset();\n var elementWidth;\n var elementHeight;\n if (width) {\n elementWidth = width;\n elementHeight = height;\n this.canvasContext.canvas.width = elementWidth;\n this.canvasContext.canvas.height = elementHeight;\n } else {\n if (this.animationItem.wrapper && this.animationItem.container) {\n elementWidth = this.animationItem.wrapper.offsetWidth;\n elementHeight = this.animationItem.wrapper.offsetHeight;\n } else {\n elementWidth = this.canvasContext.canvas.width;\n elementHeight = this.canvasContext.canvas.height;\n }\n this.canvasContext.canvas.width = elementWidth * this.renderConfig.dpr;\n this.canvasContext.canvas.height = elementHeight * this.renderConfig.dpr;\n }\n var elementRel;\n var animationRel;\n if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n var par = this.renderConfig.preserveAspectRatio.split(' ');\n var fillType = par[1] || 'meet';\n var pos = par[0] || 'xMidYMid';\n var xPos = pos.substr(0, 4);\n var yPos = pos.substr(4);\n elementRel = elementWidth / elementHeight;\n animationRel = this.transformCanvas.w / this.transformCanvas.h;\n if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n } else {\n this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n }\n if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.tx = 0;\n }\n if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.ty = 0;\n }\n } else if (this.renderConfig.preserveAspectRatio === 'none') {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n } else {\n this.transformCanvas.sx = this.renderConfig.dpr;\n this.transformCanvas.sy = this.renderConfig.dpr;\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n }\n this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n /* var i, len = this.elements.length;\n for(i=0;i<len;i+=1){\n if(this.elements[i] && this.elements[i].data.ty === 0){\n this.elements[i].resize(this.globalData.transformCanvas);\n }\n } */\n this.ctxTransform(this.transformCanvas.props);\n this.canvasContext.beginPath();\n this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n this.canvasContext.closePath();\n this.canvasContext.clip();\n this.renderFrame(this.renderedFrame, true);\n };\n CanvasRendererBase.prototype.destroy = function () {\n if (this.renderConfig.clearCanvas && this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n var i;\n var len = this.layers ? this.layers.length : 0;\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i] && this.elements[i].destroy) {\n this.elements[i].destroy();\n }\n }\n this.elements.length = 0;\n this.globalData.canvasContext = null;\n this.animationItem.container = null;\n this.destroyed = true;\n };\n CanvasRendererBase.prototype.renderFrame = function (num, forceRender) {\n if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\n return;\n }\n this.renderedFrame = num;\n this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n this.globalData.frameId += 1;\n this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n this.globalData.projectInterface.currentFrame = num;\n\n // console.log('--------');\n // console.log('NEW: ',num);\n var i;\n var len = this.layers.length;\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n if (this.globalData._mdf) {\n if (this.renderConfig.clearCanvas === true) {\n this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n } else {\n this.save();\n }\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n if (this.renderConfig.clearCanvas !== true) {\n this.restore();\n }\n }\n };\n CanvasRendererBase.prototype.buildItem = function (pos) {\n var elements = this.elements;\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n var element = this.createItem(this.layers[pos], this, this.globalData);\n elements[pos] = element;\n element.initExpressions();\n /* if(this.layers[pos].ty === 0){\n element.resize(this.globalData.transformCanvas);\n } */\n };\n CanvasRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n CanvasRendererBase.prototype.hide = function () {\n this.animationItem.container.style.display = 'none';\n };\n CanvasRendererBase.prototype.show = function () {\n this.animationItem.container.style.display = 'block';\n };\n\n function CanvasContext() {\n this.opacity = -1;\n this.transform = createTypedArray('float32', 16);\n this.fillStyle = '';\n this.strokeStyle = '';\n this.lineWidth = '';\n this.lineCap = '';\n this.lineJoin = '';\n this.miterLimit = '';\n this.id = Math.random();\n }\n function CVContextData() {\n this.stack = [];\n this.cArrPos = 0;\n this.cTr = new Matrix();\n var i;\n var len = 15;\n for (i = 0; i < len; i += 1) {\n var canvasContext = new CanvasContext();\n this.stack[i] = canvasContext;\n }\n this._length = len;\n this.nativeContext = null;\n this.transformMat = new Matrix();\n this.currentOpacity = 1;\n //\n this.currentFillStyle = '';\n this.appliedFillStyle = '';\n //\n this.currentStrokeStyle = '';\n this.appliedStrokeStyle = '';\n //\n this.currentLineWidth = '';\n this.appliedLineWidth = '';\n //\n this.currentLineCap = '';\n this.appliedLineCap = '';\n //\n this.currentLineJoin = '';\n this.appliedLineJoin = '';\n //\n this.appliedMiterLimit = '';\n this.currentMiterLimit = '';\n }\n CVContextData.prototype.duplicate = function () {\n var newLength = this._length * 2;\n var i = 0;\n for (i = this._length; i < newLength; i += 1) {\n this.stack[i] = new CanvasContext();\n }\n this._length = newLength;\n };\n CVContextData.prototype.reset = function () {\n this.cArrPos = 0;\n this.cTr.reset();\n this.stack[this.cArrPos].opacity = 1;\n };\n CVContextData.prototype.restore = function (forceRestore) {\n this.cArrPos -= 1;\n var currentContext = this.stack[this.cArrPos];\n var transform = currentContext.transform;\n var i;\n var arr = this.cTr.props;\n for (i = 0; i < 16; i += 1) {\n arr[i] = transform[i];\n }\n if (forceRestore) {\n this.nativeContext.restore();\n var prevStack = this.stack[this.cArrPos + 1];\n this.appliedFillStyle = prevStack.fillStyle;\n this.appliedStrokeStyle = prevStack.strokeStyle;\n this.appliedLineWidth = prevStack.lineWidth;\n this.appliedLineCap = prevStack.lineCap;\n this.appliedLineJoin = prevStack.lineJoin;\n this.appliedMiterLimit = prevStack.miterLimit;\n }\n this.nativeContext.setTransform(transform[0], transform[1], transform[4], transform[5], transform[12], transform[13]);\n if (forceRestore || currentContext.opacity !== -1 && this.currentOpacity !== currentContext.opacity) {\n this.nativeContext.globalAlpha = currentContext.opacity;\n this.currentOpacity = currentContext.opacity;\n }\n this.currentFillStyle = currentContext.fillStyle;\n this.currentStrokeStyle = currentContext.strokeStyle;\n this.currentLineWidth = currentContext.lineWidth;\n this.currentLineCap = currentContext.lineCap;\n this.currentLineJoin = currentContext.lineJoin;\n this.currentMiterLimit = currentContext.miterLimit;\n };\n CVContextData.prototype.save = function (saveOnNativeFlag) {\n if (saveOnNativeFlag) {\n this.nativeContext.save();\n }\n var props = this.cTr.props;\n if (this._length <= this.cArrPos) {\n this.duplicate();\n }\n var currentStack = this.stack[this.cArrPos];\n var i;\n for (i = 0; i < 16; i += 1) {\n currentStack.transform[i] = props[i];\n }\n this.cArrPos += 1;\n var newStack = this.stack[this.cArrPos];\n newStack.opacity = currentStack.opacity;\n newStack.fillStyle = currentStack.fillStyle;\n newStack.strokeStyle = currentStack.strokeStyle;\n newStack.lineWidth = currentStack.lineWidth;\n newStack.lineCap = currentStack.lineCap;\n newStack.lineJoin = currentStack.lineJoin;\n newStack.miterLimit = currentStack.miterLimit;\n };\n CVContextData.prototype.setOpacity = function (value) {\n this.stack[this.cArrPos].opacity = value;\n };\n CVContextData.prototype.setContext = function (value) {\n this.nativeContext = value;\n };\n CVContextData.prototype.fillStyle = function (value) {\n if (this.stack[this.cArrPos].fillStyle !== value) {\n this.currentFillStyle = value;\n this.stack[this.cArrPos].fillStyle = value;\n }\n };\n CVContextData.prototype.strokeStyle = function (value) {\n if (this.stack[this.cArrPos].strokeStyle !== value) {\n this.currentStrokeStyle = value;\n this.stack[this.cArrPos].strokeStyle = value;\n }\n };\n CVContextData.prototype.lineWidth = function (value) {\n if (this.stack[this.cArrPos].lineWidth !== value) {\n this.currentLineWidth = value;\n this.stack[this.cArrPos].lineWidth = value;\n }\n };\n CVContextData.prototype.lineCap = function (value) {\n if (this.stack[this.cArrPos].lineCap !== value) {\n this.currentLineCap = value;\n this.stack[this.cArrPos].lineCap = value;\n }\n };\n CVContextData.prototype.lineJoin = function (value) {\n if (this.stack[this.cArrPos].lineJoin !== value) {\n this.currentLineJoin = value;\n this.stack[this.cArrPos].lineJoin = value;\n }\n };\n CVContextData.prototype.miterLimit = function (value) {\n if (this.stack[this.cArrPos].miterLimit !== value) {\n this.currentMiterLimit = value;\n this.stack[this.cArrPos].miterLimit = value;\n }\n };\n CVContextData.prototype.transform = function (props) {\n this.transformMat.cloneFromProps(props);\n // Taking the last transform value from the stored stack of transforms\n var currentTransform = this.cTr;\n // Applying the last transform value after the new transform to respect the order of transformations\n this.transformMat.multiply(currentTransform);\n // Storing the new transformed value in the stored transform\n currentTransform.cloneFromProps(this.transformMat.props);\n var trProps = currentTransform.props;\n // Applying the new transform to the canvas\n this.nativeContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n };\n CVContextData.prototype.opacity = function (op) {\n var currentOpacity = this.stack[this.cArrPos].opacity;\n currentOpacity *= op < 0 ? 0 : op;\n if (this.stack[this.cArrPos].opacity !== currentOpacity) {\n if (this.currentOpacity !== op) {\n this.nativeContext.globalAlpha = op;\n this.currentOpacity = op;\n }\n this.stack[this.cArrPos].opacity = currentOpacity;\n }\n };\n CVContextData.prototype.fill = function (rule) {\n if (this.appliedFillStyle !== this.currentFillStyle) {\n this.appliedFillStyle = this.currentFillStyle;\n this.nativeContext.fillStyle = this.appliedFillStyle;\n }\n this.nativeContext.fill(rule);\n };\n CVContextData.prototype.fillRect = function (x, y, w, h) {\n if (this.appliedFillStyle !== this.currentFillStyle) {\n this.appliedFillStyle = this.currentFillStyle;\n this.nativeContext.fillStyle = this.appliedFillStyle;\n }\n this.nativeContext.fillRect(x, y, w, h);\n };\n CVContextData.prototype.stroke = function () {\n if (this.appliedStrokeStyle !== this.currentStrokeStyle) {\n this.appliedStrokeStyle = this.currentStrokeStyle;\n this.nativeContext.strokeStyle = this.appliedStrokeStyle;\n }\n if (this.appliedLineWidth !== this.currentLineWidth) {\n this.appliedLineWidth = this.currentLineWidth;\n this.nativeContext.lineWidth = this.appliedLineWidth;\n }\n if (this.appliedLineCap !== this.currentLineCap) {\n this.appliedLineCap = this.currentLineCap;\n this.nativeContext.lineCap = this.appliedLineCap;\n }\n if (this.appliedLineJoin !== this.currentLineJoin) {\n this.appliedLineJoin = this.currentLineJoin;\n this.nativeContext.lineJoin = this.appliedLineJoin;\n }\n if (this.appliedMiterLimit !== this.currentMiterLimit) {\n this.appliedMiterLimit = this.currentMiterLimit;\n this.nativeContext.miterLimit = this.appliedMiterLimit;\n }\n this.nativeContext.stroke();\n };\n\n function CVCompElement(data, globalData, comp) {\n this.completeLayers = false;\n this.layers = data.layers;\n this.pendingElements = [];\n this.elements = createSizedArray(this.layers.length);\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\n CVCompElement.prototype.renderInnerContent = function () {\n var ctx = this.canvasContext;\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.data.w, 0);\n ctx.lineTo(this.data.w, this.data.h);\n ctx.lineTo(0, this.data.h);\n ctx.lineTo(0, 0);\n ctx.clip();\n var i;\n var len = this.layers.length;\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n CVCompElement.prototype.destroy = function () {\n var i;\n var len = this.layers.length;\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n this.layers = null;\n this.elements = null;\n };\n CVCompElement.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n function CanvasRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n context: config && config.context || null,\n progressiveLoad: config && config.progressiveLoad || false,\n preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n contentVisibility: config && config.contentVisibility || 'visible',\n className: config && config.className || '',\n id: config && config.id || '',\n runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n };\n this.renderConfig.dpr = config && config.dpr || 1;\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n }\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = 'canvas';\n if (this.renderConfig.clearCanvas) {\n this.ctxTransform = this.contextData.transform.bind(this.contextData);\n this.ctxOpacity = this.contextData.opacity.bind(this.contextData);\n this.ctxFillStyle = this.contextData.fillStyle.bind(this.contextData);\n this.ctxStrokeStyle = this.contextData.strokeStyle.bind(this.contextData);\n this.ctxLineWidth = this.contextData.lineWidth.bind(this.contextData);\n this.ctxLineCap = this.contextData.lineCap.bind(this.contextData);\n this.ctxLineJoin = this.contextData.lineJoin.bind(this.contextData);\n this.ctxMiterLimit = this.contextData.miterLimit.bind(this.contextData);\n this.ctxFill = this.contextData.fill.bind(this.contextData);\n this.ctxFillRect = this.contextData.fillRect.bind(this.contextData);\n this.ctxStroke = this.contextData.stroke.bind(this.contextData);\n this.save = this.contextData.save.bind(this.contextData);\n }\n }\n extendPrototype([CanvasRendererBase], CanvasRenderer);\n CanvasRenderer.prototype.createComp = function (data) {\n return new CVCompElement(data, this.globalData, this);\n };\n\n function HBaseElement() {}\n HBaseElement.prototype = {\n checkBlendMode: function checkBlendMode() {},\n initRendererElement: function initRendererElement() {\n this.baseElement = createTag(this.data.tg || 'div');\n if (this.data.hasMask) {\n this.svgElement = createNS('svg');\n this.layerElement = createNS('g');\n this.maskedElement = this.layerElement;\n this.svgElement.appendChild(this.layerElement);\n this.baseElement.appendChild(this.svgElement);\n } else {\n this.layerElement = this.baseElement;\n }\n styleDiv(this.baseElement);\n },\n createContainerElements: function createContainerElements() {\n this.renderableEffectsManager = new CVEffects(this);\n this.transformedElement = this.baseElement;\n this.maskedElement = this.layerElement;\n if (this.data.ln) {\n this.layerElement.setAttribute('id', this.data.ln);\n }\n if (this.data.cl) {\n this.layerElement.setAttribute('class', this.data.cl);\n }\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function renderElement() {\n var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {};\n if (this.finalTransform._matMdf) {\n var matrixValue = this.finalTransform.mat.toCSS();\n transformedElementStyle.transform = matrixValue;\n transformedElementStyle.webkitTransform = matrixValue;\n }\n if (this.finalTransform._opMdf) {\n transformedElementStyle.opacity = this.finalTransform.mProp.o.v;\n }\n },\n renderFrame: function renderFrame() {\n // If it is exported as hidden (data.hd === true) no need to render\n // If it is not visible no need to render\n if (this.data.hd || this.hidden) {\n return;\n }\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function destroy() {\n this.layerElement = null;\n this.transformedElement = null;\n if (this.matteElement) {\n this.matteElement = null;\n }\n if (this.maskManager) {\n this.maskManager.destroy();\n this.maskManager = null;\n }\n },\n createRenderableComponents: function createRenderableComponents() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n },\n addEffects: function addEffects() {},\n setMatte: function setMatte() {}\n };\n HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\n HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\n HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting;\n\n function HSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\n HSolidElement.prototype.createContent = function () {\n var rect;\n if (this.data.hasMask) {\n rect = createNS('rect');\n rect.setAttribute('width', this.data.sw);\n rect.setAttribute('height', this.data.sh);\n rect.setAttribute('fill', this.data.sc);\n this.svgElement.setAttribute('width', this.data.sw);\n this.svgElement.setAttribute('height', this.data.sh);\n } else {\n rect = createTag('div');\n rect.style.width = this.data.sw + 'px';\n rect.style.height = this.data.sh + 'px';\n rect.style.backgroundColor = this.data.sc;\n }\n this.layerElement.appendChild(rect);\n };\n\n function HShapeElement(data, globalData, comp) {\n // List of drawable elements\n this.shapes = [];\n // Full shape data\n this.shapesData = data.shapes;\n // List of styles that will be applied to shapes\n this.stylesList = [];\n // List of modifiers that will be applied to shapes\n this.shapeModifiers = [];\n // List of items in shape tree\n this.itemsData = [];\n // List of items in previous shape tree\n this.processedElements = [];\n // List of animated components\n this.animatedContents = [];\n this.shapesContainer = createNS('g');\n this.initElement(data, globalData, comp);\n // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n // List of elements that have been created\n this.prevViewData = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n }\n extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\n HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\n HShapeElement.prototype.createContent = function () {\n var cont;\n this.baseElement.style.fontSize = 0;\n if (this.data.hasMask) {\n this.layerElement.appendChild(this.shapesContainer);\n cont = this.svgElement;\n } else {\n cont = createNS('svg');\n var size = this.comp.data ? this.comp.data : this.globalData.compSize;\n cont.setAttribute('width', size.w);\n cont.setAttribute('height', size.h);\n cont.appendChild(this.shapesContainer);\n this.layerElement.appendChild(cont);\n }\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\n this.filterUniqueShapes();\n this.shapeCont = cont;\n };\n HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\n var i;\n var len = transformers.length;\n for (i = 0; i < len; i += 1) {\n point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\n }\n return point;\n };\n HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\n var shape = item.sh.v;\n var transformers = item.transformers;\n var i;\n var len = shape._length;\n var vPoint;\n var oPoint;\n var nextIPoint;\n var nextVPoint;\n if (len <= 1) {\n return;\n }\n for (i = 0; i < len - 1; i += 1) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n if (shape.c) {\n vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\n nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\n this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n }\n };\n HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\n this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\n var bounds = this.shapeBoundingBox;\n boundingBox.x = bmMin(bounds.left, boundingBox.x);\n boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax);\n boundingBox.y = bmMin(bounds.top, boundingBox.y);\n boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax);\n };\n HShapeElement.prototype.shapeBoundingBox = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n HShapeElement.prototype.tempBoundingBox = {\n x: 0,\n xMax: 0,\n y: 0,\n yMax: 0,\n width: 0,\n height: 0\n };\n HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\n var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\n for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {\n // eslint-disable-line no-plusplus\n b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n c = 3 * p1[i] - 3 * p0[i];\n b |= 0; // eslint-disable-line no-bitwise\n a |= 0; // eslint-disable-line no-bitwise\n c |= 0; // eslint-disable-line no-bitwise\n\n if (a === 0 && b === 0) {\n //\n } else if (a === 0) {\n t = -c / b;\n if (t > 0 && t < 1) {\n bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n }\n } else {\n b2ac = b * b - 4 * c * a;\n if (b2ac >= 0) {\n t1 = (-b + bmSqrt(b2ac)) / (2 * a);\n if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n t2 = (-b - bmSqrt(b2ac)) / (2 * a);\n if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n }\n }\n }\n this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]);\n this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]);\n this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]);\n this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]);\n };\n HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n return bmPow(1 - t, 3) * p0[i] + 3 * bmPow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bmPow(t, 2) * p2[i] + bmPow(t, 3) * p3[i];\n };\n HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n var i;\n var len = itemsData.length;\n for (i = 0; i < len; i += 1) {\n if (itemsData[i] && itemsData[i].sh) {\n this.calculateShapeBoundingBox(itemsData[i], boundingBox);\n } else if (itemsData[i] && itemsData[i].it) {\n this.calculateBoundingBox(itemsData[i].it, boundingBox);\n } else if (itemsData[i] && itemsData[i].style && itemsData[i].w) {\n this.expandStrokeBoundingBox(itemsData[i].w, boundingBox);\n }\n }\n };\n HShapeElement.prototype.expandStrokeBoundingBox = function (widthProperty, boundingBox) {\n var width = 0;\n if (widthProperty.keyframes) {\n for (var i = 0; i < widthProperty.keyframes.length; i += 1) {\n var kfw = widthProperty.keyframes[i].s;\n if (kfw > width) {\n width = kfw;\n }\n }\n width *= widthProperty.mult;\n } else {\n width = widthProperty.v * widthProperty.mult;\n }\n boundingBox.x -= width;\n boundingBox.xMax += width;\n boundingBox.y -= width;\n boundingBox.yMax += width;\n };\n HShapeElement.prototype.currentBoxContains = function (box) {\n return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;\n };\n HShapeElement.prototype.renderInnerContent = function () {\n this._renderShapeFrame();\n if (!this.hidden && (this._isFirstFrame || this._mdf)) {\n var tempBoundingBox = this.tempBoundingBox;\n var max = 999999;\n tempBoundingBox.x = max;\n tempBoundingBox.xMax = -max;\n tempBoundingBox.y = max;\n tempBoundingBox.yMax = -max;\n this.calculateBoundingBox(this.itemsData, tempBoundingBox);\n tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;\n tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y;\n // var tempBoundingBox = this.shapeCont.getBBox();\n if (this.currentBoxContains(tempBoundingBox)) {\n return;\n }\n var changed = false;\n if (this.currentBBox.w !== tempBoundingBox.width) {\n this.currentBBox.w = tempBoundingBox.width;\n this.shapeCont.setAttribute('width', tempBoundingBox.width);\n changed = true;\n }\n if (this.currentBBox.h !== tempBoundingBox.height) {\n this.currentBBox.h = tempBoundingBox.height;\n this.shapeCont.setAttribute('height', tempBoundingBox.height);\n changed = true;\n }\n if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {\n this.currentBBox.w = tempBoundingBox.width;\n this.currentBBox.h = tempBoundingBox.height;\n this.currentBBox.x = tempBoundingBox.x;\n this.currentBBox.y = tempBoundingBox.y;\n this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n var shapeStyle = this.shapeCont.style;\n var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n shapeStyle.transform = shapeTransform;\n shapeStyle.webkitTransform = shapeTransform;\n }\n }\n };\n\n function HTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.textPaths = [];\n this.currentBBox = {\n x: 999999,\n y: -999999,\n h: 0,\n w: 0\n };\n this.renderType = 'svg';\n this.isMasked = false;\n this.initElement(data, globalData, comp);\n }\n extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\n HTextElement.prototype.createContent = function () {\n this.isMasked = this.checkMasks();\n if (this.isMasked) {\n this.renderType = 'svg';\n this.compW = this.comp.data.w;\n this.compH = this.comp.data.h;\n this.svgElement.setAttribute('width', this.compW);\n this.svgElement.setAttribute('height', this.compH);\n var g = createNS('g');\n this.maskedElement.appendChild(g);\n this.innerElem = g;\n } else {\n this.renderType = 'html';\n this.innerElem = this.layerElement;\n }\n this.checkParenting();\n };\n HTextElement.prototype.buildNewText = function () {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var innerElemStyle = this.innerElem.style;\n var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\n innerElemStyle.fill = textColor;\n innerElemStyle.color = textColor;\n if (documentData.sc) {\n innerElemStyle.stroke = this.buildColor(documentData.sc);\n innerElemStyle.strokeWidth = documentData.sw + 'px';\n }\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n if (!this.globalData.fontManager.chars) {\n innerElemStyle.fontSize = documentData.finalSize + 'px';\n innerElemStyle.lineHeight = documentData.finalSize + 'px';\n if (fontData.fClass) {\n this.innerElem.className = fontData.fClass;\n } else {\n innerElemStyle.fontFamily = fontData.fFamily;\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n innerElemStyle.fontStyle = fStyle;\n innerElemStyle.fontWeight = fWeight;\n }\n }\n var i;\n var len;\n var letters = documentData.l;\n len = letters.length;\n var tSpan;\n var tParent;\n var tCont;\n var matrixHelper = this.mHelper;\n var shapes;\n var shapeStr = '';\n var cnt = 0;\n for (i = 0; i < len; i += 1) {\n if (this.globalData.fontManager.chars) {\n if (!this.textPaths[cnt]) {\n tSpan = createNS('path');\n tSpan.setAttribute('stroke-linecap', lineCapEnum[1]);\n tSpan.setAttribute('stroke-linejoin', lineJoinEnum[2]);\n tSpan.setAttribute('stroke-miterlimit', '4');\n } else {\n tSpan = this.textPaths[cnt];\n }\n if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tCont = tParent.children[0];\n } else {\n tParent = createTag('div');\n tParent.style.lineHeight = 0;\n tCont = createNS('svg');\n tCont.appendChild(tSpan);\n styleDiv(tParent);\n }\n }\n } else if (!this.isMasked) {\n if (this.textSpans[cnt]) {\n tParent = this.textSpans[cnt];\n tSpan = this.textPaths[cnt];\n } else {\n tParent = createTag('span');\n styleDiv(tParent);\n tSpan = createTag('span');\n styleDiv(tSpan);\n tParent.appendChild(tSpan);\n }\n } else {\n tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\n }\n // tSpan.setAttribute('visibility', 'hidden');\n if (this.globalData.fontManager.chars) {\n var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n var shapeData;\n if (charData) {\n shapeData = charData.data;\n } else {\n shapeData = null;\n }\n matrixHelper.reset();\n if (shapeData && shapeData.shapes && shapeData.shapes.length) {\n shapes = shapeData.shapes[0].it;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n shapeStr = this.createPathShape(matrixHelper, shapes);\n tSpan.setAttribute('d', shapeStr);\n }\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent);\n if (shapeData && shapeData.shapes) {\n // document.body.appendChild is needed to get exact measure of shape\n document.body.appendChild(tCont);\n var boundingBox = tCont.getBBox();\n tCont.setAttribute('width', boundingBox.width + 2);\n tCont.setAttribute('height', boundingBox.height + 2);\n tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));\n var tContStyle = tCont.style;\n var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\n tContStyle.transform = tContTranslation;\n tContStyle.webkitTransform = tContTranslation;\n letters[i].yOffset = boundingBox.y - 1;\n } else {\n tCont.setAttribute('width', 1);\n tCont.setAttribute('height', 1);\n }\n tParent.appendChild(tCont);\n } else {\n this.innerElem.appendChild(tSpan);\n }\n } else {\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n if (!this.isMasked) {\n this.innerElem.appendChild(tParent);\n //\n var tStyle = tSpan.style;\n var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\n tStyle.transform = tSpanTranslation;\n tStyle.webkitTransform = tSpanTranslation;\n } else {\n this.innerElem.appendChild(tSpan);\n }\n }\n //\n if (!this.isMasked) {\n this.textSpans[cnt] = tParent;\n } else {\n this.textSpans[cnt] = tSpan;\n }\n this.textSpans[cnt].style.display = 'block';\n this.textPaths[cnt] = tSpan;\n cnt += 1;\n }\n while (cnt < this.textSpans.length) {\n this.textSpans[cnt].style.display = 'none';\n cnt += 1;\n }\n };\n HTextElement.prototype.renderInnerContent = function () {\n this.validateText();\n var svgStyle;\n if (this.data.singleShape) {\n if (!this._isFirstFrame && !this.lettersChangedFlag) {\n return;\n }\n if (this.isMasked && this.finalTransform._matMdf) {\n // Todo Benchmark if using this is better than getBBox\n this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n svgStyle = this.svgElement.style;\n var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n svgStyle.transform = translation;\n svgStyle.webkitTransform = translation;\n }\n }\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n return;\n }\n var i;\n var len;\n var count = 0;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var textPath;\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n count += 1;\n } else {\n textSpan = this.textSpans[i];\n textPath = this.textPaths[i];\n renderedLetter = renderedLetters[count];\n count += 1;\n if (renderedLetter._mdf.m) {\n if (!this.isMasked) {\n textSpan.style.webkitTransform = renderedLetter.m;\n textSpan.style.transform = renderedLetter.m;\n } else {\n textSpan.setAttribute('transform', renderedLetter.m);\n }\n }\n /// /textSpan.setAttribute('opacity',renderedLetter.o);\n textSpan.style.opacity = renderedLetter.o;\n if (renderedLetter.sw && renderedLetter._mdf.sw) {\n textPath.setAttribute('stroke-width', renderedLetter.sw);\n }\n if (renderedLetter.sc && renderedLetter._mdf.sc) {\n textPath.setAttribute('stroke', renderedLetter.sc);\n }\n if (renderedLetter.fc && renderedLetter._mdf.fc) {\n textPath.setAttribute('fill', renderedLetter.fc);\n textPath.style.color = renderedLetter.fc;\n }\n }\n }\n if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\n var boundingBox = this.innerElem.getBBox();\n if (this.currentBBox.w !== boundingBox.width) {\n this.currentBBox.w = boundingBox.width;\n this.svgElement.setAttribute('width', boundingBox.width);\n }\n if (this.currentBBox.h !== boundingBox.height) {\n this.currentBBox.h = boundingBox.height;\n this.svgElement.setAttribute('height', boundingBox.height);\n }\n var margin = 1;\n if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {\n this.currentBBox.w = boundingBox.width + margin * 2;\n this.currentBBox.h = boundingBox.height + margin * 2;\n this.currentBBox.x = boundingBox.x - margin;\n this.currentBBox.y = boundingBox.y - margin;\n this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n svgStyle = this.svgElement.style;\n var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n svgStyle.transform = svgTransform;\n svgStyle.webkitTransform = svgTransform;\n }\n }\n };\n\n function HCameraElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initHierarchy();\n var getProp = PropertyFactory.getProp;\n this.pe = getProp(this, data.pe, 0, 0, this);\n if (data.ks.p.s) {\n this.px = getProp(this, data.ks.p.x, 1, 0, this);\n this.py = getProp(this, data.ks.p.y, 1, 0, this);\n this.pz = getProp(this, data.ks.p.z, 1, 0, this);\n } else {\n this.p = getProp(this, data.ks.p, 1, 0, this);\n }\n if (data.ks.a) {\n this.a = getProp(this, data.ks.a, 1, 0, this);\n }\n if (data.ks.or.k.length && data.ks.or.k[0].to) {\n var i;\n var len = data.ks.or.k.length;\n for (i = 0; i < len; i += 1) {\n data.ks.or.k[i].to = null;\n data.ks.or.k[i].ti = null;\n }\n }\n this.or = getProp(this, data.ks.or, 1, degToRads, this);\n this.or.sh = true;\n this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\n this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\n this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\n this.mat = new Matrix();\n this._prevMat = new Matrix();\n this._isFirstFrame = true;\n\n // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\n this.finalTransform = {\n mProp: this\n };\n }\n extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\n HCameraElement.prototype.setup = function () {\n var i;\n var len = this.comp.threeDElements.length;\n var comp;\n var perspectiveStyle;\n var containerStyle;\n for (i = 0; i < len; i += 1) {\n // [perspectiveElem,container]\n comp = this.comp.threeDElements[i];\n if (comp.type === '3d') {\n perspectiveStyle = comp.perspectiveElem.style;\n containerStyle = comp.container.style;\n var perspective = this.pe.v + 'px';\n var origin = '0px 0px 0px';\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n perspectiveStyle.perspective = perspective;\n perspectiveStyle.webkitPerspective = perspective;\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n perspectiveStyle.transform = matrix;\n perspectiveStyle.webkitTransform = matrix;\n }\n }\n };\n HCameraElement.prototype.createElements = function () {};\n HCameraElement.prototype.hide = function () {};\n HCameraElement.prototype.renderFrame = function () {\n var _mdf = this._isFirstFrame;\n var i;\n var len;\n if (this.hierarchy) {\n len = this.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\n }\n }\n if (_mdf || this.pe._mdf || this.p && this.p._mdf || this.px && (this.px._mdf || this.py._mdf || this.pz._mdf) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || this.a && this.a._mdf) {\n this.mat.reset();\n if (this.hierarchy) {\n len = this.hierarchy.length - 1;\n for (i = len; i >= 0; i -= 1) {\n var mTransf = this.hierarchy[i].finalTransform.mProp;\n this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\n this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\n this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\n this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\n this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\n }\n }\n if (this.p) {\n this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\n } else {\n this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\n }\n if (this.a) {\n var diffVector;\n if (this.p) {\n diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\n } else {\n diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\n }\n var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2));\n // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\n var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\n var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\n var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n var mRotationY = Math.atan2(lookDir[0], -lookDir[2]);\n this.mat.rotateY(mRotationY).rotateX(-mRotationX);\n }\n this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\n this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\n this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\n this.mat.translate(0, 0, this.pe.v);\n var hasMatrixChanged = !this._prevMat.equals(this.mat);\n if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\n len = this.comp.threeDElements.length;\n var comp;\n var perspectiveStyle;\n var containerStyle;\n for (i = 0; i < len; i += 1) {\n comp = this.comp.threeDElements[i];\n if (comp.type === '3d') {\n if (hasMatrixChanged) {\n var matValue = this.mat.toCSS();\n containerStyle = comp.container.style;\n containerStyle.transform = matValue;\n containerStyle.webkitTransform = matValue;\n }\n if (this.pe._mdf) {\n perspectiveStyle = comp.perspectiveElem.style;\n perspectiveStyle.perspective = this.pe.v + 'px';\n perspectiveStyle.webkitPerspective = this.pe.v + 'px';\n }\n }\n }\n this.mat.clone(this._prevMat);\n }\n }\n this._isFirstFrame = false;\n };\n HCameraElement.prototype.prepareFrame = function (num) {\n this.prepareProperties(num, true);\n };\n HCameraElement.prototype.destroy = function () {};\n HCameraElement.prototype.getBaseElement = function () {\n return null;\n };\n\n function HImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.initElement(data, globalData, comp);\n }\n extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\n HImageElement.prototype.createContent = function () {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n var img = new Image();\n if (this.data.hasMask) {\n this.imageElem = createNS('image');\n this.imageElem.setAttribute('width', this.assetData.w + 'px');\n this.imageElem.setAttribute('height', this.assetData.h + 'px');\n this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n this.layerElement.appendChild(this.imageElem);\n this.baseElement.setAttribute('width', this.assetData.w);\n this.baseElement.setAttribute('height', this.assetData.h);\n } else {\n this.layerElement.appendChild(img);\n }\n img.crossOrigin = 'anonymous';\n img.src = assetPath;\n if (this.data.ln) {\n this.baseElement.setAttribute('id', this.data.ln);\n }\n };\n\n function HybridRendererBase(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.renderConfig = {\n className: config && config.className || '',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '400%',\n height: config && config.filterSize && config.filterSize.height || '400%',\n x: config && config.filterSize && config.filterSize.x || '-100%',\n y: config && config.filterSize && config.filterSize.y || '-100%'\n }\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n renderConfig: this.renderConfig\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n this.rendererType = 'html';\n }\n extendPrototype([BaseRenderer], HybridRendererBase);\n HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem;\n HybridRendererBase.prototype.checkPendingElements = function () {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n HybridRendererBase.prototype.appendElementInPos = function (element, pos) {\n var newDOMElement = element.getBaseElement();\n if (!newDOMElement) {\n return;\n }\n var layer = this.layers[pos];\n if (!layer.ddd || !this.supports3d) {\n if (this.threeDElements) {\n this.addTo3dContainer(newDOMElement, pos);\n } else {\n var i = 0;\n var nextDOMElement;\n var nextLayer;\n var tmpDOMElement;\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\n nextLayer = this.elements[i];\n tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\n nextDOMElement = tmpDOMElement || nextDOMElement;\n }\n i += 1;\n }\n if (nextDOMElement) {\n if (!layer.ddd || !this.supports3d) {\n this.layerElement.insertBefore(newDOMElement, nextDOMElement);\n }\n } else if (!layer.ddd || !this.supports3d) {\n this.layerElement.appendChild(newDOMElement);\n }\n }\n } else {\n this.addTo3dContainer(newDOMElement, pos);\n }\n };\n HybridRendererBase.prototype.createShape = function (data) {\n if (!this.supports3d) {\n return new SVGShapeElement(data, this.globalData, this);\n }\n return new HShapeElement(data, this.globalData, this);\n };\n HybridRendererBase.prototype.createText = function (data) {\n if (!this.supports3d) {\n return new SVGTextLottieElement(data, this.globalData, this);\n }\n return new HTextElement(data, this.globalData, this);\n };\n HybridRendererBase.prototype.createCamera = function (data) {\n this.camera = new HCameraElement(data, this.globalData, this);\n return this.camera;\n };\n HybridRendererBase.prototype.createImage = function (data) {\n if (!this.supports3d) {\n return new IImageElement(data, this.globalData, this);\n }\n return new HImageElement(data, this.globalData, this);\n };\n HybridRendererBase.prototype.createSolid = function (data) {\n if (!this.supports3d) {\n return new ISolidElement(data, this.globalData, this);\n }\n return new HSolidElement(data, this.globalData, this);\n };\n HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) {\n var i = 0;\n var len = this.threeDElements.length;\n while (i < len) {\n if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n return this.threeDElements[i].perspectiveElem;\n }\n i += 1;\n }\n return null;\n };\n HybridRendererBase.prototype.createThreeDContainer = function (pos, type) {\n var perspectiveElem = createTag('div');\n var style;\n var containerStyle;\n styleDiv(perspectiveElem);\n var container = createTag('div');\n styleDiv(container);\n if (type === '3d') {\n style = perspectiveElem.style;\n style.width = this.globalData.compSize.w + 'px';\n style.height = this.globalData.compSize.h + 'px';\n var center = '50% 50%';\n style.webkitTransformOrigin = center;\n style.mozTransformOrigin = center;\n style.transformOrigin = center;\n containerStyle = container.style;\n var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n containerStyle.transform = matrix;\n containerStyle.webkitTransform = matrix;\n }\n perspectiveElem.appendChild(container);\n // this.resizerElem.appendChild(perspectiveElem);\n var threeDContainerData = {\n container: container,\n perspectiveElem: perspectiveElem,\n startPos: pos,\n endPos: pos,\n type: type\n };\n this.threeDElements.push(threeDContainerData);\n return threeDContainerData;\n };\n HybridRendererBase.prototype.build3dContainers = function () {\n var i;\n var len = this.layers.length;\n var lastThreeDContainerData;\n var currentContainer = '';\n for (i = 0; i < len; i += 1) {\n if (this.layers[i].ddd && this.layers[i].ty !== 3) {\n if (currentContainer !== '3d') {\n currentContainer = '3d';\n lastThreeDContainerData = this.createThreeDContainer(i, '3d');\n }\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n } else {\n if (currentContainer !== '2d') {\n currentContainer = '2d';\n lastThreeDContainerData = this.createThreeDContainer(i, '2d');\n }\n lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n }\n }\n len = this.threeDElements.length;\n for (i = len - 1; i >= 0; i -= 1) {\n this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n }\n };\n HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) {\n var i = 0;\n var len = this.threeDElements.length;\n while (i < len) {\n if (pos <= this.threeDElements[i].endPos) {\n var j = this.threeDElements[i].startPos;\n var nextElement;\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n j += 1;\n }\n if (nextElement) {\n this.threeDElements[i].container.insertBefore(elem, nextElement);\n } else {\n this.threeDElements[i].container.appendChild(elem);\n }\n break;\n }\n i += 1;\n }\n };\n HybridRendererBase.prototype.configAnimation = function (animData) {\n var resizerElem = createTag('div');\n var wrapper = this.animationItem.wrapper;\n var style = resizerElem.style;\n style.width = animData.w + 'px';\n style.height = animData.h + 'px';\n this.resizerElem = resizerElem;\n styleDiv(resizerElem);\n style.transformStyle = 'flat';\n style.mozTransformStyle = 'flat';\n style.webkitTransformStyle = 'flat';\n if (this.renderConfig.className) {\n resizerElem.setAttribute('class', this.renderConfig.className);\n }\n wrapper.appendChild(resizerElem);\n style.overflow = 'hidden';\n var svg = createNS('svg');\n svg.setAttribute('width', '1');\n svg.setAttribute('height', '1');\n styleDiv(svg);\n this.resizerElem.appendChild(svg);\n var defs = createNS('defs');\n svg.appendChild(defs);\n this.data = animData;\n // Mask animation\n this.setupGlobalData(animData, svg);\n this.globalData.defs = defs;\n this.layers = animData.layers;\n this.layerElement = this.resizerElem;\n this.build3dContainers();\n this.updateContainerSize();\n };\n HybridRendererBase.prototype.destroy = function () {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = '';\n }\n this.animationItem.container = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n for (i = 0; i < len; i += 1) {\n if (this.elements[i] && this.elements[i].destroy) {\n this.elements[i].destroy();\n }\n }\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n HybridRendererBase.prototype.updateContainerSize = function () {\n var elementWidth = this.animationItem.wrapper.offsetWidth;\n var elementHeight = this.animationItem.wrapper.offsetHeight;\n var elementRel = elementWidth / elementHeight;\n var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\n var sx;\n var sy;\n var tx;\n var ty;\n if (animationRel > elementRel) {\n sx = elementWidth / this.globalData.compSize.w;\n sy = elementWidth / this.globalData.compSize.w;\n tx = 0;\n ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;\n } else {\n sx = elementHeight / this.globalData.compSize.h;\n sy = elementHeight / this.globalData.compSize.h;\n tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\n ty = 0;\n }\n var style = this.resizerElem.style;\n style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n style.transform = style.webkitTransform;\n };\n HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n HybridRendererBase.prototype.hide = function () {\n this.resizerElem.style.display = 'none';\n };\n HybridRendererBase.prototype.show = function () {\n this.resizerElem.style.display = 'block';\n };\n HybridRendererBase.prototype.initItems = function () {\n this.buildAllItems();\n if (this.camera) {\n this.camera.setup();\n } else {\n var cWidth = this.globalData.compSize.w;\n var cHeight = this.globalData.compSize.h;\n var i;\n var len = this.threeDElements.length;\n for (i = 0; i < len; i += 1) {\n var style = this.threeDElements[i].perspectiveElem.style;\n style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n style.perspective = style.webkitPerspective;\n }\n }\n };\n HybridRendererBase.prototype.searchExtraCompositions = function (assets) {\n var i;\n var len = assets.length;\n var floatingContainer = createTag('div');\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n\n function HCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = !data.hasMask;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n _placeholder: true\n };\n }\n extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement);\n HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\n HCompElement.prototype.createContainerElements = function () {\n this._createBaseContainerElements();\n // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\n if (this.data.hasMask) {\n this.svgElement.setAttribute('width', this.data.w);\n this.svgElement.setAttribute('height', this.data.h);\n this.transformedElement = this.baseElement;\n } else {\n this.transformedElement = this.layerElement;\n }\n };\n HCompElement.prototype.addTo3dContainer = function (elem, pos) {\n var j = 0;\n var nextElement;\n while (j < pos) {\n if (this.elements[j] && this.elements[j].getBaseElement) {\n nextElement = this.elements[j].getBaseElement();\n }\n j += 1;\n }\n if (nextElement) {\n this.layerElement.insertBefore(elem, nextElement);\n } else {\n this.layerElement.appendChild(elem);\n }\n };\n HCompElement.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\n }\n return new HCompElement(data, this.globalData, this);\n };\n\n function HybridRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.renderConfig = {\n className: config && config.className || '',\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || '400%',\n height: config && config.filterSize && config.filterSize.height || '400%',\n x: config && config.filterSize && config.filterSize.x || '-100%',\n y: config && config.filterSize && config.filterSize.y || '-100%'\n },\n runExpressions: !config || config.runExpressions === undefined || config.runExpressions\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n renderConfig: this.renderConfig\n };\n this.pendingElements = [];\n this.elements = [];\n this.threeDElements = [];\n this.destroyed = false;\n this.camera = null;\n this.supports3d = true;\n this.rendererType = 'html';\n }\n extendPrototype([HybridRendererBase], HybridRenderer);\n HybridRenderer.prototype.createComp = function (data) {\n if (!this.supports3d) {\n return new SVGCompElement(data, this.globalData, this);\n }\n return new HCompElement(data, this.globalData, this);\n };\n\n var CompExpressionInterface = function () {\n return function (comp) {\n function _thisLayerFunction(name) {\n var i = 0;\n var len = comp.layers.length;\n while (i < len) {\n if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n return comp.elements[i].layerInterface;\n }\n i += 1;\n }\n return null;\n // return {active:false};\n }\n Object.defineProperty(_thisLayerFunction, '_name', {\n value: comp.data.nm\n });\n _thisLayerFunction.layer = _thisLayerFunction;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n _thisLayerFunction.displayStartTime = 0;\n _thisLayerFunction.numLayers = comp.layers.length;\n return _thisLayerFunction;\n };\n }();\n\n function _typeof$2(o) { \"@babel/helpers - typeof\"; return _typeof$2 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof$2(o); }\n /* eslint-disable */\n /*\n Copyright 2014 David Bau.\n\n Permission is hereby granted, free of charge, to any person obtaining\n a copy of this software and associated documentation files (the\n \"Software\"), to deal in the Software without restriction, including\n without limitation the rights to use, copy, modify, merge, publish,\n distribute, sublicense, and/or sell copies of the Software, and to\n permit persons to whom the Software is furnished to do so, subject to\n the following conditions:\n\n The above copyright notice and this permission notice shall be\n included in all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\n IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\n CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\n TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n */\n\n function seedRandom(pool, math) {\n //\n // The following constants are related to IEEE 754 limits.\n //\n var global = this,\n width = 256,\n // each RC4 output is 0 <= x < 256\n chunks = 6,\n // at least six RC4 outputs for each double\n digits = 52,\n // there are 52 significant digits in a double\n rngname = 'random',\n // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n\n //\n // seedrandom()\n // This is the seedrandom function described above.\n //\n function seedrandom(seed, options, callback) {\n var key = [];\n options = options === true ? {\n entropy: true\n } : options || {};\n\n // Flatten the seed string or build one from local entropy if needed.\n var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key);\n\n // Use the seed to initialize an ARC4 generator.\n var arc4 = new ARC4(key);\n\n // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n var prng = function prng() {\n var n = arc4.g(chunks),\n // Start with a numerator n < 2 ^ 48\n d = startdenom,\n // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n while (n < significance) {\n // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n d *= width; // denominator and generating a\n x = arc4.g(1); // new least-significant-byte.\n }\n while (n >= overflow) {\n // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n d /= 2; // right using integer math until\n x >>>= 1; // we have exactly the desired bits.\n }\n return (n + x) / d; // Form the number within [0, 1).\n };\n prng.int32 = function () {\n return arc4.g(4) | 0;\n };\n prng.quick = function () {\n return arc4.g(4) / 0x100000000;\n };\n prng[\"double\"] = prng;\n\n // Mix the randomness into accumulated entropy.\n mixkey(tostring(arc4.S), pool);\n\n // Calling convention: what to return as a function of prng, seed, is_math.\n return (options.pass || callback || function (prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) {\n copy(state, arc4);\n }\n // Only provide the .state method if requested via options.state.\n prng.state = function () {\n return copy(arc4, {});\n };\n }\n\n // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n if (is_math_call) {\n math[rngname] = prng;\n return seed;\n }\n\n // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\n }\n math['seed' + rngname] = seedrandom;\n\n //\n // ARC4\n //\n // An ARC4 implementation. The constructor takes a key in the form of\n // an array of at most (width) integers that should be 0 <= x < (width).\n //\n // The g(count) method returns a pseudorandom integer that concatenates\n // the next (count) outputs from ARC4. Its return value is a number x\n // that is in the range 0 <= x < (width ^ count).\n //\n function ARC4(key) {\n var t,\n keylen = key.length,\n me = this,\n i = 0,\n j = me.i = me.j = 0,\n s = me.S = [];\n\n // The empty key [] is treated as [0].\n if (!keylen) {\n key = [keylen++];\n }\n\n // Set up S using the standard key scheduling algorithm.\n while (i < width) {\n s[i] = i++;\n }\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\n s[j] = t;\n }\n\n // The \"g\" method returns the next (count) outputs as one number.\n me.g = function (count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t,\n r = 0,\n i = me.i,\n j = me.j,\n s = me.S;\n while (count--) {\n t = s[i = mask & i + 1];\n r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];\n }\n me.i = i;\n me.j = j;\n return r;\n // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n };\n }\n\n //\n // copy()\n // Copies internal state of ARC4 to or from a plain object.\n //\n function copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n }\n\n //\n // flatten()\n // Converts an object tree to nested arrays of strings.\n //\n function flatten(obj, depth) {\n var result = [],\n typ = _typeof$2(obj),\n prop;\n if (depth && typ == 'object') {\n for (prop in obj) {\n try {\n result.push(flatten(obj[prop], depth - 1));\n } catch (e) {}\n }\n }\n return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n }\n\n //\n // mixkey()\n // Mixes a string seed into a key that is an array of integers, and\n // returns a shortened string seed that is equivalent to the result key.\n //\n function mixkey(seed, key) {\n var stringseed = seed + '',\n smear,\n j = 0;\n while (j < stringseed.length) {\n key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n }\n return tostring(key);\n }\n\n //\n // autoseed()\n // Returns an object for autoseeding, using window.crypto and Node crypto\n // module if available.\n //\n function autoseed() {\n try {\n if (nodecrypto) {\n return tostring(nodecrypto.randomBytes(width));\n }\n var out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date(), global, plugins, global.screen, tostring(pool)];\n }\n }\n\n //\n // tostring()\n // Converts an array of charcodes to a string\n //\n function tostring(a) {\n return String.fromCharCode.apply(0, a);\n }\n\n //\n // When seedrandom.js is loaded, we immediately mix a few bits\n // from the built-in RNG into the entropy pool. Because we do\n // not want to interfere with deterministic PRNG state later,\n // seedrandom will not call math.random on its own again after\n // initialization.\n //\n mixkey(math.random(), pool);\n\n //\n // Nodejs and AMD support: export the implementation as a module using\n // either convention.\n //\n\n // End anonymous scope, and pass initial values.\n }\n ;\n function initialize$2(BMMath) {\n seedRandom([], BMMath);\n }\n\n var propTypes = {\n SHAPE: 'shape'\n };\n\n function _typeof$1(o) { \"@babel/helpers - typeof\"; return _typeof$1 = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof$1(o); }\n var ExpressionManager = function () {\n 'use strict';\n\n var ob = {};\n var Math = BMMath;\n var window = null;\n var document = null;\n var XMLHttpRequest = null;\n var fetch = null;\n var frames = null;\n var _lottieGlobal = {};\n initialize$2(BMMath);\n function resetFrame() {\n _lottieGlobal = {};\n }\n function $bm_isInstanceOfArray(arr) {\n return arr.constructor === Array || arr.constructor === Float32Array;\n }\n function isNumerable(tOfV, v) {\n return tOfV === 'number' || v instanceof Number || tOfV === 'boolean' || tOfV === 'string';\n }\n function $bm_neg(a) {\n var tOfA = _typeof$1(a);\n if (tOfA === 'number' || a instanceof Number || tOfA === 'boolean') {\n return -a;\n }\n if ($bm_isInstanceOfArray(a)) {\n var i;\n var lenA = a.length;\n var retArr = [];\n for (i = 0; i < lenA; i += 1) {\n retArr[i] = -a[i];\n }\n return retArr;\n }\n if (a.propType) {\n return a.v;\n }\n return -a;\n }\n var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\n var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\n var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\n function sum(a, b) {\n var tOfA = _typeof$1(a);\n var tOfB = _typeof$1(b);\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b) || tOfA === 'string' || tOfB === 'string') {\n return a + b;\n }\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] += b;\n return a;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a + b[0];\n return b;\n }\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] + b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n i += 1;\n }\n return retArr;\n }\n return 0;\n }\n var add = sum;\n function sub(a, b) {\n var tOfA = _typeof$1(a);\n var tOfB = _typeof$1(b);\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n if (tOfA === 'string') {\n a = parseInt(a, 10);\n }\n if (tOfB === 'string') {\n b = parseInt(b, 10);\n }\n return a - b;\n }\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] -= b;\n return a;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a - b[0];\n return b;\n }\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n retArr[i] = a[i] - b[i];\n } else {\n retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n }\n i += 1;\n }\n return retArr;\n }\n return 0;\n }\n function mul(a, b) {\n var tOfA = _typeof$1(a);\n var tOfB = _typeof$1(b);\n var arr;\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a * b;\n }\n var i;\n var len;\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] * b;\n }\n return arr;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a * b[i];\n }\n return arr;\n }\n return 0;\n }\n function div(a, b) {\n var tOfA = _typeof$1(a);\n var tOfB = _typeof$1(b);\n var arr;\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a / b;\n }\n var i;\n var len;\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] / b;\n }\n return arr;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a / b[i];\n }\n return arr;\n }\n return 0;\n }\n function mod(a, b) {\n if (typeof a === 'string') {\n a = parseInt(a, 10);\n }\n if (typeof b === 'string') {\n b = parseInt(b, 10);\n }\n return a % b;\n }\n var $bm_sum = sum;\n var $bm_sub = sub;\n var $bm_mul = mul;\n var $bm_div = div;\n var $bm_mod = mod;\n function clamp(num, min, max) {\n if (min > max) {\n var mm = max;\n max = min;\n min = mm;\n }\n return Math.min(Math.max(num, min), max);\n }\n function radiansToDegrees(val) {\n return val / degToRads;\n }\n var radians_to_degrees = radiansToDegrees;\n function degreesToRadians(val) {\n return val * degToRads;\n }\n var degrees_to_radians = radiansToDegrees;\n var helperLengthArray = [0, 0, 0, 0, 0, 0];\n function length(arr1, arr2) {\n if (typeof arr1 === 'number' || arr1 instanceof Number) {\n arr2 = arr2 || 0;\n return Math.abs(arr1 - arr2);\n }\n if (!arr2) {\n arr2 = helperLengthArray;\n }\n var i;\n var len = Math.min(arr1.length, arr2.length);\n var addedLength = 0;\n for (i = 0; i < len; i += 1) {\n addedLength += Math.pow(arr2[i] - arr1[i], 2);\n }\n return Math.sqrt(addedLength);\n }\n function normalize(vec) {\n return div(vec, length(vec));\n }\n function rgbToHsl(val) {\n var r = val[0];\n var g = val[1];\n var b = val[2];\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var l = (max + min) / 2;\n if (max === min) {\n h = 0; // achromatic\n s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n h /= 6;\n }\n return [h, s, l, val[3]];\n }\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n function hslToRgb(val) {\n var h = val[0];\n var s = val[1];\n var l = val[2];\n var r;\n var g;\n var b;\n if (s === 0) {\n r = l; // achromatic\n b = l; // achromatic\n g = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return [r, g, b, val[3]];\n }\n function linear(t, tMin, tMax, value1, value2) {\n if (value1 === undefined || value2 === undefined) {\n value1 = tMin;\n value2 = tMax;\n tMin = 0;\n tMax = 1;\n }\n if (tMax < tMin) {\n var _tMin = tMax;\n tMax = tMin;\n tMin = _tMin;\n }\n if (t <= tMin) {\n return value1;\n }\n if (t >= tMax) {\n return value2;\n }\n var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n if (!value1.length) {\n return value1 + (value2 - value1) * perc;\n }\n var i;\n var len = value1.length;\n var arr = createTypedArray('float32', len);\n for (i = 0; i < len; i += 1) {\n arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n }\n return arr;\n }\n function random(min, max) {\n if (max === undefined) {\n if (min === undefined) {\n min = 0;\n max = 1;\n } else {\n max = min;\n min = undefined;\n }\n }\n if (max.length) {\n var i;\n var len = max.length;\n if (!min) {\n min = createTypedArray('float32', len);\n }\n var arr = createTypedArray('float32', len);\n var rnd = BMMath.random();\n for (i = 0; i < len; i += 1) {\n arr[i] = min[i] + rnd * (max[i] - min[i]);\n }\n return arr;\n }\n if (min === undefined) {\n min = 0;\n }\n var rndm = BMMath.random();\n return min + rndm * (max - min);\n }\n function createPath(points, inTangents, outTangents, closed) {\n var i;\n var len = points.length;\n var path = shapePool.newElement();\n path.setPathData(!!closed, len);\n var arrPlaceholder = [0, 0];\n var inVertexPoint;\n var outVertexPoint;\n for (i = 0; i < len; i += 1) {\n inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\n outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\n path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n }\n return path;\n }\n function initiateExpression(elem, data, property) {\n // Bail out if we don't want expressions\n function noOp(_value) {\n return _value;\n }\n if (!elem.globalData.renderConfig.runExpressions) {\n return noOp;\n }\n var val = data.x;\n var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n var _needsRandom = val.indexOf('random') !== -1;\n var elemType = elem.data.ty;\n var transform;\n var $bm_transform;\n var content;\n var effect;\n var thisProperty = property;\n thisProperty._name = elem.data.nm;\n thisProperty.valueAtTime = thisProperty.getValueAtTime;\n Object.defineProperty(thisProperty, 'value', {\n get: function get() {\n return thisProperty.v;\n }\n });\n elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n elem.comp.displayStartTime = 0;\n var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n var width = elem.data.sw ? elem.data.sw : 0;\n var height = elem.data.sh ? elem.data.sh : 0;\n var name = elem.data.nm;\n var loopIn;\n var loop_in;\n var loopOut;\n var loop_out;\n var smooth;\n var toWorld;\n var fromWorld;\n var fromComp;\n var toComp;\n var fromCompToSurface;\n var position;\n var rotation;\n var anchorPoint;\n var scale;\n var thisLayer;\n var thisComp;\n var mask;\n var valueAtTime;\n var velocityAtTime;\n var scoped_bm_rt;\n // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\n var numKeys = property.kf ? data.k.length : 0;\n var active = !this.data || this.data.hd !== true;\n var wiggle = function wiggle(freq, amp) {\n var iWiggle;\n var j;\n var lenWiggle = this.pv.length ? this.pv.length : 1;\n var addedAmps = createTypedArray('float32', lenWiggle);\n freq = 5;\n var iterations = Math.floor(time * freq);\n iWiggle = 0;\n j = 0;\n while (iWiggle < iterations) {\n // var rnd = BMMath.random();\n for (j = 0; j < lenWiggle; j += 1) {\n addedAmps[j] += -amp + amp * 2 * BMMath.random();\n // addedAmps[j] += -amp + amp*2*rnd;\n }\n iWiggle += 1;\n }\n // var rnd2 = BMMath.random();\n var periods = time * freq;\n var perc = periods - Math.floor(periods);\n var arr = createTypedArray('float32', lenWiggle);\n if (lenWiggle > 1) {\n for (j = 0; j < lenWiggle; j += 1) {\n arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc;\n // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n }\n return arr;\n }\n return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n }.bind(this);\n if (thisProperty.loopIn) {\n loopIn = thisProperty.loopIn.bind(thisProperty);\n loop_in = loopIn;\n }\n if (thisProperty.loopOut) {\n loopOut = thisProperty.loopOut.bind(thisProperty);\n loop_out = loopOut;\n }\n if (thisProperty.smooth) {\n smooth = thisProperty.smooth.bind(thisProperty);\n }\n function loopInDuration(type, duration) {\n return loopIn(type, duration, true);\n }\n function loopOutDuration(type, duration) {\n return loopOut(type, duration, true);\n }\n if (this.getValueAtTime) {\n valueAtTime = this.getValueAtTime.bind(this);\n }\n if (this.getVelocityAtTime) {\n velocityAtTime = this.getVelocityAtTime.bind(this);\n }\n var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n function lookAt(elem1, elem2) {\n var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n return [yaw, pitch, 0];\n }\n function easeOut(t, tMin, tMax, val1, val2) {\n return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n }\n function easeIn(t, tMin, tMax, val1, val2) {\n return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n }\n function ease(t, tMin, tMax, val1, val2) {\n return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n }\n function applyEase(fn, t, tMin, tMax, val1, val2) {\n if (val1 === undefined) {\n val1 = tMin;\n val2 = tMax;\n } else {\n t = (t - tMin) / (tMax - tMin);\n }\n if (t > 1) {\n t = 1;\n } else if (t < 0) {\n t = 0;\n }\n var mult = fn(t);\n if ($bm_isInstanceOfArray(val1)) {\n var iKey;\n var lenKey = val1.length;\n var arr = createTypedArray('float32', lenKey);\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\n }\n return arr;\n }\n return (val2 - val1) * mult + val1;\n }\n function nearestKey(time) {\n var iKey;\n var lenKey = data.k.length;\n var index;\n var keyTime;\n if (!data.k.length || typeof data.k[0] === 'number') {\n index = 0;\n keyTime = 0;\n } else {\n index = -1;\n time *= elem.comp.globalData.frameRate;\n if (time < data.k[0].t) {\n index = 1;\n keyTime = data.k[0].t;\n } else {\n for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\n if (time === data.k[iKey].t) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n break;\n } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\n if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\n index = iKey + 2;\n keyTime = data.k[iKey + 1].t;\n } else {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n break;\n }\n }\n if (index === -1) {\n index = iKey + 1;\n keyTime = data.k[iKey].t;\n }\n }\n }\n var obKey = {};\n obKey.index = index;\n obKey.time = keyTime / elem.comp.globalData.frameRate;\n return obKey;\n }\n function key(ind) {\n var obKey;\n var iKey;\n var lenKey;\n if (!data.k.length || typeof data.k[0] === 'number') {\n throw new Error('The property has no keyframe at index ' + ind);\n }\n ind -= 1;\n obKey = {\n time: data.k[ind].t / elem.comp.globalData.frameRate,\n value: []\n };\n var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\n lenKey = arr.length;\n for (iKey = 0; iKey < lenKey; iKey += 1) {\n obKey[iKey] = arr[iKey];\n obKey.value[iKey] = arr[iKey];\n }\n return obKey;\n }\n function framesToTime(fr, fps) {\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n return fr / fps;\n }\n function timeToFrames(t, fps) {\n if (!t && t !== 0) {\n t = time;\n }\n if (!fps) {\n fps = elem.comp.globalData.frameRate;\n }\n return t * fps;\n }\n function seedRandom(seed) {\n BMMath.seedrandom(randSeed + seed);\n }\n function sourceRectAtTime() {\n return elem.sourceRectAtTime();\n }\n function substring(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substring(init);\n }\n return value.substring(init, end);\n }\n return '';\n }\n function substr(init, end) {\n if (typeof value === 'string') {\n if (end === undefined) {\n return value.substr(init);\n }\n return value.substr(init, end);\n }\n return '';\n }\n function posterizeTime(framesPerSecond) {\n time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n value = valueAtTime(time);\n }\n var time;\n var velocity;\n var value;\n var text;\n var textIndex;\n var textTotal;\n var selectorValue;\n var index = elem.data.ind;\n var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n var parent;\n var randSeed = Math.floor(Math.random() * 1000000);\n var globalData = elem.globalData;\n function executeExpression(_value) {\n // globalData.pushExpression();\n value = _value;\n if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n return value;\n }\n if (this.propType === 'textSelector') {\n textIndex = this.textIndex;\n textTotal = this.textTotal;\n selectorValue = this.selectorValue;\n }\n if (!thisLayer) {\n text = elem.layerInterface.text;\n thisLayer = elem.layerInterface;\n thisComp = elem.comp.compInterface;\n toWorld = thisLayer.toWorld.bind(thisLayer);\n fromWorld = thisLayer.fromWorld.bind(thisLayer);\n fromComp = thisLayer.fromComp.bind(thisLayer);\n toComp = thisLayer.toComp.bind(thisLayer);\n mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n fromCompToSurface = fromComp;\n }\n if (!transform) {\n transform = elem.layerInterface('ADBE Transform Group');\n $bm_transform = transform;\n if (transform) {\n anchorPoint = transform.anchorPoint;\n /* position = transform.position;\n rotation = transform.rotation;\n scale = transform.scale; */\n }\n }\n if (elemType === 4 && !content) {\n content = thisLayer('ADBE Root Vectors Group');\n }\n if (!effect) {\n effect = thisLayer(4);\n }\n hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n if (hasParent && !parent) {\n parent = elem.hierarchy[0].layerInterface;\n }\n time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n if (_needsRandom) {\n seedRandom(randSeed + time);\n }\n if (needsVelocity) {\n velocity = velocityAtTime(time);\n }\n expression_function();\n this.frameExpressionId = elem.globalData.frameId;\n\n // TODO: Check if it's possible to return on ShapeInterface the .v value\n // Changed this to a ternary operation because Rollup failed compiling it correctly\n scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt;\n return scoped_bm_rt;\n }\n // Bundlers will see these as dead code and unless we reference them\n executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];\n return executeExpression;\n }\n ob.initiateExpression = initiateExpression;\n ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath, _lottieGlobal];\n ob.resetFrame = resetFrame;\n return ob;\n }();\n\n var Expressions = function () {\n var ob = {};\n ob.initExpressions = initExpressions;\n ob.resetFrame = ExpressionManager.resetFrame;\n function initExpressions(animation) {\n var stackCount = 0;\n var registers = [];\n function pushExpression() {\n stackCount += 1;\n }\n function popExpression() {\n stackCount -= 1;\n if (stackCount === 0) {\n releaseInstances();\n }\n }\n function registerExpressionProperty(expression) {\n if (registers.indexOf(expression) === -1) {\n registers.push(expression);\n }\n }\n function releaseInstances() {\n var i;\n var len = registers.length;\n for (i = 0; i < len; i += 1) {\n registers[i].release();\n }\n registers.length = 0;\n }\n animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n animation.renderer.globalData.pushExpression = pushExpression;\n animation.renderer.globalData.popExpression = popExpression;\n animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n }\n return ob;\n }();\n\n var MaskManagerInterface = function () {\n function MaskInterface(mask, data) {\n this._mask = mask;\n this._data = data;\n }\n Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n get: function get() {\n if (this._mask.prop.k) {\n this._mask.prop.getValue();\n }\n return this._mask.prop;\n }\n });\n Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n get: function get() {\n if (this._mask.op.k) {\n this._mask.op.getValue();\n }\n return this._mask.op.v * 100;\n }\n });\n var MaskManager = function MaskManager(maskManager) {\n var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n var i;\n var len = maskManager.viewData.length;\n for (i = 0; i < len; i += 1) {\n _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n }\n var maskFunction = function maskFunction(name) {\n i = 0;\n while (i < len) {\n if (maskManager.masksProperties[i].nm === name) {\n return _masksInterfaces[i];\n }\n i += 1;\n }\n return null;\n };\n return maskFunction;\n };\n return MaskManager;\n }();\n\n var ExpressionPropertyInterface = function () {\n var defaultUnidimensionalValue = {\n pv: 0,\n v: 0,\n mult: 1\n };\n var defaultMultidimensionalValue = {\n pv: [0, 0, 0],\n v: [0, 0, 0],\n mult: 1\n };\n function completeProperty(expressionValue, property, type) {\n Object.defineProperty(expressionValue, 'velocity', {\n get: function get() {\n return property.getVelocityAtTime(property.comp.currentFrame);\n }\n });\n expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n expressionValue.key = function (pos) {\n if (!expressionValue.numKeys) {\n return 0;\n }\n var value = '';\n if ('s' in property.keyframes[pos - 1]) {\n value = property.keyframes[pos - 1].s;\n } else if ('e' in property.keyframes[pos - 2]) {\n value = property.keyframes[pos - 2].e;\n } else {\n value = property.keyframes[pos - 2].s;\n }\n var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\n valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n valueProp.value = type === 'unidimensional' ? value[0] : value;\n return valueProp;\n };\n expressionValue.valueAtTime = property.getValueAtTime;\n expressionValue.speedAtTime = property.getSpeedAtTime;\n expressionValue.velocityAtTime = property.getVelocityAtTime;\n expressionValue.propertyGroup = property.propertyGroup;\n }\n function UnidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultUnidimensionalValue;\n }\n var mult = 1 / property.mult;\n var val = property.pv * mult;\n var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n expressionValue.value = val;\n completeProperty(expressionValue, property, 'unidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n val = property.v * mult;\n if (expressionValue.value !== val) {\n expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n expressionValue.value = val;\n expressionValue[0] = val;\n completeProperty(expressionValue, property, 'unidimensional');\n }\n return expressionValue;\n };\n }\n function MultidimensionalPropertyInterface(property) {\n if (!property || !('pv' in property)) {\n property = defaultMultidimensionalValue;\n }\n var mult = 1 / property.mult;\n var len = property.data && property.data.l || property.pv.length;\n var expressionValue = createTypedArray('float32', len);\n var arrValue = createTypedArray('float32', len);\n expressionValue.value = arrValue;\n completeProperty(expressionValue, property, 'multidimensional');\n return function () {\n if (property.k) {\n property.getValue();\n }\n for (var i = 0; i < len; i += 1) {\n arrValue[i] = property.v[i] * mult;\n expressionValue[i] = arrValue[i];\n }\n return expressionValue;\n };\n }\n\n // TODO: try to avoid using this getter\n function defaultGetter() {\n return defaultUnidimensionalValue;\n }\n return function (property) {\n if (!property) {\n return defaultGetter;\n }\n if (property.propType === 'unidimensional') {\n return UnidimensionalPropertyInterface(property);\n }\n return MultidimensionalPropertyInterface(property);\n };\n }();\n\n var TransformExpressionInterface = function () {\n return function (transform) {\n function _thisFunction(name) {\n switch (name) {\n case 'scale':\n case 'Scale':\n case 'ADBE Scale':\n case 6:\n return _thisFunction.scale;\n case 'rotation':\n case 'Rotation':\n case 'ADBE Rotation':\n case 'ADBE Rotate Z':\n case 10:\n return _thisFunction.rotation;\n case 'ADBE Rotate X':\n return _thisFunction.xRotation;\n case 'ADBE Rotate Y':\n return _thisFunction.yRotation;\n case 'position':\n case 'Position':\n case 'ADBE Position':\n case 2:\n return _thisFunction.position;\n case 'ADBE Position_0':\n return _thisFunction.xPosition;\n case 'ADBE Position_1':\n return _thisFunction.yPosition;\n case 'ADBE Position_2':\n return _thisFunction.zPosition;\n case 'anchorPoint':\n case 'AnchorPoint':\n case 'Anchor Point':\n case 'ADBE AnchorPoint':\n case 1:\n return _thisFunction.anchorPoint;\n case 'opacity':\n case 'Opacity':\n case 11:\n return _thisFunction.opacity;\n default:\n return null;\n }\n }\n Object.defineProperty(_thisFunction, 'rotation', {\n get: ExpressionPropertyInterface(transform.r || transform.rz)\n });\n Object.defineProperty(_thisFunction, 'zRotation', {\n get: ExpressionPropertyInterface(transform.rz || transform.r)\n });\n Object.defineProperty(_thisFunction, 'xRotation', {\n get: ExpressionPropertyInterface(transform.rx)\n });\n Object.defineProperty(_thisFunction, 'yRotation', {\n get: ExpressionPropertyInterface(transform.ry)\n });\n Object.defineProperty(_thisFunction, 'scale', {\n get: ExpressionPropertyInterface(transform.s)\n });\n var _px;\n var _py;\n var _pz;\n var _transformFactory;\n if (transform.p) {\n _transformFactory = ExpressionPropertyInterface(transform.p);\n } else {\n _px = ExpressionPropertyInterface(transform.px);\n _py = ExpressionPropertyInterface(transform.py);\n if (transform.pz) {\n _pz = ExpressionPropertyInterface(transform.pz);\n }\n }\n Object.defineProperty(_thisFunction, 'position', {\n get: function get() {\n if (transform.p) {\n return _transformFactory();\n }\n return [_px(), _py(), _pz ? _pz() : 0];\n }\n });\n Object.defineProperty(_thisFunction, 'xPosition', {\n get: ExpressionPropertyInterface(transform.px)\n });\n Object.defineProperty(_thisFunction, 'yPosition', {\n get: ExpressionPropertyInterface(transform.py)\n });\n Object.defineProperty(_thisFunction, 'zPosition', {\n get: ExpressionPropertyInterface(transform.pz)\n });\n Object.defineProperty(_thisFunction, 'anchorPoint', {\n get: ExpressionPropertyInterface(transform.a)\n });\n Object.defineProperty(_thisFunction, 'opacity', {\n get: ExpressionPropertyInterface(transform.o)\n });\n Object.defineProperty(_thisFunction, 'skew', {\n get: ExpressionPropertyInterface(transform.sk)\n });\n Object.defineProperty(_thisFunction, 'skewAxis', {\n get: ExpressionPropertyInterface(transform.sa)\n });\n Object.defineProperty(_thisFunction, 'orientation', {\n get: ExpressionPropertyInterface(transform.or)\n });\n return _thisFunction;\n };\n }();\n\n var LayerExpressionInterface = function () {\n function getMatrix(time) {\n var toWorldMat = new Matrix();\n if (time !== undefined) {\n var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n propMatrix.clone(toWorldMat);\n } else {\n var transformMat = this._elem.finalTransform.mProp;\n transformMat.applyToMatrix(toWorldMat);\n }\n return toWorldMat;\n }\n function toWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.applyPoint(toWorldMat, arr);\n }\n function toWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.applyPoint(toWorldMat, arr);\n }\n function fromWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.invertPoint(toWorldMat, arr);\n }\n function fromWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.invertPoint(toWorldMat, arr);\n }\n function applyPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n }\n function invertPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n return matrix.inversePoint(arr);\n }\n function fromComp(arr) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n return toWorldMat.inversePoint(arr);\n }\n return toWorldMat.inversePoint(arr);\n }\n function sampleImage() {\n return [1, 1, 1, 1];\n }\n return function (elem) {\n var transformInterface;\n function _registerMaskInterface(maskManager) {\n _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n }\n function _registerEffectsInterface(effects) {\n _thisLayerFunction.effect = effects;\n }\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Root Vectors Group':\n case 'Contents':\n case 2:\n return _thisLayerFunction.shapeInterface;\n case 1:\n case 6:\n case 'Transform':\n case 'transform':\n case 'ADBE Transform Group':\n return transformInterface;\n case 4:\n case 'ADBE Effect Parade':\n case 'effects':\n case 'Effects':\n return _thisLayerFunction.effect;\n case 'ADBE Text Properties':\n return _thisLayerFunction.textInterface;\n default:\n return null;\n }\n }\n _thisLayerFunction.getMatrix = getMatrix;\n _thisLayerFunction.invertPoint = invertPoint;\n _thisLayerFunction.applyPoint = applyPoint;\n _thisLayerFunction.toWorld = toWorld;\n _thisLayerFunction.toWorldVec = toWorldVec;\n _thisLayerFunction.fromWorld = fromWorld;\n _thisLayerFunction.fromWorldVec = fromWorldVec;\n _thisLayerFunction.toComp = toWorld;\n _thisLayerFunction.fromComp = fromComp;\n _thisLayerFunction.sampleImage = sampleImage;\n _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n _thisLayerFunction._elem = elem;\n transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n Object.defineProperties(_thisLayerFunction, {\n hasParent: {\n get: function get() {\n return elem.hierarchy.length;\n }\n },\n parent: {\n get: function get() {\n return elem.hierarchy[0].layerInterface;\n }\n },\n rotation: getDescriptor(transformInterface, 'rotation'),\n scale: getDescriptor(transformInterface, 'scale'),\n position: getDescriptor(transformInterface, 'position'),\n opacity: getDescriptor(transformInterface, 'opacity'),\n anchorPoint: anchorPointDescriptor,\n anchor_point: anchorPointDescriptor,\n transform: {\n get: function get() {\n return transformInterface;\n }\n },\n active: {\n get: function get() {\n return elem.isInRange;\n }\n }\n });\n _thisLayerFunction.startTime = elem.data.st;\n _thisLayerFunction.index = elem.data.ind;\n _thisLayerFunction.source = elem.data.refId;\n _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n _thisLayerFunction._name = elem.data.nm;\n _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n return _thisLayerFunction;\n };\n }();\n\n var propertyGroupFactory = function () {\n return function (interfaceFunction, parentPropertyGroup) {\n return function (val) {\n val = val === undefined ? 1 : val;\n if (val <= 0) {\n return interfaceFunction;\n }\n return parentPropertyGroup(val - 1);\n };\n };\n }();\n\n var PropertyInterface = function () {\n return function (propertyName, propertyGroup) {\n var interfaceFunction = {\n _name: propertyName\n };\n function _propertyGroup(val) {\n val = val === undefined ? 1 : val;\n if (val <= 0) {\n return interfaceFunction;\n }\n return propertyGroup(val - 1);\n }\n return _propertyGroup;\n };\n }();\n\n var EffectsExpressionInterface = function () {\n var ob = {\n createEffectsInterface: createEffectsInterface\n };\n function createEffectsInterface(elem, propertyGroup) {\n if (elem.effectsManager) {\n var effectElements = [];\n var effectsData = elem.data.ef;\n var i;\n var len = elem.effectsManager.effectElements.length;\n for (i = 0; i < len; i += 1) {\n effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n }\n var effects = elem.data.ef || [];\n var groupInterface = function groupInterface(name) {\n i = 0;\n len = effects.length;\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n return effectElements[i];\n }\n i += 1;\n }\n return null;\n };\n Object.defineProperty(groupInterface, 'numProperties', {\n get: function get() {\n return effects.length;\n }\n });\n return groupInterface;\n }\n return null;\n }\n function createGroupInterface(data, elements, propertyGroup, elem) {\n function groupInterface(name) {\n var effects = data.ef;\n var i = 0;\n var len = effects.length;\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n if (effects[i].ty === 5) {\n return effectElements[i];\n }\n return effectElements[i]();\n }\n i += 1;\n }\n throw new Error();\n }\n var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n var effectElements = [];\n var i;\n var len = data.ef.length;\n for (i = 0; i < len; i += 1) {\n if (data.ef[i].ty === 5) {\n effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n } else {\n effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n }\n }\n if (data.mn === 'ADBE Color Control') {\n Object.defineProperty(groupInterface, 'color', {\n get: function get() {\n return effectElements[0]();\n }\n });\n }\n Object.defineProperties(groupInterface, {\n numProperties: {\n get: function get() {\n return data.np;\n }\n },\n _name: {\n value: data.nm\n },\n propertyGroup: {\n value: _propertyGroup\n }\n });\n groupInterface.enabled = data.en !== 0;\n groupInterface.active = groupInterface.enabled;\n return groupInterface;\n }\n function createValueInterface(element, type, elem, propertyGroup) {\n var expressionProperty = ExpressionPropertyInterface(element.p);\n function interfaceFunction() {\n if (type === 10) {\n return elem.comp.compInterface(element.p.v);\n }\n return expressionProperty();\n }\n if (element.p.setGroupProperty) {\n element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n }\n return interfaceFunction;\n }\n return ob;\n }();\n\n var ShapePathInterface = function () {\n return function pathInterfaceFactory(shape, view, propertyGroup) {\n var prop = view.sh;\n function interfaceFunction(val) {\n if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n return interfaceFunction.path;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n path: {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n return prop;\n }\n },\n shape: {\n get: function get() {\n if (prop.k) {\n prop.getValue();\n }\n return prop;\n }\n },\n _name: {\n value: shape.nm\n },\n ix: {\n value: shape.ix\n },\n propertyIndex: {\n value: shape.ix\n },\n mn: {\n value: shape.mn\n },\n propertyGroup: {\n value: propertyGroup\n }\n });\n return interfaceFunction;\n };\n }();\n\n var ShapeExpressionInterface = function () {\n function iterateElements(shapes, view, propertyGroup) {\n var arr = [];\n var i;\n var len = shapes ? shapes.length : 0;\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === 'gr') {\n arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'fl') {\n arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'st') {\n arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tm') {\n arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'tr') {\n // arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n } else if (shapes[i].ty === 'el') {\n arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sr') {\n arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'sh') {\n arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rc') {\n arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rd') {\n arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'rp') {\n arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === 'gf') {\n arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else {\n arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\n }\n }\n return arr;\n }\n function contentsInterfaceFactory(shape, view, propertyGroup) {\n var interfaces;\n var interfaceFunction = function _interfaceFunction(value) {\n var i = 0;\n var len = interfaces.length;\n while (i < len) {\n if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n return interfaces[i];\n }\n i += 1;\n }\n if (typeof value === 'number') {\n return interfaces[value - 1];\n }\n return null;\n };\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n interfaceFunction.numProperties = interfaces.length;\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.transform = transformInterface;\n interfaceFunction.propertyIndex = shape.cix;\n interfaceFunction._name = shape.nm;\n return interfaceFunction;\n }\n function groupInterfaceFactory(shape, view, propertyGroup) {\n var interfaceFunction = function _interfaceFunction(value) {\n switch (value) {\n case 'ADBE Vectors Group':\n case 'Contents':\n case 2:\n return interfaceFunction.content;\n // Not necessary for now. Keeping them here in case a new case appears\n // case 'ADBE Vector Transform Group':\n // case 3:\n default:\n return interfaceFunction.transform;\n }\n };\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n interfaceFunction.content = content;\n interfaceFunction.transform = transformInterface;\n Object.defineProperty(interfaceFunction, '_name', {\n get: function get() {\n return shape.nm;\n }\n });\n // interfaceFunction.content = interfaceFunction;\n interfaceFunction.numProperties = shape.np;\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.nm = shape.nm;\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n function fillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n }\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n return null;\n }\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === 'Start Point' || val === 'start point') {\n return interfaceFunction.startPoint;\n }\n if (val === 'End Point' || val === 'end point') {\n return interfaceFunction.endPoint;\n }\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n return null;\n }\n Object.defineProperties(interfaceFunction, {\n startPoint: {\n get: ExpressionPropertyInterface(view.s)\n },\n endPoint: {\n get: ExpressionPropertyInterface(view.e)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n type: {\n get: function get() {\n return 'a';\n }\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n return interfaceFunction;\n }\n function defaultInterfaceFactory() {\n function interfaceFunction() {\n return null;\n }\n return interfaceFunction;\n }\n function strokeInterfaceFactory(shape, view, propertyGroup) {\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n function addPropertyToDashOb(i) {\n Object.defineProperty(dashOb, shape.d[i].nm, {\n get: ExpressionPropertyInterface(view.d.dataProps[i].p)\n });\n }\n var i;\n var len = shape.d ? shape.d.length : 0;\n var dashOb = {};\n for (i = 0; i < len; i += 1) {\n addPropertyToDashOb(i);\n view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n }\n function interfaceFunction(val) {\n if (val === 'Color' || val === 'color') {\n return interfaceFunction.color;\n }\n if (val === 'Opacity' || val === 'opacity') {\n return interfaceFunction.opacity;\n }\n if (val === 'Stroke Width' || val === 'stroke width') {\n return interfaceFunction.strokeWidth;\n }\n return null;\n }\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n strokeWidth: {\n get: ExpressionPropertyInterface(view.w)\n },\n dash: {\n get: function get() {\n return dashOb;\n }\n },\n _name: {\n value: shape.nm\n },\n mn: {\n value: shape.mn\n }\n });\n view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n return interfaceFunction;\n }\n function trimInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === shape.e.ix || val === 'End' || val === 'end') {\n return interfaceFunction.end;\n }\n if (val === shape.s.ix) {\n return interfaceFunction.start;\n }\n if (val === shape.o.ix) {\n return interfaceFunction.offset;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaceFunction.propertyIndex = shape.ix;\n view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.propertyGroup = propertyGroup;\n Object.defineProperties(interfaceFunction, {\n start: {\n get: ExpressionPropertyInterface(view.s)\n },\n end: {\n get: ExpressionPropertyInterface(view.e)\n },\n offset: {\n get: ExpressionPropertyInterface(view.o)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n function transformInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.a.ix === value || value === 'Anchor Point') {\n return interfaceFunction.anchorPoint;\n }\n if (shape.o.ix === value || value === 'Opacity') {\n return interfaceFunction.opacity;\n }\n if (shape.p.ix === value || value === 'Position') {\n return interfaceFunction.position;\n }\n if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n return interfaceFunction.rotation;\n }\n if (shape.s.ix === value || value === 'Scale') {\n return interfaceFunction.scale;\n }\n if (shape.sk && shape.sk.ix === value || value === 'Skew') {\n return interfaceFunction.skew;\n }\n if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\n return interfaceFunction.skewAxis;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n if (view.transform.mProps.sk) {\n view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n }\n view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n opacity: {\n get: ExpressionPropertyInterface(view.transform.mProps.o)\n },\n position: {\n get: ExpressionPropertyInterface(view.transform.mProps.p)\n },\n anchorPoint: {\n get: ExpressionPropertyInterface(view.transform.mProps.a)\n },\n scale: {\n get: ExpressionPropertyInterface(view.transform.mProps.s)\n },\n rotation: {\n get: ExpressionPropertyInterface(view.transform.mProps.r)\n },\n skew: {\n get: ExpressionPropertyInterface(view.transform.mProps.sk)\n },\n skewAxis: {\n get: ExpressionPropertyInterface(view.transform.mProps.sa)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.ty = 'tr';\n interfaceFunction.mn = shape.mn;\n interfaceFunction.propertyGroup = propertyGroup;\n return interfaceFunction;\n }\n function ellipseInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n if (shape.s.ix === value) {\n return interfaceFunction.size;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaceFunction.propertyIndex = shape.ix;\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n size: {\n get: ExpressionPropertyInterface(prop.s)\n },\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n function starInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n if (shape.r.ix === value) {\n return interfaceFunction.rotation;\n }\n if (shape.pt.ix === value) {\n return interfaceFunction.points;\n }\n if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n return interfaceFunction.outerRadius;\n }\n if (shape.os.ix === value) {\n return interfaceFunction.outerRoundness;\n }\n if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n return interfaceFunction.innerRadius;\n }\n if (shape.is && shape.is.ix === value) {\n return interfaceFunction.innerRoundness;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n if (shape.ir) {\n prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n }\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n rotation: {\n get: ExpressionPropertyInterface(prop.r)\n },\n points: {\n get: ExpressionPropertyInterface(prop.pt)\n },\n outerRadius: {\n get: ExpressionPropertyInterface(prop.or)\n },\n outerRoundness: {\n get: ExpressionPropertyInterface(prop.os)\n },\n innerRadius: {\n get: ExpressionPropertyInterface(prop.ir)\n },\n innerRoundness: {\n get: ExpressionPropertyInterface(prop.is)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n function rectInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n if (shape.r.ix === value) {\n return interfaceFunction.roundness;\n }\n if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n return interfaceFunction.size;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n roundness: {\n get: ExpressionPropertyInterface(prop.r)\n },\n size: {\n get: ExpressionPropertyInterface(prop.s)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n function roundedInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.r.ix === value || value === 'Round Corners 1') {\n return interfaceFunction.radius;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n radius: {\n get: ExpressionPropertyInterface(prop.rd)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n function repeaterInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.c.ix === value || value === 'Copies') {\n return interfaceFunction.copies;\n }\n if (shape.o.ix === value || value === 'Offset') {\n return interfaceFunction.offset;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n copies: {\n get: ExpressionPropertyInterface(prop.c)\n },\n offset: {\n get: ExpressionPropertyInterface(prop.o)\n },\n _name: {\n value: shape.nm\n }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n return function (shapes, view, propertyGroup) {\n var interfaces;\n function _interfaceFunction(value) {\n if (typeof value === 'number') {\n value = value === undefined ? 1 : value;\n if (value === 0) {\n return propertyGroup;\n }\n return interfaces[value - 1];\n }\n var i = 0;\n var len = interfaces.length;\n while (i < len) {\n if (interfaces[i]._name === value) {\n return interfaces[i];\n }\n i += 1;\n }\n return null;\n }\n function parentGroupWrapper() {\n return propertyGroup;\n }\n _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n _interfaceFunction.numProperties = interfaces.length;\n _interfaceFunction._name = 'Contents';\n return _interfaceFunction;\n };\n }();\n\n var TextExpressionInterface = function () {\n return function (elem) {\n var _sourceText;\n function _thisLayerFunction(name) {\n switch (name) {\n case 'ADBE Text Document':\n return _thisLayerFunction.sourceText;\n default:\n return null;\n }\n }\n Object.defineProperty(_thisLayerFunction, 'sourceText', {\n get: function get() {\n elem.textProperty.getValue();\n var stringValue = elem.textProperty.currentData.t;\n if (!_sourceText || stringValue !== _sourceText.value) {\n _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\n // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\n Object.defineProperty(_sourceText, 'style', {\n get: function get() {\n return {\n fillColor: elem.textProperty.currentData.fc\n };\n }\n });\n }\n return _sourceText;\n }\n });\n return _thisLayerFunction;\n };\n }();\n\n function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n var FootageInterface = function () {\n var outlineInterfaceFactory = function outlineInterfaceFactory(elem) {\n var currentPropertyName = '';\n var currentProperty = elem.getFootageData();\n function init() {\n currentPropertyName = '';\n currentProperty = elem.getFootageData();\n return searchProperty;\n }\n function searchProperty(value) {\n if (currentProperty[value]) {\n currentPropertyName = value;\n currentProperty = currentProperty[value];\n if (_typeof(currentProperty) === 'object') {\n return searchProperty;\n }\n return currentProperty;\n }\n var propertyNameIndex = value.indexOf(currentPropertyName);\n if (propertyNameIndex !== -1) {\n var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n currentProperty = currentProperty[index];\n if (_typeof(currentProperty) === 'object') {\n return searchProperty;\n }\n return currentProperty;\n }\n return '';\n }\n return init;\n };\n var dataInterfaceFactory = function dataInterfaceFactory(elem) {\n function interfaceFunction(value) {\n if (value === 'Outline') {\n return interfaceFunction.outlineInterface();\n }\n return null;\n }\n interfaceFunction._name = 'Outline';\n interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n return interfaceFunction;\n };\n return function (elem) {\n function _interfaceFunction(value) {\n if (value === 'Data') {\n return _interfaceFunction.dataInterface;\n }\n return null;\n }\n _interfaceFunction._name = 'Data';\n _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\n return _interfaceFunction;\n };\n }();\n\n var interfaces = {\n layer: LayerExpressionInterface,\n effects: EffectsExpressionInterface,\n comp: CompExpressionInterface,\n shape: ShapeExpressionInterface,\n text: TextExpressionInterface,\n footage: FootageInterface\n };\n function getInterface(type) {\n return interfaces[type] || null;\n }\n\n var expressionHelpers = function () {\n function searchExpressions(elem, data, prop) {\n if (data.x) {\n prop.k = true;\n prop.x = true;\n prop.initiateExpression = ExpressionManager.initiateExpression;\n prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n }\n }\n function getValueAtTime(frameNum) {\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n if (frameNum !== this._cachingAtTime.lastFrame) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n this._cachingAtTime.lastFrame = frameNum;\n }\n return this._cachingAtTime.value;\n }\n function getSpeedAtTime(frameNum) {\n var delta = -0.01;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var speed = 0;\n if (v1.length) {\n var i;\n for (i = 0; i < v1.length; i += 1) {\n speed += Math.pow(v2[i] - v1[i], 2);\n }\n speed = Math.sqrt(speed) * 100;\n } else {\n speed = 0;\n }\n return speed;\n }\n function getVelocityAtTime(frameNum) {\n if (this.vel !== undefined) {\n return this.vel;\n }\n var delta = -0.001;\n // frameNum += this.elem.data.st;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var velocity;\n if (v1.length) {\n velocity = createTypedArray('float32', v1.length);\n var i;\n for (i = 0; i < v1.length; i += 1) {\n // removing frameRate\n // if needed, don't add it here\n // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n velocity[i] = (v2[i] - v1[i]) / delta;\n }\n } else {\n velocity = (v2 - v1) / delta;\n }\n return velocity;\n }\n function getStaticValueAtTime() {\n return this.pv;\n }\n function setGroupProperty(propertyGroup) {\n this.propertyGroup = propertyGroup;\n }\n return {\n searchExpressions: searchExpressions,\n getSpeedAtTime: getSpeedAtTime,\n getVelocityAtTime: getVelocityAtTime,\n getValueAtTime: getValueAtTime,\n getStaticValueAtTime: getStaticValueAtTime,\n setGroupProperty: setGroupProperty\n };\n }();\n\n function addPropertyDecorator() {\n function loopOut(type, duration, durationFlag) {\n if (!this.k || !this.keyframes) {\n return this.pv;\n }\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var lastKeyFrame = keyframes[keyframes.length - 1].t;\n if (currentFrame <= lastKeyFrame) {\n return this.pv;\n }\n var cycleDuration;\n var firstKeyFrame;\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n } else {\n cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\n }\n firstKeyFrame = lastKeyFrame - cycleDuration;\n }\n var i;\n var len;\n var ret;\n if (type === 'pingpong') {\n var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n if (iterations % 2 !== 0) {\n return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n }\n return ret;\n }\n return (endV - initV) * repeats + current;\n } else if (type === 'continue') {\n var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n if (this.pv.length) {\n ret = new Array(lastValue.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\n }\n return ret;\n }\n return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n }\n return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n function loopIn(type, duration, durationFlag) {\n if (!this.k) {\n return this.pv;\n }\n type = type ? type.toLowerCase() : '';\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var firstKeyFrame = keyframes[0].t;\n if (currentFrame >= firstKeyFrame) {\n return this.pv;\n }\n var cycleDuration;\n var lastKeyFrame;\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n lastKeyFrame = keyframes[duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n } else {\n cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\n }\n lastKeyFrame = firstKeyFrame + cycleDuration;\n }\n var i;\n var len;\n var ret;\n if (type === 'pingpong') {\n var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n if (iterations % 2 === 0) {\n return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n } else if (type === 'offset') {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n }\n return ret;\n }\n return current - (endV - initV) * repeats;\n } else if (type === 'continue') {\n var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n if (this.pv.length) {\n ret = new Array(firstValue.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n }\n return ret;\n }\n return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n }\n return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n }\n function smooth(width, samples) {\n if (!this.k) {\n return this.pv;\n }\n width = (width || 0.4) * 0.5;\n samples = Math.floor(samples || 5);\n if (samples <= 1) {\n return this.pv;\n }\n var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n var initFrame = currentTime - width;\n var endFrame = currentTime + width;\n var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n var i = 0;\n var j = 0;\n var value;\n if (this.pv.length) {\n value = createTypedArray('float32', this.pv.length);\n } else {\n value = 0;\n }\n var sampleValue;\n while (i < samples) {\n sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] += sampleValue[j];\n }\n } else {\n value += sampleValue;\n }\n i += 1;\n }\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] /= samples;\n }\n } else {\n value /= samples;\n }\n return value;\n }\n function getTransformValueAtTime(time) {\n if (!this._transformCachingAtTime) {\n this._transformCachingAtTime = {\n v: new Matrix()\n };\n }\n /// /\n var matrix = this._transformCachingAtTime.v;\n matrix.cloneFromProps(this.pre.props);\n if (this.appliedTransformations < 1) {\n var anchor = this.a.getValueAtTime(time);\n matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);\n }\n if (this.appliedTransformations < 2) {\n var scale = this.s.getValueAtTime(time);\n matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);\n }\n if (this.sk && this.appliedTransformations < 3) {\n var skew = this.sk.getValueAtTime(time);\n var skewAxis = this.sa.getValueAtTime(time);\n matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n }\n if (this.r && this.appliedTransformations < 4) {\n var rotation = this.r.getValueAtTime(time);\n matrix.rotate(-rotation * this.r.mult);\n } else if (!this.r && this.appliedTransformations < 4) {\n var rotationZ = this.rz.getValueAtTime(time);\n var rotationY = this.ry.getValueAtTime(time);\n var rotationX = this.rx.getValueAtTime(time);\n var orientation = this.or.getValueAtTime(time);\n matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);\n }\n if (this.data.p && this.data.p.s) {\n var positionX = this.px.getValueAtTime(time);\n var positionY = this.py.getValueAtTime(time);\n if (this.data.p.z) {\n var positionZ = this.pz.getValueAtTime(time);\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);\n } else {\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n }\n } else {\n var position = this.p.getValueAtTime(time);\n matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);\n }\n return matrix;\n /// /\n }\n function getTransformStaticValueAtTime() {\n return this.v.clone(new Matrix());\n }\n var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n var prop = getTransformProperty(elem, data, container);\n if (prop.dynamicProperties.length) {\n prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n }\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n return prop;\n };\n var propertyGetProp = PropertyFactory.getProp;\n PropertyFactory.getProp = function (elem, data, type, mult, container) {\n var prop = propertyGetProp(elem, data, type, mult, container);\n // prop.getVelocityAtTime = getVelocityAtTime;\n // prop.loopOut = loopOut;\n // prop.loopIn = loopIn;\n if (prop.kf) {\n prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n }\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n prop.loopOut = loopOut;\n prop.loopIn = loopIn;\n prop.smooth = smooth;\n prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n prop.numKeys = data.a === 1 ? data.k.length : 0;\n prop.propertyIndex = data.ix;\n var value = 0;\n if (type !== 0) {\n value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n }\n prop._cachingAtTime = {\n lastFrame: initialDefaultFrame,\n lastIndex: 0,\n value: value\n };\n expressionHelpers.searchExpressions(elem, data, prop);\n if (prop.k) {\n container.addDynamicProperty(prop);\n }\n return prop;\n };\n function getShapeValueAtTime(frameNum) {\n // For now this caching object is created only when needed instead of creating it when the shape is initialized.\n if (!this._cachingAtTime) {\n this._cachingAtTime = {\n shapeValue: shapePool.clone(this.pv),\n lastIndex: 0,\n lastTime: initialDefaultFrame\n };\n }\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n if (frameNum !== this._cachingAtTime.lastTime) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n this._cachingAtTime.lastTime = frameNum;\n this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n }\n return this._cachingAtTime.shapeValue;\n }\n var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n function ShapeExpressions() {}\n ShapeExpressions.prototype = {\n vertices: function vertices(prop, time) {\n if (this.k) {\n this.getValue();\n }\n var shapePath = this.v;\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n var i;\n var len = shapePath._length;\n var vertices = shapePath[prop];\n var points = shapePath.v;\n var arr = createSizedArray(len);\n for (i = 0; i < len; i += 1) {\n if (prop === 'i' || prop === 'o') {\n arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n } else {\n arr[i] = [vertices[i][0], vertices[i][1]];\n }\n }\n return arr;\n },\n points: function points(time) {\n return this.vertices('v', time);\n },\n inTangents: function inTangents(time) {\n return this.vertices('i', time);\n },\n outTangents: function outTangents(time) {\n return this.vertices('o', time);\n },\n isClosed: function isClosed() {\n return this.v.c;\n },\n pointOnPath: function pointOnPath(perc, time) {\n var shapePath = this.v;\n if (time !== undefined) {\n shapePath = this.getValueAtTime(time, 0);\n }\n if (!this._segmentsLength) {\n this._segmentsLength = bez.getSegmentsLength(shapePath);\n }\n var segmentsLength = this._segmentsLength;\n var lengths = segmentsLength.lengths;\n var lengthPos = segmentsLength.totalLength * perc;\n var i = 0;\n var len = lengths.length;\n var accumulatedLength = 0;\n var pt;\n while (i < len) {\n if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n var initIndex = i;\n var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n break;\n } else {\n accumulatedLength += lengths[i].addedLength;\n }\n i += 1;\n }\n if (!pt) {\n pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n }\n return pt;\n },\n vectorOnPath: function vectorOnPath(perc, time, vectorType) {\n // perc doesn't use triple equality because it can be a Number object as well as a primitive.\n if (perc == 1) {\n // eslint-disable-line eqeqeq\n perc = this.v.c;\n } else if (perc == 0) {\n // eslint-disable-line eqeqeq\n perc = 0.999;\n }\n var pt1 = this.pointOnPath(perc, time);\n var pt2 = this.pointOnPath(perc + 0.001, time);\n var xLength = pt2[0] - pt1[0];\n var yLength = pt2[1] - pt1[1];\n var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n if (magnitude === 0) {\n return [0, 0];\n }\n var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n return unitVector;\n },\n tangentOnPath: function tangentOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'tangent');\n },\n normalOnPath: function normalOnPath(perc, time) {\n return this.vectorOnPath(perc, time, 'normal');\n },\n setGroupProperty: expressionHelpers.setGroupProperty,\n getValueAtTime: expressionHelpers.getStaticValueAtTime\n };\n extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n prop.propertyIndex = data.ix;\n prop.lock = false;\n if (type === 3) {\n expressionHelpers.searchExpressions(elem, data.pt, prop);\n } else if (type === 4) {\n expressionHelpers.searchExpressions(elem, data.ks, prop);\n }\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n return prop;\n };\n }\n function initialize$1() {\n addPropertyDecorator();\n }\n\n function addDecorator() {\n function searchExpressions() {\n if (this.data.d.x) {\n this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n this.addEffect(this.getExpressionValue.bind(this));\n return true;\n }\n return null;\n }\n TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n var newValue = this.calculateExpression(text);\n if (currentValue.t !== newValue) {\n var newData = {};\n this.copyData(newData, currentValue);\n newData.t = newValue.toString();\n newData.__complete = false;\n return newData;\n }\n return currentValue;\n };\n TextProperty.prototype.searchProperty = function () {\n var isKeyframed = this.searchKeyframes();\n var hasExpressions = this.searchExpressions();\n this.kf = isKeyframed || hasExpressions;\n return this.kf;\n };\n TextProperty.prototype.searchExpressions = searchExpressions;\n }\n function initialize() {\n addDecorator();\n }\n\n function SVGComposableEffect() {}\n SVGComposableEffect.prototype = {\n createMergeNode: function createMergeNode(resultId, ins) {\n var feMerge = createNS('feMerge');\n feMerge.setAttribute('result', resultId);\n var feMergeNode;\n var i;\n for (i = 0; i < ins.length; i += 1) {\n feMergeNode = createNS('feMergeNode');\n feMergeNode.setAttribute('in', ins[i]);\n feMerge.appendChild(feMergeNode);\n feMerge.appendChild(feMergeNode);\n }\n return feMerge;\n }\n };\n\n var linearFilterValue = '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0';\n function SVGTintFilter(filter, filterManager, elem, id, source) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', linearFilterValue + ' 1 0');\n this.linearFilter = feColorMatrix;\n feColorMatrix.setAttribute('result', id + '_tint_1');\n filter.appendChild(feColorMatrix);\n feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id + '_tint_2');\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n var feMerge = this.createMergeNode(id, [source, id + '_tint_1', id + '_tint_2']);\n filter.appendChild(feMerge);\n }\n extendPrototype([SVGComposableEffect], SVGTintFilter);\n SVGTintFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var colorBlack = this.filterManager.effectElements[0].p.v;\n var colorWhite = this.filterManager.effectElements[1].p.v;\n var opacity = this.filterManager.effectElements[2].p.v / 100;\n this.linearFilter.setAttribute('values', linearFilterValue + ' ' + opacity + ' 0');\n this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 1 0');\n }\n };\n\n function SVGFillFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n feColorMatrix.setAttribute('result', id);\n filter.appendChild(feColorMatrix);\n this.matrixFilter = feColorMatrix;\n }\n SVGFillFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color = this.filterManager.effectElements[2].p.v;\n var opacity = this.filterManager.effectElements[6].p.v;\n this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\n }\n };\n\n function SVGStrokeEffect(fil, filterManager, elem) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.elem = elem;\n this.paths = [];\n }\n SVGStrokeEffect.prototype.initialize = function () {\n var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n var path;\n var groupPath;\n var i;\n var len;\n if (this.filterManager.effectElements[1].p.v === 1) {\n len = this.elem.maskManager.masksProperties.length;\n i = 0;\n } else {\n i = this.filterManager.effectElements[0].p.v - 1;\n len = i + 1;\n }\n groupPath = createNS('g');\n groupPath.setAttribute('fill', 'none');\n groupPath.setAttribute('stroke-linecap', 'round');\n groupPath.setAttribute('stroke-dashoffset', 1);\n for (i; i < len; i += 1) {\n path = createNS('path');\n groupPath.appendChild(path);\n this.paths.push({\n p: path,\n m: i\n });\n }\n if (this.filterManager.effectElements[10].p.v === 3) {\n var mask = createNS('mask');\n var id = createElementID();\n mask.setAttribute('id', id);\n mask.setAttribute('mask-type', 'alpha');\n mask.appendChild(groupPath);\n this.elem.globalData.defs.appendChild(mask);\n var g = createNS('g');\n g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n while (elemChildren[0]) {\n g.appendChild(elemChildren[0]);\n }\n this.elem.layerElement.appendChild(g);\n this.masker = mask;\n groupPath.setAttribute('stroke', '#fff');\n } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (this.filterManager.effectElements[10].p.v === 2) {\n elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n while (elemChildren.length) {\n this.elem.layerElement.removeChild(elemChildren[0]);\n }\n }\n this.elem.layerElement.appendChild(groupPath);\n this.elem.layerElement.removeAttribute('mask');\n groupPath.setAttribute('stroke', '#fff');\n }\n this.initialized = true;\n this.pathMasker = groupPath;\n };\n SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n if (!this.initialized) {\n this.initialize();\n }\n var i;\n var len = this.paths.length;\n var mask;\n var path;\n for (i = 0; i < len; i += 1) {\n if (this.paths[i].m !== -1) {\n mask = this.elem.maskManager.viewData[this.paths[i].m];\n path = this.paths[i].p;\n if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n path.setAttribute('d', mask.lastPath);\n }\n if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\n var dasharrayValue;\n if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\n var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n var l = path.getTotalLength();\n dasharrayValue = '0 0 0 ' + l * s + ' ';\n var lineLength = l * (e - s);\n var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n var units = Math.floor(lineLength / segment);\n var j;\n for (j = 0; j < units; j += 1) {\n dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\n }\n dasharrayValue += '0 ' + l * 10 + ' 0 0';\n } else {\n dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n }\n path.setAttribute('stroke-dasharray', dasharrayValue);\n }\n }\n }\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n }\n if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\n }\n if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n if (forceRender || this.filterManager.effectElements[3].p._mdf) {\n var color = this.filterManager.effectElements[3].p.v;\n this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\n }\n }\n };\n\n function SVGTritoneFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var feColorMatrix = createNS('feColorMatrix');\n feColorMatrix.setAttribute('type', 'matrix');\n feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n filter.appendChild(feColorMatrix);\n var feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n feComponentTransfer.setAttribute('result', id);\n this.matrixFilter = feComponentTransfer;\n var feFuncR = createNS('feFuncR');\n feFuncR.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncR);\n this.feFuncR = feFuncR;\n var feFuncG = createNS('feFuncG');\n feFuncG.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncG);\n this.feFuncG = feFuncG;\n var feFuncB = createNS('feFuncB');\n feFuncB.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFuncB);\n this.feFuncB = feFuncB;\n filter.appendChild(feComponentTransfer);\n }\n SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var color1 = this.filterManager.effectElements[0].p.v;\n var color2 = this.filterManager.effectElements[1].p.v;\n var color3 = this.filterManager.effectElements[2].p.v;\n var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\n var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\n var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\n this.feFuncR.setAttribute('tableValues', tableR);\n this.feFuncG.setAttribute('tableValues', tableG);\n this.feFuncB.setAttribute('tableValues', tableB);\n }\n };\n\n function SVGProLevelsFilter(filter, filterManager, elem, id) {\n this.filterManager = filterManager;\n var effectElements = this.filterManager.effectElements;\n var feComponentTransfer = createNS('feComponentTransfer');\n\n // Red\n if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\n this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\n }\n // Green\n if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\n this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\n }\n // Blue\n if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\n this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\n }\n // Alpha\n if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\n this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\n }\n // RGB\n if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n filter.appendChild(feComponentTransfer);\n }\n if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {\n feComponentTransfer = createNS('feComponentTransfer');\n feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n feComponentTransfer.setAttribute('result', id);\n filter.appendChild(feComponentTransfer);\n this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\n this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\n this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\n }\n }\n SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\n var feFunc = createNS(type);\n feFunc.setAttribute('type', 'table');\n feComponentTransfer.appendChild(feFunc);\n return feFunc;\n };\n SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\n var cnt = 0;\n var segments = 256;\n var perc;\n var min = Math.min(inputBlack, inputWhite);\n var max = Math.max(inputBlack, inputWhite);\n var table = Array.call(null, {\n length: segments\n });\n var colorValue;\n var pos = 0;\n var outputDelta = outputWhite - outputBlack;\n var inputDelta = inputWhite - inputBlack;\n while (cnt <= 256) {\n perc = cnt / 256;\n if (perc <= min) {\n colorValue = inputDelta < 0 ? outputWhite : outputBlack;\n } else if (perc >= max) {\n colorValue = inputDelta < 0 ? outputBlack : outputWhite;\n } else {\n colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\n }\n table[pos] = colorValue;\n pos += 1;\n cnt += 256 / (segments - 1);\n }\n return table.join(' ');\n };\n SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n var val;\n var effectElements = this.filterManager.effectElements;\n if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\n val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\n this.feFuncRComposed.setAttribute('tableValues', val);\n this.feFuncGComposed.setAttribute('tableValues', val);\n this.feFuncBComposed.setAttribute('tableValues', val);\n }\n if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\n val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\n this.feFuncR.setAttribute('tableValues', val);\n }\n if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\n val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\n this.feFuncG.setAttribute('tableValues', val);\n }\n if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\n val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\n this.feFuncB.setAttribute('tableValues', val);\n }\n if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\n val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\n this.feFuncA.setAttribute('tableValues', val);\n }\n }\n };\n\n function SVGDropShadowEffect(filter, filterManager, elem, id, source) {\n var globalFilterSize = filterManager.container.globalData.renderConfig.filterSize;\n var filterSize = filterManager.data.fs || globalFilterSize;\n filter.setAttribute('x', filterSize.x || globalFilterSize.x);\n filter.setAttribute('y', filterSize.y || globalFilterSize.y);\n filter.setAttribute('width', filterSize.width || globalFilterSize.width);\n filter.setAttribute('height', filterSize.height || globalFilterSize.height);\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n feGaussianBlur.setAttribute('in', 'SourceAlpha');\n feGaussianBlur.setAttribute('result', id + '_drop_shadow_1');\n feGaussianBlur.setAttribute('stdDeviation', '0');\n this.feGaussianBlur = feGaussianBlur;\n filter.appendChild(feGaussianBlur);\n var feOffset = createNS('feOffset');\n feOffset.setAttribute('dx', '25');\n feOffset.setAttribute('dy', '0');\n feOffset.setAttribute('in', id + '_drop_shadow_1');\n feOffset.setAttribute('result', id + '_drop_shadow_2');\n this.feOffset = feOffset;\n filter.appendChild(feOffset);\n var feFlood = createNS('feFlood');\n feFlood.setAttribute('flood-color', '#00ff00');\n feFlood.setAttribute('flood-opacity', '1');\n feFlood.setAttribute('result', id + '_drop_shadow_3');\n this.feFlood = feFlood;\n filter.appendChild(feFlood);\n var feComposite = createNS('feComposite');\n feComposite.setAttribute('in', id + '_drop_shadow_3');\n feComposite.setAttribute('in2', id + '_drop_shadow_2');\n feComposite.setAttribute('operator', 'in');\n feComposite.setAttribute('result', id + '_drop_shadow_4');\n filter.appendChild(feComposite);\n var feMerge = this.createMergeNode(id, [id + '_drop_shadow_4', source]);\n filter.appendChild(feMerge);\n //\n }\n extendPrototype([SVGComposableEffect], SVGDropShadowEffect);\n SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\n }\n if (forceRender || this.filterManager.effectElements[0].p._mdf) {\n var col = this.filterManager.effectElements[0].p.v;\n this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\n }\n if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\n }\n if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\n var distance = this.filterManager.effectElements[3].p.v;\n var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\n var x = distance * Math.cos(angle);\n var y = distance * Math.sin(angle);\n this.feOffset.setAttribute('dx', x);\n this.feOffset.setAttribute('dy', y);\n }\n }\n };\n\n var _svgMatteSymbols = [];\n function SVGMatte3Effect(filterElem, filterManager, elem) {\n this.initialized = false;\n this.filterManager = filterManager;\n this.filterElem = filterElem;\n this.elem = elem;\n elem.matteElement = createNS('g');\n elem.matteElement.appendChild(elem.layerElement);\n elem.matteElement.appendChild(elem.transformedElement);\n elem.baseElement = elem.matteElement;\n }\n SVGMatte3Effect.prototype.findSymbol = function (mask) {\n var i = 0;\n var len = _svgMatteSymbols.length;\n while (i < len) {\n if (_svgMatteSymbols[i] === mask) {\n return _svgMatteSymbols[i];\n }\n i += 1;\n }\n return null;\n };\n SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\n var parentNode = mask.layerElement.parentNode;\n if (!parentNode) {\n return;\n }\n var children = parentNode.children;\n var i = 0;\n var len = children.length;\n while (i < len) {\n if (children[i] === mask.layerElement) {\n break;\n }\n i += 1;\n }\n var nextChild;\n if (i <= len - 2) {\n nextChild = children[i + 1];\n }\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n if (nextChild) {\n parentNode.insertBefore(useElem, nextChild);\n } else {\n parentNode.appendChild(useElem);\n }\n };\n SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\n if (!this.findSymbol(mask)) {\n var symbolId = createElementID();\n var masker = createNS('mask');\n masker.setAttribute('id', mask.layerId);\n masker.setAttribute('mask-type', 'alpha');\n _svgMatteSymbols.push(mask);\n var defs = elem.globalData.defs;\n defs.appendChild(masker);\n var symbol = createNS('symbol');\n symbol.setAttribute('id', symbolId);\n this.replaceInParent(mask, symbolId);\n symbol.appendChild(mask.layerElement);\n defs.appendChild(symbol);\n var useElem = createNS('use');\n useElem.setAttribute('href', '#' + symbolId);\n masker.appendChild(useElem);\n mask.data.hd = false;\n mask.show();\n }\n elem.setMatte(mask.layerId);\n };\n SVGMatte3Effect.prototype.initialize = function () {\n var ind = this.filterManager.effectElements[0].p.v;\n var elements = this.elem.comp.elements;\n var i = 0;\n var len = elements.length;\n while (i < len) {\n if (elements[i] && elements[i].data.ind === ind) {\n this.setElementAsMask(this.elem, elements[i]);\n }\n i += 1;\n }\n this.initialized = true;\n };\n SVGMatte3Effect.prototype.renderFrame = function () {\n if (!this.initialized) {\n this.initialize();\n }\n };\n\n function SVGGaussianBlurEffect(filter, filterManager, elem, id) {\n // Outset the filter region by 100% on all sides to accommodate blur expansion.\n filter.setAttribute('x', '-100%');\n filter.setAttribute('y', '-100%');\n filter.setAttribute('width', '300%');\n filter.setAttribute('height', '300%');\n this.filterManager = filterManager;\n var feGaussianBlur = createNS('feGaussianBlur');\n feGaussianBlur.setAttribute('result', id);\n filter.appendChild(feGaussianBlur);\n this.feGaussianBlur = feGaussianBlur;\n }\n SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\n if (forceRender || this.filterManager._mdf) {\n // Empirical value, matching AE's blur appearance.\n var kBlurrinessToSigma = 0.3;\n var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma;\n\n // Dimensions mapping:\n //\n // 1 -> horizontal & vertical\n // 2 -> horizontal only\n // 3 -> vertical only\n //\n var dimensions = this.filterManager.effectElements[1].p.v;\n var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\n var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY);\n\n // Repeat edges mapping:\n //\n // 0 -> off -> duplicate\n // 1 -> on -> wrap\n var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\n this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n }\n };\n\n function TransformEffect() {}\n TransformEffect.prototype.init = function (effectsManager) {\n this.effectsManager = effectsManager;\n this.type = effectTypes.TRANSFORM_EFFECT;\n this.matrix = new Matrix();\n this.opacity = -1;\n this._mdf = false;\n this._opMdf = false;\n };\n TransformEffect.prototype.renderFrame = function (forceFrame) {\n this._opMdf = false;\n this._mdf = false;\n if (forceFrame || this.effectsManager._mdf) {\n var effectElements = this.effectsManager.effectElements;\n var anchor = effectElements[0].p.v;\n var position = effectElements[1].p.v;\n var isUniformScale = effectElements[2].p.v === 1;\n var scaleHeight = effectElements[3].p.v;\n var scaleWidth = isUniformScale ? scaleHeight : effectElements[4].p.v;\n var skew = effectElements[5].p.v;\n var skewAxis = effectElements[6].p.v;\n var rotation = effectElements[7].p.v;\n this.matrix.reset();\n this.matrix.translate(-anchor[0], -anchor[1], anchor[2]);\n this.matrix.scale(scaleWidth * 0.01, scaleHeight * 0.01, 1);\n this.matrix.rotate(-rotation * degToRads);\n this.matrix.skewFromAxis(-skew * degToRads, (skewAxis + 90) * degToRads);\n this.matrix.translate(position[0], position[1], 0);\n this._mdf = true;\n if (this.opacity !== effectElements[8].p.v) {\n this.opacity = effectElements[8].p.v;\n this._opMdf = true;\n }\n }\n };\n\n function SVGTransformEffect(_, filterManager) {\n this.init(filterManager);\n }\n extendPrototype([TransformEffect], SVGTransformEffect);\n\n function CVTransformEffect(effectsManager) {\n this.init(effectsManager);\n }\n extendPrototype([TransformEffect], CVTransformEffect);\n\n // Registering renderers\n registerRenderer('canvas', CanvasRenderer);\n registerRenderer('html', HybridRenderer);\n registerRenderer('svg', SVGRenderer);\n\n // Registering shape modifiers\n ShapeModifiers.registerModifier('tm', TrimModifier);\n ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n ShapeModifiers.registerModifier('rp', RepeaterModifier);\n ShapeModifiers.registerModifier('rd', RoundCornersModifier);\n ShapeModifiers.registerModifier('zz', ZigZagModifier);\n ShapeModifiers.registerModifier('op', OffsetPathModifier);\n\n // Registering expression plugin\n setExpressionsPlugin(Expressions);\n setExpressionInterfaces(getInterface);\n initialize$1();\n initialize();\n\n // Registering svg effects\n registerEffect$1(20, SVGTintFilter, true);\n registerEffect$1(21, SVGFillFilter, true);\n registerEffect$1(22, SVGStrokeEffect, false);\n registerEffect$1(23, SVGTritoneFilter, true);\n registerEffect$1(24, SVGProLevelsFilter, true);\n registerEffect$1(25, SVGDropShadowEffect, true);\n registerEffect$1(28, SVGMatte3Effect, false);\n registerEffect$1(29, SVGGaussianBlurEffect, true);\n registerEffect$1(35, SVGTransformEffect, false);\n registerEffect(35, CVTransformEffect);\n\n return lottie;\n\n}));\n",":host {\n display: block;\n}\n","import { Component, Element, Host, Prop, State, h } from '@stencil/core';\nimport lottie, { AnimationItem } from 'lottie-web';\nimport loaderAnimation from '../assets/lottie/loader.json';\nimport { SulaLoaderSize } from './model/sula-loader.model';\n\n@Component({\n tag: 'sula-loader',\n styleUrl: 'sula-loader.scss',\n shadow: true,\n})\nexport class SulaLoader {\n @Element() el?: HTMLElement;\n\n /**\n * Tamanho predefinido (small, medium, large)\n */\n @Prop() size: SulaLoaderSize = SulaLoaderSize.Medium;\n\n @State() animationInstance: AnimationItem | null = null;\n\n containerRef?: HTMLDivElement;\n\n connectedCallback() {\n this.tryInitLottie();\n }\n\n componentDidLoad() {\n this.tryInitLottie();\n }\n\n componentDidRender() {\n this.tryInitLottie();\n }\n\n disconnectedCallback() {\n this.destroyAnimation();\n }\n\n private destroyAnimation() {\n if (!this.animationInstance) {\n return;\n }\n\n this.animationInstance.destroy();\n this.animationInstance = null;\n }\n\n private tryInitLottie() {\n if (!this.containerRef || this.animationInstance) return;\n\n try {\n const animationData = loaderAnimation;\n\n this.animationInstance = lottie.loadAnimation({\n container: this.containerRef,\n renderer: 'svg',\n loop: true,\n autoplay: true,\n animationData: animationData,\n });\n\n this.animationInstance.setSpeed(1);\n } catch (error) {\n console.error('Erro ao carregar animação Lottie:', error);\n }\n }\n\n initLottie() {\n this.tryInitLottie();\n }\n\n getDimensions() {\n const sizes = {\n small: '24px',\n medium: '32px',\n large: '104px',\n };\n return { width: sizes[this.size], height: sizes[this.size] };\n }\n\n render() {\n const { width, height } = this.getDimensions();\n\n return (\n <Host>\n <div\n ref={el => (this.containerRef = el)}\n style={{\n width: width,\n height: height,\n }}\n ></div>\n </Host>\n );\n }\n}\n","$menu-ease-emphasized: cubic-bezier(0.22, 1, 0.36, 1);\n$menu-ease-standard: cubic-bezier(0.4, 0, 0.2, 1);\n\n:host {\n --sula-menu-width: 256px;\n --sula-menu-collapsed-width: 88px;\n --sula-menu-main-item-font-size: 0.875rem;\n --sula-menu-main-item-line-height: 1.25rem;\n --sula-menu-main-item-max-lines: 2;\n --sula-menu-main-item-padding-block: 0.5rem;\n\n display: block;\n height: 100%;\n width: var(--sula-menu-width);\n position: relative;\n overflow: visible;\n transition: width 360ms $menu-ease-emphasized;\n}\n\n:host(.menu-host--density-compact) {\n --sula-menu-main-item-font-size: 0.75rem;\n --sula-menu-main-item-line-height: 1rem;\n --sula-menu-main-item-padding-block: 0.375rem;\n}\n\n:host(.menu-host--density-comfortable) {\n --sula-menu-main-item-font-size: 1rem;\n --sula-menu-main-item-line-height: 1.5rem;\n --sula-menu-main-item-padding-block: 0.625rem;\n}\n\n:host(.menu-host--collapsed) {\n width: var(--sula-menu-collapsed-width);\n}\n\n.menu-shell {\n width: 100%;\n min-height: 100%;\n overflow: hidden;\n transform-origin: left top;\n will-change: width, transform, box-shadow, border-radius;\n transition:\n width 360ms $menu-ease-emphasized,\n transform 360ms $menu-ease-emphasized,\n box-shadow 360ms $menu-ease-emphasized,\n border-radius 280ms $menu-ease-standard,\n background-color 220ms $menu-ease-standard;\n}\n\n.menu-shell--expanded {\n box-shadow:\n 0 10px 24px rgba(15, 23, 42, 0.08),\n 0 2px 8px rgba(15, 23, 42, 0.06);\n}\n\n.menu-shell--collapsed {\n box-shadow:\n 0 8px 18px rgba(15, 23, 42, 0.06),\n 0 1px 4px rgba(15, 23, 42, 0.04);\n}\n\n.menu-shell--preview {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: var(--sula-menu-width);\n border-radius: 0 24px 24px 0;\n box-shadow:\n 0 28px 60px rgba(15, 23, 42, 0.18),\n 0 10px 24px rgba(15, 23, 42, 0.12);\n transform: translateX(0);\n z-index: 2;\n}\n\n.menu-header {\n gap: 0;\n transition:\n padding 360ms $menu-ease-emphasized,\n gap 240ms $menu-ease-standard;\n}\n\n.menu-nav,\n.menu-toggle-wrapper {\n transition: padding 360ms $menu-ease-emphasized;\n}\n\n.menu-brand-image {\n flex: 0 0 auto;\n transition:\n margin 320ms $menu-ease-emphasized,\n transform 320ms $menu-ease-emphasized;\n}\n\n.menu-copy {\n display: block;\n min-width: 0;\n max-width: 220px;\n overflow: hidden;\n opacity: 1;\n white-space: nowrap;\n transform: translateX(0);\n transform-origin: left center;\n will-change: opacity, transform, max-width, margin-left;\n transition:\n max-width 320ms $menu-ease-emphasized,\n opacity 200ms $menu-ease-standard,\n transform 320ms $menu-ease-emphasized,\n margin-left 320ms $menu-ease-emphasized;\n}\n\n.menu-copy--visible {\n max-width: 100%;\n opacity: 1;\n transform: translateX(0);\n pointer-events: auto;\n}\n\n.menu-copy--hidden {\n max-width: 0;\n opacity: 0;\n transform: translateX(-10px);\n pointer-events: none;\n}\n\n.menu-title {\n flex: 1 1 auto;\n min-width: 0;\n}\n\n.menu-title.menu-copy--visible {\n max-width: 100%;\n}\n\n.menu-item-label {\n flex: 1 1 auto;\n font-size: var(--sula-menu-main-item-font-size);\n line-height: var(--sula-menu-main-item-line-height);\n}\n\n.menu-item-label--truncate {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.menu-item-label--wrap {\n display: -webkit-box;\n overflow: hidden;\n text-overflow: initial;\n white-space: normal;\n overflow-wrap: anywhere;\n word-break: break-word;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: var(--sula-menu-main-item-max-lines);\n line-clamp: var(--sula-menu-main-item-max-lines);\n}\n\n.menu-item {\n padding-block: var(--sula-menu-main-item-padding-block);\n transition:\n background-color 200ms $menu-ease-standard,\n color 200ms $menu-ease-standard,\n padding 320ms $menu-ease-emphasized;\n}\n\n.menu-item-caret {\n max-width: 16px;\n overflow: hidden;\n opacity: 1;\n transition:\n transform 280ms $menu-ease-emphasized,\n opacity 180ms $menu-ease-standard,\n max-width 280ms $menu-ease-emphasized,\n margin-left 280ms $menu-ease-emphasized;\n}\n\n.menu-item-caret--visible {\n opacity: 1;\n max-width: 16px;\n margin-left: 12px;\n}\n\n.menu-item-caret--hidden {\n opacity: 0;\n max-width: 0;\n margin-left: 0;\n transform: translateX(-8px);\n}\n\n.menu-item-caret--expanded {\n transform: rotate(180deg);\n}\n\n.submenu {\n max-height: 0;\n opacity: 0;\n overflow: hidden;\n pointer-events: none;\n will-change: max-height, opacity, transform;\n transform: translateY(-6px);\n transform-origin: top left;\n transition:\n max-height 260ms $menu-ease-emphasized,\n opacity 120ms $menu-ease-standard,\n transform 180ms $menu-ease-emphasized;\n}\n\n.submenu--expanded {\n max-height: 999px;\n opacity: 1;\n pointer-events: auto;\n transform: translateY(0);\n}\n\n.submenu-item {\n transition:\n background-color 200ms $menu-ease-standard,\n color 200ms $menu-ease-standard,\n transform 240ms $menu-ease-emphasized;\n}\n\n.submenu-item--branch {\n transition:\n background-color 200ms $menu-ease-standard,\n color 200ms $menu-ease-standard,\n border-color 240ms $menu-ease-emphasized,\n margin-left 240ms $menu-ease-emphasized;\n}\n\n.submenu-item-branch-content {\n min-width: 0;\n}\n\n.submenu-branch {\n transform-origin: top left;\n}\n\n.submenu-grandchild-item {\n transition:\n background-color 200ms $menu-ease-standard,\n color 200ms $menu-ease-standard,\n transform 240ms $menu-ease-emphasized;\n}\n\n.submenu-grandchild-label {\n display: block;\n}\n\n.menu-toggle {\n transition:\n background-color 200ms $menu-ease-standard,\n color 200ms $menu-ease-standard,\n padding 320ms $menu-ease-emphasized;\n}\n\n.menu-toggle-icon {\n flex: 0 0 auto;\n transition:\n transform 320ms $menu-ease-emphasized,\n border-color 220ms $menu-ease-standard,\n background-color 220ms $menu-ease-standard;\n}\n\n.menu-toggle-label {\n white-space: nowrap;\n margin-left: 0;\n}\n\n.menu-toggle-label.menu-copy--visible {\n margin-left: 12px;\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host,\n .menu-shell,\n .menu-header,\n .menu-nav,\n .menu-toggle-wrapper,\n .menu-brand-image,\n .menu-copy,\n .menu-item,\n .menu-item-caret,\n .submenu,\n .submenu-item,\n .menu-toggle,\n .menu-toggle-icon {\n transition: none;\n }\n}\n","import { Component, Event, EventEmitter, Host, Prop, State, Watch, h } from '@stencil/core';\nimport { SelectedMenuItem, SulaMenuDensity, SulaMenuItem, SulaMenuLabelOverflow, SulaMenuMainItem, SulaMenuSubItem } from './model/sula-menu.model';\n\n/**\n * Hierarchical navigation menu with collapsible and preview states.\n *\n * @part shell - Main visual container of the menu.\n * @part title - Menu title.\n * @part main-item-label - Label of each top-level menu item.\n * @part toggle-label - Label of the collapse/expand control.\n * @cssprop --sula-menu-width - Width of the expanded menu. Defaults to 256px.\n * @cssprop --sula-menu-collapsed-width - Width of the collapsed menu. Defaults to 88px.\n * @cssprop --sula-menu-main-item-font-size - Font size of top-level item labels.\n * @cssprop --sula-menu-main-item-line-height - Line height of top-level item labels.\n * @cssprop --sula-menu-main-item-max-lines - Maximum number of visible lines when labelOverflow is wrap. Defaults to 2.\n * @cssprop --sula-menu-main-item-padding-block - Vertical padding of top-level menu items.\n */\n@Component({\n tag: 'sula-menu',\n styleUrl: 'sula-menu.scss',\n shadow: true,\n})\nexport class SulaMenu {\n /**\n * Menu title\n */\n @Prop()\n menuTitle: string = '';\n\n /**\n * Menu image\n */\n @Prop()\n image: string = '';\n\n /**\n * Menu width in expanded state. Use a CSS length that does not depend on the\n * host width, for example: 256px, 20rem or clamp(16rem, 25vw, 24rem).\n */\n @Prop()\n width: string = '';\n\n /**\n * Density applied to top-level menu items.\n */\n @Prop()\n density: SulaMenuDensity = SulaMenuDensity.Default;\n\n /**\n * Overflow behavior for top-level item labels. Wrap displays up to two lines\n * by default; the limit can be customized with --sula-menu-main-item-max-lines.\n */\n @Prop()\n labelOverflow: SulaMenuLabelOverflow = SulaMenuLabelOverflow.Wrap;\n\n /**\n * Menu items\n */\n @Prop({ mutable: true, reflect: true })\n items: SulaMenuMainItem[] = [];\n\n /**\n * Emitted when a menu item is selected\n */\n @Event()\n itemSelected: EventEmitter<SulaMenuMainItem | SulaMenuSubItem | SulaMenuItem>;\n\n /**\n * Emitted when a menu item is clicked\n */\n @Event()\n itemClicked: EventEmitter<SulaMenuMainItem | SulaMenuSubItem | SulaMenuItem>;\n\n /**\n * Emitted when the menu is toggled between collapsed and expanded states\n * True: Menu is expanded\n * False: Menu is collapsed\n */\n @Event()\n menuToggled: EventEmitter<boolean>;\n\n @State()\n collapsed: boolean = false;\n\n @State()\n previewExpanded: boolean = false;\n\n @State()\n selectedItem?: SelectedMenuItem;\n\n private get normalizedWidth() {\n const value = this.width?.trim();\n return value ? value : undefined;\n }\n\n private get hostStyleVariables() {\n return {\n ...(this.normalizedWidth ? { '--sula-menu-width': this.normalizedWidth } : {}),\n };\n }\n\n componentWillLoad() {\n this.syncSelectedItemFromItems(this.items);\n }\n\n @Watch('items')\n syncSelectedItemFromItems(items: SulaMenuMainItem[]) {\n const nextSelectedItem = this.findSelectedLeaf(items);\n\n if (nextSelectedItem) {\n this.selectedItem = nextSelectedItem;\n return;\n }\n\n if (this.selectedItem && this.containsSelectedItem(items, this.selectedItem)) {\n return;\n }\n\n this.selectedItem = undefined;\n }\n\n getVisibleItems<T extends SulaMenuItem>(items?: T[]) {\n return items?.filter(item => !item.hidden) ?? [];\n }\n\n getVisibleSubItems(item: Pick<SulaMenuMainItem, 'children'>) {\n return this.getVisibleItems(item.children);\n }\n\n getVisibleGrandchildren(item: Pick<SulaMenuSubItem, 'children'>) {\n return this.getVisibleItems(item.children);\n }\n\n hasVisibleSubItems(item: Pick<SulaMenuMainItem, 'children'>) {\n return this.getVisibleSubItems(item).length > 0;\n }\n\n hasVisibleGrandchildren(item: Pick<SulaMenuSubItem, 'children'>) {\n return this.getVisibleGrandchildren(item).length > 0;\n }\n\n containsSelectedItem(items: SulaMenuMainItem[], selectedItem: SelectedMenuItem) {\n const visibleItems = this.getVisibleItems(items);\n\n if (selectedItem.parentItemId && selectedItem.parentChildId) {\n return visibleItems.some(\n item =>\n item.id === selectedItem.parentItemId &&\n this.getVisibleSubItems(item).some(\n child => child.id === selectedItem.parentChildId && this.getVisibleGrandchildren(child).some(grandchild => grandchild.id === selectedItem.id),\n ),\n );\n }\n\n if (selectedItem.parentItemId) {\n return visibleItems.some(\n item => item.id === selectedItem.parentItemId && this.getVisibleSubItems(item).some(child => child.id === selectedItem.id && !this.hasVisibleGrandchildren(child)),\n );\n }\n\n return visibleItems.some(item => item.id === selectedItem.id && !this.hasVisibleSubItems(item));\n }\n\n findSelectedLeaf(items: SulaMenuMainItem[]) {\n for (const item of this.getVisibleItems(items)) {\n const visibleChildren = this.getVisibleSubItems(item);\n\n if (!visibleChildren.length && item.selected) {\n return { id: item.id };\n }\n\n for (const child of visibleChildren) {\n const selectedGrandchild = this.getVisibleGrandchildren(child).find(grandchild => grandchild.selected);\n\n if (selectedGrandchild) {\n return {\n id: selectedGrandchild.id,\n parentItemId: item.id,\n parentChildId: child.id,\n };\n }\n\n if (!this.hasVisibleGrandchildren(child) && child.selected) {\n return {\n id: child.id,\n parentItemId: item.id,\n };\n }\n }\n }\n\n return undefined;\n }\n\n isMainItemSelected(itemId: string) {\n return this.selectedItem?.id === itemId && !this.selectedItem.parentItemId;\n }\n\n hasSelectedChild(parentItemId: string) {\n return this.selectedItem?.parentItemId === parentItemId;\n }\n\n isSelectedSubItem(parentItemId: string, childId: string) {\n return this.selectedItem?.id === childId && this.selectedItem.parentItemId === parentItemId && !this.selectedItem.parentChildId;\n }\n\n hasSelectedGrandchild(parentItemId: string, parentChildId: string) {\n return this.selectedItem?.parentItemId === parentItemId && this.selectedItem.parentChildId === parentChildId;\n }\n\n isSelectedGrandchild(parentItemId: string, parentChildId: string, grandchildId: string) {\n return this.selectedItem?.id === grandchildId && this.selectedItem.parentItemId === parentItemId && this.selectedItem.parentChildId === parentChildId;\n }\n\n isItemActive(item: Pick<SulaMenuMainItem, 'id' | 'expanded' | 'children'>) {\n return this.isMainItemSelected(item.id) || this.hasSelectedChild(item.id) || (!!item.expanded && this.hasVisibleSubItems(item));\n }\n\n isSubItemActive(parentItemId: string, item: Pick<SulaMenuSubItem, 'id' | 'expanded' | 'children'>) {\n return this.isSelectedSubItem(parentItemId, item.id) || this.hasSelectedGrandchild(parentItemId, item.id) || (!!item.expanded && this.hasVisibleGrandchildren(item));\n }\n\n isItemFaded(item: Pick<SulaMenuItem, 'disabled'>, active: boolean) {\n return !!item.disabled && !active;\n }\n\n handleItemClick(clickedItem: SulaMenuMainItem) {\n if (clickedItem.disabled) {\n return;\n }\n\n this.itemClicked.emit(clickedItem);\n\n if (!this.hasVisibleSubItems(clickedItem)) {\n this.selectedItem = { id: clickedItem.id };\n this.itemSelected.emit(clickedItem);\n return;\n }\n\n this.items = this.items.map(item =>\n item.id === clickedItem.id\n ? {\n ...item,\n expanded: !item.expanded,\n }\n : item,\n );\n }\n\n handleSubItemClick(parentItemId: string, clickedChild: SulaMenuSubItem) {\n if (clickedChild.disabled) {\n return;\n }\n\n this.itemClicked.emit(clickedChild);\n\n if (!this.hasVisibleGrandchildren(clickedChild)) {\n this.selectedItem = {\n id: clickedChild.id,\n parentItemId,\n };\n this.itemSelected.emit(clickedChild);\n return;\n }\n\n this.items = this.items.map(item =>\n item.id === parentItemId\n ? {\n ...item,\n children: item.children?.map(child =>\n child.id === clickedChild.id\n ? {\n ...child,\n expanded: !child.expanded,\n }\n : child,\n ),\n }\n : item,\n );\n }\n\n handleGrandchildClick(parentItemId: string, parentChildId: string, clickedGrandchild: NonNullable<SulaMenuSubItem['children']>[number]) {\n if (clickedGrandchild.disabled) {\n return;\n }\n\n this.itemClicked.emit(clickedGrandchild);\n\n this.selectedItem = {\n id: clickedGrandchild.id,\n parentItemId,\n parentChildId,\n };\n this.itemSelected.emit(clickedGrandchild);\n }\n\n getItemIconClass(item: SulaMenuMainItem) {\n const active = this.isItemActive(item);\n\n if (this.isItemFaded(item, active)) {\n return 'text-icon-disabled text-2xl';\n }\n\n if (active) {\n return 'text-negative-negative-1 text-xl';\n } else {\n return 'text-icon-primary text-2xl';\n }\n }\n\n getSubItemIconClass(item: SulaMenuSubItem, active: boolean) {\n if (this.isItemFaded(item, active)) {\n return 'text-icon-disabled text-xl';\n }\n\n return 'text-icon-primary text-xl';\n }\n\n getSubItemCaretIconClass(item: SulaMenuSubItem, active: boolean) {\n if (this.isItemFaded(item, active)) {\n return 'text-icon-disabled text-base';\n }\n\n return 'text-icon-primary text-base';\n }\n\n getCaretIconClass(item: SulaMenuMainItem) {\n const active = this.isItemActive(item);\n\n if (this.isItemFaded(item, active)) {\n return 'text-text-disabled text-base';\n }\n\n if (active) {\n return 'text-text-primary text-base';\n }\n\n return 'text-text-secondary text-base';\n }\n\n toggleMenu() {\n if (this.collapsed) {\n this.collapsed = false;\n this.previewExpanded = false;\n this.menuToggled.emit(true);\n return;\n }\n\n this.collapsed = true;\n this.menuToggled.emit(false);\n this.previewExpanded = false;\n }\n\n handleMenuMouseEnter() {\n if (this.collapsed) {\n this.previewExpanded = true;\n }\n }\n\n handleMenuMouseLeave() {\n if (this.collapsed) {\n this.previewExpanded = false;\n }\n }\n\n renderSubmenuItems(parentItem: SulaMenuMainItem, expandedView: boolean) {\n return this.getVisibleSubItems(parentItem).map(child => {\n const childHasChildren = this.hasVisibleGrandchildren(child);\n const childExpanded = expandedView && !!child.expanded;\n const childActive = this.isSubItemActive(parentItem.id, child);\n const childFaded = this.isItemFaded(child, childActive);\n\n if (!childHasChildren) {\n return (\n <li class=\"list-none\" key={child.id}>\n <a\n class={{\n 'submenu-item flex min-w-0 items-center rounded-xs py-16 pl-24 select-none': true,\n 'cursor-pointer hover:bg-states-empty-bg-hover': !child.disabled,\n 'cursor-not-allowed': !!child.disabled,\n }}\n title={child.label}\n aria-disabled={!!child.disabled}\n onClick={() => this.handleSubItemClick(parentItem.id, child)}\n >\n <sula-icon icon={child.icon} customClass={this.getSubItemIconClass(child, childActive)}></sula-icon>\n <span\n class={{\n 'ml-8 truncate text-sm': true,\n 'text-text-primary': !childFaded,\n 'text-text-disabled': childFaded,\n 'font-bold': childActive,\n }}\n >\n {child.label}\n </span>\n </a>\n </li>\n );\n }\n\n return (\n <li class=\"list-none\" key={child.id}>\n <a\n class={{\n 'submenu-item submenu-item--branch flex w-full items-center rounded-xs py-16 pl-24 select-none': true,\n 'cursor-pointer hover:bg-states-empty-bg-hover': !child.disabled,\n 'cursor-not-allowed': !!child.disabled,\n 'ml-[-2px] border-l-2 border-negative-negative-1 font-bold': childActive,\n }}\n title={child.label}\n aria-disabled={!!child.disabled}\n onClick={() => this.handleSubItemClick(parentItem.id, child)}\n >\n <div class=\"submenu-item-branch-content flex min-w-0 flex-1 items-center\">\n <sula-icon icon={child.icon} customClass={this.getSubItemIconClass(child, childActive)}></sula-icon>\n <span\n class={{\n 'ml-8 truncate text-sm': true,\n 'text-text-primary': !childFaded,\n 'text-text-disabled': childFaded,\n 'font-bold': childActive,\n }}\n >\n {child.label}\n </span>\n </div>\n <div class=\"submenu-item-branch-caret flex flex-none items-center justify-end pl-8\">\n <sula-icon icon={`ph-bold ph-caret-${childExpanded ? 'up' : 'down'}`} customClass={this.getSubItemCaretIconClass(child, childActive)}></sula-icon>\n </div>\n </a>\n\n <ul\n aria-hidden={!childExpanded}\n class={{\n 'submenu': true,\n 'submenu--expanded': childExpanded,\n 'submenu-branch ml-[-2px] pl-20 border-l-2 border-negative-negative-1': true,\n }}\n >\n {this.getVisibleGrandchildren(child).map(grandchild => {\n const grandchildActive = this.isSelectedGrandchild(parentItem.id, child.id, grandchild.id);\n const grandchildFaded = this.isItemFaded(grandchild, grandchildActive);\n\n return (\n <li class=\"list-none\" key={grandchild.id}>\n <a\n class={{\n 'submenu-grandchild-item flex items-center rounded-xs p-8 text-sm': true,\n 'cursor-pointer hover:bg-states-empty-bg-hover': !grandchild.disabled,\n 'cursor-not-allowed': !!grandchild.disabled,\n 'text-text-primary': !grandchildFaded,\n 'text-text-disabled': grandchildFaded,\n }}\n aria-disabled={!!grandchild.disabled}\n onClick={() => this.handleGrandchildClick(parentItem.id, child.id, grandchild)}\n >\n <span\n class={{\n 'submenu-grandchild-label truncate pl-16 text-sm': true,\n 'font-bold': grandchildActive,\n }}\n title={grandchild.label}\n >\n {grandchild.label}\n </span>\n </a>\n </li>\n );\n })}\n </ul>\n </li>\n );\n });\n }\n\n render() {\n const expandedView = !this.collapsed || this.previewExpanded;\n\n return (\n <Host\n class={{\n 'menu-host--collapsed': this.collapsed,\n 'menu-host--density-compact': this.density === SulaMenuDensity.Compact,\n 'menu-host--density-comfortable': this.density === SulaMenuDensity.Comfortable,\n }}\n style={this.hostStyleVariables}\n >\n <aside\n part=\"shell\"\n onMouseEnter={() => this.handleMenuMouseEnter()}\n onMouseLeave={() => this.handleMenuMouseLeave()}\n class={{\n 'menu-shell flex h-full flex-col bg-surface-body py-16 pt-12 shadow-md z-50': true,\n 'menu-shell--collapsed': this.collapsed && !this.previewExpanded,\n 'menu-shell--expanded': expandedView,\n 'menu-shell--preview': this.collapsed && this.previewExpanded,\n }}\n >\n <div\n class={{\n 'menu-header flex items-center pb-12': true,\n 'mb-3 px-7': expandedView,\n 'mb-0 justify-center px-0': !expandedView,\n }}\n >\n {this.image && (\n <div class={{ 'menu-brand-image max-h-10 max-w-10 overflow-hidden': true, 'mr-6': expandedView }}>\n <img src={this.image} alt={this.menuTitle} />\n </div>\n )}\n <div\n aria-hidden={!expandedView}\n title={expandedView ? this.menuTitle : undefined}\n class={{\n 'menu-title menu-copy': true,\n 'menu-copy--visible': expandedView,\n 'menu-copy--hidden': !expandedView,\n }}\n >\n <h1 part=\"title\" class=\"truncate text-xl font-semibold leading-tight text-text-primary\">{this.menuTitle}</h1>\n </div>\n </div>\n\n <nav\n class={{\n 'menu-nav flex h-full flex-col overflow-y-auto overflow-x-hidden pb-16': true,\n 'px-20': expandedView,\n 'px-12': !expandedView,\n }}\n >\n {this.getVisibleItems(this.items).map(item => {\n const itemHasChildren = this.hasVisibleSubItems(item);\n const itemActive = this.isItemActive(item);\n const itemFaded = this.isItemFaded(item, itemActive);\n\n return (\n <li class=\"decoration-none list-none\" key={item.id}>\n <div\n class={{\n 'menu-item flex w-full items-center rounded-xs p-8': true,\n 'cursor-pointer hover:bg-states-empty-bg-hover': !item.disabled,\n 'cursor-not-allowed': !!item.disabled,\n 'justify-between': expandedView,\n 'justify-center': !expandedView,\n }}\n title={!expandedView ? item.label : undefined}\n aria-disabled={!!item.disabled}\n onClick={() => this.handleItemClick(item)}\n >\n <div\n class={{\n 'flex items-center': true,\n 'flex-1 min-w-0 space-x-8': expandedView,\n 'justify-center': !expandedView,\n }}\n >\n <div class={{ 'flex flex-none items-center justify-center': true, 'h-9 w-9 rounded-full bg-brand-primary': itemActive }}>\n <sula-icon icon={item.icon} customClass={this.getItemIconClass(item)} class=\"flex items-center justify-center\"></sula-icon>\n </div>\n <span\n part=\"main-item-label\"\n title={expandedView ? item.label : undefined}\n aria-hidden={!expandedView}\n class={{\n 'menu-item-label menu-copy': true,\n 'menu-item-label--truncate': this.labelOverflow === SulaMenuLabelOverflow.Truncate,\n 'menu-item-label--wrap': this.labelOverflow !== SulaMenuLabelOverflow.Truncate,\n 'menu-copy--visible': expandedView,\n 'menu-copy--hidden': !expandedView,\n 'font-bold text-text-primary': itemActive,\n 'text-text-disabled': itemFaded,\n 'text-text-secondary': !itemActive && !itemFaded,\n }}\n >\n {item.label}\n </span>\n </div>\n {itemHasChildren && (\n <sula-icon\n aria-hidden={!expandedView}\n class={{\n 'menu-item-caret flex items-center justify-center': true,\n 'menu-item-caret--expanded': !!item.expanded,\n 'menu-item-caret--visible': expandedView,\n 'menu-item-caret--hidden': !expandedView,\n }}\n icon=\"ph ph-caret-down\"\n customClass={this.getCaretIconClass(item)}\n ></sula-icon>\n )}\n </div>\n {itemHasChildren && (\n <ul\n aria-hidden={!expandedView || !item.expanded}\n class={{ 'submenu': true, 'submenu--expanded': expandedView && !!item.expanded, 'ml-[1.6rem] border-l border-line-general': true }}\n >\n {this.renderSubmenuItems(item, expandedView)}\n </ul>\n )}\n </li>\n );\n })}\n </nav>\n\n <div\n class={{\n 'menu-toggle-wrapper pb-16': true,\n 'px-20': expandedView,\n 'px-12': !expandedView,\n }}\n >\n <button\n type=\"button\"\n class={{\n 'menu-toggle flex w-full cursor-pointer items-center rounded-xs p-8 hover:bg-states-empty-bg-hover': true,\n 'justify-start': expandedView,\n 'justify-center': !expandedView,\n }}\n title={this.collapsed ? 'Fixar menu' : 'Ocultar menu'}\n onClick={() => this.toggleMenu()}\n >\n <div class=\"menu-toggle-icon flex h-10 w-10 items-center justify-center rounded-full border border-line-general bg-surface-body\">\n <sula-icon icon={`ph ph-arrow-${this.collapsed ? 'right' : 'left'}`} customClass=\"text-text-secondary text-xl\"></sula-icon>\n </div>\n <span\n part=\"toggle-label\"\n aria-hidden={!expandedView}\n class={{\n 'menu-toggle-label menu-copy text-base text-text-secondary': true,\n 'menu-copy--visible': expandedView,\n 'menu-copy--hidden': !expandedView,\n }}\n >\n {this.collapsed ? 'Fixar menu' : 'Ocultar menu'}\n </span>\n </button>\n </div>\n </aside>\n </Host>\n );\n }\n}\n",":host {\n display: block;\n}\n\n.sula-menu-select-list {\n box-shadow: 0px 8px 16px 0px #0000000a;\n}\n","import { Component, Event, EventEmitter, Host, Prop, h } from '@stencil/core';\nimport { SulaMenuListItem } from './model/sula-menu-select-list.model';\n\n@Component({\n tag: 'sula-menu-select-list',\n styleUrl: 'sula-menu-select-list.scss',\n shadow: true,\n})\nexport class SulaMenuSelectList {\n /**\n * Items for list\n */\n @Prop({ mutable: true })\n items: SulaMenuListItem[] = [];\n\n /**\n * Menu is full width\n */\n @Prop()\n fullWidth = false;\n\n /**\n * Maximum height for menu in pixels\n */\n @Prop()\n maxHeight: number = 260;\n\n /**\n * Selected value\n */\n @Prop()\n selectedValue?: SulaMenuListItem;\n\n /**\n * Event emitted when item is selected\n */\n @Event()\n itemSelected: EventEmitter<SulaMenuListItem>;\n\n handleClick = (item: SulaMenuListItem) => {\n this.itemSelected.emit(item);\n };\n\n render() {\n return (\n <Host>\n <ul\n class={{\n 'bg-surface-body border border-line-general sula-menu-select-list rounded-sm py-12 overflow-auto': true,\n 'w-300': !this.fullWidth,\n 'w-full': this.fullWidth,\n }}\n style={{\n maxHeight: `${this.maxHeight}px`,\n }}\n >\n {this.items.map(item => {\n const isSelected = this.selectedValue && this.selectedValue.id === item.id;\n return (\n <li \n class={{\n 'w-full px-24 py-16 text-base leading-4 hover:bg-states-empty-bg-hover cursor-pointer flex items-center gap-8': true,\n 'text-text-primary': !isSelected,\n 'text-text-brand font-bold': isSelected,\n }} \n key={item.id} \n onClick={() => this.handleClick(item)}\n >\n {item.icon && <sula-icon icon={item.icon} customClass=\"text-lg\"></sula-icon>}\n {item.title}\n </li>\n );\n })}\n </ul>\n </Host>\n );\n }\n}\n","export enum SulaModalType {\n Alert = 'alert',\n Custom = 'custom',\n Promo = 'promo',\n List = 'list',\n CustomFull = 'custom-full',\n Side = 'side',\n SpecialSide = 'special-side',\n}\n\nexport enum SulaModalSlotOverflow {\n Auto = 'auto',\n Hidden = 'hidden',\n}\n",":host {\n display: contents;\n}\n\n.modal-overlay {\n transition: opacity 300ms ease-out;\n\n &.opacity-0 {\n pointer-events: none;\n }\n}\n\n.modal-slide-up {\n transform: translateY(100%);\n\n @media (min-width: 768px) {\n transform: translateY(20px) scale(0.95);\n }\n\n &.modal-active {\n transform: translateY(0) scale(1);\n }\n}\n\n.modal-slide-right {\n transform: translateX(100%);\n\n &.modal-active {\n transform: translateX(0);\n }\n}\n","import { Component, Element, Event, EventEmitter, Host, Prop, State, Watch, h } from '@stencil/core';\nimport { SulaModalSlotOverflow, SulaModalType } from './model/sula-modal.model';\nimport { SulaButtonAppearance } from '../sula-button/model/sula-button.model';\n\n@Component({\n tag: 'sula-modal',\n styleUrl: 'sula-modal.scss',\n shadow: true,\n})\nexport class SulaModal {\n /**\n * Is modal opened\n */\n @Prop({ mutable: true }) opened: boolean = false;\n\n /**\n * Block body scroll when modal is opened\n */\n @Prop({ mutable: true }) blockBodyScroll: boolean = true;\n\n /**\n * Close modal when clicking outside\n */\n @Prop({ mutable: true }) closeOnClickOutside: boolean = true;\n\n /**\n * Type of the modal\n */\n @Prop() type: SulaModalType = SulaModalType.Custom;\n\n /**\n * Icon of the modal header\n */\n @Prop() headerIcon: string = '';\n\n /**\n * Title of the modal\n */\n @Prop() modalTitle: string = '';\n\n /**\n * Promotional image URL for promo type modal\n */\n @Prop() promoImage: string = '';\n\n /**\n * Subtitle of the modal\n */\n @Prop() subTitle: string = '';\n\n /**\n * Primary button text\n */\n @Prop() primaryButtonText: string = '';\n\n /**\n * Secondary button text\n */\n @Prop() secondaryButtonText: string = '';\n\n /**\n * Slot overflow behavior\n */\n @Prop() slotOverflow: SulaModalSlotOverflow = SulaModalSlotOverflow.Auto;\n\n /**\n * Event emitted when the modal is closed\n */\n @Event()\n modalClosed: EventEmitter<void>;\n\n /**\n * Event emitted when the primary button is clicked\n */\n @Event()\n primaryButtonClicked: EventEmitter<void>;\n\n /**\n * Event emitted when the secondary button is clicked\n */\n @Event()\n secondaryButtonClicked: EventEmitter<void>;\n\n @Element() hostElement: HTMLElement;\n\n @State() isAnimating: boolean = false;\n @State() shouldRender: boolean = false;\n\n private closeTimeout: NodeJS.Timeout;\n\n @Watch('opened')\n handleOpenedChange(newValue: boolean) {\n if (newValue) {\n this.shouldRender = true;\n\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n this.isAnimating = true;\n });\n });\n } else {\n this.isAnimating = false;\n\n this.closeTimeout = setTimeout(() => {\n this.shouldRender = false;\n }, 300);\n }\n this.handleParentOverflow();\n }\n\n componentWillLoad() {\n if (this.opened) {\n this.shouldRender = true;\n this.isAnimating = true;\n }\n this.handleParentOverflow();\n }\n\n disconnectedCallback() {\n if (this.closeTimeout) {\n clearTimeout(this.closeTimeout);\n }\n }\n\n handleParentOverflow(): void {\n const overflow = this.opened && this.blockBodyScroll ? 'hidden' : 'inherit';\n\n if (this.hostElement?.parentElement) {\n this.hostElement.parentElement.style.overflow = overflow;\n }\n }\n\n closeModal(): void {\n this.opened = false;\n this.modalClosed.emit();\n }\n\n handleClickOutside(event: MouseEvent): void {\n if (this.closeOnClickOutside && event.target === event.currentTarget) {\n this.closeModal();\n }\n }\n\n handlePrimaryButtonClick(): void {\n this.primaryButtonClicked.emit();\n }\n\n handleSecondaryButtonClick(): void {\n this.secondaryButtonClicked.emit();\n }\n\n isAlertOrCustomOrPromo(): boolean {\n return this.type === SulaModalType.Alert || this.type === SulaModalType.Custom || this.type === SulaModalType.Promo;\n }\n\n isListOrCustomFull(): boolean {\n return this.type === SulaModalType.List || this.type === SulaModalType.CustomFull;\n }\n\n isSideModal(): boolean {\n return this.type === SulaModalType.Side || this.type === SulaModalType.SpecialSide;\n }\n\n isPromoOrSpecialSide(): boolean {\n return this.type === SulaModalType.Promo || this.type === SulaModalType.SpecialSide;\n }\n\n hasHeaderIcon(): boolean {\n return (this.type === SulaModalType.Alert || this.type === SulaModalType.Custom) && !!this.headerIcon;\n }\n\n hasSlotContent(): boolean {\n return (\n this.type === SulaModalType.Custom || this.type === SulaModalType.Promo || this.type === SulaModalType.List || this.type === SulaModalType.CustomFull || this.isSideModal()\n );\n }\n\n hasButtons(): boolean {\n return this.type === SulaModalType.Alert || this.type === SulaModalType.Custom;\n }\n\n getOverlayClasses(): Record<string, boolean> {\n return {\n 'modal-overlay absolute inset-0 bg-opacity-overlay flex z-[999] transition-opacity duration-300': true,\n 'opacity-100': this.isAnimating,\n 'opacity-0': !this.isAnimating,\n 'items-end justify-center md:items-center': this.isAlertOrCustomOrPromo(),\n 'items-end justify-center': this.isListOrCustomFull(),\n 'justify-end': this.isSideModal(),\n };\n }\n\n getWrapperClasses(): Record<string, boolean> {\n return {\n 'modal-wrapper transition-all duration-300 ease-out': true,\n 'w-full md:w-[852px] flex md:flex-row flex-col h-[70vh] md:h-auto relative': this.type === SulaModalType.Promo,\n 'w-full flex justify-center items-center': !this.isPromoOrSpecialSide() && !this.isSideModal(),\n 'w-full flex justify-end': this.isSideModal(),\n\n 'modal-slide-up': (this.isAlertOrCustomOrPromo() || this.isListOrCustomFull()) && !this.isSideModal(),\n 'modal-slide-right': this.isSideModal(),\n 'modal-active': this.isAnimating,\n };\n }\n\n getContentClasses(): Record<string, boolean> {\n return {\n 'bg-surface-body rounded-b-none border border-line-hair px-14 py-24 md:px-32 md:py-48 relative': true,\n 'md:rounded-b-lg rounded-lg': !this.isSideModal(),\n 'w-full md:w-[448px]': this.type === SulaModalType.Alert,\n 'w-full md:w-[768px] pb-32': this.type === SulaModalType.Custom,\n 'w-full md:w-1/2 h-[50vh] md:h-auto pb-0 md:pb-96 rounded-none md:rounded-lg md:rounded-l-none': this.type === SulaModalType.Promo,\n 'w-full md:w-[80vw] max-h-[90vh] rounded-b-none relative': this.isListOrCustomFull(),\n 'rounded-none w-[440px]': this.type === SulaModalType.Side,\n 'rounded-none w-1/2': this.type === SulaModalType.SpecialSide,\n };\n }\n\n getHeaderClasses(): Record<string, boolean> {\n return {\n 'flex w-full items-start': this.hasHeaderIcon(),\n 'pb-24': this.hasHeaderIcon(),\n };\n }\n\n getCloseButtonClasses(): Record<string, boolean> {\n return {\n 'w-40 h-40 rounded-full absolute flex justify-center items-center cursor-pointer z-[1]': true,\n 'bg-surface-on-body hover:bg-states-empty-bg-hover text-icon-primary': true,\n 'top-24 right-24 md:top-32 md:right-32': this.type !== SulaModalType.Promo,\n 'top-20 right-20 md:top-24 md:right-24': this.type === SulaModalType.Promo,\n };\n }\n\n getTitleContainerClasses(): Record<string, boolean> {\n return {\n 'flex flex-col space-y-12': true,\n 'items-center justify-center': this.type === SulaModalType.List,\n };\n }\n\n getTitleClasses(): Record<string, boolean> {\n return {\n 'text-heading-small text-text-primary pr-16': true,\n 'text-paragraph-large-bold': this.type === SulaModalType.List,\n 'text-heading-medium': this.type === SulaModalType.List,\n };\n }\n\n getSlotClasses(): Record<string, boolean> {\n return {\n 'mt-12 w-full max-h-[40vh]': true,\n 'max-h-[80vh]': this.type === SulaModalType.List,\n 'max-h-[67.6vh]': this.type === SulaModalType.CustomFull,\n 'max-h-[72.7vh]': this.type === SulaModalType.Side,\n 'max-h-[87%]': this.type === SulaModalType.SpecialSide,\n 'overflow-auto': this.slotOverflow === SulaModalSlotOverflow.Auto,\n 'overflow-hidden': this.slotOverflow === SulaModalSlotOverflow.Hidden,\n };\n }\n\n getButtonContainerClasses(): Record<string, boolean> {\n return {\n 'w-full mt-48 flex': true,\n 'flex-col space-y-12': this.type === SulaModalType.Alert,\n 'flex-row-reverse space-x-reverse space-x-12': this.type === SulaModalType.Custom,\n };\n }\n\n renderPromoImage() {\n if (!this.isPromoOrSpecialSide()) {\n return null;\n }\n\n const imageClasses = {\n 'w-full md:w-1/2 h-[20vh] md:h-auto overflow-hidden flex': true,\n 'rounded-b-none md:rounded-b-lg md:rounded-r-none rounded-lg': this.type === SulaModalType.Promo,\n };\n\n return (\n <div class={imageClasses}>\n <img src={this.promoImage} alt=\"Promotional Image\" class=\"w-full h-full object-cover\" />\n </div>\n );\n }\n\n renderHeaderIcon() {\n if (this.hasHeaderIcon()) {\n return (\n <div class=\"w-64 h-64 border border-line-general flex justify-center items-center rounded-full\">\n <sula-icon icon={this.headerIcon} customClass=\"text-5xl text-icon-primary\" class=\"flex\" />\n </div>\n );\n }\n return null;\n }\n\n renderCloseButton() {\n return (\n <div class={this.getCloseButtonClasses()} onClick={() => this.closeModal()}>\n <sula-icon icon=\"ph ph-x\" customClass=\"text-2xl\" class=\"flex\" />\n </div>\n );\n }\n\n renderTitleSection() {\n if (!this.modalTitle && !this.subTitle) {\n return null;\n }\n\n return (\n <div class={this.getTitleContainerClasses()}>\n {this.modalTitle && <h1 class={this.getTitleClasses()}>{this.modalTitle}</h1>}\n {this.subTitle && <p class=\"text-paragraph-medium-regular text-text-secondary\">{this.subTitle}</p>}\n </div>\n );\n }\n\n renderSlot() {\n if (!this.hasSlotContent()) {\n return null;\n }\n\n return (\n <div class={this.getSlotClasses()}>\n <slot></slot>\n </div>\n );\n }\n\n renderButtons() {\n if (!this.hasButtons()) {\n return null;\n }\n\n return (\n <div class={this.getButtonContainerClasses()}>\n {this.primaryButtonText && <sula-button text={this.primaryButtonText} fullWidth={true} onButtonClicked={() => this.handlePrimaryButtonClick()} />}\n {this.secondaryButtonText && (\n <sula-button onButtonClicked={() => this.handleSecondaryButtonClick()} appearance={SulaButtonAppearance.Secondary} text={this.secondaryButtonText} fullWidth={true} />\n )}\n </div>\n );\n }\n\n render() {\n if (!this.shouldRender) {\n return <Host />;\n }\n\n return (\n <Host>\n <div class={this.getOverlayClasses()} onClick={event => this.handleClickOutside(event)}>\n <div class={this.getWrapperClasses()}>\n {this.renderPromoImage()}\n <div class={this.getContentClasses()}>\n {this.renderCloseButton()}\n <div class={this.getHeaderClasses()}>\n {this.renderHeaderIcon()}\n </div>\n {this.renderTitleSection()}\n {this.renderSlot()}\n {this.renderButtons()}\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n","export enum SulaProgressBarAppearance {\n Primary = 'primary',\n Secondary = 'secondary',\n OnPrimary = 'on-primary',\n Success = 'success',\n Error = 'error',\n}\n\nexport enum SulaProgressBarState {\n Default = 'default',\n Success = 'success',\n Error = 'error',\n}\n",":host {\n display: block;\n}\n","import { Component, Host, Prop, Watch, h } from '@stencil/core';\nimport { SulaProgressBarAppearance, SulaProgressBarState } from './model/sula-progress-bar.model';\n\n@Component({\n tag: 'sula-progress-bar',\n styleUrl: 'sula-progress-bar.scss',\n shadow: true,\n})\nexport class SulaProgressBar {\n /**\n * The style of the progress bar.\n */\n @Prop({ mutable: true })\n appearance: SulaProgressBarAppearance = SulaProgressBarAppearance.Primary;\n\n /**\n * The state of the progress bar.\n */\n @Prop({ mutable: true })\n state: SulaProgressBarState = SulaProgressBarState.Default;\n\n /**\n * The label displayed at the top of the progress bar.\n */\n @Prop({ mutable: true })\n topLabel: string;\n\n /**\n * The label displayed at the bottom of the progress bar.\n */\n @Prop({ mutable: true })\n bottomLabel: string;\n\n /**\n * The progress value of the progress bar.\n */\n @Prop({ mutable: true })\n progress: number;\n\n /**\n * Show progress\n */\n @Prop({ mutable: true })\n showProgress: boolean = true;\n\n @Watch('progress')\n validateProgress(newValue: number) {\n this.handleProgress(newValue);\n }\n\n componentWillLoad() {\n this.handleProgress(this.progress);\n }\n\n handleProgress(value: number) {\n if (value < 0) {\n this.progress = 0;\n console.warn('sula-progress-bar: progress cannot be less than 0. Value adjusted to 0.');\n } else if (value > 100) {\n this.progress = 100;\n console.warn('sula-progress-bar: progress cannot be greater than 100. Value adjusted to 100.');\n }\n }\n\n getProgressBarStyle() {\n const styles = {\n [SulaProgressBarAppearance.Primary]: 'bg-brand-primary',\n [SulaProgressBarAppearance.Secondary]: 'bg-neutral-300',\n [SulaProgressBarAppearance.OnPrimary]: 'bg-opacity-on-body',\n [SulaProgressBarAppearance.Success]: 'bg-feedback-success',\n [SulaProgressBarAppearance.Error]: 'bg-feedback-error',\n };\n\n return styles[this.appearance];\n }\n\n getProgressBarStateElement() {\n if (this.state === SulaProgressBarState.Default) {\n return this.showProgress && <span class=\"text-sm text-text-secondary font-bold leading-[14px]\">{this.progress}%</span>;\n } else if (this.state === SulaProgressBarState.Success) {\n return (\n <div class=\"flex justify-center items-center leading-6 h-24\">\n <sula-icon icon=\"ph ph-check-circle\" customClass=\"text-2xl text-feedback-success\"></sula-icon>\n </div>\n );\n } else {\n return (\n <div class=\"flex justify-center items-center leading-6 h-24\">\n <sula-icon icon=\"ph ph-x-circle\" customClass=\"text-2xl text-feedback-error\"></sula-icon>\n </div>\n );\n }\n }\n\n render() {\n return (\n <Host>\n <div class=\"flex flex-col w-full space-y-8\">\n <div class=\"flex justify-between items-center\">\n <label class=\"text-sm text-text-secondary leading-[14px]\">{this.topLabel}</label>\n {this.getProgressBarStateElement()}\n </div>\n <div\n style={{ width: `${this.progress}%` }}\n class={{\n 'h-12 rounded-xxl': true,\n [this.getProgressBarStyle()]: true,\n }}\n ></div>\n <label class=\"text-sm text-text-secondary leading-[14px]\">{this.bottomLabel}</label>\n </div>\n </Host>\n );\n }\n}\n",":host {\n display: block;\n}\n\n.container-focus {\n outline: 1px solid var(--color-feedback-informational) !important;\n outline-offset: 1px !important;\n}\n","import { Component, Event, EventEmitter, Host, Prop, State, h } from '@stencil/core';\n\n@Component({\n tag: 'sula-radio-button',\n styleUrl: 'sula-radio-button.scss',\n shadow: true,\n})\nexport class SulaRadioButton {\n /**\n * Is radio button checked\n */\n @Prop({ mutable: true }) checked: boolean = false;\n\n /**\n * Radio button label\n */\n @Prop({ mutable: true }) label: string = '';\n\n /**\n * Is radio button disabled\n */\n @Prop({ mutable: true }) disabled: boolean = false;\n\n /**\n * Event emitted when radio button value changes.\n */\n @Event()\n valueChanged: EventEmitter<boolean>;\n\n /**\n * Event emitted when radio button is focused.\n */\n @Event()\n focusedOn: EventEmitter<void>;\n\n /**\n * Event emitted when radio button is focused out.\n */\n @Event()\n focusedOut: EventEmitter<void>;\n\n @State()\n radioIsFocus: boolean = false;\n\n handleFocus = () => {\n if (this.disabled) return;\n\n this.radioIsFocus = true;\n this.focusedOn.emit();\n };\n\n handleFocusOut = () => {\n if (this.disabled) return;\n\n this.radioIsFocus = false;\n this.focusedOut.emit();\n };\n\n handleClick = () => {\n if (this.disabled) return;\n this.checked = !this.checked;\n this.valueChanged.emit(this.checked);\n };\n\n render() {\n return (\n <Host>\n <div class={{ 'w-fit': true, 'flex items-center': !!this.label }} onClick={this.handleClick}>\n <div\n class={{\n 'min-w-[30px] min-h-[30px] rounded-full flex justify-center items-center outline-none': true,\n 'active:bg-states-empty-bg-pressed cursor-pointer': !this.disabled,\n 'bg-brand-primary': this.checked,\n 'border border-line-input': !this.checked,\n 'container-focus': this.radioIsFocus,\n 'bg-states-bg-disabled border-2 border-states-bg-disabled cursor-not-allowed': this.disabled,\n }}\n tabIndex={0}\n onFocus={this.handleFocus}\n onBlur={this.handleFocusOut}\n >\n {this.checked && <div class=\"bg-transparent border-2 border-negative-negative-1 w-[18px] h-[18px] rounded-full\"></div>}\n </div>\n {this.label && <label class={{ 'ml-16 text-base text-text-primary': true, 'cursor-pointer': !this.disabled }}>{this.label}</label>}\n </div>\n </Host>\n );\n }\n}\n","export enum SulaSearchBarStyle {\n Default = 'default',\n Highlight = 'highlight',\n}\n",":host {\n display: block;\n}\n\n.search-bar-shadow {\n box-shadow: 0px 4px 19.7px 0px #0000000f;\n}\n\n.search-bar-focus {\n outline: 2px solid var(--color-feedback-informational) !important;\n outline-offset: 2px !important;\n}\n","import { Component, Event, EventEmitter, Host, Prop, State, h } from '@stencil/core';\nimport { SulaSearchBarStyle } from './model/sula-search.bar-model';\n\n@Component({\n tag: 'sula-search-bar',\n styleUrl: 'sula-search-bar.scss',\n shadow: true,\n})\nexport class SulaSearchBar {\n /**\n * Value for the search bar.\n */\n @Prop({ mutable: true })\n value?: string;\n\n /**\n * Search bar style\n */\n @Prop({ mutable: true })\n searchBarStyle: SulaSearchBarStyle = SulaSearchBarStyle.Default;\n\n /**\n * Search bar placeholder\n */\n @Prop({ mutable: true })\n placeholder: string;\n\n /**\n * Search bar left icon\n */\n @Prop({ mutable: true })\n leftIcon: string;\n\n /**\n * Search bar right icon\n */\n @Prop({ mutable: true })\n rightIcon: string;\n\n /**\n * Event emitted when search bar value changes.\n */\n @Event()\n valueChanged: EventEmitter<string>;\n\n /**\n * Event emitted when search bar is focused.\n */\n @Event()\n focusedOn: EventEmitter<void>;\n\n /**\n * Event emitted when search bar is focused out.\n */\n @Event()\n focusedOut: EventEmitter<void>;\n\n /**\n * Event emitted when right icon is clicked\n */\n @Event()\n rightIconClicked: EventEmitter<void>;\n\n @State()\n isFocused = false;\n\n @State()\n textValue: string = '';\n\n inputElement: HTMLInputElement;\n\n componentWillLoad() {\n if (this.value && this.value.trim().length > 0) {\n this.textValue = this.value;\n }\n }\n\n getStyleClass() {\n const style = {\n [SulaSearchBarStyle.Default]: 'bg-surface-on-body hover:bg-states-empty-bg-hover',\n [SulaSearchBarStyle.Highlight]: 'bg-surface-body search-bar-shadow border border-surface-on-body',\n };\n\n return style[this.searchBarStyle];\n }\n\n handleInputFocus = () => {\n this.isFocused = true;\n this.inputElement.focus();\n this.focusedOn.emit();\n };\n\n handleInputBlur = () => {\n this.isFocused = false;\n this.inputElement.blur();\n this.focusedOut.emit();\n };\n\n handleRightIconClick = (event: MouseEvent) => {\n this.rightIconClicked.emit();\n\n event.stopPropagation();\n event.preventDefault();\n };\n\n handleValueChanges = (event: InputEvent) => {\n const newValue = (event.target as HTMLTextAreaElement).value;\n this.textValue = newValue;\n this.value = newValue;\n\n this.valueChanged.emit(newValue);\n };\n\n render() {\n return (\n <Host>\n <div\n class={{\n 'flex flex-row items-center space-x-12 px-16 rounded-xxl h-44 caret-brand-primary outline-none group': true,\n [this.getStyleClass()]: true,\n 'search-bar-focus': this.isFocused,\n }}\n tabIndex={0}\n onFocus={this.handleInputFocus}\n onClick={this.handleInputFocus}\n >\n {!this.isFocused && this.leftIcon && (\n <div class=\"flex justify-center items-center leading-6\">\n <sula-icon icon={this.leftIcon} customClass=\"text-2xl text-icon-primary group-hover:text-brand-primary\"></sula-icon>\n </div>\n )}\n\n <input\n ref={node => (this.inputElement = node)}\n type=\"text\"\n class=\"outline-none border-none w-full bg-transparent text-text-primary\"\n placeholder={this.placeholder}\n onBlur={this.handleInputBlur}\n value={this.value}\n onInput={this.handleValueChanges}\n />\n\n {this.rightIcon && (\n <div class=\"flex justify-center items-center leading-6 cursor-pointer\" onClick={this.handleRightIconClick} onMouseDown={e => e.preventDefault()}>\n <sula-icon icon={this.rightIcon} customClass=\"text-2xl text-icon-primary\"></sula-icon>\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n","export enum SulaSegmentedControlType {\n Icon = 'icon',\n Text = 'text',\n}\n\nexport enum SulaSegmentedControlSize {\n Small = 'small',\n Default = 'default',\n}\n\nexport enum SulaSegmentedControlColor {\n White = 'white',\n Gray = 'gray',\n}\n\nexport interface SulaSegmentedControlOption {\n label?: string;\n addChevron?: boolean;\n value: string | number;\n icon?: string;\n selected?: boolean;\n}\n",":host {\n display: block;\n}\n","import { Component, Event, EventEmitter, Host, Prop, h } from '@stencil/core';\nimport { SulaSegmentedControlColor, SulaSegmentedControlOption, SulaSegmentedControlSize, SulaSegmentedControlType } from './model/sula-segmented-control.model';\n\n@Component({\n tag: 'sula-segmented-control',\n styleUrl: 'sula-segmented-control.scss',\n shadow: true,\n})\nexport class SulaSegmentedControl {\n /**\n * Items for the segmented control.\n */\n @Prop({ mutable: true })\n items: SulaSegmentedControlOption[] = [];\n\n /**\n * Segmented control type.\n */\n @Prop({ mutable: true })\n type: SulaSegmentedControlType = SulaSegmentedControlType.Text;\n\n /**\n * Segmented control size.\n */\n @Prop({ mutable: true })\n size: SulaSegmentedControlSize = SulaSegmentedControlSize.Default;\n\n /**\n * Segmented control color.\n */\n @Prop({ mutable: true })\n color: SulaSegmentedControlColor = SulaSegmentedControlColor.White;\n\n /**\n * Emitted when an item is clicked.\n */\n @Event()\n itemClicked: EventEmitter<SulaSegmentedControlOption>;\n\n /**\n * Emitted when an item is hovered.\n */\n @Event()\n itemHovered: EventEmitter<SulaSegmentedControlOption>;\n\n /**\n * Emitted when an item is blurred.\n */\n @Event()\n itemBlur: EventEmitter<SulaSegmentedControlOption>;\n\n handleItemClick(selectedItem: SulaSegmentedControlOption) {\n this.items = this.items.map(item => ({\n ...item,\n selected: item.value === selectedItem.value,\n }));\n\n this.itemClicked.emit({ ...selectedItem, selected: true });\n }\n\n handleItemHover(hoveredItem: SulaSegmentedControlOption) {\n this.itemHovered.emit(hoveredItem);\n }\n\n handleItemBlur(blurredItem: SulaSegmentedControlOption) {\n this.itemBlur.emit(blurredItem);\n }\n\n getCaretIconClass(item: SulaSegmentedControlOption) {\n if (this.type === SulaSegmentedControlType.Icon) {\n return item.selected ? 'text-negative-negative-1' : 'text-icon-primary';\n }\n return item.selected ? 'text-brand-primary' : 'text-text-primary';\n }\n\n render() {\n return (\n <Host>\n <div\n class={{\n 'flex flex-row items-center rounded-xxl p-2 w-fit backdrop-blur-[20px]': true,\n 'bg-opacity-on-body': this.color === SulaSegmentedControlColor.Gray,\n 'bg-opacity-body': this.color === SulaSegmentedControlColor.White,\n }}\n >\n {this.items.map(item => (\n <div\n class={{\n 'rounded-3xl flex justify-center items-center cursor-pointer transition': true,\n 'py-12 px-20': this.size === SulaSegmentedControlSize.Default,\n 'py-8 px-16': this.size === SulaSegmentedControlSize.Small,\n 'bg-box-shadow-body': this.type === SulaSegmentedControlType.Text && item.selected,\n 'bg-brand-primary': this.type === SulaSegmentedControlType.Icon && item.selected,\n 'hover:bg-box-shadow-body': !item.selected,\n }}\n onClick={() => this.handleItemClick(item)}\n onMouseEnter={() => this.handleItemHover(item)}\n onMouseLeave={() => this.handleItemBlur(item)}\n >\n {this.type === SulaSegmentedControlType.Text ? (\n <span\n class={{\n 'text-brand-primary text-label-medium-bold leading-5': item.selected,\n 'text-text-secondary text-paragraph-medium-regular leading-5': !item.selected,\n }}\n >\n {item.label}\n </span>\n ) : (\n <sula-icon\n class=\"flex items-center justify-center\"\n icon={item.icon}\n customClass={`${item.selected ? 'text-negative-negative-1' : 'text-icon-primary'} text-xl leading-4`}\n ></sula-icon>\n )}\n {item.addChevron && <sula-icon class=\"ml-4 flex\" icon=\"ph-bold ph-caret-down\" customClass={`${this.getCaretIconClass(item)} text-base leading-4`}></sula-icon>}\n </div>\n ))}\n </div>\n </Host>\n );\n }\n}\n","export enum SulaSwitchType {\n Default = 'default',\n List = 'list',\n}\n",":host {\n display: block;\n}\n\n.switch-focus {\n outline: 2px solid var(--color-feedback-informational) !important;\n outline-offset: 2px !important;\n}\n\n.container-focus {\n outline: 2px solid var(--color-feedback-informational) !important;\n outline-offset: 2px !important;\n}\n\n.switch-container {\n position: relative;\n transition: background-color 0.3s ease-in-out;\n cursor: pointer;\n overflow: hidden;\n}\n\n.switch-thumb {\n position: relative;\n transition: transform 0.3s ease-in-out;\n}\n\n.switch-on .switch-thumb {\n animation: slideFromLeft 0.3s ease-in-out forwards;\n}\n\n.switch-off .switch-thumb {\n animation: slideFromRight 0.3s ease-in-out forwards;\n}\n\n.switch-indicator {\n transition: width 0.3s ease-in-out, height 0.3s ease-in-out, background-color 0.3s ease-in-out;\n}\n\n.switch-indicator-on {\n animation: growIndicator 0.3s ease-in-out forwards;\n}\n\n.switch-indicator-off {\n animation: shrinkIndicator 0.3s ease-in-out forwards;\n}\n\n@keyframes slideFromLeft {\n 0% {\n transform: translateX(-100%);\n opacity: 0;\n }\n 50% {\n opacity: 0.7;\n }\n 100% {\n transform: translateX(0);\n opacity: 1;\n }\n}\n\n@keyframes slideFromRight {\n 0% {\n transform: translateX(100%);\n opacity: 0;\n }\n 50% {\n opacity: 0.7;\n }\n 100% {\n transform: translateX(0);\n opacity: 1;\n }\n}\n\n@keyframes growIndicator {\n 0% {\n width: 10px;\n height: 4px;\n opacity: 0.5;\n }\n 100% {\n width: 12px;\n height: 12px;\n opacity: 1;\n }\n}\n\n@keyframes shrinkIndicator {\n 0% {\n width: 12px;\n height: 12px;\n opacity: 0.5;\n }\n 100% {\n width: 10px;\n height: 4px;\n opacity: 1;\n }\n}\n","import { Component, Event, EventEmitter, Host, Prop, State, h } from '@stencil/core';\nimport { SulaSwitchType } from './model/sula-switch.model';\n\n@Component({\n tag: 'sula-switch',\n styleUrl: 'sula-switch.scss',\n shadow: true,\n})\nexport class SulaSwitch {\n /**\n * Switch type\n */\n @Prop({ mutable: true }) type: SulaSwitchType = SulaSwitchType.Default;\n\n /**\n * Is switch active\n */\n @Prop({ mutable: true }) active: boolean = false;\n\n /**\n * Is switch disabled\n */\n @Prop({ mutable: true }) disabled: boolean = false;\n\n /**\n * Switch label\n */\n @Prop({ mutable: true }) label?: string;\n\n /**\n * Switch sub title (avaible when is `list` type)\n */\n @Prop({ mutable: true }) subTitle?: string;\n\n /**\n * Enable responsive layout (full width)\n * @default false\n */\n @Prop() responsive: boolean = false;\n\n /**\n * Event emitted when switch value changes.\n */\n @Event()\n valueChanged: EventEmitter<boolean>;\n\n /**\n * Event emitted when switch is focused.\n */\n @Event()\n focusedOn: EventEmitter<void>;\n\n /**\n * Event emitted when switch is focused out.\n */\n @Event()\n focusedOut: EventEmitter<void>;\n\n @State()\n isFocus: boolean = false;\n\n handleClick = () => {\n if (!this.disabled) {\n this.active = !this.active;\n this.valueChanged.emit(this.active);\n }\n };\n\n handleFocus = () => {\n if (!this.disabled) {\n this.isFocus = true;\n this.focusedOn.emit();\n }\n };\n\n handleBlur = () => {\n if (!this.disabled) {\n this.focusedOut.emit();\n this.isFocus = false;\n }\n };\n\n render() {\n return (\n <Host>\n <div\n class={{\n 'outline-none': true,\n 'flex items-center space-x-12': !!this.label && this.type === SulaSwitchType.Default,\n 'flex items-center justify-between bg-surface-on-body rounded-md min-h-[85px] px-24 py-16': this.type === SulaSwitchType.List,\n 'w-full': this.type === SulaSwitchType.List && this.responsive,\n 'w-[280px]': this.type === SulaSwitchType.List && !this.responsive,\n 'hover:bg-states-empty-bg-hover active:bg-states-empty-bg-pressed cursor-pointer': this.type === SulaSwitchType.List && !this.disabled,\n 'container-focus': this.isFocus && this.type === SulaSwitchType.List,\n }}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n onClick={this.handleClick}\n tabIndex={0}\n >\n {this.type === SulaSwitchType.List && (\n <div class=\"flex flex-col flex-1 mr-16 overflow-hidden\">\n {!!this.label && <label class=\"text-text-primary font-bold text-base cursor-pointer break-words\">{this.label}</label>}\n {!!this.subTitle && <span class=\"text-text-secondary text-base break-words\">{this.subTitle}</span>}\n </div>\n )}\n <div\n class={{\n 'switch-container w-56 h-32 flex items-center rounded-xxl p-2 outline-none': true,\n 'switch-on bg-brand-primary justify-end': this.active,\n 'switch-off bg-neutral-neutral-3 justify-start': !this.active,\n 'cursor-not-allowed bg-states-bg-disabled': this.disabled,\n 'switch-focus': this.isFocus && this.type === SulaSwitchType.Default,\n }}\n tabIndex={0}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n >\n <div\n class={{\n 'switch-thumb w-[28px] h-[28px] rounded-full flex justify-center items-center': true,\n 'bg-negative-negative-1': !this.disabled,\n 'bg-states-bg-disabled shadow-md': this.disabled,\n }}\n >\n <div\n class={{\n 'switch-indicator rounded-full': true,\n 'switch-indicator-on w-12 h-12 bg-brand-primary': this.active,\n 'switch-indicator-off w-[10px] h-4 bg-neutral-neutral-4': !this.active,\n 'shadow-sm bg-states-bg-disabled': this.disabled,\n }}\n ></div>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n","export enum SulaTableDensity {\n Compact = 'compact',\n Default = 'default',\n Spaced = 'spaced',\n Confortable = 'comfortable',\n}\n",null,"import { Component, Host, Prop, h } from '@stencil/core';\nimport { SulaTableDensity } from './model/sula-table.model';\n\n@Component({\n tag: 'sula-table',\n styleUrl: 'sula-table.scss',\n shadow: false,\n})\nexport class SulaTable {\n /**\n * Density of the table\n */\n @Prop()\n density: SulaTableDensity = SulaTableDensity.Default;\n\n /**\n * If true, all columns will have equal width\n */\n @Prop()\n equalWidth: boolean = true;\n\n /**\n * If true, the table will take the full width of its container\n */\n @Prop()\n fullWidth: boolean = true;\n\n render() {\n return (\n <Host\n class={{\n 'block max-w-full overflow-x-auto': true,\n }}\n >\n <table\n class={{\n 'w-full': this.fullWidth && this.equalWidth,\n 'w-max': !this.equalWidth,\n 'min-w-full': this.fullWidth && !this.equalWidth,\n 'table-fixed': this.equalWidth,\n 'border-collapse border-spacing-0 box-border': true,\n }}\n >\n <slot></slot>\n </table>\n </Host>\n );\n }\n}\n","export const replaceHostWithRenderedElement = (host: HTMLElement, selector: string) => {\n const nativeElement = host.querySelector<HTMLElement>(selector);\n const parentNode = host.parentNode;\n\n if (!nativeElement || !parentNode) {\n return;\n }\n\n Array.from(host.classList)\n .filter(className => className !== 'hydrated')\n .forEach(className => nativeElement.classList.add(className));\n\n const hostStyle = host.getAttribute('style');\n const nativeStyle = nativeElement.getAttribute('style');\n\n if (hostStyle) {\n nativeElement.setAttribute('style', [nativeStyle, hostStyle].filter(Boolean).join('; '));\n }\n\n Array.from(host.attributes).forEach(({ name, value }) => {\n if (name === 'class' || name === 'style') {\n return;\n }\n\n nativeElement.setAttribute(name, value);\n });\n\n parentNode.insertBefore(nativeElement, host);\n parentNode.removeChild(host);\n};\n",null,"import { Component, Element, Host, h } from '@stencil/core';\nimport { replaceHostWithRenderedElement } from '../../utils/replace-host-with-rendered-element';\n\n@Component({\n tag: 'sula-table-body',\n styleUrl: 'sula-table-body.scss',\n shadow: false,\n})\nexport class SulaTableBody {\n @Element() host!: HTMLElement;\n\n componentDidLoad() {\n replaceHostWithRenderedElement(this.host, 'tbody');\n }\n\n render() {\n return (\n <Host>\n <tbody>\n <slot></slot>\n </tbody>\n </Host>\n );\n }\n}\n",null,"import { Component, Element, Host, h } from '@stencil/core';\nimport { SulaTableDensity } from '../sula-table/model/sula-table.model';\nimport { replaceHostWithRenderedElement } from '../../utils/replace-host-with-rendered-element';\n\n@Component({\n tag: 'sula-table-cell',\n styleUrl: 'sula-table-cell.scss',\n shadow: false,\n})\nexport class SulaTableCell {\n @Element() host!: HTMLElement;\n\n private get tableDensity(): SulaTableDensity {\n return ((this.host.closest('sula-table') as (HTMLElement & { density?: SulaTableDensity }) | null)?.density ?? SulaTableDensity.Default) as SulaTableDensity;\n }\n\n componentDidLoad() {\n replaceHostWithRenderedElement(this.host, 'td');\n }\n\n render() {\n return (\n <Host>\n <td class=\"align-middle text-left border-b border-dashed border-line-general\">\n <div\n class={{\n 'px-16 py-4 w-full flex flex-col justify-center items-start box-border text-label-medium-regular text-text-secondary': true,\n 'min-h-56': this.tableDensity === SulaTableDensity.Compact,\n 'min-h-60': this.tableDensity === SulaTableDensity.Default,\n 'min-h-64': this.tableDensity === SulaTableDensity.Spaced,\n 'min-h-72': this.tableDensity === SulaTableDensity.Confortable,\n }}\n >\n <slot></slot>\n </div>\n </td>\n </Host>\n );\n }\n}\n",null,"import { Component, Element, Host, h } from '@stencil/core';\nimport { SulaTableDensity } from '../sula-table/model/sula-table.model';\nimport { replaceHostWithRenderedElement } from '../../utils/replace-host-with-rendered-element';\n\n@Component({\n tag: 'sula-table-head-cell',\n styleUrl: 'sula-table-head-cell.scss',\n shadow: false,\n})\nexport class SulaTableHeadCell {\n @Element() host!: HTMLElement;\n\n private get tableDensity(): SulaTableDensity {\n return ((this.host.closest('sula-table') as (HTMLElement & { density?: SulaTableDensity }) | null)?.density ?? SulaTableDensity.Default) as SulaTableDensity;\n }\n\n componentDidLoad() {\n replaceHostWithRenderedElement(this.host, 'th');\n }\n\n render() {\n return (\n <Host>\n <th scope=\"col\" class=\"align-middle text-left border-b border-line-general\">\n <div\n class={{\n 'px-16 py-4 w-full flex justify-start items-center box-border text-label-small-bold text-text-secondary': true,\n 'min-h-40': this.tableDensity === SulaTableDensity.Compact,\n 'min-h-44': this.tableDensity === SulaTableDensity.Default,\n 'min-h-48': this.tableDensity === SulaTableDensity.Spaced,\n 'min-h-56': this.tableDensity === SulaTableDensity.Confortable,\n }}\n >\n <slot></slot>\n </div>\n </th>\n </Host>\n );\n }\n}\n",null,"import { Component, Element, Host, h } from '@stencil/core';\nimport { replaceHostWithRenderedElement } from '../../utils/replace-host-with-rendered-element';\n\n@Component({\n tag: 'sula-table-header',\n styleUrl: 'sula-table-header.scss',\n shadow: false,\n})\nexport class SulaTableHeader {\n @Element() host!: HTMLElement;\n\n componentDidLoad() {\n replaceHostWithRenderedElement(this.host, 'thead');\n }\n\n render() {\n return (\n <Host>\n <thead>\n <slot></slot>\n </thead>\n </Host>\n );\n }\n}\n",null,"import { Component, Element, Host, h } from '@stencil/core';\nimport { replaceHostWithRenderedElement } from '../../utils/replace-host-with-rendered-element';\n\n@Component({\n tag: 'sula-table-row',\n styleUrl: 'sula-table-row.scss',\n shadow: false,\n})\nexport class SulaTableRow {\n @Element() host!: HTMLElement;\n\n componentDidLoad() {\n replaceHostWithRenderedElement(this.host, 'tr');\n }\n\n render() {\n return (\n <Host>\n <tr>\n <slot></slot>\n </tr>\n </Host>\n );\n }\n}\n","export enum SulaTagSize {\n Small = 'small',\n Default = 'default',\n}\n\nexport enum SulaTagIconStatus {\n Success = 'success',\n Warning = 'warning',\n Error = 'error',\n Info = 'info',\n}\n\nexport enum SulaTagAppearance {\n Brand = 'brand',\n Bordered = 'bordered',\n LightBlue = 'light-blue', \n LightBrand = 'light-brand',\n Negative = 'negative',\n OpacityGrey = 'opacity-grey',\n OpacityWhite = 'opacity-white',\n}\n\nexport enum SulaTagFontWeight {\n Normal = 'normal',\n Bold = 'bold',\n}\n",":host {\n display: block;\n}\n","import { Component, Host, Prop, h } from '@stencil/core';\nimport { SulaTagAppearance, SulaTagFontWeight, SulaTagIconStatus, SulaTagSize } from './model/sula-tag.model';\n\n@Component({\n tag: 'sula-tag',\n styleUrl: 'sula-tag.scss',\n shadow: true,\n})\nexport class SulaTag {\n /**\n * Tag label\n */\n @Prop({ mutable: true })\n label: string = '';\n\n /**\n * Tag icon\n */\n @Prop({ mutable: true })\n icon: string = '';\n\n /**\n * Tag icon status\n */\n @Prop({ mutable: true })\n iconStatus: SulaTagIconStatus = SulaTagIconStatus.Success;\n\n /**\n * Tag size\n */\n @Prop({ mutable: true })\n size: SulaTagSize = SulaTagSize.Default;\n\n /**\n * Tag appearance\n */\n @Prop({ mutable: true })\n appearance: SulaTagAppearance = SulaTagAppearance.Bordered;\n\n /**\n * Tag font weight\n */\n @Prop({ mutable: true })\n fontWeight: SulaTagFontWeight = SulaTagFontWeight.Normal;\n\n getSizeClass() {\n const sizeStyles = {\n [SulaTagSize.Small]: 'px-8 py-4',\n [SulaTagSize.Default]: 'px-12 py-8',\n };\n\n return sizeStyles[this.size];\n }\n\n getAppearanceClass() {\n const appearanceStyles = {\n [SulaTagAppearance.Brand]: 'bg-brand-primary',\n [SulaTagAppearance.Bordered]: 'border-line-general border bg-transparent',\n [SulaTagAppearance.LightBlue]: 'bg-surface-on-body-blue',\n [SulaTagAppearance.LightBrand]: 'bg-surface-on-body-brand',\n [SulaTagAppearance.Negative]: 'bg-negative-negative-1',\n [SulaTagAppearance.OpacityGrey]: 'bg-opacity-on-body',\n [SulaTagAppearance.OpacityWhite]: 'bg-opacity-body',\n };\n return appearanceStyles[this.appearance];\n }\n\n getTextColorClass() {\n if (this.appearance === SulaTagAppearance.Brand) {\n return 'text-negative-negative-1';\n } else if (this.appearance === SulaTagAppearance.Negative) {\n return 'text-negative-negative-2';\n }\n\n return 'text-text-primary';\n }\n\n getTextWeightClass() {\n const fontWeightStyles = {\n [SulaTagFontWeight.Bold]: 'font-bold',\n [SulaTagFontWeight.Normal]: 'font-normal',\n };\n return fontWeightStyles[this.fontWeight];\n }\n\n getIconStatusClass() {\n const iconStatusStyles = {\n [SulaTagIconStatus.Success]: 'bg-feedback-success',\n [SulaTagIconStatus.Warning]: 'bg-feedback-alert',\n [SulaTagIconStatus.Error]: 'bg-feedback-error',\n [SulaTagIconStatus.Info]: 'bg-feedback-informational',\n };\n return iconStatusStyles[this.iconStatus];\n }\n\n render() {\n return (\n <Host>\n <div\n class={{\n 'flex items-center rounded-xxl w-fit': true,\n [this.getSizeClass()]: true,\n [this.getAppearanceClass()]: true,\n }}\n >\n {this.icon && (\n <div\n class={{\n 'flex justify-center items-center mr-8 rounded-full leading-4 px-2 py-1': true,\n [this.getIconStatusClass()]: true,\n }}\n >\n <sula-icon icon={this.icon} custom-class=\"text-base text-negative-negative-1 leading-4\"></sula-icon>\n </div>\n )}\n <span\n class={{\n 'text-base leading-4': true,\n [this.getTextColorClass()]: true,\n [this.getTextWeightClass()]: true,\n }}\n >\n {this.label}\n </span>\n </div>\n </Host>\n );\n }\n}\n","export enum SulaTextareaStatus {\n Default = 'default',\n Error = 'error',\n}\n",":host {\n display: block;\n width: 100%;\n}\n\n.textarea-focus {\n outline: 2px solid var(--color-feedback-informational) !important;\n outline-offset: 2px !important;\n}\n\n.textarea-error {\n outline: 2px solid var(--color-feedback-error) !important;\n outline-offset: 2px !important;\n}\n\n.active-label {\n width: calc(100% - 3rem);\n}\n\n.from-down {\n animation: from-down 0.2s ease-in-out;\n}\n\n.from-up {\n animation: from-up 0.2s ease-in-out;\n}\n\n@keyframes from-down {\n from {\n transform: translateY(75%);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n@keyframes from-up {\n from {\n transform: translateY(-75%);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n}\n","import { Component, Event, EventEmitter, Host, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport { SulaTextareaStatus } from './model/sula-textarea.model';\n\n@Component({\n tag: 'sula-textarea',\n styleUrl: 'sula-textarea.scss',\n shadow: true,\n})\nexport class SulaTextarea {\n /**\n * Value for the textarea.\n */\n @Prop({ mutable: true })\n value?: string;\n\n /**\n * The textarea status\n */\n @Prop({ mutable: true }) status: SulaTextareaStatus = SulaTextareaStatus.Default;\n\n /**\n * The textarea label\n */\n @Prop() label: string;\n\n /**\n * The textarea placeholder\n */\n @Prop() placeholder: string;\n\n /**\n * The textarea is disabled\n */\n @Prop({ mutable: true }) disabled: boolean;\n\n /**\n * The help text for textarea\n */\n @Prop() helpText?: string;\n\n /**\n * The textarea max length\n */\n @Prop() maxLength?: number;\n\n /**\n * The textarea rows (height)\n */\n @Prop() rows: number = 4;\n\n /**\n * Event emitted when textarea value changes.\n */\n @Event()\n valueChanged: EventEmitter<string>;\n\n /**\n * Event emitted when textarea is focused.\n */\n @Event()\n focusedOn: EventEmitter<void>;\n\n /**\n * Event emitted when textarea is focused out.\n */\n @Event()\n focusedOut: EventEmitter<void>;\n\n @State()\n isActive = false;\n\n @State()\n textValue: string = '';\n\n @State()\n textareaIsFocused = false;\n\n @State()\n labelPadding: number = 6;\n\n @Watch('value')\n watchValueHandler(newValue: string) {\n this.textValue = newValue;\n\n if (this.textareaElement && this.textareaElement.value !== newValue) {\n const cursorPosition = this.textareaElement.selectionStart;\n this.textareaElement.value = newValue || '';\n\n if (this.textareaIsFocused && cursorPosition !== null) {\n const newPosition = Math.min(cursorPosition, (newValue || '').length);\n this.textareaElement.setSelectionRange(newPosition, newPosition);\n }\n }\n\n if (newValue && newValue.trim().length > 0) {\n this.setLabelUp();\n } else if (!this.textareaIsFocused) {\n this.setLabelDown();\n }\n }\n\n textareaElement: HTMLTextAreaElement;\n\n node?: HTMLElement;\n\n activeLabelElement: HTMLLabelElement;\n labelElement: HTMLLabelElement;\n\n @Listen('click', { target: 'document' })\n handleClick(event: Event) {\n if (!this.node || !this.textareaIsFocused) return;\n\n const clickInside = this.node.contains(event.target as Node);\n\n if (!clickInside && (!this.textValue || this.textValue.trim().length === 0)) {\n this.setLabelDown();\n this.focusedOut.emit();\n this.textareaIsFocused = false;\n }\n }\n\n focusOnTextarea() {\n setTimeout(() => {\n this.textareaElement.focus();\n }, 0);\n }\n\n componentWillLoad() {\n if (this.value && this.value.trim().length > 0) {\n this.textValue = this.value;\n this.isActive = true;\n this.updateLabelPadding();\n }\n }\n\n componentDidLoad() {\n if (this.value && this.value.trim().length > 0) {\n this.changeElementsStyle();\n }\n }\n\n setLabelUp() {\n if (!this.isActive) {\n this.isActive = true;\n }\n this.changeElementsStyle();\n this.updateLabelPadding();\n }\n\n setLabelDown() {\n if (this.isActive && (!this.textValue || this.textValue.trim().length === 0)) {\n this.isActive = false;\n }\n this.changeElementsStyle();\n }\n\n updateLabelPadding() {\n setTimeout(() => {\n if (this.activeLabelElement) {\n const labelHeight = this.activeLabelElement.offsetHeight;\n\n this.labelPadding = labelHeight;\n }\n });\n }\n\n changeElementsStyle() {\n if (!this.labelElement || !this.activeLabelElement) return;\n\n this.activeLabelElement.style.display = this.isActive ? 'flex' : 'none';\n this.labelElement.style.display = this.isActive ? 'none' : 'block';\n if (!this.isActive) {\n this.labelElement.classList.add('from-up');\n }\n }\n\n handleTextareaClick = () => {\n if (this.disabled) return;\n this.setLabelUp();\n this.focusOnTextarea();\n };\n\n handleTextareaChanges = (event: InputEvent) => {\n const newValue = (event.target as HTMLTextAreaElement).value;\n this.textValue = newValue;\n this.value = newValue;\n\n if (newValue.length > 0 || this.textareaIsFocused) {\n this.setLabelUp();\n }\n\n this.valueChanged.emit(newValue);\n };\n\n handleFocus = () => {\n if (this.disabled) return;\n\n this.setLabelUp();\n this.focusOnTextarea();\n };\n\n handleBlur = () => {\n if (!this.textValue || this.textValue.trim().length === 0) {\n this.setLabelDown();\n }\n\n this.focusedOut.emit();\n this.textareaIsFocused = false;\n };\n\n handleTextareaFocus = () => {\n this.focusedOn.emit();\n this.textareaIsFocused = true;\n this.setLabelUp();\n };\n\n render() {\n const containerHeight = this.rows * 24 + 48;\n\n return (\n <Host ref={node => (this.node = node)}>\n <div>\n <div\n id=\"textarea-container\"\n class={{\n 'relative border rounded-sm px-16 py-12 outline-none caret-brand-primary': true,\n 'textarea-focus': this.textareaIsFocused && !this.disabled && this.status === SulaTextareaStatus.Default,\n 'textarea-error': this.status === SulaTextareaStatus.Error && !this.disabled,\n 'bg-states-bg-disabled border-line-general cursor-not-allowed': this.disabled,\n 'bg-surface-body border-line-input cursor-text': !this.disabled,\n }}\n style={{ height: `${containerHeight}px` }}\n tabIndex={0}\n onFocus={this.handleFocus}\n onClick={this.handleTextareaClick}\n >\n <label\n class={{\n 'text-base top-16 left-12 absolute transition-all duration-200 ease-in-out pointer-events-none z-10 w-[85%]': true,\n 'text-text-primary': !this.disabled && (this.isActive || this.status === SulaTextareaStatus.Default),\n 'text-text-disabled': this.disabled,\n 'bg-surface-body': !this.disabled && this.isActive,\n }}\n ref={node => (this.labelElement = node)}\n >\n {this.label}\n </label>\n\n <label\n class={{\n 'absolute font-bold transition-all duration-200 ease-in-out pointer-events-none z-10 active-label hidden from-down': true,\n 'text-sm top-12 left-16': this.isActive,\n 'text-text-primary': !this.disabled && (this.isActive || this.status === SulaTextareaStatus.Default),\n 'text-text-disabled': this.disabled,\n 'bg-surface-body': !this.disabled && this.isActive,\n }}\n ref={node => (this.activeLabelElement = node)}\n >\n {this.label}\n </label>\n\n <textarea\n ref={node => (this.textareaElement = node)}\n placeholder={this.isActive ? this.placeholder : ''}\n rows={this.rows}\n maxLength={this.maxLength}\n disabled={this.disabled}\n class={{\n 'w-full h-full outline-none text-base bg-transparent border-none resize-none': true,\n 'text-text-primary': !this.disabled,\n 'text-text-disabled cursor-not-allowed overflow-hidden': this.disabled,\n }}\n style={{ paddingTop: this.isActive ? `${this.labelPadding}px` : '0' }}\n onInput={this.handleTextareaChanges}\n onFocus={this.handleTextareaFocus}\n onBlur={this.handleBlur}\n value={this.textValue}\n />\n </div>\n\n {(this.helpText || this.maxLength) && (\n <div class=\"flex justify-between items-center px-16 mt-4 text-sm\">\n {this.helpText && (\n <div\n id=\"textarea-help-text\"\n class={{\n 'text-text-primary': this.status === SulaTextareaStatus.Default && !this.disabled,\n 'text-feedback-error': this.status === SulaTextareaStatus.Error && !this.disabled,\n 'text-text-disabled': this.disabled,\n }}\n >\n {this.helpText}\n </div>\n )}\n {this.maxLength && (\n <div\n id=\"max-length-container\"\n class={{\n 'text-text-primary': this.status === SulaTextareaStatus.Default && !this.disabled,\n 'text-feedback-error': this.status === SulaTextareaStatus.Error && !this.disabled,\n 'text-text-disabled': this.disabled,\n }}\n >\n {this.textValue ? this.textValue.length : 0}/{this.maxLength}\n </div>\n )}\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define(factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.VMasker = factory();\n }\n}(this, function() {\n var DIGIT = \"9\",\n ALPHA = \"A\",\n ALPHANUM = \"S\",\n BY_PASS_KEYS = [9, 16, 17, 18, 36, 37, 38, 39, 40, 91, 92, 93],\n isAllowedKeyCode = function(keyCode) {\n for (var i = 0, len = BY_PASS_KEYS.length; i < len; i++) {\n if (keyCode == BY_PASS_KEYS[i]) {\n return false;\n }\n }\n return true;\n },\n mergeMoneyOptions = function(opts) {\n opts = opts || {};\n opts = {\n delimiter: opts.delimiter || \".\",\n lastOutput: opts.lastOutput,\n precision: opts.hasOwnProperty(\"precision\") ? opts.precision : 2,\n separator: opts.separator || \",\",\n showSignal: opts.showSignal,\n suffixUnit: opts.suffixUnit && (\" \" + opts.suffixUnit.replace(/[\\s]/g,'')) || \"\",\n unit: opts.unit && (opts.unit.replace(/[\\s]/g,'') + \" \") || \"\",\n zeroCents: opts.zeroCents\n };\n opts.moneyPrecision = opts.zeroCents ? 0 : opts.precision;\n return opts;\n },\n // Fill wildcards past index in output with placeholder\n addPlaceholdersToOutput = function(output, index, placeholder) {\n for (; index < output.length; index++) {\n if(output[index] === DIGIT || output[index] === ALPHA || output[index] === ALPHANUM) {\n output[index] = placeholder;\n }\n }\n return output;\n }\n ;\n\n var VanillaMasker = function(elements) {\n this.elements = elements;\n };\n\n VanillaMasker.prototype.unbindElementToMask = function() {\n for (var i = 0, len = this.elements.length; i < len; i++) {\n this.elements[i].lastOutput = \"\";\n this.elements[i].onkeyup = false;\n this.elements[i].onkeydown = false;\n\n if (this.elements[i].value.length) {\n this.elements[i].value = this.elements[i].value.replace(/\\D/g, '');\n }\n }\n };\n\n VanillaMasker.prototype.bindElementToMask = function(maskFunction) {\n var that = this,\n onType = function(e) {\n e = e || window.event;\n var source = e.target || e.srcElement;\n\n if (isAllowedKeyCode(e.keyCode)) {\n setTimeout(function() {\n that.opts.lastOutput = source.lastOutput;\n source.value = VMasker[maskFunction](source.value, that.opts);\n source.lastOutput = source.value;\n if (source.setSelectionRange && that.opts.suffixUnit) {\n source.setSelectionRange(source.value.length, (source.value.length - that.opts.suffixUnit.length));\n }\n }, 0);\n }\n }\n ;\n for (var i = 0, len = this.elements.length; i < len; i++) {\n this.elements[i].lastOutput = \"\";\n this.elements[i].onkeyup = onType;\n if (this.elements[i].value.length) {\n this.elements[i].value = VMasker[maskFunction](this.elements[i].value, this.opts);\n }\n }\n };\n\n VanillaMasker.prototype.maskMoney = function(opts) {\n this.opts = mergeMoneyOptions(opts);\n this.bindElementToMask(\"toMoney\");\n };\n\n VanillaMasker.prototype.maskNumber = function() {\n this.opts = {};\n this.bindElementToMask(\"toNumber\");\n };\n \n VanillaMasker.prototype.maskAlphaNum = function() {\n this.opts = {};\n this.bindElementToMask(\"toAlphaNumeric\");\n };\n\n VanillaMasker.prototype.maskPattern = function(pattern) {\n this.opts = {pattern: pattern};\n this.bindElementToMask(\"toPattern\");\n };\n\n VanillaMasker.prototype.unMask = function() {\n this.unbindElementToMask();\n };\n\n var VMasker = function(el) {\n if (!el) {\n throw new Error(\"VanillaMasker: There is no element to bind.\");\n }\n var elements = (\"length\" in el) ? (el.length ? el : []) : [el];\n return new VanillaMasker(elements);\n };\n\n VMasker.toMoney = function(value, opts) {\n opts = mergeMoneyOptions(opts);\n if (opts.zeroCents) {\n opts.lastOutput = opts.lastOutput || \"\";\n var zeroMatcher = (\"(\"+ opts.separator +\"[0]{0,\"+ opts.precision +\"})\"),\n zeroRegExp = new RegExp(zeroMatcher, \"g\"),\n digitsLength = value.toString().replace(/[\\D]/g, \"\").length || 0,\n lastDigitLength = opts.lastOutput.toString().replace(/[\\D]/g, \"\").length || 0\n ;\n value = value.toString().replace(zeroRegExp, \"\");\n if (digitsLength < lastDigitLength) {\n value = value.slice(0, value.length - 1);\n }\n }\n var number = value.toString().replace(/[\\D]/g, \"\"),\n clearDelimiter = new RegExp(\"^(0|\\\\\"+ opts.delimiter +\")\"),\n clearSeparator = new RegExp(\"(\\\\\"+ opts.separator +\")$\"),\n money = number.substr(0, number.length - opts.moneyPrecision),\n masked = money.substr(0, money.length % 3),\n cents = new Array(opts.precision + 1).join(\"0\")\n ;\n money = money.substr(money.length % 3, money.length);\n for (var i = 0, len = money.length; i < len; i++) {\n if (i % 3 === 0) {\n masked += opts.delimiter;\n }\n masked += money[i];\n }\n masked = masked.replace(clearDelimiter, \"\");\n masked = masked.length ? masked : \"0\";\n var signal = \"\";\n if(opts.showSignal === true) {\n signal = value < 0 || (value.startsWith && value.startsWith('-')) ? \"-\" : \"\";\n }\n if (!opts.zeroCents) {\n var beginCents = number.length - opts.precision,\n centsValue = number.substr(beginCents, opts.precision),\n centsLength = centsValue.length,\n centsSliced = (opts.precision > centsLength) ? opts.precision : centsLength\n ;\n cents = (cents + centsValue).slice(-centsSliced);\n }\n var output = opts.unit + signal + masked + opts.separator + cents;\n return output.replace(clearSeparator, \"\") + opts.suffixUnit;\n };\n\n VMasker.toPattern = function(value, opts) {\n var pattern = (typeof opts === 'object' ? opts.pattern : opts),\n patternChars = pattern.replace(/\\W/g, ''),\n output = pattern.split(\"\"),\n values = value.toString().replace(/\\W/g, \"\"),\n charsValues = values.replace(/\\W/g, ''),\n index = 0,\n i,\n outputLength = output.length,\n placeholder = (typeof opts === 'object' ? opts.placeholder : undefined)\n ;\n \n for (i = 0; i < outputLength; i++) {\n // Reached the end of input\n if (index >= values.length) {\n if (patternChars.length == charsValues.length) {\n return output.join(\"\");\n }\n else if ((placeholder !== undefined) && (patternChars.length > charsValues.length)) {\n return addPlaceholdersToOutput(output, i, placeholder).join(\"\");\n }\n else {\n break;\n }\n }\n // Remaining chars in input\n else{\n if ((output[i] === DIGIT && values[index].match(/[0-9]/)) ||\n (output[i] === ALPHA && values[index].match(/[a-zA-Z]/)) ||\n (output[i] === ALPHANUM && values[index].match(/[0-9a-zA-Z]/))) {\n output[i] = values[index++];\n } else if (output[i] === DIGIT || output[i] === ALPHA || output[i] === ALPHANUM) {\n if(placeholder !== undefined){\n return addPlaceholdersToOutput(output, i, placeholder).join(\"\");\n }\n else{\n return output.slice(0, i).join(\"\");\n }\n }\n }\n }\n return output.join(\"\").substr(0, i);\n };\n\n VMasker.toNumber = function(value) {\n return value.toString().replace(/(?!^-)[^0-9]/g, \"\");\n };\n \n VMasker.toAlphaNumeric = function(value) {\n return value.toString().replace(/[^a-z0-9 ]+/i, \"\");\n };\n\n return VMasker;\n}));\n",":host {\n display: block;\n}\n\n.button-focus {\n outline: 2px solid var(--color-feedback-informational) !important;\n outline-offset: 2px !important;\n}\n\n.button-error {\n outline: 2px solid var(--color-feedback-error) !important;\n outline-offset: 2px !important;\n}\n\n.from-down {\n animation: from-down 0.2s ease-in-out;\n}\n\n.from-up {\n animation: from-up 0.2s ease-in-out;\n}\n\n@keyframes from-down {\n from {\n transform: translateY(75%);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n}\n\n@keyframes from-up {\n from {\n transform: translateY(-75%);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n}\n","import { Component, Event, EventEmitter, Host, Listen, Prop, State, Watch, h } from '@stencil/core';\nimport { SulaTextfieldStatus, SulaTextfieldType } from './model/sula-textfield.model';\nimport VMasker from 'vanilla-masker';\n\n@Component({\n tag: 'sula-textfield',\n styleUrl: 'sula-textfield.scss',\n shadow: true,\n})\nexport class SulaTextfield {\n /**\n * Value for the input.\n */\n @Prop({ mutable: true })\n value?: string;\n\n /**\n * The textfield type\n */\n @Prop() type: SulaTextfieldType = SulaTextfieldType.Text;\n\n /**\n * The textfield status\n */\n @Prop({ mutable: true }) status: SulaTextfieldStatus = SulaTextfieldStatus.Default;\n\n /**\n * The textfield label\n */\n @Prop() label: string;\n\n /**\n * The textfield placeholder\n */\n @Prop() placeholder: string;\n\n /**\n * The textfield is disabled\n */\n @Prop({ mutable: true }) disabled: boolean;\n\n /**\n * The textfield is read only, blocking typing while keeping it focusable\n */\n @Prop() readOnly: boolean = false;\n\n /**\n * The help text for textfield\n */\n @Prop() helpText?: string;\n\n /**\n * The textfield max length\n */\n @Prop() maxLength?: number;\n\n /**\n * The textfield icon\n */\n @Prop() icon?: string;\n\n /**\n * Event emitted when input value changes.\n */\n @Event()\n valueChanged: EventEmitter<string>;\n\n /**\n * Event emitted when input value changes without mask pattern applied.\n */\n @Event()\n valueChangedWithoutMask: EventEmitter<string>;\n\n /**\n * The textfield mask pattern\n * The mask pattern should follow the VMasker pattern format\n * More info: https://github.com/vanilla-masker/vanilla-masker?tab=readme-ov-file#custom-pattern\n */\n @Prop()\n maskPattern?: string | string[];\n\n /**\n * Optional manual switch lengths used to switch between mask patterns.\n * If not provided, switch lengths are automatically inferred from `maskPattern`.\n *\n * - When number: switches between first and second pattern at this length\n * - When array: defines multiple switch points for multiple patterns\n * Example: [11, 14] means 0-11 uses first pattern, 12-14 uses second, 15+ uses third\n */\n @Prop()\n maskPatternSwitchMaxLength?: number | number[];\n\n /**\n * Event emitted when input is focused.\n */\n @Event()\n focusedOn: EventEmitter<void>;\n\n /**\n * Event emitted when input is focused out.\n */\n @Event()\n focusedOut: EventEmitter<void>;\n\n @State()\n inputIsOpen = false;\n\n @State()\n textValue: string = '';\n\n @State()\n showPassword = false;\n\n @State()\n inputIsFocused = false;\n\n @Watch('value')\n watchValueHandler(newValue: string) {\n const normalizedValue = newValue || '';\n this.textValue = normalizedValue;\n\n if (this.inputElement && this.inputElement.value !== normalizedValue) {\n const cursorPosition = this.inputElement.selectionStart;\n this.inputElement.value = normalizedValue;\n\n if (this.hasMaskPatternConfigured()) {\n this.handleInputMask(normalizedValue);\n this.textValue = this.inputElement.value;\n }\n\n if (this.inputIsFocused && cursorPosition !== null) {\n const newPosition = Math.min(cursorPosition, this.inputElement.value.length);\n this.inputElement.setSelectionRange(newPosition, newPosition);\n }\n }\n\n if (this.textValue && this.textValue.trim().length > 0) {\n this.inputIsOpen = true;\n this.changeElementsStyle();\n } else if (!this.inputIsFocused) {\n this.inputIsOpen = false;\n this.changeElementsStyle();\n }\n }\n\n @Watch('maskPattern')\n watchMaskPatternHandler() {\n this.syncMaskState();\n }\n\n @Watch('maskPatternSwitchMaxLength')\n watchMaskPatternSwitchMaxLengthHandler() {\n this.syncMaskState();\n }\n\n inputContainer: HTMLDivElement;\n inputElement: HTMLInputElement;\n labelElement: HTMLDivElement;\n\n node?: HTMLElement;\n\n @Listen('click', { target: 'document' })\n handleClick(event: Event) {\n if (!this.node || !this.inputIsFocused) return;\n\n const clickInside = event.composedPath().includes(this.node);\n\n if (!clickInside) {\n this.toggleOptions(false);\n this.focusedOut.emit();\n this.inputIsFocused = false;\n }\n }\n\n componentWillLoad() {\n if (this.value && this.value.trim().length > 0) {\n this.textValue = this.value;\n this.inputIsOpen = true;\n }\n }\n\n componentDidLoad() {\n if (this.value && this.value.trim().length > 0 && this.inputElement) {\n this.inputElement.value = this.value;\n this.textValue = this.value;\n }\n\n if (this.textValue && this.textValue.trim().length > 0) {\n this.changeElementsStyle();\n }\n\n if (this.hasMaskPatternConfigured() && this.inputElement) {\n this.handleInputMask();\n this.textValue = this.inputElement.value;\n this.value = this.inputElement.value;\n }\n }\n\n handleInputClick = () => {\n this.toggleOptions(true);\n };\n\n toggleOptions(inputIsOpen: boolean) {\n if ((this.inputIsOpen && this.textValue && this.textValue.length > 0) || this.disabled) return;\n\n this.inputIsOpen = inputIsOpen;\n this.changeElementsStyle();\n this.inputElement.focus();\n }\n\n changeElementsStyle() {\n if (!this.inputContainer || !this.labelElement) return;\n\n this.inputContainer.style.display = this.inputIsOpen ? 'flex' : 'none';\n this.labelElement.style.display = this.inputIsOpen ? 'none' : 'block';\n if (!this.inputIsOpen) {\n this.labelElement.classList.add('from-up');\n }\n }\n\n handleInputChanges = (event: InputEvent) => {\n const newValue = (event.target as HTMLInputElement).value;\n let valueToPersist = newValue;\n\n if (this.hasMaskPatternConfigured() && this.inputElement) {\n this.handleInputMask(newValue);\n valueToPersist = this.inputElement.value;\n }\n this.valueChangedWithoutMask.emit(valueToPersist.replace(/\\D/g, ''));\n this.textValue = valueToPersist;\n this.value = valueToPersist;\n\n this.valueChanged.emit(valueToPersist);\n };\n\n handleFocus = () => {\n if (this.disabled) return;\n this.toggleOptions(true);\n this.inputElement.focus();\n };\n\n handleBlur = () => {\n this.toggleOptions(false);\n\n this.focusedOut.emit();\n this.inputIsFocused = false;\n };\n\n handleInputFocus = () => {\n this.focusedOn.emit();\n this.inputIsFocused = true;\n };\n\n handleIconClick = (event: MouseEvent) => {\n if (this.type === SulaTextfieldType.Password) {\n event.stopPropagation();\n this.handlePasswordIconClicked();\n }\n };\n\n handleInputMask(inputValue?: string) {\n if (!this.inputElement) return;\n\n const valueWithoutMask = (inputValue ?? this.inputElement.value ?? '').replace(/[^a-zA-Z0-9]/g, '');\n const maskPattern = this.getMaskPatternByValueLength(valueWithoutMask, inputValue ?? this.inputElement.value ?? '');\n if (!maskPattern) return;\n\n VMasker(this.inputElement).unMask();\n this.inputElement.value = (VMasker as any).toPattern(valueWithoutMask, maskPattern);\n }\n\n private syncMaskState() {\n if (!this.inputElement) return;\n\n if (!this.hasMaskPatternConfigured()) {\n VMasker(this.inputElement).unMask();\n return;\n }\n\n this.handleInputMask();\n this.textValue = this.inputElement.value;\n this.value = this.inputElement.value;\n }\n\n private hasMaskPatternConfigured(): boolean {\n return this.getMaskPatterns().length > 0;\n }\n\n private getMaskPatterns(): string[] {\n if (Array.isArray(this.maskPattern)) {\n return this.maskPattern.map(pattern => pattern?.trim()).filter(Boolean);\n }\n\n if (typeof this.maskPattern === 'string' && this.maskPattern.trim().length > 0) {\n return [this.maskPattern.trim()];\n }\n\n return [];\n }\n\n private getMaskPatternByValueLength(inputValue?: string, rawInputValue?: string): string | undefined {\n const patterns = this.getMaskPatterns();\n if (patterns.length === 0) return undefined;\n if (patterns.length === 1) return patterns[0];\n\n const currentValueLength = (inputValue ?? '').length;\n const providedSwitchLengths = this.normalizeProvidedSwitchLengths();\n\n if (providedSwitchLengths.length === 0) {\n return this.getMaskPatternByAutoInference(patterns, currentValueLength, rawInputValue);\n }\n\n for (let i = 0; i < providedSwitchLengths.length; i++) {\n if (currentValueLength <= providedSwitchLengths[i]) {\n return patterns[Math.min(i, patterns.length - 1)];\n }\n }\n\n return patterns[patterns.length - 1];\n }\n\n private getMaskPatternByAutoInference(patterns: string[], currentValueLength: number, rawInputValue?: string): string {\n const capacities = patterns.map(pattern => (pattern.match(/[9AS]/g) || []).length);\n const eligibleCapacities = capacities.filter(capacity => capacity >= currentValueLength && capacity > 0);\n\n if (eligibleCapacities.length === 0) {\n return patterns[patterns.length - 1];\n }\n\n const selectedCapacity = Math.min(...eligibleCapacities);\n const candidateIndexes = capacities\n .map((capacity, index) => ({ capacity, index }))\n .filter(item => item.capacity === selectedCapacity)\n .map(item => item.index);\n\n if (candidateIndexes.length === 1) {\n return patterns[candidateIndexes[0]];\n }\n\n const rawLiterals = (rawInputValue ?? '').replace(/[a-zA-Z0-9]/g, '');\n if (rawLiterals.length > 0) {\n for (const candidateIndex of candidateIndexes) {\n const patternLiterals = patterns[candidateIndex].replace(/[9AS]/g, '');\n if (patternLiterals === rawLiterals) {\n return patterns[candidateIndex];\n }\n }\n }\n\n return patterns[candidateIndexes[0]];\n }\n\n private normalizeProvidedSwitchLengths(): number[] {\n if (Array.isArray(this.maskPatternSwitchMaxLength)) {\n return this.maskPatternSwitchMaxLength.filter(value => Number.isFinite(value) && value > 0).sort((a, b) => a - b);\n }\n\n if (typeof this.maskPatternSwitchMaxLength === 'number' && Number.isFinite(this.maskPatternSwitchMaxLength) && this.maskPatternSwitchMaxLength > 0) {\n return [this.maskPatternSwitchMaxLength];\n }\n\n return [];\n }\n\n handlePasswordIconClicked() {\n const cursorPosition = this.inputElement.selectionStart;\n const inputValue = this.inputElement.value;\n const inputType = this.showPassword ? SulaTextfieldType.Password : SulaTextfieldType.Text;\n\n this.inputElement.setAttribute('type', inputType);\n this.showPassword = !this.showPassword;\n\n setTimeout(() => {\n this.inputElement.value = inputValue;\n\n this.inputElement.setSelectionRange(cursorPosition, cursorPosition);\n }, 0);\n }\n\n getInputIcon() {\n if (this.type === SulaTextfieldType.Password) {\n return this.showPassword ? 'ph ph-eye' : 'ph ph-eye-slash';\n }\n\n return this.icon;\n }\n\n render() {\n return (\n <Host ref={node => (this.node = node)}>\n <div>\n <div\n id=\"button-container\"\n class={{\n 'flex items-center border rounded-sm px-16 outline-none h-[72px] caret-brand-primary': true,\n 'flex-row justify-between': !!this.icon || this.type === SulaTextfieldType.Password,\n 'button-focus': this.inputIsFocused && !this.disabled && this.status === SulaTextfieldStatus.Default,\n 'button-error': this.status === SulaTextfieldStatus.Error && !this.disabled,\n 'bg-states-bg-disabled border-line-general cursor-not-allowed': this.disabled,\n 'bg-surface-body border-line-input cursor-pointer': !this.disabled,\n }}\n tabIndex={0}\n onFocus={this.handleFocus}\n onClick={this.handleInputClick}\n >\n <div class={{ 'hidden flex-col w-full': true, 'pr-12': !!this.icon }} ref={node => (this.inputContainer = node)}>\n <label class={{ 'font-bold text-sm from-down': true, 'text-text-primary': !this.disabled, 'text-text-disabled': this.disabled }}>{this.label}</label>\n <input\n type={this.type}\n ref={node => (this.inputElement = node)}\n placeholder={this.placeholder}\n class={{ 'outline-none text-base bg-transparent': true, 'text-text-primary': !this.disabled, 'text-text-disabled': this.disabled }}\n onInput={this.handleInputChanges}\n onFocus={this.handleInputFocus}\n value={this.textValue}\n disabled={this.disabled}\n readOnly={this.readOnly}\n />\n </div>\n\n <div\n id=\"textfield-label\"\n class={{ 'text-base flex items-center': true, 'text-text-primary': !this.disabled, 'text-text-disabled': this.disabled }}\n ref={node => (this.labelElement = node)}\n >\n {this.label}\n </div>\n\n {(!!this.icon || this.type === SulaTextfieldType.Password) && (\n <div class=\"flex items-center justify-center\" onClick={this.handleIconClick}>\n <sula-icon icon={this.getInputIcon()} customClass={`text-2xl ${this.disabled ? 'text-icon-disabled' : 'text-icon-primary'}`} />\n </div>\n )}\n </div>\n\n {(this.helpText || this.maxLength) && !this.disabled && (\n <div class=\"flex justify-between items-center px-16 mt-4 text-sm\">\n {this.helpText && (\n <div\n id=\"textfield-help-text\"\n class={{ 'text-text-primary': this.status === SulaTextfieldStatus.Default, 'text-feedback-error': this.status === SulaTextfieldStatus.Error }}\n >\n {this.helpText}\n </div>\n )}\n {this.maxLength && (\n <div\n id=\"max-length-container\"\n class={{ 'text-text-primary': this.status === SulaTextfieldStatus.Default, 'text-feedback-error': this.status === SulaTextfieldStatus.Error }}\n >\n {this.textValue ? this.textValue.length : 0}/{this.maxLength}\n </div>\n )}\n </div>\n )}\n </div>\n </Host>\n );\n }\n}\n","export enum SulaTilesType {\n Rounded = 'rounded',\n Square = 'square',\n}\n\nexport enum SulaTilesSize {\n Default = 'default',\n Large = 'large',\n}\n",":host {\n display: block;\n}\n","import { Component, Event, EventEmitter, Host, Prop, h } from '@stencil/core';\nimport { SulaTilesSize, SulaTilesType } from './model/sula-tiles.model';\n\n@Component({\n tag: 'sula-tiles',\n styleUrl: 'sula-tiles.scss',\n shadow: true,\n})\nexport class SulaTiles {\n /**\n * Tiles type\n */\n @Prop() type: SulaTilesType = SulaTilesType.Rounded;\n\n /**\n * Tiles size\n */\n @Prop() size: SulaTilesSize = SulaTilesSize.Default;\n\n /**\n * Use ellipsis on tiles text\n */\n @Prop() ellipsis: boolean = false;\n\n /**\n * Tiles icon\n */\n @Prop() icon: string = '';\n\n /**\n * Tiles text\n */\n @Prop() text: string = '';\n\n /**\n * Tiles subtext\n */\n @Prop() subText: string = '';\n\n /**\n * Tiles is disabled\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Event emitted when tile is clicked.\n * @note If tile is disabled event won't be emitted\n */\n @Event()\n tileClicked: EventEmitter<void>;\n\n private readonly TILE_SIZES = {\n [SulaTilesSize.Default]: 'w-80 h-80',\n [SulaTilesSize.Large]: 'w-120 h-120',\n } as const;\n\n private readonly BASE_CLASSES = {\n container: 'flex w-[167px]',\n roundedContainer: 'flex-col justify-center items-center',\n squareContainer: 'rounded-md p-20',\n interactiveBackground:\n 'bg-surface-on-body hover:bg-states-empty-bg-hover active:bg-states-empty-bg-pressed outline-2 outline-offset-2 outline-feedback-informational cursor-pointer',\n disabledBackground: 'bg-states-bg-disabled',\n iconContainer: 'flex justify-center items-center leading-4',\n roundedIcon: 'rounded-full',\n textContainer: 'flex',\n ellipsisText: 'truncate overflow-hidden whitespace-nowrap',\n } as const;\n\n private get isRounded(): boolean {\n return this.type === SulaTilesType.Rounded;\n }\n\n private get isSquare(): boolean {\n return this.type === SulaTilesType.Square;\n }\n\n private get hasSubText(): boolean {\n return !!this.subText;\n }\n\n private get isInteractive(): boolean {\n return !this.disabled;\n }\n\n private getRoundedTileSize(): string {\n return this.TILE_SIZES[this.size] || this.TILE_SIZES[SulaTilesSize.Default];\n }\n\n private getContainerClasses(): Record<string, boolean> {\n return {\n [this.BASE_CLASSES.container]: true,\n [this.BASE_CLASSES.roundedContainer]: this.isRounded,\n [this.BASE_CLASSES.squareContainer]: this.isSquare,\n [this.BASE_CLASSES.interactiveBackground]: this.isSquare && this.isInteractive,\n [this.BASE_CLASSES.disabledBackground]: this.disabled && this.isSquare,\n 'items-center': this.isSquare && !this.hasSubText,\n 'flex-col items-start justify-end': this.isSquare && this.hasSubText,\n };\n }\n\n private getIconContainerClasses(): Record<string, boolean> {\n return {\n [this.BASE_CLASSES.iconContainer]: true,\n [this.BASE_CLASSES.roundedIcon]: this.isRounded,\n [this.BASE_CLASSES.interactiveBackground]: this.isRounded && this.isInteractive,\n [this.BASE_CLASSES.disabledBackground]: this.isRounded && this.disabled,\n [this.getRoundedTileSize()]: this.isRounded,\n };\n }\n\n private getTextContainerClasses(): Record<string, boolean> {\n return {\n [this.BASE_CLASSES.textContainer]: true,\n 'mt-8': this.isRounded,\n 'ml-12': this.isSquare && !this.hasSubText,\n 'flex-col mt-36 space-y-4': this.isSquare && this.hasSubText,\n 'max-w-full': this.ellipsis,\n };\n }\n\n private getTextClasses(isPrimary: boolean = true): Record<string, boolean> {\n return {\n 'text-base leading-4': true,\n 'font-bold': isPrimary,\n 'text-text-primary': isPrimary && this.isInteractive,\n 'text-text-secondary': !isPrimary && this.isInteractive,\n 'text-icon-disabled': this.disabled,\n [this.BASE_CLASSES.ellipsisText]: this.ellipsis,\n 'whitespace-normal': !this.ellipsis,\n };\n }\n\n private getIconClasses(): string {\n const baseClass = 'text-3xl';\n const colorClass = this.disabled ? 'text-icon-disabled' : 'text-icon-primary';\n return `${baseClass} ${colorClass}`;\n }\n\n private getTabIndex(condition: boolean): number | null {\n return condition && this.isInteractive ? 0 : null;\n }\n\n private renderIcon() {\n return (\n <div class={this.getIconContainerClasses()} tabIndex={this.getTabIndex(this.isRounded)}>\n <sula-icon icon={this.icon} customClass={this.getIconClasses()} />\n </div>\n );\n }\n\n private renderText() {\n return (\n <div class={this.getTextContainerClasses()}>\n <span class={this.getTextClasses(true)} title={this.ellipsis ? this.text : undefined}>\n {this.text}\n </span>\n {this.hasSubText && (\n <span class={this.getTextClasses(false)} title={this.ellipsis ? this.subText : undefined}>\n {this.subText}\n </span>\n )}\n </div>\n );\n }\n\n handleClick = () => {\n if (this.disabled) return;\n\n this.tileClicked.emit();\n };\n\n render() {\n return (\n <Host>\n <div class={this.getContainerClasses()} tabIndex={this.getTabIndex(this.isSquare)} onClick={this.handleClick}>\n {this.renderIcon()}\n {this.renderText()}\n </div>\n </Host>\n );\n }\n}\n","export interface SulaTimelineListItem {\n weekdayText?: SulaTimelineListItemWeekdayText;\n iconStatus?: SulaTimelineListItemIconStatus;\n title: string;\n message?: string;\n hasLink?: boolean;\n}\n\nexport interface SulaTimelineListItemWeekdayText {\n weekday: string;\n day: number;\n}\n\nexport enum SulaTimelineListItemIconStatus {\n Success = 'success',\n Error = 'error',\n Warning = 'warning',\n}\n",":host {\n display: block;\n}\n","import { Component, Event, EventEmitter, Host, Prop, h } from '@stencil/core';\nimport { SulaTimelineListItem, SulaTimelineListItemIconStatus } from './model/sula-timeline-list.model';\n\n@Component({\n tag: 'sula-timeline-list',\n styleUrl: 'sula-timeline-list.scss',\n shadow: true,\n})\nexport class SulaTimelineList {\n /**\n * Timeline list. (Can be use with weekday text or icon with status)\n */\n @Prop({ mutable: true })\n sulaTimelineList: SulaTimelineListItem[] = [];\n\n /**\n * Event emitted when item is clicked.\n */\n @Event()\n itemClicked: EventEmitter<SulaTimelineListItem>;\n\n handleItemClick = (item: SulaTimelineListItem) => {\n if (!item.hasLink) return;\n this.itemClicked.emit(item);\n };\n\n getIconBackgroundColorByStatus(status: SulaTimelineListItemIconStatus) {\n const iconColorByStatus = {\n [SulaTimelineListItemIconStatus.Success]: 'bg-surface-on-body-feedback-success',\n [SulaTimelineListItemIconStatus.Warning]: 'bg-surface-on-body-feedback-alert',\n [SulaTimelineListItemIconStatus.Error]: 'bg-surface-on-body-feedback-error',\n };\n\n return iconColorByStatus[status];\n }\n\n getIconByStatus(status: SulaTimelineListItemIconStatus) {\n const iconByStatus = {\n [SulaTimelineListItemIconStatus.Success]: 'ph ph-check-circle',\n [SulaTimelineListItemIconStatus.Warning]: 'ph ph-warning',\n [SulaTimelineListItemIconStatus.Error]: 'ph ph-warning-circle',\n };\n\n return iconByStatus[status];\n }\n\n getIconColorByStatus(status: SulaTimelineListItemIconStatus) {\n const iconByStatus = {\n [SulaTimelineListItemIconStatus.Success]: 'text-feedback-success',\n [SulaTimelineListItemIconStatus.Warning]: 'text-feedback-alert',\n [SulaTimelineListItemIconStatus.Error]: 'text-feedback-error',\n };\n\n return iconByStatus[status];\n }\n\n render() {\n return (\n <Host>\n <div class=\"flex flex-col bg-surface-on-body px-24 py-32 w-fit rounded-md\">\n {this.sulaTimelineList.map((item, index) => {\n const isLastItem = index === this.sulaTimelineList.length - 1;\n\n return (\n <div\n class={{\n 'relative timeline-item': true,\n 'cursor-pointer group': item.hasLink,\n }}\n onClick={() => this.handleItemClick(item)}\n >\n <div class=\"flex space-x-24 items-center justify-between flex-row w-full\">\n <div class=\"relative flex flex-row space-x-24 items-center\">\n <div class=\"relative\">\n <div\n class={{\n 'rounded-full h-56 w-56 bg-surface-body flex justify-center items-center relative z-10': true,\n 'p-6': !!item.iconStatus,\n }}\n >\n {item.weekdayText && (\n <div class=\"flex flex-col justify-center items-center space-y-4\">\n <span class=\"text-text-secondary text-xs leading-3\">{item.weekdayText.weekday}</span>\n <span class=\"text-xl leading-5 text-text-primary\">{item.weekdayText.day}</span>\n </div>\n )}\n\n {item.iconStatus && (\n <div\n class={{\n 'flex justify-center items-center w-44 h-44 rounded-full': true,\n [this.getIconBackgroundColorByStatus(item.iconStatus)]: true,\n }}\n >\n <div class=\"flex justify-center items-center leading-6 w-44\">\n <sula-icon icon={this.getIconByStatus(item.iconStatus)} customClass={`${this.getIconColorByStatus(item.iconStatus)} text-2xl`}></sula-icon>\n </div>\n </div>\n )}\n </div>\n </div>\n\n <div class=\"flex flex-col\">\n <span class=\"text-text-primary font-bold text-base leading-4\">{item.title}</span>\n {item.message && <span class=\"text-text-secondary text-base leading-4 mt-4\">{item.message}</span>}\n </div>\n </div>\n\n {item.hasLink && (\n <div\n class={{\n 'px-[6px] py-2 rounded-full leading-6 flex items-center justify-center margin-left': true,\n 'group-hover:bg-states-empty-bg-hover transition': item.hasLink,\n }}\n >\n <sula-icon icon=\"ph ph-caret-right\" customClass=\"text-2xl text-text-primary\"></sula-icon>\n </div>\n )}\n </div>\n\n {!isLastItem && <div class=\"absolute bg-surface-body left-[28px] top-56 w-2 h-full\"></div>}\n\n {!isLastItem && <div class=\"h-24\"></div>}\n </div>\n );\n })}\n </div>\n </Host>\n );\n }\n}\n",":host {\n display: block;\n}\n","import { Component, Event, EventEmitter, Host, Prop, h } from '@stencil/core';\nimport { SulaToggleEvent } from './model/sula-toggle.model';\n\n@Component({\n tag: 'sula-toggle',\n styleUrl: 'sula-toggle.scss',\n shadow: true,\n})\nexport class SulaToggle {\n /**\n * Whether the favorite is selected (filled heart)\n */\n @Prop({ mutable: true }) selected: boolean = false;\n\n /**\n * Whether the button is disabled\n */\n @Prop({ mutable: true }) buttonDisabled: boolean = false;\n\n /**\n * Icon name (Phosphor Icons) without the prefix.\n * @default 'heart'\n */\n @Prop() icon: string = 'heart';\n\n /**\n * Event emitted when the toggle button is clicked.\n * @note If button is disabled, the event won't be emitted\n */\n @Event()\n toggleClicked!: EventEmitter<SulaToggleEvent>;\n\n private getIconName(): string {\n return this.selected ? `ph-fill ph-${this.icon}` : `ph ph-${this.icon}`;\n }\n\n private getIconColorClass(): string {\n if (this.buttonDisabled) {\n return 'text-text-disabled';\n }\n return this.selected ? 'text-feedback-error' : 'text-icon-primary';\n }\n\n private getButtonClass() {\n const base = 'flex justify-center items-center w-[40px] h-[40px] p-8 rounded-xxl cursor-pointer transition-colors duration-200 ease-in-out focus:outline focus:outline-2 focus:outline-feedback-informational focus:outline-offset-2';\n\n if (this.buttonDisabled) {\n return `${base} bg-states-bg-disabled border-none cursor-not-allowed`;\n }\n\n return `${base} bg-surface-on-body hover:bg-states-empty-bg-hover active:bg-states-empty-bg-pressed`;\n }\n\n handleClick = () => {\n if (!this.buttonDisabled) {\n this.selected = !this.selected;\n this.toggleClicked.emit({ selected: this.selected });\n }\n };\n\n render() {\n return (\n <Host>\n <button\n id=\"favorite-button\"\n class={this.getButtonClass()}\n disabled={this.buttonDisabled}\n onClick={this.handleClick}\n aria-pressed={this.selected ? 'true' : 'false'}\n aria-label={this.selected ? 'Remover dos favoritos' : 'Adicionar aos favoritos'}\n >\n <sula-icon\n icon={this.getIconName()}\n customClass={`text-2xl ${this.getIconColorClass()} ${!this.buttonDisabled && !this.selected ? 'active:text-feedback-error' : ''}`}\n class=\"flex leading-6\"\n ></sula-icon>\n </button>\n </Host>\n );\n }\n}\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","export enum SulaTooltipPosition {\n Top = 'top',\n Bottom = 'bottom',\n Left = 'left',\n Right = 'right',\n}\n\nexport enum SulaTooltipTrigger {\n Icon = 'icon',\n Parent = 'parent',\n}\n\n","// O anel de foco é desenhado por um pseudo-elemento centralizado no gatilho,\n// então seu alinhamento não depende do box model nem das métricas do glifo.\n.tooltip-trigger {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 0;\n cursor: pointer;\n background: transparent;\n\n // Expande a caixa do gatilho (que abraça o ícone) em 2px por lado, então o\n // anel acompanha qualquer font-size do ícone mantendo folga simétrica.\n &::before {\n content: '';\n position: absolute;\n inset: -2px;\n box-sizing: border-box;\n border: 1px solid transparent;\n border-radius: 9999px;\n pointer-events: none;\n transition: border-color 200ms ease;\n }\n\n &.is-focused::before {\n border-color: var(--color-feedback-informational);\n }\n}\n\n// Arrow gerenciado pelo modifier \"arrow\" do Popper.js\n.tooltip-arrow,\n.tooltip-arrow::before {\n position: absolute;\n width: 8px;\n height: 8px;\n}\n\n.tooltip-arrow {\n visibility: hidden;\n}\n\n.tooltip-arrow::before {\n visibility: visible;\n content: '';\n background: var(--color-neutral-neutral-8);\n transform: rotate(45deg);\n}\n\n// Popper define data-popper-placement no .hint-bubble automaticamente\n.hint-bubble[data-popper-placement^='top'] > .tooltip-arrow {\n bottom: -4px;\n}\n\n.hint-bubble[data-popper-placement^='bottom'] > .tooltip-arrow {\n top: -4px;\n}\n\n.hint-bubble[data-popper-placement^='left'] > .tooltip-arrow {\n right: -4px;\n}\n\n.hint-bubble[data-popper-placement^='right'] > .tooltip-arrow {\n left: -4px;\n}\n","import { Component, Element, Host, Prop, Watch, h, State } from '@stencil/core';\nimport { createPopper } from '@popperjs/core';\nimport type { Instance as PopperInstance } from '@popperjs/core';\nimport { SulaTooltipPosition, SulaTooltipTrigger } from './model/sula-tooltip.model';\n\nconst MAX_TEXT_LENGTH = 300;\n\n@Component({\n tag: 'sula-tooltip',\n styleUrl: 'sula-tooltip.scss',\n shadow: true,\n})\nexport class SulaTooltip {\n @Element() el!: HTMLElement;\n\n /**\n * Tooltip hint text — max 300 characters\n */\n @Prop() text: string = '';\n\n /**\n * Tooltip position relative to trigger\n */\n @Prop() position: SulaTooltipPosition = SulaTooltipPosition.Top;\n\n /**\n * Icon class used as the tooltip trigger (Phosphor icon name)\n */\n @Prop() icon: string = 'ph ph-info';\n\n /**\n * Extra classes applied to the trigger icon\n */\n @Prop() iconClass: string = 'text-icon-primary text-[18px] leading-none';\n\n /**\n * When true, renders a focus ring (21.5×21.5px, 1px border) around the icon.\n */\n @Prop() focused: boolean = false;\n\n /**\n * Trigger mode.\n * - `'icon'` (default): the built-in info icon is the hover target.\n * - `'parent'`: the icon is hidden; the component stretches to fill the\n * parent element (which **must** have `position: relative`) and the hint\n * appears on hover of that parent.\n */\n @Prop() trigger: SulaTooltipTrigger = SulaTooltipTrigger.Icon;\n\n /**\n * When true, the hint bubble is rendered in a portal appended to\n * `document.body` instead of staying inside the component's local DOM\n * subtree. Use this when the tooltip lives inside a container that clips\n * overflow (e.g. `overflow-x-auto`/`overflow: hidden`, such as `sula-table`\n * cells) — those ancestors clip `position: fixed` descendants too, so the\n * bubble can get cut off or hidden behind other elements regardless of the\n * Popper.js `flip`/`preventOverflow` modifiers.\n */\n @Prop() appendToBody: boolean = false;\n\n @State() isVisible: boolean = false;\n\n private parentEl: HTMLElement | null = null;\n private hintEl: HTMLElement | null = null;\n private triggerEl: HTMLElement | null = null;\n private arrowEl: HTMLElement | null = null;\n private popperInstance: PopperInstance | null = null;\n private portalHost: HTMLDivElement | null = null;\n private portalShadow: ShadowRoot | null = null;\n private hintTextNode: Text | null = null;\n\n componentDidLoad() {\n // Ancestors like sula-table-cell replace their own host element with a\n // plain <td> synchronously in their own componentDidLoad, which moves\n // this element in the DOM. Defer setup to the next frame so it runs\n // after any such ancestor DOM moves have already settled.\n requestAnimationFrame(() => this.mount());\n }\n\n private mount() {\n if (this.trigger === SulaTooltipTrigger.Parent) {\n this.parentEl = this.el.parentElement;\n if (this.parentEl) {\n this.parentEl.addEventListener('mouseenter', this.handleMouseEnter);\n this.parentEl.addEventListener('mouseleave', this.handleMouseLeave);\n }\n }\n if (this.appendToBody) {\n this.createPortalHint();\n }\n this.initPopper();\n }\n\n disconnectedCallback() {\n if (this.parentEl) {\n this.parentEl.removeEventListener('mouseenter', this.handleMouseEnter);\n this.parentEl.removeEventListener('mouseleave', this.handleMouseLeave);\n this.parentEl = null;\n }\n if (this.popperInstance) {\n this.popperInstance.destroy();\n this.popperInstance = null;\n }\n this.destroyPortalHint();\n }\n\n @Watch('text')\n handleTextChange() {\n if (this.hintTextNode) {\n this.hintTextNode.textContent = this.displayText;\n }\n }\n\n /**\n * Builds the hint bubble outside of Stencil's own DOM subtree and appends\n * it to `document.body`, so ancestor containers with `overflow` set can no\n * longer clip it. The bubble's styles are copied from this component's own\n * shadow root (adopted stylesheets or `<style>` tags) into a dedicated\n * shadow root on the portal host to keep styling encapsulated.\n */\n private createPortalHint() {\n if (!this.displayText || this.portalHost) return;\n\n this.portalHost = document.createElement('div');\n this.portalShadow = this.portalHost.attachShadow({ mode: 'open' });\n this.copyStylesInto(this.portalShadow);\n\n this.hintEl = document.createElement('div');\n this.hintEl.setAttribute('role', 'tooltip');\n this.hintEl.className = this.getHintClasses();\n\n this.hintTextNode = document.createTextNode(this.displayText);\n this.hintEl.appendChild(this.hintTextNode);\n\n this.arrowEl = document.createElement('div');\n this.arrowEl.className = 'tooltip-arrow';\n this.arrowEl.setAttribute('data-popper-arrow', '');\n this.hintEl.appendChild(this.arrowEl);\n\n this.portalShadow.appendChild(this.hintEl);\n document.body.appendChild(this.portalHost);\n }\n\n private copyStylesInto(root: ShadowRoot) {\n const sourceRoot = this.el.shadowRoot;\n if (!sourceRoot) return;\n\n const adopted = (sourceRoot as unknown as { adoptedStyleSheets?: CSSStyleSheet[] }).adoptedStyleSheets;\n if (adopted?.length && 'adoptedStyleSheets' in root) {\n (root as unknown as { adoptedStyleSheets: CSSStyleSheet[] }).adoptedStyleSheets = adopted;\n } else {\n sourceRoot.querySelectorAll('style').forEach((style) => root.appendChild(style.cloneNode(true)));\n }\n }\n\n private destroyPortalHint() {\n this.portalHost?.remove();\n this.portalHost = null;\n this.portalShadow = null;\n this.hintTextNode = null;\n if (this.appendToBody) {\n this.hintEl = null;\n this.arrowEl = null;\n }\n }\n\n private initPopper() {\n const reference =\n this.trigger === SulaTooltipTrigger.Parent ? this.el.parentElement : this.triggerEl;\n if (!reference || !this.hintEl) return;\n\n if (this.popperInstance) {\n this.popperInstance.destroy();\n }\n\n this.popperInstance = createPopper(reference, this.hintEl, {\n placement: this.position as any,\n strategy: 'fixed',\n modifiers: [\n { name: 'offset', options: { offset: [0, 8] } },\n { name: 'arrow', options: { element: this.arrowEl } },\n { name: 'preventOverflow', options: { padding: 8 } },\n { name: 'flip' },\n ],\n });\n }\n\n private get displayText(): string {\n if (!this.text) return '';\n return this.text.length > MAX_TEXT_LENGTH\n ? this.text.slice(0, MAX_TEXT_LENGTH)\n : this.text;\n }\n\n private getIconClasses() {\n return this.focused ? 'tooltip-trigger is-focused' : 'tooltip-trigger';\n }\n\n private getHintClasses() {\n const baseClasses =\n 'hint-bubble fixed z-50 px-12 py-8 bg-neutral-neutral-8 text-neutral-neutral-1 text-sm rounded pointer-events-none leading-normal shadow-[0_4px_16px_rgba(0,0,0,0.24)] max-w-[200px] break-words';\n const visibilityClasses = this.isVisible ? 'opacity-100 visible' : 'opacity-0 invisible';\n return `${baseClasses} ${visibilityClasses} transition-[opacity,visibility] duration-200`;\n }\n\n private handleMouseEnter = () => {\n this.isVisible = true;\n this.syncPortalVisibility();\n this.popperInstance?.update();\n };\n\n private handleMouseLeave = () => {\n this.isVisible = false;\n this.syncPortalVisibility();\n };\n\n private syncPortalVisibility() {\n if (this.appendToBody && this.hintEl) {\n this.hintEl.className = this.getHintClasses();\n }\n }\n\n render() {\n const isParentMode = this.trigger === SulaTooltipTrigger.Parent;\n const hostClass = isParentMode\n ? 'absolute inset-0 pointer-events-none overflow-visible'\n : 'inline-block relative';\n\n return (\n <Host class={hostClass}>\n {!isParentMode && (\n <div\n class={this.getIconClasses()}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n role=\"button\"\n aria-label=\"Tooltip trigger\"\n ref={(el) => (this.triggerEl = el as HTMLElement)}\n >\n <sula-icon class=\"flex leading-[0]\" icon={this.icon} customClass={this.iconClass}></sula-icon>\n </div>\n )}\n\n {!this.appendToBody && this.displayText && (\n <div class={this.getHintClasses()} role=\"tooltip\" ref={(el) => (this.hintEl = el as HTMLElement)}>\n {this.displayText}\n <div class=\"tooltip-arrow\" data-popper-arrow ref={(el) => (this.arrowEl = el as HTMLElement)}></div>\n </div>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","ignoreList":[]}
|