PageSourceSearch

https://www.sublimearts.io/_next/static/chunks/04nv7cg-m4bbx.js?dpl=dpl_9wUF3VueoVhygYawV2TzoeaFtJ5k

js sublimearts.io collected 2026-10-03 20:02:32 UTC 169,379 bytes, 1 lines download raw bytes

1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,5050,41775,64936,12973,91947,46236,45641,e=>{"use strict";let t,r,i,a,n="u">typeof window,o=n?window:null,s=n?document:null,l={OBJECT:0,ATTRIBUTE:1,CSS:2,TRANSFORM:3,CSS_VAR:4},u={NUMBER:0,UNIT:1,COLOR:2,COMPLEX:3},d={NONE:0,AUTO:1,FORCE:2},c={replace:0,none:1,blend:2},g=Symbol(),p=Symbol(),m=Symbol(),b=Symbol(),h=Symbol(),f="var(",x=[],v=((i=new Map).set("x","translateX"),i.set("y","translateY"),i.set("z","translateZ"),i),w=["perspective","translateX","translateY","translateZ","rotate","rotateX","rotateY","rotateZ","scale","scaleX","scaleY","scaleZ","skew","skewX","skewY"],y=w.reduce((e,t)=>({...e,[t]:t+"("}),{}),T=()=>{},C=e=>e,_=/\)\s*[-.\d]/,k=/(^#([\da-f]{3}){1,2}$)|(^#([\da-f]{4}){1,2}$)/i,S=/rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/i,N=/rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(-?\d+|-?\d*.\d+)\s*\)/i,A=/hsl\(\s*(-?\d+|-?\d*.\d+)\s*,\s*(-?\d+|-?\d*.\d+)%\s*,\s*(-?\d+|-?\d*.\d+)%\s*\)/i,D=/hsla\(\s*(-?\d+|-?\d*.\d+)\s*,\s*(-?\d+|-?\d*.\d+)%\s*,\s*(-?\d+|-?\d*.\d+)%\s*,\s*(-?\d+|-?\d*.\d+)\s*\)/i,P=/[-+]?\d*\.?\d+(?:e[-+]?\d)?/gi,I=/^([-+]?\d*\.?\d+(?:e[-+]?\d+)?)([a-z]+|%)$/i,E=/([a-z])([A-Z])/g,z=/var\(\s*(--[\w-]+)(?:\s*,\s*([^)]+))?\s*\)/;e.s(["K",0,1e3,"compositionTypes",0,c,"cssVarPrefix",0,f,"cssVariableMatchRgx",0,z,"digitWithExponentRgx",0,P,"doc",0,s,"emptyArray",0,x,"emptyString",0,"","hexTestRgx",0,k,"hslExecRgx",0,A,"hslaExecRgx",0,D,"isBrowser",0,n,"isDomSymbol",0,p,"isRegisteredTargetSymbol",0,g,"isSvgSymbol",0,m,"lowerCaseRgx",0,E,"maxFps",0,240,"maxValue",0,1e12,"minValue",0,1e-11,"noop",0,T,"noopModifier",0,C,"proxyTargetSymbol",0,h,"relativeValuesExecRgx",0,/(\*=|\+=|-=)/,"rgbExecRgx",0,S,"rgbaExecRgx",0,N,"shortTransforms",0,v,"tickModes",0,d,"transformsFragmentStrings",0,y,"transformsSymbol",0,b,"tweenTypes",0,l,"unitsExecRgx",0,I,"validRgbHslRgx",0,_,"validTransforms",0,w,"valueTypes",0,u,"win",0,o],41775);let R={id:null,keyframes:null,playbackEase:null,playbackRate:1,frameRate:240,loop:0,reversed:!1,alternate:!1,autoplay:!0,persist:!1,duration:1e3,delay:0,loopDelay:0,ease:"out(2)",composition:c.replace,modifier:C,onBegin:T,onBeforeUpdate:T,onUpdate:T,onLoop:T,onPause:T,onComplete:T,onRender:T},L={current:null,root:s},M={defaults:R,precision:4,timeScale:1,tickThreshold:200,editor:null},W={version:"4.5.0",engine:null};n&&(o.AnimeJS||(o.AnimeJS=[]),o.AnimeJS.push(W)),e.s(["defaults",0,R,"globalVersions",0,W,"globals",0,M,"scope",0,L],64936);let U=e=>e.replace(E,"$1-$2").toLowerCase(),O=(e,t)=>0===e.indexOf(t),j=Date.now,q=Array.isArray,B=e=>e&&e.constructor===Object,V=e=>"number"==typeof e&&!isNaN(e),G=e=>"string"==typeof e,F=e=>"function"==typeof e,H=e=>void 0===e,J=e=>H(e)||null===e,$=e=>n&&e instanceof SVGElement,X=e=>k.test(e),K=e=>O(e,"rgb"),Y=e=>O(e,"hsl"),Q=e=>X(e)||(K(e)||Y(e))&&(")"===e[e.length-1]||!_.test(e)),Z=e=>!M.defaults.hasOwnProperty(e),ee=["opacity","rotate","overflow","color"],et=(e,t)=>{if(ee.includes(t))return!1;if(e.getAttribute(t)||t in e){if("scale"===t){let t=e.parentNode;return t&&"filter"===t.tagName}return!0}},er=Math.pow,ei=Math.sqrt,ea=Math.sin,en=Math.cos,eo=Math.abs,es=Math.exp,el=Math.floor,eu=Math.asin,ed=Math.PI,ec=Math.round,eg=(e,t,r)=>e<t?t:e>r?r:e,ep=(e,t)=>{if(t<0)return e;if(!t)return ec(e);let r=10**t;return ec(e*r)/r},em=(e,t,r)=>1===r?t:0===r?e:e+(t-e)*r,eb=e=>e===1/0?1e12:e===-1/0?-1e12:e,eh=e=>e<=1e-11?1e-11:eb(ep(e,11)),ef=e=>q(e)?[...e]:e,ex=(e,t)=>{let r={...e};for(let i in t){let a=e[i];r[i]=H(a)?t[i]:a}return r},ev=(e,t,r,i="_prev",a="_next")=>{let n=e._head,o=a;for(r&&(n=e._tail,o=i);n;){let e=n[o];t(n),n=e}},ew=(e,t,r="_prev",i="_next")=>{let a=t[r],n=t[i];a?a[i]=n:e._head=n,n?n[r]=a:e._tail=a,t[r]=null,t[i]=null},ey=(e,t,r,i="_prev",a="_next")=>{let n=e._tail;for(;n&&r&&r(n,t);)n=n[i];let o=n?n[a]:e._head;n?n[a]=t:e._head=t,o?o[i]=t:e._tail=t,t[i]=n,t[a]=o};function eT(e){let t=G(e)?L.root.querySelectorAll(e):e;if(t instanceof NodeList||t instanceof HTMLCollection)return t}function eC(e){let t=function(e){if(J(e))return[];if(!n)return q(e)&&e.flat(1/0)||[e];if(q(e)){let t=e.flat(1/0),r=[];for(let e=0,i=t.length;e<i;e++){let i=t[e];if(!J(i)){let e=eT(i);if(e)for(let t=0,i=e.length;t<i;t++){let i=e[t];if(!J(i)){let e=!1;for(let t=0,a=r.length;t<a;t++)if(r[t]===i){e=!0;break}e||r.push(i)}}else{let e=!1;for(let t=0,a=r.length;t<a;t++)if(r[t]===i){e=!0;break}e||r.push(i)}}}return r}let t=eT(e);return t?Array.from(t):[e]}(e),r=t.length;for(let e=0;e<r;e++){let r=t[e];if(!r[g]){r[g]=!0;let e=$(r);(r.nodeType||e)&&(r[p]=!0,r[m]=e,r[b]={})}}return t}e.s(["PI",0,ed,"abs",0,eo,"addChild",0,ey,"asin",0,eu,"clamp",0,eg,"clampInfinity",0,eb,"cloneArray",0,ef,"cos",0,en,"exp",0,es,"floor",0,el,"forEachChildren",0,ev,"isArr",0,q,"isCol",0,Q,"isFnc",0,F,"isHex",0,X,"isHsl",0,Y,"isKey",0,Z,"isNil",0,J,"isNum",0,V,"isObj",0,B,"isRgb",0,K,"isStr",0,G,"isSvg",0,$,"isUnd",0,H,"isValidSVGAttribute",0,et,"lerp",0,em,"mergeObjects",0,ex,"normalizeTime",0,eh,"now",0,j,"parseNumber",0,e=>G(e)?parseFloat(e):e,"pow",0,er,"removeChild",0,ew,"round",0,ep,"sin",0,ea,"sqrt",0,ei,"stringStartsWith",0,O,"toLowerCase",0,U],12973),e.s(["registerTargets",0,eC],91947);let e_=[];function ek(e,t){if(!e)return null;let r=e_.length;e:for(let i=0;i<r;i++){let r=e_[i];if(r.detect&&!r.detect(e))continue;let a=r.targetAdapters;for(let r=0,i=a.length;r<i;r++){let i=a[r];if(i.detect(e)){let r=i.props[t];if(r&&(!r.gate||r.gate(e)))return r;break e}}}for(let i=0;i<r;i++){let r=e_[i];if(r.detect&&!r.detect(e))continue;let a=r.propertyResolvers;for(let r=0,i=a.length;r<i;r++){let i=a[r](e,t);if(i)return i}}return null}let eS=e=>{let t="";for(let r=0,i=w.length;r<i;r++){let i=w[r],a=e[i];if(void 0!==a){if("translateX"===i){let i=e.translateY;if(void 0!==i){let n=e.translateZ;void 0!==n?(t+=`translate3d(${a},${i},${n}) `,r+=2):(t+=`translate(${a},${i}) `,r+=1);continue}}if("scaleX"===i&&void 0===e.scale){let i=e.scaleY;if(void 0!==i){let n=e.scaleZ;void 0!==n?(t+=`scale3d(${a},${i},${n}) `,r+=2):(t+=`scale(${a},${i}) `,r+=1);continue}}t+=`${y[i]}${a}) `}"rotateZ"===i&&void 0!==e.rotate3d&&(t+=`rotate3d(${e.rotate3d}) `)}return void 0!==e.matrix&&(t+=`matrix(${e.matrix}) `),void 0!==e.matrix3d&&(t+=`matrix3d(${e.matrix3d}) `),t},eN=(e,t,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?e+(t-e)*6*r:r<.5?t:r<2/3?e+(t-e)*(2/3-r)*6:e),eA=(e,t)=>
1H(e)?t:e,eD=(e,t)=>{let r=e.match(z),i=t[p]?t:document.documentElement,a=getComputedStyle(i)?.getPropertyValue(r[1]);return(!a||""===a.trim())&&r[2]&&(a=r[2].trim()),a||0},eP=(e,t,r,i,a,n)=>{if(F(e)){if(!a){let a=e(t,r,i,n);return isNaN(+a)?a||0:+a}let o=()=>{let a=e(t,r,i,n);return isNaN(+a)?a||0:+a};return a.func=o,o()}if(G(e)&&O(e,f)){if(!a)return eD(e,t);let r=()=>eD(e,t);return a.func=r,r()}return e},eI=(e,t)=>e[p]?e[m]&&et(e,t)?l.ATTRIBUTE:w.includes(t)||v.get(t)?l.TRANSFORM:O(t,"--")?l.CSS_VAR:t in e.style?l.CSS:t in e?l.OBJECT:l.ATTRIBUTE:l.OBJECT,eE=(e,t,r)=>{let i=e.style[t];i&&r&&(r[t]=i);let a=i||getComputedStyle(e[h]||e).getPropertyValue(t);return"auto"===a?"0":a},ez=(e,t,r,i)=>{let a=H(r)?eI(e,t):r,n=ek(e,t);if(n){let r=n.get(e);return r&&i&&(i[t]=r),null==r?0:r}if(a===l.OBJECT){let r=e[t];return r&&i&&(i[t]=r),r||0}if(a===l.ATTRIBUTE){let r=e.getAttribute(t);return r&&i&&(i[t]=r),r}return a===l.TRANSFORM?((e,t,r)=>{let i=e.style.transform;if(i){let a,n=e[b],o=0,s=i.length;for(;o<s;){for(;o<s&&32===i.charCodeAt(o);)o++;if(o>=s)break;let e=o;for(;o<s&&40!==i.charCodeAt(o);)o++;if(o>=s)break;let t=i.substring(e,o),r=1,l=o+1,u=-1,d=-1;for(o++;o<s&&r>0;){let e=i.charCodeAt(o);40===e?r++:41===e?r--:44===e&&1===r&&(-1===u?u=o:-1===d&&(d=o)),o++}let c=o-1;"translate"===t||"translate3d"===t?(-1===u?n.translateX=i.substring(l,c).trim():(n.translateX=i.substring(l,u).trim(),-1===d?n.translateY=i.substring(u+1,c).trim():(n.translateY=i.substring(u+1,d).trim(),n.translateZ=i.substring(d+1,c).trim())),a=i.substring(l,c)):"scale"===t||"scale3d"===t?-1===u?n.scale=i.substring(l,c).trim():(n.scaleX=i.substring(l,u).trim(),-1===d?n.scaleY=i.substring(u+1,c).trim():(n.scaleY=i.substring(u+1,d).trim(),n.scaleZ=i.substring(d+1,c).trim())):n[t]=i.substring(l,c)}if("translate3d"===t&&a)return r&&(r[t]=a),a;let l=n[t];if(!H(l))return r&&(r[t]=l),l}return"translate3d"===t?"0px, 0px, 0px":"rotate3d"===t?"0, 0, 0, 0deg":O(t,"scale")?"1":O(t,"rotate")||O(t,"skew")?"0deg":"0px"})(e,t,i):a===l.CSS_VAR?eE(e,t,i).trimStart():eE(e,t,i)},eR=(e,t,r)=>"-"===r?e-t:"+"===r?e+t:e*t,eL=()=>({t:u.NUMBER,n:0,u:null,o:null,d:null,s:null}),eM=(e,t)=>{if(t.t=u.NUMBER,t.n=0,t.u=null,t.o=null,t.d=null,t.s=null,!e)return t;let r=+e;if(!isNaN(r))return t.n=r,t;let i=e;"="===i[1]&&(t.o=i[0],i=i.slice(2));let a=!i.includes(" ")&&I.exec(i);if(a)return t.t=u.UNIT,t.n=+a[1],t.u=a[2],t;if(t.o)return t.n=+i,t;if(Q(i)){var n;let e,r,a,o;return t.t=u.COLOR,t.d=K(n=i)?(r=H((e=S.exec(n)||N.exec(n))[4])?1:+e[4],[+e[1],+e[2],+e[3],r]):X(n)?(o=4===(a=n.length)||5===a,[+("0x"+n[1]+n[o?1:2]),+("0x"+n[o?2:3]+n[o?2:4]),+("0x"+n[o?3:5]+n[o?3:6]),5===a||9===a?+(("0x"+n[o?4:7]+n[o?4:8])/255).toFixed(3):1]):Y(n)?(e=>{let t,r,i,a=A.exec(e)||D.exec(e),n=a[1]/360,o=a[2]/100,s=a[3]/100,l=H(a[4])?1:+a[4];if(0===o)t=r=i=s;else{let e=s<.5?s*(1+o):s+o-s*o,a=2*s-e;t=ep(255*eN(a,e,n+1/3),0),r=ep(255*eN(a,e,n),0),i=ep(255*eN(a,e,n-1/3),0)}return[t,r,i,l]})(n):[0,0,0,1],t}{let e=i.match(P);return t.t=u.COMPLEX,t.d=e?e.map(Number):[],t.s=i.split(P)||[],t}},eW=(e,t)=>(t.t=e._valueType,t.n=e._toNumber,t.u=e._unit,t.o=null,t.d=ef(e._toNumbers),t.s=ef(e._strings),t),eU=eL(),eO=(e,t,r)=>{let i=e._modifier,a=e._fromNumbers,n=e._toNumbers,o=e._strings,s=o[0];for(let l=0,u=n.length;l<u;l++){let u=i(ep(em(a[l],n[l],t),r)),d=o[l+1];s+=`${d?u+d:u}`,e._numbers[l]=u}return s};e.s(["composeComplexValue",0,eO,"createDecomposedValueTargetObject",0,eL,"decomposeRawValue",0,eM,"decomposeTweenValue",0,eW,"decomposedOriginalValue",0,eU,"getFunctionValue",0,eP,"getOriginalAnimatableValue",0,ez,"getRelativeValue",0,eR,"getTweenType",0,eI,"setValue",0,eA],46236);let ej={},eq=(e,t,r)=>{if(r===l.TRANSFORM)return v.get(e)||e;if(!(r===l.CSS||r===l.ATTRIBUTE&&$(t)&&e in t.style))return e;{let t=ej[e];if(t)return t;{let t=e?U(e):e;return ej[e]=t,t}}},eB=(e,t=!1)=>(e._hasChildren?ev(e,e=>eB(e,t),!0):(e.pause(),ev(e,r=>{let i=r.property,a=r.target,n=r._tweenType,o=r._inlineValue,s=J(o)||""===o;if(r._setter){if(!t&&!s){if(eM(o,eU),eU.d){let e=eU.d,t=r._numbers;for(let r=0,i=e.length;r<i;r++)t[r]=e[r]}else r._number=eU.n;r._setter(r.target,r._number,r)}}else if(n===l.OBJECT)t||s||(a[i]=o);else if(a[p])if(n===l.ATTRIBUTE)t||(s?a.removeAttribute(i):a.setAttribute(i,o));else{let e=a.style;if(n===l.TRANSFORM){let t=a[b];s?delete t[i]:t[i]=o,r._renderTransforms&&(Object.keys(t).length?e.transform=eS(t):e.removeProperty("transform"))}else s?e.removeProperty(U(i)):e[i]=o}
1a[p]&&e._tail===r&&e.targets.forEach(e=>{e.getAttribute&&""===e.getAttribute("style")&&e.removeAttribute("style")})})),e),eV={deg:1,rad:180/ed,turn:360},eG={},eF=(e,t,r,i=!1)=>{let a=t.u,n=t.n;if(t.t===u.UNIT&&a===r)return t;let o=n+a+r,l=eG[o];if(H(l)||i){let i;if(a in eV)i=n*eV[a]/eV[r];else{let t=e.cloneNode(),o=e.parentNode,l=o&&o!==s?o:s.body;l.appendChild(t);let u=t.style;u.width=100+a;let d=t.offsetWidth||100;u.width=100+r;let c=t.offsetWidth||100;l.removeChild(t),i=d/c*n}t.n=i,eG[o]=i}else t.n=l;return t.t,u.UNIT,t.u=r,t},eH=e=>e,eJ=(e=1.68)=>t=>er(t,+e),e$={in:e=>t=>e(t),out:e=>t=>1-e(1-t),inOut:e=>t=>t<.5?e(2*t)/2:1-e(-2*t+2)/2,outIn:e=>t=>t<.5?(1-e(1-2*t))/2:(e(2*t-1)+1)/2},eX=ed/2,eK=2*ed,eY={"":eJ,Quad:eJ(2),Cubic:eJ(3),Quart:eJ(4),Quint:eJ(5),Sine:e=>1-en(e*eX),Circ:e=>1-ei(1-e*e),Expo:e=>e?er(2,10*e-10):0,Bounce:e=>{let t,r=4;for(;e<((t=er(2,--r))-1)/11;);return 1/er(4,3-r)-7.5625*er((3*t-2)/22-e,2)},Back:(e=1.7)=>t=>(+e+1)*t*t*t-e*t*t,Elastic:(e=1,t=.3)=>{let r=eg(+e,1,10),i=eg(+t,1e-11,2),a=i/eK*eu(1/r),n=eK/i;return e=>0===e||1===e?e:-r*er(2,-10*(1-e))*ea((1-e-a)*n)}},eQ=(()=>{let e={linear:eH,none:eH};for(let t in e$)for(let r in eY){let i=eY[r],a=e$[t];e[t+r]=""===r||"Back"===r||"Elastic"===r?(e,t)=>a(i(e,t)):a(i)}return e})(),eZ={linear:eH,none:eH},e0=["steps(","irregular(","linear(","cubicBezier("],e5=e=>{if(G(e)){for(let t=0,r=e0.length;t<r;t++)if(O(e,e0[t]))return console.warn(`String syntax for \`ease: "${e}"\` has been removed from the core and replaced by importing and passing the easing function directly: \`ease: ${e}\``),eH}return F(e)?e:G(e)?(e=>{if(eZ[e])return eZ[e];if(-1>=e.indexOf("(")){let t=e$[e]||e.includes("Back")||e.includes("Elastic")?eQ[e]():eQ[e];return t?eZ[e]=t:eH}{let t=e.slice(0,-1).split("("),r=eQ[t[0]];return r?eZ[e]=r(...t[1].split(",")):eH}})(e):eH};e.s(["parseEase",0,e5],45641);let e2=(e,t,r,i,a)=>{let n=e.parent,o=e.duration,s=e.completed,g=e.iterationDuration,p=e.iterationCount,m=e._currentIteration,h=e._loopDelay,f=e._reversed,x=e._alternate,v=e._hasChildren,w=e._delay,y=e._currentTime,T=w+g,C=t-w,_=eg(y,-w,o),k=eg(C,-w,o),S=C-y,N=k>0,A=k>=o,D=o<=1e-11,P=a===d.FORCE,I=0,E=C,z=0;if(p>1){let t=g+(A?0:h),r=~~(k/t);e._currentIteration=eg(r,0,p),A&&e._currentIteration--,I=e._currentIteration%2,E=k-r*t||0}let R=f^(x&&I),L=e._ease,W=A?R?0:o:R?g-E:E;L&&(W=g*L(W/g)||0);let U=(n?n.backwards:C<y)?!R:!!R;if(e._currentTime=C,e._iterationTime=W,e.backwards=U,N&&!e.began?(e.began=!0,r||n&&(U||!n.began)||e.onBegin(e)):C<=0&&(e.began=!1),r||v||!N||e._currentIteration===m||e.onLoop(e),P||a===d.AUTO&&(t>=(n&&w>0?0:w)&&t<=T||t<=w&&_>w||t>=T&&_!==o)||W>=T&&_!==o||W<=w&&_>0&&!A||t<=_&&_===o&&s||A&&!s&&D){if(N&&(e.computeDeltaTime(_),r||e.onBeforeUpdate(e)),!v){let t,a,o,s,d=P||(U?-1*S:S)>=M.tickThreshold,g=ep(e._offset+(n?n._offset:0)+w+W,12),p=e._head,m=0;for(;p;){let e=p._composition,r=p._currentTime,n=p._changeDuration,h=p._absoluteStartTime+p._changeDuration,f=p._nextRep,x=p._prevRep,v=e!==c.none,w=x?x._absoluteStartTime+x._changeDuration:0,y=x&&x.parent!==p.parent,T=!f||f._isOverridden?h:f.parent===p.parent?h+f._delay:f._absoluteStartTime<f._absoluteUpdateStartTime?f._absoluteStartTime:f._absoluteUpdateStartTime;if((d||(r!==n||g<=T||x&&!y&&(!f||f.parent!==p.parent))&&(0!==r||g>=p._absoluteStartTime||y&&!p._hasFromValue&&!x._isOverridden&&g>=w||f&&!f._isOverridden&&f.parent===p.parent&&0!==f._currentTime&&W<f._startTime))&&(!x||y||W>=p._startTime)&&(!v||!p._isOverridden&&(!p._isOverlapped||g<=h)&&(!f||f._isOverridden||g<=T)&&(!x||x._isOverridden||(y?g>=p._absoluteStartTime||!p._hasFromValue&&g>=w:g>=w+p._delay)))){let r,d,g=p._currentTime=eg(W-p._startTime,0,n),h=p._ease(g/p._updateDuration),f=p._modifier,x=p._valueType,w=p._tweenType,y=w===l.OBJECT,T=x===u.NUMBER,C=T&&y||0===h||1===h?-1:M.precision;if(T)r=d=f(ep(em(p._fromNumber,p._toNumber,h),C));else if(x===u.UNIT)d=f(ep(em(p._fromNumber,p._toNumber,h),C)),r=`${d}${p._unit}`;else if(x===u.COLOR){let e=p._numbers,t=p._fromNumbers,a=p._toNumbers,n=1-h,o=t[0],s=t[1],l=t[2],u=a[0],d=a[1],c=a[2];e[0]=f(Math.sqrt(o*o*n+u*u*h)),e[1]=f(Math.sqrt(s*s*n+d*d*h)),e[2]=f(Math.sqrt(l*l*n+c*c*h)),e[3]=f(em(t[3],a[3],h)),(!p._setter||i)&&(r=`rgba(${ep(e[0],0)},${ep(e[1],0)},${ep(e[2],0)},${e[3]})`)}else x===u.COMPLEX&&(r=eO(p,h,C));if(v&&(p._number=d),i||e===c.blend)p._value=r;else{let e=p.property;t=p.target,p._setter?p._setter(t,d,p):y?t[e]=r:w===l.ATTRIBUTE?t.setAttribute(e,r):(a=t.style,w===l.TRANSFORM?(t!==o&&(o=t,s=t[b]),s[e]=r,m=1):w===l.CSS?a[e]=r:w===l.CSS_VAR&&a.setProperty(e,r)),N&&(z=1)}}else r&&x&&!y&&W<p._startTime&&(p._currentTime=0);
1m&&p._renderTransforms&&(a.transform=eS(s),m=0),p=p._next}!r&&z&&e.onRender(e)}!r&&N&&e.onUpdate(e)}return n&&D?!r&&(n.began&&!U&&C>0&&!s||U&&C<=1e-11&&s)&&(e.onComplete(e),e.completed=!U):N&&A?p===1/0?e._startTime+=e.duration:e._currentIteration>=p-1&&(e.paused=!0,!s&&!v&&(e.completed=!0,r||n&&(U||!n.began)||(e.onComplete(e),e._resolve(e)))):e.completed=!1,z},e1=(e,t,r,i,a)=>{let n=e._currentIteration;if(e2(e,t,r,i,a),e._hasChildren){let o=e.backwards,s=i?t:e._iterationTime,l=j(),u=0,c=!0;if(!i&&e._currentIteration!==n){let t=e.iterationDuration;ev(e,e=>{if(o){let i=e.duration,a=e._offset+e._delay;r||!(i<=1e-11)||a&&a+i!==t||e.onComplete(e)}else e.completed||e.backwards||!(e._currentTime<e.iterationDuration)||e2(e,t,r,1,d.FORCE),e.began=!1,e.completed=!1}),r||e.onLoop(e)}ev(e,t=>{let n=ep((s-t._offset)*t._speed,12);if(o&&n>t._delay+t.duration)return;let d=t._fps<e._fps?t.requestTick(l):a;u+=e2(t,n,r,i,d),!t.completed&&c&&(c=!1)},o),!r&&u&&e.onRender(e),(c||o)&&e._currentTime>=e.duration&&(e.paused=!0,!e.completed&&(e.completed=!0,r||(e.onComplete(e),e._resolve(e))))}};class e3{constructor(e=0){this.deltaTime=0,this._currentTime=e,this._lastTickTime=e,this._startTime=e,this._lastTime=e,this._frameDuration=1e3/240,this._fps=240,this._speed=1,this._hasChildren=!1,this._head=null,this._tail=null}get fps(){return this._fps}set fps(e){let t=+e,r=t<1e-11?1e-11:t;r>R.frameRate&&(R.frameRate=r),this._fps=r,this._frameDuration=1e3/r}get speed(){return this._speed}set speed(e){let t=+e;this._speed=t<1e-11?1e-11:t}requestTick(e){let t=this._frameDuration,r=e-this._lastTickTime,i=.25*t;return r+(i<4?i:4)<t?d.NONE:(this._lastTickTime=r>=t?e-r%t:e,d.AUTO)}computeDeltaTime(e){let t=e-this._lastTime;return this.deltaTime=t,this._lastTime=e,t}}let e6={animation:null,update:T},e4=n?requestAnimationFrame:setImmediate,e8=n?cancelAnimationFrame:clearImmediate,e9=(a=new class e extends e3{constructor(e){super(e),this.useDefaultMainLoop=!0,this.pauseOnDocumentHidden=!0,this.defaults=R,this.paused=!0,this.reqId=0}update(){let e=this._currentTime=j();if(this.requestTick(e)){this.computeDeltaTime(e);let t=this._speed,r=this._fps,i=this._head;for(;i;){let a=i._next;i.paused?(ew(this,i),this._hasChildren=!!this._tail,i._running=!1,i.completed&&!i._cancelled&&i.cancel()):e1(i,(e-i._startTime)*i._speed*t,0,0,i._fps<r?i.requestTick(e):d.AUTO),i=a}e6.update()}}wake(){return this.useDefaultMainLoop&&!this.reqId&&(this.requestTick(j()),this.reqId=e4(e7)),this}pause(){if(this.reqId)return this.paused=!0,te()}resume(){if(this.paused)return this.paused=!1,ev(this,e=>e.resetTime()),this.wake()}get speed(){return this._speed*(1===M.timeScale?1:1e3)}set speed(e){let t=e*M.timeScale;this._speed!==t&&(this._speed=t,ev(this,e=>e.speed=e._speed))}get timeUnit(){return 1===M.timeScale?"ms":"s"}set timeUnit(e){let t="s"===e,r=t?.001:1;if(M.timeScale!==r){M.timeScale=r,M.tickThreshold=200*r;let e=t?.001:1e3;this.defaults.duration*=e,this._speed*=e}}get precision(){return M.precision}set precision(e){M.precision=e}}(j()),n&&(W.engine=a,s.addEventListener("visibilitychange",()=>{a.pauseOnDocumentHidden&&(s.hidden?a.pause():a.resume())})),a),e7=()=>{e9._head?(e9.reqId=e4(e7),e9.update()):e9.reqId=0},te=()=>(e8(e9.reqId),e9.reqId=0,e9),tt={_rep:new WeakMap,_add:new Map},tr=(e,t,r="_rep")=>{let i=tt[r],a=i.get(e);return a||(a={},i.set(e,a)),a[t]?a[t]:a[t]={_head:null,_tail:null}},ti=(e,t)=>e._isOverridden||e._absoluteStartTime>t._absoluteStartTime,ta=e=>{e._isOverlapped=1,e._isOverridden=1,e._changeDuration=1e-11,e._currentTime=1e-11},tn=(e,t)=>{let r=e._composition;if(r===c.replace){let r=e._absoluteStartTime;ey(t,e,ti,"_prevRep","_nextRep");let i=e._prevRep;if(i){let t=i.parent,a=i._absoluteEndTime;if(e.parent.id!==t.id&&t.iterationCount>1&&a+(t.duration-t.iterationDuration)>r){ta(i);let e=i._prevRep;for(;e&&e.parent.id===t.id;)ta(e),e=e._prevRep}let n=e._absoluteUpdateStartTime;if(a>n){let e=i._startTime,t=ep(n-(a-(e+i._updateDuration))-e,12);i._changeDuration=t,i._currentTime=t,i._isOverlapped=1,t<1e-11&&ta(i)}let o=e.parent.parent;if(!o||o!==t.parent){let e=!0;if(ev(t,t=>{t._isOverlapped||(e=!1)}),e){let e=t.parent;if(e){let r=!0;ev(e,e=>{e!==t&&ev(e,e=>{e._isOverlapped||(r=!1)})}),r&&e.cancel()}else t.cancel()}}}}else if(r===c.blend){var i;let t,r=tr(e.target,e.property,"_add"),a=(i=tt._add,(t=e6.animation)||(e6.animation=t={duration:1e-11,computeDeltaT
1ime:T,_offset:0,_delay:0,_head:null,_tail:null},e6.update=()=>{i.forEach(e=>{for(let t in e){let r=e[t],i=r._head;if(i){let e=i._valueType,t=e===u.COMPLEX||e===u.COLOR?ef(i._fromNumbers):null,a=i._fromNumber,n=r._tail;for(;n&&n!==i;){if(t)for(let e=0,r=n._numbers.length;e<r;e++)t[e]+=n._numbers[e];else a+=n._number;n=n._prevAdd}i._toNumber=a,i._toNumbers=t}}}),e2(t,1,1,0,d.FORCE)}),t),n=r._head;n||((n={...e})._composition=c.replace,n._updateDuration=1e-11,n._startTime=0,n._numbers=ef(e._fromNumbers),n._number=0,n._next=null,n._prev=null,ey(r,n),ey(a,n));let o=e._toNumber;if(e._fromNumber=n._fromNumber-o,e._toNumber=0,e._numbers=ef(e._fromNumbers),e._number=0,n._fromNumber=o,e._toNumbers.length){let t=ef(e._toNumbers);t.forEach((t,r)=>{e._fromNumbers[r]=n._fromNumbers[r]-t,e._toNumbers[r]=0}),n._fromNumbers=t}ey(r,e,null,"_prevAdd","_nextAdd")}return e},to=e=>{let t=e._composition;if(t!==c.none){let r=e.target,i=e.property;if(ew(tt._rep.get(r)[i],e,"_prevRep","_nextRep"),t===c.blend){let t=tt._add,a=t.get(r);if(!a)return;let n=a[i],o=e6.animation;ew(n,e,"_prevAdd","_nextAdd");let s=n._head;if(s&&s===n._tail){ew(n,s,"_prevAdd","_nextAdd"),ew(o,s);let e=!0;for(let t in a)if(a[t]._head){e=!1;break}e&&t.delete(r)}}}return e},ts=e=>(e.paused=!0,e.began=!1,e.completed=!1,e),tl=e=>(e._cancelled&&(e._hasChildren?ev(e,tl):ev(e,e=>{e._composition!==c.none&&tn(e,tr(e.target,e.property))}),e._cancelled=0),e),tu=0,td=(e,t)=>e._priority>t._priority;class tc extends e3{constructor(e={},t=null,r=0){super(0),++tu;const{id:i,delay:a,duration:n,reversed:o,alternate:s,loop:l,loopDelay:u,autoplay:d,frameRate:c,playbackRate:g,priority:p,onComplete:m,onLoop:b,onPause:h,onBegin:f,onBeforeUpdate:x,onUpdate:v}=e;L.current&&L.current.register(this);const w=t?0:e9._lastTickTime,y=t?t.defaults:M.defaults,C=F(a)||H(a)?y.delay:+a,_=F(n)||H(n)?1/0:+n,k=eA(l,y.loop),S=eA(u,y.loopDelay);let N=!0===k||k===1/0||k<0?1/0:k+1,A=0;t?A=r:(e9.reqId||e9.requestTick(j()),A=(e9._lastTickTime-e9._startTime)*M.timeScale),this.id=H(i)?tu:i,this.parent=t,this.duration=eb((_+S)*N-S)||1e-11,this.backwards=!1,this.paused=!0,this.began=!1,this.completed=!1,this.onBegin=f||y.onBegin,this.onBeforeUpdate=x||y.onBeforeUpdate,this.onUpdate=v||y.onUpdate,this.onLoop=b||y.onLoop,this.onPause=h||y.onPause,this.onComplete=m||y.onComplete,this.iterationDuration=_,this.iterationCount=N,this._autoplay=!t&&eA(d,y.autoplay),this._offset=A,this._delay=C,this._loopDelay=S,this._iterationTime=0,this._currentIteration=0,this._resolve=T,this._running=!1,this._reversed=+eA(o,y.reversed),this._reverse=this._reversed,this._cancelled=0,this._alternate=eA(s,y.alternate),this._prev=null,this._next=null,this._lastTickTime=w,this._startTime=w,this._lastTime=w,this._fps=eA(c,y.frameRate),this._speed=eA(g,y.playbackRate),this._priority=+eA(p,1)}get cancelled(){return!!this._cancelled}set cancelled(e){e?this.cancel():this.reset(!0).play()}get currentTime(){return eg(ep(this._currentTime,M.precision),-this._delay,this.duration)}set currentTime(e){let t=this.paused;this.pause().seek(+e),t||this.resume()}get iterationCurrentTime(){return eg(ep(this._iterationTime,M.precision),0,this.iterationDuration)}set iterationCurrentTime(e){this.currentTime=this.iterationDuration*this._currentIteration+e}get progress(){return eg(ep(this._currentTime/this.duration,10),0,1)}set progress(e){this.currentTime=this.duration*e}get iterationProgress(){return eg(ep(this._iterationTime/this.iterationDuration,10),0,1)}set iterationProgress(e){let t=this.iterationDuration;this.currentTime=t*this._currentIteration+t*e}get currentIteration(){return this._currentIteration}set currentIteration(e){this.currentTime=this.iterationDuration*eg(+e,0,this.iterationCount-1)}get reversed(){return!!this._reversed}set reversed(e){e?this.reverse():this.play()}get speed(){return super.speed}set speed(e){super.speed=e,this.resetTime()}reset(e=!1){return tl(this),this._reversed&&!this._reverse&&(this.reversed=!1),this._iterationTime=this.iterationDuration,e1(this,0,1,~~e,d.FORCE),ts(this),this._hasChildren&&ev(this,ts),this}init(e=!1){this.fps=this._fps,this.speed=this._speed,!e&&this._hasChildren&&e1(this,this.duration,1,~~e,d.FORCE),this.reset(e);let t=this._autoplay;return!0===t?this.resume():t&&!H(t.linked)&&t.link(this),this}resetTime(){let e=1/(this._speed*e9._speed);return this._startTime=j()-(this._currentTime+this._delay)*e,this}pause(){return this.paused||(this.paused=!0,this.onPause(this)),this}resume(){return this.paused&&(this.paused=!1,this.duration<=1e-11&&!this._hasChildren?e1(this,1e-11,0,0,d.FORCE):(this._running||(ey(e9,this,td),e9._hasChildren=!0,this._running=!0),this.resetTime(),this._startTime-=12,e9.wake())),this}restart(){return this.reset().resume()}seek(e,t=0,r=0){tl(this),this.completed=!1;let i=this.paused;return this.paused=!0,e1(this,e+this._delay,~~t,~~r,d.AUTO),i?this:this.resume()}alternate(){let e=this._reversed,t=this.iterationCount,r=this.iterationDuration,i=t===1/0?el(1e12/r):t;return this._reversed=+(this._alternate&&!(i%2)?e:!e),t===1/0?this.iterationProgress=this._reversed?1-this.iterationProgress:this.iterationProgress:this.seek(r*i-this._currentTime),this.resetTime(),this}play(){return this._reversed&&this.alternate(),this.resume()}reverse(){return this._reversed||this.alternate(),this.resume()}cancel(){return this._hasChildren?ev(this,e=>e.cancel(),!0):ev(this,to),this._cancelled=1,this.pause()}stretch(e){let t=this.duration,r=eh(e);if(t===r)return this;let i=e/t,a=e<=1e-11;return this.duration=a?1e-11:r,this.iterationDuration=a?1e-11:eh(this.iterationDuration*i),this._offset*=i,this._delay*=i,this._loopDelay*=i,this}revert(){e1(this,0,1,0,d.AUTO);let e=this._autoplay;return e&&e.linked&&e.linked===this&&e.revert(),this.cancel()}complete(e=0){return this.seek(this.duration,e).cancel()}then(e=T){let t=this.then,r=()=>{this.then=null,e(this),this.then=t,this._resolve=T};return new Promise(e=>(this._resolve=()=>e(r()),this.completed&&this._resolve(),this))}}let tg=eL(),tp=eL(),tm={},tb={func:null},th={func:null},tf=[null],tx=[null,null],tv={to:null},tw=0,ty=0;class tT extends tc{constructor(e,i,a,n,o=!1,s=0,d){super(i,a,n),this._head,this._tail,++ty;const g=eC(e),p=g.length,m=i.keyframes,b=m?ex(((e,t)=>{let r={};if(q(e)){let t=[].concat(...e.map(e=>Object.keys(e))).filter(Z);for(let i=0,a=t.length;i<a;i++){let a=t[i],n=e.map(e=>{let t={};for(let r in e){let i=e[r];Z(r)?r===a&&(t.to=i):t[r]=i}return t});r[a]=n}}else{let i=eA(t.duration,M.defaults.duration);for(let t in Object.keys(e).map(t=>({o:parseFloat(t)/100,p:e[t]})).sort((e,t)=>
1e.o-t.o).forEach(e=>{let t=e.o,a=e.p;for(let e in a)if(Z(e)){let n=r[e];n||(n=r[e]=[]);let o=t*i,s=n.length,l=n[s-1],u={to:a[e]},d=0;for(let e=0;e<s;e++)d+=n[e].duration;1===s&&(u.from=l.to),a.ease&&(u.ease=a.ease),u.duration=o-(s?d:0),n.push(u)}return e}),r){let e,i=r[t];for(let t=0,r=i.length;t<r;t++){let r=i[t],a=r.ease;r.ease=e||void 0,e=a}i[0].duration||i.shift()}}return r})(m,i),i):i,{id:h,delay:f,duration:v,ease:w,playbackEase:y,modifier:T,composition:C,onRender:_}=b,k=a?a.defaults:M.defaults,S=eA(w,k.ease),N=eA(y,k.playbackEase),A=N?e5(N):null,D=!H(S.ease),P=D?S.ease:eA(w,A?"linear":k.ease),I=D?S.settlingDuration:eA(v,k.duration),E=eA(f,k.delay),z=T||k.modifier,R=H(C)&&p>=1e3?c.none:H(C)?k.composition:C,L=this._offset+(a?a._offset:0);D&&(S.parent=this);let W=NaN,U=NaN,O=0,j=0;for(let e=0;e<p;e++){const i=g[e],n=s||e,p=d||g;let m=NaN,h=NaN;for(let e in b)if(Z(e)){const s=eI(i,e),d=ek(i,e),g=eq(e,i,s);let f=b[e];const v=q(f);if(o&&!v&&(tx[0]=f,tx[1]=f,f=tx),v){const e=f.length,r=!B(f[0]);2===e&&r?(tv.to=f,tf[0]=tv,t=tf):e>2&&r?(t=[],f.forEach((e,r)=>{r?1===r?(tx[1]=e,t.push(tx)):t.push(e):tx[0]=e})):t=f}else tf[0]=f,t=tf;let w=null,y=null,T=NaN,C=0,_=0;for(let e=t.length;_<e;_++){let o;const l=t[_];B(l)?r=l:(tv.to=l,r=tv),tb.func=null,th.func=null;const m=eP(eA(r.composition,R),i,n,p,null,null),b=V(m)?m:c[m];w||b===c.none||(w=tr(i,g));const h=w?w._tail:null,f=a&&h&&h.parent.parent===a?h:y,v=eP(r.to,i,n,p,tb,f);B(v)&&!H(v.to)?(r=v,o=v.to):o=v;const k=eP(r.from,i,n,p,th,f),S=r.ease||P,N=eP(S,i,n,p,null,f),A=F(N)||G(N)?N:S,D=!H(A)&&!H(A.ease),M=D?A.ease:A,W=D?A.settlingDuration:eP(eA(r.duration,e>1?eP(I,i,n,p,null,f)/e:I),i,n,p,null,f),U=eP(eA(r.delay,_?0:E),i,n,p,null,f),$=r.modifier||z,X=!H(k),K=!H(o),Y=q(o),Q=Y||X&&K,Z=y?C:0,ee=y?C+U:U,et=ep(L+ee,12),er=ep(L+Z,12);!j&&(X||Y)&&(j=1);let ei=y;if(b!==c.none){let e=w._head;for(;e&&e._absoluteStartTime<=et;)if(e._isOverridden||(ei=e),(e=e._nextRep)&&e._absoluteStartTime>=et)for(;e;)ta(e),e=e._nextRep}if(Q){eM(Y?eP(o[0],i,n,p,th,f):k,tg),eM(Y?eP(o[1],i,n,p,tb,f):o,tp);const e=ez(i,g,s,tm);tg.t===u.NUMBER&&(ei?ei._valueType===u.UNIT&&(tg.t=u.UNIT,tg.u=ei._unit):(eM(e,eU),eU.t===u.UNIT&&(tg.t=u.UNIT,tg.u=eU.u)))}else K?eM(o,tp):y?eW(y,tp):eM(a&&ei&&ei.parent.parent===a?ei._value:ez(i,g,s,tm),tp),X?eM(k,tg):y?eW(y,tg):eM(a&&ei&&ei.parent.parent===a?ei._value:ez(i,g,s,tm),tg);if(tg.o&&(tg.n=eR(ei?ei._toNumber:eM(ez(i,g,s,tm),eU).n,tg.n,tg.o)),tp.o&&(tp.n=eR(tg.n,tp.n,tp.o)),tg.t!==tp.t){if(tg.t===u.COMPLEX||tp.t===u.COMPLEX){const e=tg.t===u.COMPLEX?tg:tp,t=tg.t===u.COMPLEX?tp:tg;t.t=u.COMPLEX,t.s=ef(e.s),t.d=e.d.map(()=>t.n)}else if(tg.t===u.UNIT||tp.t===u.UNIT){const e=tg.t===u.UNIT?tg:tp,t=tg.t===u.UNIT?tp:tg;t.t=u.UNIT,t.u=e.u}else if(tg.t===u.COLOR||tp.t===u.COLOR){const e=tg.t===u.COLOR?tg:tp,t=tg.t===u.COLOR?tp:tg;t.t=u.COLOR,t.d=e.d.map(()=>0)}}if(tg.u!==tp.u){let e=tp.u?tg:tp;e=eF(i,e,tp.u?tp.u:tg.u,!1)}if(tp.d&&tg.d&&tp.d.length!==tg.d.length){const e=tg.d.length>tp.d.length?tg:tp,t=e===tg?tp:tg;t.d=e.d.map((e,r)=>H(t.d[r])?0:t.d[r]),t.s=ef(e.s)}const ea=ep(+W||1e-11,12);let en=tm[g];J(en)||(tm[g]=null);const eo=d?d.set:null;C=ep(ee+ea,12);const es=tg.d,el=tp.d,eu=tp.s,ed={parent:this,id:tw++,property:g,target:i,_value:null,_toFunc:tb.func,_fromFunc:th.func,_ease:e5(M),_fromNumbers:es?ef(es):x,_toNumbers:el?ef(el):x,_strings:eu?ef(eu):x,_fromNumber:tg.n,_toNumber:tp.n,_numbers:es?ef(es):x,_number:tg.n,_unit:tp.u,_modifier:$,_currentTime:0,_startTime:ee,_delay:+U,_updateDuration:ea,_changeDuration:ea,_absoluteStartTime:et,_absoluteUpdateStartTime:er,_absoluteEndTime:ep(L+C,12),_hasFromValue:X||Y?1:0,_tweenType:s,_setter:eo,_valueType:tp.t,_composition:b,_isOverlapped:0,_isOverridden:0,_renderTransforms:0,_inlineValue:en,_prevRep:null,_nextRep:null,_prevAdd:null,_nextAdd:null,_prev:null,_next:null};b!==c.none&&tn(ed,w);const ec=ed._valueType;if(ec===u.COMPLEX)ed._value=eO(ed,1,-1);else if(ec===u.UNIT)ed._value=`${$(ed._toNumber)}${ed._unit}`;else if(ec===u.COLOR){const e=tp.d;ed._value=`rgba(${ep(e[0],0)},${ep(e[1],0)},${ep(e[2],0)},${e[3]})`}else ed._value=$(ed._toNumber);isNaN(T)&&(T=ed._startTime),y=ed,O++,ey(this,ed)}(isNaN(U)||T<U)&&(U=T),(isNaN(W)||C>W)&&(W=C),s===l.TRANSFORM&&(m=O-_,h=O)}if(!isNaN(m)){let e=0;ev(this,t=>{e>=m&&e<h&&(t._renderTransforms=1,t._composition===c.blend&&ev(e6.animation,e=>{e.id===t.id&&(e._renderTransforms=1)})),e++})}}p||console.warn("No target found. Make sure the element you're trying to animate is accessible before creating your animation."),U?(ev(this,e=>{e._startTime-e._delay||(e._delay-=U),e._startTime-=U}),W-=U):U=0,W||(W=1e-11,this.iterationCount=0),this.targets=g,this.id=H(h)?ty:h,this.duration=1e-11===W?1e-11:eb((W+this._loopDelay)*this.iterationCount-this._loopDelay)||1e-11,this.onRender=_||k.onRender,this._ease=A,this._delay=U,this.iterationDuration=W,!this._autoplay&&j&&this.onRender(this)}stretch(e){let t=this.duration;if(t===eh(e))return this;let r=e/t;return ev(this,e=>{e._updateDuration=eh(e._updateDuration*r),e._changeDuration=eh(e._changeDuration*r),e._currentTime*=r,e._delay*=r,e._startTime*=r,e._absoluteStartTime*=r,e._absoluteUpdateStartTime*=r,e._absoluteEndTime*=r}),super.stretch(e)}refresh(){return ev(this,e=>{let t=e._toFunc,r=e._fromFunc;(t||r)&&(r?(eM(r(),tg),tg.u!==e._unit&&e.target[p]&&eF(e.target,tg,e._unit,!0),e._fromNumbers=ef(tg.d),e._fromNumber=tg.n):t&&(eM(ez(e.target,e.property,e._tweenType),eU),e._fromNumbers=ef(eU.d),e._fromNumber=eU.n),t&&(eM(t(),tp),e._toNumbers=ef(tp.d),e._strings=ef(tp.s),e._toNumber=tp.o?eR(e._fromNumber,tp.n,tp.o):tp.n))}),1e-11===this.duration&&this.restart(),this}revert(){return super.revert(),eB(this)}then(e){return super.then(e)}}e.s(["animate",0,(e,t)=>M.editor?M.editor.addAnimation(e,t):new tT(e,t,null,0,!1).init()],5050)},75607,e=>{"use strict";var t=e.i(43476),r=e.i(71645),i=e.i(5050),a=e.i(41775),n=e.i(12973),o=e.i(45641),s=e.i(46236),l=e.i(91947);let u=(e=0,t=1,r=0)=>{let i=10**r;return Math.floor((Math.random()*(t-e+1/i)+e)*i)/i},d=0;e.s(["default",0,function({children:e}){let c=(0,r.useRef)(null);return(0,r.useEffect)(()=>{c.current&&(0,i.animate)(c.current.querySelectorAll("[data-reveal]"),{opacity:[0,1],translateY:[16,0],delay:((e={})=>{let t,r=[],i=0,c=null,g=e.from,p=e.reversed,m=e.ease,b=!(0,n.isUnd)(m),h=b&&!(0,n.isUnd)(m.ease)?m.ease:b?(0,o.parseEase)(m):null,f=e.grid,x=!0===f,v=e.axis,w=e.total,y=(0,n.isUnd)(g)||0===g||"first"===g,T="center"===g,C="last"===g,_="random"===g,k=(0,n.isArr)(g),S=(0,n.isArr)(90),N=e.use,A=S?(0,n.parseNumber)(90[0]):(0,n.parseNumber)(90),D=S?(0,n.parseNumber)(90[1]):0,P=a.unitsExecRgx.exec((S?90[1]:90)+a.emptyString),I=e.start||0+(S?A:0),E=e.seed,z=(0,n.isUnd)(E)||!1===E?u:((e,t=0,r=1,i=0)=>{let a=void 0===e?d++:e;return(e=t,n=r,o=i)=>{a+=0x6d2b79f5,a=Math.imul(a^a>>>15,1|a);let s=10**o;return Math.floor(((((a^=a+Math.imul(a^a>>>7,61|a))^a>>>14)>>>0)/0x100000000*(n-e+1/s)+e)*s)/s}})(!0===E?0:E),R=e.jitter,L=!(0,n.isUnd)(R),M=(0,n.isArr)(R),W=M?R[0]:R||0,U=M?R[1]:R||0,O=y?0:(0,n.isNum)(g)?g:0;return(o,d,m,b,y)=>{let[E]=(0,l.registerTargets)(o),R=(0,n.isUnd)(w)?m.length:w,M=!(0,n.isUnd)(N)&&((0,n.isFnc)(N)?N(E,d,R):(0,s.getOriginalAnimatableValue)(E,N)),j=(0,n.isNum)(M)||(0,n.isStr)(M)&&(0,n.isNum)(+M)?+M:d,q=j>=0&&j<R?j:d;if(T&&(O=(R-1)/2),C&&(O=R-1),!r.length){if(x){let e=!0,t=!1,i=1/0,a=1/0,o=1/0,s=-1/0,l=-1/0,u=-1/0,d=[],c=[],p=[];for(let r=0;r<R;r++){let g=m[r],b=0,h=0,f=0,x=!1;if(g&&(0,n.isFnc)(g.getBoundingClientRect)){let e=g.getBoundingClientRect();b=e.left+e.width/2,h=e.top+e.height/2,x=!0}else g&&(0,n.isNum)(g.x)&&(0,n.isNum)(g.y)&&(b=g.x,h=g.y,(0,n.isNum)(g.z)&&(f=g.z,t=!0),x=!0);if(!x){e=!1;break}d.push(b),c.push(h),p.push(f),b<i&&(i=b),h<a&&(a=h),f<o&&(o=f),b>s&&(s=b),h>l&&(l=h),f>u&&(u=f)}if(e){let e=d[0],m=c[0],b=p[0];k?(e=i+g[0]*(s-i),m=a+g[1]*(l-a),b=t?o+(g.length>=3?g[2]:.5)*(u-o):0):T?(e=(i+s)/2,m=(a+l)/2,b=(o+u)/2):C?(e=d[R-1],m=c[R-1],b=p[R-1]):(0,n.isNum)(g)&&(e=d[g],m=c[g],b=p[g]);for(let i=0;i<R;i++){let a=e-d[i],o=m-c[i],s=b-p[i],l=(0,n.sqrt)(a*a+o*o+(t?s*s:0));"x"===v&&(l=-a),"y"===v&&(l=-o),"z"===v&&(l=-s),r.push(l)}let h=1/0;for(let e=0;e<R;e++){let t=(0,n.abs)(r[e]);t>0&&t<h&&(h=t)}if(h>0&&h<1/0)for(let e=0;e<R;e++)r[e]=r[e]/h}else for(let e=0;e<R;e++)r.push((0,n.abs)(O-e))}else for(let e=0;e<R;e++)if(f){let t,i,a,o=f.length,s=f[0]*f[1];k?(t=g[0]*(f[0]-1),i=g[1]*(f[1]-1),a=3===o?(g.length>
1=3?g[2]:.5)*(f[2]-1):0):T?(t=(f[0]-1)/2,i=(f[1]-1)/2,a=3===o?(f[2]-1)/2:0):(t=O%f[0],i=(0,n.floor)(O/f[0])%f[1],a=3===o?(0,n.floor)(O/s):0);let l=e%f[0],u=(0,n.floor)(e/f[0])%f[1],d=3===o?(0,n.floor)(e/s):0,c=t-l,p=i-u,m=a-d,b=(0,n.sqrt)(c*c+p*p+(3===o?m*m:0));"x"===v&&(b=-c),"y"===v&&(b=-p),"z"===v&&(b=-m),r.push(b)}else r.push((0,n.abs)(O-e));i=r[0];for(let e=1;e<R;e++)r[e]>i&&(i=r[e]);if(h||p)for(let e=0;e<R;e++){let t=r[e];h&&(t=h(t/i)*i),p&&(t=v?-t:(0,n.abs)(i-t)),r[e]=t}if(L){c=Array(R);for(let e=0;e<R;e++)c[e]=z(-1,1,4)}_&&(r=((e,t=u)=>{let r=e.length,i,a;for(;r;)a=t(0,--r),i=e[r],e[r]=e[a],e[a]=i;return e})(r,z))}let B=S?(D-A)/i:A;(0,n.isUnd)(t)&&(t=y?((e,t)=>{let r=e.iterationDuration;if(r===a.minValue&&(r=0),(0,n.isUnd)(t))return r;if((0,n.isNum)(+t))return+t;let i=e?e.labels:null,o=!(0,n.isNil)(i),l=((e,t)=>{if((0,n.stringStartsWith)(t,"<")){let r="<"===t[1],i=e._tail,a=i?i._offset+i._delay:0;return r?a:a+i.duration}})(e,t),u=!(0,n.isUnd)(l),d=a.relativeValuesExecRgx.exec(t);if(!d)return u?l:o?(0,n.isUnd)(i[t])?r:i[t]:r;{let e=d[0],a=t.split(e),n=o&&a[0]?i[a[0]]:r,c=u?l:o?n:r,g=+a[1];return(0,s.getRelativeValue)(c,g,e[0])}})(y,(0,n.isUnd)(e.start)?y.iterationDuration:I):I);let V=t+(B*(0,n.round)(r[q],2)||0);if(L){let e=i?r[q]/i:0;V+=c[q]*(W+(U-W)*e)}return e.modifier&&(V=e.modifier(V)),P&&(V=`${V}${P[2]}`),V}})({start:100}),duration:700,ease:"outExpo"})},[]),(0,t.jsx)("div",{ref:c,children:e})}],75607)},29541,e=>{"use strict";var t=e.i(43476),r=e.i(71645),i=e.i(5050),a=e.i(41775),n=e.i(64936),o=e.i(12973),s=e.i(46236);let l=10*a.K;class u{constructor(e={}){const t=!(0,o.isUnd)(e.bounce)||!(0,o.isUnd)(e.duration);this.timeStep=.02,this.restThreshold=5e-4,this.restDuration=200,this.maxDuration=6e4,this.maxRestSteps=this.restDuration/this.timeStep/a.K,this.maxIterations=this.maxDuration/this.timeStep/a.K,this.bn=(0,o.clamp)((0,s.setValue)(e.bounce,.5),-1,1),this.pd=(0,o.clamp)((0,s.setValue)(e.duration,628),10*n.globals.timeScale,l*n.globals.timeScale),this.m=(0,o.clamp)((0,s.setValue)(e.mass,1),1,l),this.s=(0,o.clamp)((0,s.setValue)(e.stiffness,100),a.minValue,l),this.d=(0,o.clamp)((0,s.setValue)(e.damping,10),a.minValue,l),this.v=(0,o.clamp)((0,s.setValue)(e.velocity,0),-l,l),this.w0=0,this.zeta=0,this.wd=0,this.b=0,this.completed=!1,this.solverDuration=0,this.settlingDuration=0,this.parent=null,this.onComplete=e.onComplete||a.noop,t&&this.calculateSDFromBD(),this.compute(),this.ease=e=>{let t=e*this.settlingDuration,r=this.completed,i=this.pd;return t>=i&&!r&&(this.completed=!0,this.onComplete(this.parent)),t<i&&r&&(this.completed=!1),0===e||1===e?e:this.solve(e*this.solverDuration)}}solve(e){let{zeta:t,w0:r,wd:i,b:a}=this,n=e;return 1-(n=t<1?(0,o.exp)(-n*t*r)*(+(0,o.cos)(i*n)+a*(0,o.sin)(i*n)):1===t?(1+a*n)*(0,o.exp)(-n*r):((1+a)*(0,o.exp)((-t*r+i)*n)+(1-a)*(0,o.exp)((-t*r-i)*n))/2)}calculateSDFromBD(){let e=1===n.globals.timeScale?this.pd/a.K:this.pd;this.m=1,this.v=0,this.s=(0,o.pow)(2*o.PI/e,2),this.bn>=0?this.d=(1-this.bn)*4*o.PI/e:this.d=4*o.PI/(e*(1+this.bn)),this.s=(0,o.round)((0,o.clamp)(this.s,a.minValue,l),3),this.d=(0,o.round)((0,o.clamp)(this.d,a.minValue,300),3)}calculateBDFromSD(){let e=2*o.PI/(0,o.sqrt)(this.s);this.pd=e*(1===n.globals.timeScale?a.K:1),this.d/(2*(0,o.sqrt)(this.s))<=1?this.bn=1-this.d*e/(4*o.PI):this.bn=4*o.PI/(this.d*e)-1,this.bn=(0,o.round)((0,o.clamp)(this.bn,-1,1),3),this.pd=(0,o.round)((0,o.clamp)(this.pd,10*n.globals.timeScale,l*n.globals.timeScale),3)}compute(){let{maxRestSteps:e,maxIterations:t,restThreshold:r,timeStep:i,m:s,d:l,s:u,v:d}=this,c=this.w0=(0,o.clamp)((0,o.sqrt)(u/s),a.minValue,a.K),g=this.zeta=l/(2*(0,o.sqrt)(u*s));g<1?(this.wd=c*(0,o.sqrt)(1-g*g),this.b=(g*c+-d)/this.wd):1===g?(this.wd=0,this.b=-d+c):(this.wd=c*(0,o.sqrt)(g*g-1),this.b=(g*c+-d)/this.wd);let p=0,m=0,b=0;for(;m<=e&&b<=t;)(0,o.abs)(1-this.solve(p))<r?m++:m=0,this.solverDuration=p,p+=i,b++;this.settlingDuration=(0,o.round)(this.solverDuration*a.K,0)*n.globals.timeScale}get bounce(){return this.bn}set bounce(e){this.bn=(0,o.clamp)((0,s.setValue)(e,1),-1,1),this.calculateSDFromBD(),this.compute()}get duration(){return this.pd}set duration(e){this.pd=(0,o.clamp)((0,s.setValue)(e,1),10*n.globals.timeScale,l*n.globals.timeScale),this.calculateSDFromBD(),this.compute()}get stiffness(){return this.s}set stiffness(e){this.s=(0,o.clamp)((0,s.setValue)(e,100),a.minValue,l),this.calculateBDFromSD(),this.compute()}get damping(){return this.d}set damping(e){this.d=(0,o.clamp)((0,s.setValue)(e,10),a.minValue,l),this.calculateBDFromSD(),this.compute()}get mass(){return this.m}set mass(e){this.m=(0,o.clamp)((0,s.setValue)(e,1),1,l),this.compute()}get velocity(){return this.v}set velocity(e){this.v=(0,o.clamp)((0,s.setValue)(e,0),-l,l),this.compute()}}let d=e=>new u(e);e.s(["default",0,function({className:e}){let a=(0,r.useRef)(null),n=(0,r.useRef)(null),o=(0,r.useRef)(null),s=(0,r.useRef)(null),l=(0,r.useRef)(null),u=(0,r.useRef)(null);return(0,r.useLayoutEffect)(()=>
1{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;let e=a.current,t=n.current,r=o.current,c=s.current,g=l.current,p=u.current;if(!e||!t||!r||!c||!g||!p)return;let m=0,b=0;return m=requestAnimationFrame(()=>{b=requestAnimationFrame(()=>(function(){if(!e||!t||!r||!c||!g||!p)return;let a=e.getBoundingClientRect().width,n=c.getBoundingClientRect().width;a<4||n<4||(e.style.width="0px",t.style.opacity="0",t.style.transform="translateY(-160%)",t.style.backgroundColor="#f97316",t.style.color="#0a0a0a",c.style.width="0px",g.style.opacity="0",g.style.transform="translateX(-640%)",g.style.backgroundColor="#a855f7",g.style.color="#0a0a0a",(0,i.animate)(e,{width:[0,a],duration:600,delay:1300,ease:"outBack"}),(0,i.animate)(t,{translateY:["-160%","0%"],opacity:[0,1],duration:600,delay:1300,ease:"outBack",onComplete:()=>{(0,i.animate)(r,{translateY:[0,10,-6,0],duration:380,ease:d({stiffness:280,damping:10})})}}),(0,i.animate)(c,{width:[0,n],duration:220,delay:3200,ease:"inQuart"}),(0,i.animate)(g,{translateX:["-640%","0%"],opacity:[0,1],duration:220,delay:3200,ease:"inQuart",onComplete:()=>{(0,i.animate)(p,{translateX:[0,16,0],duration:420,ease:d({stiffness:260,damping:9})})}}))})())}),()=>{cancelAnimationFrame(m),cancelAnimationFrame(b)}},[]),(0,t.jsxs)("span",{className:e,children:[(0,t.jsxs)("span",{style:{whiteSpace:"nowrap"},children:[(0,t.jsxs)("span",{ref:a,style:{display:"inline-block",position:"relative"},children:[(0,t.jsx)("span",{style:{visibility:"hidden",padding:"0 3px"},"aria-hidden":!0,children:"Soft"}),(0,t.jsx)("span",{ref:n,style:{position:"absolute",left:0,top:0,borderRadius:6,padding:"0 3px",whiteSpace:"nowrap"},children:"Soft"})]}),(0,t.jsx)("span",{ref:o,style:{display:"inline-block"},children:"ware"})]})," ","that ships. AI sites,"," ",(0,t.jsxs)("span",{style:{whiteSpace:"nowrap"},children:[(0,t.jsxs)("span",{ref:s,style:{display:"inline-block",position:"relative"},children:[(0,t.jsx)("span",{style:{visibility:"hidden",padding:"0 3px"},"aria-hidden":!0,children:"over"}),(0,t.jsx)("span",{ref:l,style:{position:"absolute",left:0,top:0,borderRadius:6,padding:"0 3px",whiteSpace:"nowrap"},children:"over"})]}),(0,t.jsx)("span",{ref:u,style:{display:"inline-block"},children:"hauled."})]})]})}],29541)},33778,e=>{"use strict";var t=e.i(43476),r=e.i(71645),i=e.i(20133);e.s(["default",0,function({badges:e}){let a=(0,r.useRef)(null),n=(0,r.useRef)([]),o=(0,r.useRef)([]),s=(0,r.useRef)([]),l=(0,r.useRef)([]),[u,d]=(0,r.useState)(!1),c=[...e,...e,...e];(0,r.useEffect)(()=>{let e=a.current;if(!e)return;if(window.matchMedia("(prefers-reduced-motion: reduce)").matches)return void d(!0);let t=-260;o.current=c.map((e,r)=>{let i=n.current[r]?.offsetWidth??180;s.current[r]=i,l.current[r]=-(20+15*Math.random());let a=t;return t+=i+34,a}),c.forEach((e,t)=>{let r=n.current[t];r&&(r.style.transform=`translate(${o.current[t]}px, -50%) rotate(${l.current[t]}deg)`)});let r=0,i=performance.now(),u=t=>{let a=Math.min((t-i)/1e3,.05);i=t;let d=e.getBoundingClientRect().width,g=d/2,p=Math.max(.125*d,1);for(let e=0;e<c.length;e++){let t=s.current[e],r=(o.current[e]+t/2-g)/p,i=.12+.88*(1-Math.exp(-3*r*r));if(o.current[e]-=150*i*a,o.current[e]+t<-80){let t=(e+1)%c.length;for(let r=0;r<c.length;r++)r!==e&&o.current[r]>o.current[t]&&(t=r);o.current[e]=o.current[t]+s.current[t]+34}let u=n.current[e];u&&(u.style.transform=`translate(${o.current[e]}px, -50%) rotate(${l.current[e]}deg)`)}r=requestAnimationFrame(u)};return r=requestAnimationFrame(u),()=>cancelAnimationFrame(r)},[]);let g=e=>(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{className:`w-1.5 h-1.5 rounded-full ${e.dot}`}),(0,t.jsxs)("span",{className:"font-mono text-[11px] text-zinc-300 whitespace-nowrap",children:[(0,t.jsx)("span",{className:"text-zinc-500",children:e.emoji})," ",(0,t.jsx)("span",{className:"text-white font-medium",children:e.label})," ",(0,t.jsx)("span",{className:e.tagColor,children:e.tag})]})]}),p="hero-badge-tilt flex items-center gap-2 bg-zinc-900 hover:bg-zinc-800 border border-zinc-800 hover:border-zinc-700 px-3.5 py-2 rounded-full transition-colors";return u?(0,t.jsx)("div",{className:"hero-badge-marquee-outer",children:(0,t.jsx)("div",{className:"flex flex-wrap gap-3 justify-center py-8",children:e.map((e,r)=>e.external?(0,t.jsx)("a",{href:e.href,target:"_blank",rel:"noopener noreferrer",className:p.replace("hero-badge-tilt ",""),children:g(e)},r):(0,t.jsx)(i.Link,{href:e.href,className:p.replace("hero-badge-tilt ",""),children:g(e)},r))})}):(0,t.jsx)("div",{ref:a,className:"hero-badge-marquee-outer",children:(0,t.jsx)("div",{className:"relative h-[52px]",children:c.map((e,r)=>{let a=g(e),o={position:"absolute",top:"50%",left:0,willChange:"transform"},s=e=>{n.current[r]=e};return e.external?(0,t.jsx)("a",{ref:s,href:e.href,target:"_blank",rel:"noopener noreferrer",style:o,className:p,children:a},r):(0,t.jsx)(i.Link,{ref:s,href:e.href,style:o,className:p,children:a},r)})})})}])},61011,e=>{"use strict";var t=e.i(43476),r=e.i(71645);e.s(["default",0,function({children:e,strength:i=.35}){let a=(0,r.useRef)(null),n=(0,r.useRef)(null);return(0,t.jsx)("div",{ref:a,onMouseMove:e=>{if(window.matchMedia("(pointer: coarse)").matches||window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;let t=a.current;if(!t)return;
1let r=t.getBoundingClientRect(),o=e.clientX-(r.left+r.width/2),s=e.clientY-(r.top+r.height/2);n.current&&cancelAnimationFrame(n.current),n.current=requestAnimationFrame(()=>{let e=Math.max(-14,Math.min(14,o*i)),t=Math.max(-14,Math.min(14,s*i));a.current&&(a.current.style.transition="transform 0.15s ease-out",a.current.style.transform=`translate(${e}px, ${t}px)`)})},onMouseLeave:()=>{n.current&&cancelAnimationFrame(n.current);let e=a.current;e&&(e.style.transition="transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1)",e.style.transform="translate(0px, 0px)")},className:"inline-block will-change-transform",children:e})}])},49445,e=>{"use strict";var t=e.i(43476),r=e.i(71645);let i=["text-white","text-[#f97316]","text-[#d946ef]","text-white"];function a(e,t=.3){return Math.max(30,Math.round(e*(1+(2*Math.random()-1)*t)))}e.s(["default",0,function({sets:e}){let n=(0,r.useRef)(null),o=(0,r.useRef)(null),s=(0,r.useRef)(!1),l=(0,r.useRef)(0),u=(0,r.useRef)(0),d=(0,r.useRef)(0),c=(0,r.useRef)("typing"),g=(0,r.useRef)(e[0].map(()=>"")),p=(0,r.useRef)("none"),m=(0,r.useRef)(0),b=(0,r.useRef)(1),h=(0,r.useRef)(!1),[f,x]=(0,r.useState)(g.current),[v,w]=(0,r.useState)(0);return(0,r.useEffect)(()=>{if(s.current=window.matchMedia("(prefers-reduced-motion: reduce)").matches,s.current)return void x(e[0]);let t=(e,t)=>{let r=[...g.current];r[e]=t,g.current=r,x(r),w(e)},r=()=>{let i=e[l.current],n=c.current;if("typing"===n){var s;let e=u.current,n=d.current,l=i[e];if("inserting"===p.current){let i,u=(s=l[n]??"x",0===(i=Array.from(new Set(l.split(""))).filter(e=>/\S/.test(e)&&e.toLowerCase()!==s.toLowerCase())).length?"x":i[Math.floor(Math.random()*i.length)]);t(e,g.current[e]+u),m.current+=1,m.current>=b.current?(p.current="pausing",o.current=window.setTimeout(r,a(420,.4))):o.current=window.setTimeout(r,a(280));return}if("pausing"===p.current){p.current="removing",o.current=window.setTimeout(r,0);return}if("removing"===p.current){let i=g.current[e];t(e,i.slice(0,-1)),m.current-=1,m.current>0?o.current=window.setTimeout(r,a(90)):(p.current="none",o.current=window.setTimeout(r,a(280)));return}if(n<l.length){if(!h.current&&!(n<2)&&!(n>l.length-3)&&/\S/.test(l[n])&&.025>Math.random()){h.current=!0,p.current="inserting",m.current=0,b.current=.25>Math.random()?2:1,o.current=window.setTimeout(r,a(280));return}d.current=n+1,t(e,l.slice(0,n+1)),o.current=window.setTimeout(r,a(280))}else e<i.length-1?(u.current=e+1,d.current=0,h.current=!1,o.current=window.setTimeout(r,150)):(c.current="pausedFull",o.current=window.setTimeout(r,a(3e3,.15)));return}if("pausedFull"===n){c.current="deleting",o.current=window.setTimeout(r,0);return}let f=u.current,v=g.current[f].slice(0,-1);if(t(f,v),v.length>0)o.current=window.setTimeout(r,a(93));else if(f>0)u.current=f-1,o.current=window.setTimeout(r,a(93));else{let t=(l.current+1)%e.length;l.current=t,u.current=0,d.current=0,c.current="typing",p.current="none",h.current=!1;let i=e[t].map(()=>"");g.current=i,x(i),o.current=window.setTimeout(r,150)}},i=n.current;if(!i)return;let f=new IntersectionObserver(([e])=>{e.isIntersecting&&(o.current=window.setTimeout(r,400),f.disconnect())},{threshold:.2});return f.observe(i),()=>{f.disconnect(),o.current&&window.clearTimeout(o.current)}},[]),(0,t.jsx)("div",{ref:n,className:"flex flex-col gap-3 md:gap-4",children:f.map((e,r)=>(0,t.jsx)("div",{className:"min-h-[1.2em]",children:(0,t.jsxs)("span",{className:`font-display font-medium leading-[1.1] tracking-tight text-4xl sm:text-6xl lg:text-7xl ${i[r%i.length]}`,children:[e,!s.current&&v===r&&(0,t.jsx)("span",{"aria-hidden":!0,className:"inline-block w-[3px] sm:w-[5px] h-[0.85em] bg-current ml-1 align-[-0.12em] animate-pulse"})]})},r))})}])},71719,e=>{"use strict";var t=e.i(43476),r=e.i(71645),i=e.i(57688),a=e.i(68877);e.s(["default",0,function({cards:e}){let[n,o]=(0,r.useState)(0),[s,l]=(0,r.useState)("showing"),[u]=(0,r.useState)(()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches);(0,r.useEffect)(()=>{if(!u)return;let t=setInterval(()=>o(t=>(t+1)%e.length),4500);return()=>clearInterval(t)},[u,e.length]),(0,r.useEffect)(()=>
1{if("gap"!==s)return;let t=setTimeout(()=>{o(t=>(t+1)%e.length),l("showing")},550);return()=>clearTimeout(t)},[s,e.length]);let d=e[n];return(0,t.jsxs)("div",{className:"overflow-hidden py-2 px-4 sm:px-8 md:px-12 -mx-4 sm:-mx-8 md:-mx-12",children:[(0,t.jsxs)("a",{href:d.href,...d.external?{target:"_blank",rel:"noopener noreferrer"}:{},onAnimationEnd:u?void 0:()=>l("gap"),className:`group flex flex-col md:flex-row items-start md:items-center gap-6 md:gap-8 rounded-2xl border ${d.borderClass} ${d.bgClass} p-6 sm:p-8 transition-colors ${u?"duration-500 ease-in-out":"gap"===s?"invisible":"animate-card-launch"}`,children:[(0,t.jsx)("div",{className:"w-12 h-12 rounded-xl bg-white/5 border border-white/10 flex items-center justify-center overflow-hidden shrink-0",children:(0,t.jsx)(i.default,{src:d.iconSrc,alt:d.iconAlt,width:32,height:32})}),(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsx)("span",{className:`font-mono text-[10px] tracking-widest uppercase ${d.tagClass}`,children:d.tag}),(0,t.jsx)("h2",{className:"mt-1 text-lg sm:text-xl font-display font-semibold text-white leading-snug",children:d.title}),(0,t.jsx)("p",{className:"mt-2 text-zinc-500 text-sm leading-relaxed max-w-2xl",children:d.desc})]}),(0,t.jsxs)("span",{className:`inline-flex items-center gap-2 font-mono text-xs font-bold transition-colors shrink-0 ${d.ctaClass}`,children:[d.cta,(0,t.jsx)(a.ArrowRight,{className:"w-4 h-4"})]})]},n),(0,t.jsx)("div",{className:"flex items-center justify-center gap-2 mt-6",children:e.map((e,r)=>(0,t.jsx)("span",{className:`h-1.5 rounded-full transition-all duration-500 ${r===n?`w-6 ${e.dotClass}`:"w-1.5 bg-zinc-700"}`},r))})]})}])},9720,e=>{"use strict";var t=e.i(43476),r=e.i(71645),i=e.i(20133),a=e.i(68109),n=e.i(68877),o=e.i(7471);let s={en:{readMore:"Read article →",posts:[{slug:"aftercast",title:"Aftercast: I Started a Solo Game Studio and Shipped a Free Sniper Game",excerpt:"No ads mid-game, no dark patterns, honest version numbers, a public changelog. Meet Aftercast — and play Snaiper, a free browser sniper game with real wind, drop and flight time.",date:"September 27, 2026",readTime:"6 min read",tag:"Studio",tagColor:"border-indigo-500/30 bg-indigo-500/5 text-indigo-400"},{slug:"show-multiple-time-zones-windows",title:"How to Show Multiple Time Zones on Windows 11 (and Get Past the 3-Clock Limit)",excerpt:"Windows 11 shows only three clocks. Every way to see more time zones on your PC — built-in, widgets, Rainmeter, apps — plus the daylight-saving trap and how to set an alarm in another time zone.",date:"September 21, 2026",readTime:"9 min read",tag:"Guide",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"},{slug:"best-world-clock-apps-windows",title:"Best World Clock Apps for Windows in 2026: Compared Honestly",excerpt:"Windows built-in vs Sharp World Clock, Anuko, Themia, Rainmeter and Time Precision — features, alarms, price and who each is actually for, from the maker of one of them.",date:"September 21, 2026",readTime:"8 min read",tag:"Comparison",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"},{slug:"startup-launch-directories-we-actually-use",title:"We Built Two Launch Directories. Here's Every Other One We Actually Use.",excerpt:"The real story behind runs.space and runs-this.today — plus an honest list of every other startup launch directory currently in our own rotation.",date:"September 15, 2026",readTime:"8 min read",tag:"Guide",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"reelnox-vs-handbrake",title:"ReelNox Studio vs HandBrake: Which One Should You Actually Use?",excerpt:"An honest, feature-by-feature comparison — free and open-source vs a $39 one-time toolkit, dense settings vs a modern interface, and exactly where each one wins.",date:"September 1, 2026",readTime:"11 min read",tag:"Comparison",tagColor:"border-teal-500/30 bg-teal-500/5 text-teal-400"},{slug:"timezone-widget-windows",title:"The Timezone Widget for Windows Built to Never Make You Miss a Call Again",excerpt:"Time Precision is a free Windows desktop widget — 233 cities, hover for live seconds, 9 finishes, drag-and-drop reorder. No account, no subscription.",date:"August 5, 2026",readTime:"8 min read",tag:"Product",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"}
1,{slug:"software-license-key-guide",title:"Software License Keys, Explained Properly",excerpt:'"License key," "product key," "serial key" — four terms describing systems that actually work quite differently. What they are, how they work, the types, and how to add one to your app.',date:"July 30, 2026",readTime:"13 min read",tag:"Guide",tagColor:"border-emerald-500/30 bg-emerald-500/5 text-emerald-400"},{slug:"ui-vs-ux-difference",title:"UI vs UX: The Difference Nobody Explains Properly",excerpt:"UI and UX are not the same thing, and mixing them up costs real money. 8 clear comparisons, real examples, and an interactive quiz to test yourself.",date:"July 28, 2026",readTime:"9 min read",tag:"Design Lesson",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"nicklaunches-review",title:"I Submitted BackDrop_ to NickLaunches — Here's What Actually Happened",excerpt:"An honest, first-person account of listing BackDrop_ on NickLaunches — what backlinks and DR actually mean, the real analytics and growth tools behind it, and whether it was worth it.",date:"July 23, 2026",readTime:"10 min read",tag:"Opinion",tagColor:"border-red-500/30 bg-red-500/5 text-red-400"},{slug:"video-wallpaper-app-windows",title:"Looking for a Live Video Wallpaper App? Here's What Actually Works.",excerpt:"Most 'video wallpaper' apps get covered the second you open a window. BackDrop_ v1.1.2 solves the real problem — a video overlay that stays visible while you actually work.",date:"July 18, 2026",readTime:"7 min read",tag:"Product",tagColor:"border-violet-500/30 bg-violet-500/5 text-violet-400"},{slug:"multilingual-content-seo-organic-reach",title:"Multilingual Content Is Real SEO. Here's Exactly How We Do It.",excerpt:"Why multilingual content is a genuine organic-reach strategy (not hype), and exactly how we write and localize a real article about your product into 9 languages.",date:"July 18, 2026",readTime:"7 min read",tag:"SEO & Content",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"how-much-does-a-website-cost",title:"How Much Does a Website Really Cost in 2026? Real Prices, No Guessing",excerpt:"Real website pricing for 2026 — DIY builders, freelancers, agencies, and fixed-price custom builds, broken down by business type, with the hidden costs nobody tells you about.",date:"July 14, 2026",readTime:"8 min read",tag:"Web Design",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"web-design-fine-dining-restaurants",title:"Your Food Is Michelin-Level. Is Your Website?",excerpt:"Why a fine dining restaurant's website is usually the weakest part of the experience, what it actually costs guests, and what a website built to match the food looks like.",date:"July 12, 2026",readTime:"6 min read",tag:"Web Design",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"offline-license-verification",title:"How to Verify a Software License Offline (No Internet Required)",excerpt:"How to let your desktop app check a license with zero network calls, using Ed25519 signed leases instead of a plain local cache anyone can edit. Real code for Python and Node.js/Electron.",date:"July 9, 2026",readTime:"7 min read",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"license-keys-desktop-app",title:"How to Add License Keys to Your Desktop App Without Building Your Own Backend",excerpt:"A practical guide to adding machine-locked license keys, activation, and trials to your Electron, Python, or .NET desktop app — using a small hosted API instead of building your own licensing backend.",date:"July 9, 2026",readTime:"6 min read",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"nuitka-python-standalone",title:"Compiling standalone Python executables with Nuitka to eliminate machine overhead",excerpt:"The definitive guide to launching ultra-fast .exe files on Windows, without needing slow runtime packages like PyInstaller.",date:"June 10, 2026",readTime:"12 min read",tag:"Windows Dev",tagColor:"border-orange-500/30 bg-
1orange-500/5 text-orange-400"},{slug:"authenticity-in-tech",title:"The Internet Is Drowning in Copies — A Developer's Manifesto on Authenticity",excerpt:"The internet is drowning in AI-generated clones. A personal manifesto on why authenticity and effort still matter in 2026 — and what we do about it at Sublimearts.",date:"June 9, 2026",readTime:"5 min read",tag:"Values",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"},{slug:"watch-video-while-working-windows",title:"How to Watch Videos While Working on Windows — The Method That Actually Works",excerpt:"You have videos on your drive you want to watch. You have work to do. Every existing solution forces you to choose one or the other. This guide compares every real option for local files.",date:"June 6, 2026",readTime:"5 min read",tag:"Guide",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"purchasing-power-parity",title:"Fair Pricing for Everyone: Why We Support Purchasing Power Parity",excerpt:"We just made our software cheaper for 35+ countries — automatically, with no coupon needed. Here's why we believe fair pricing matters more than maximum profit.",date:"June 6, 2026",readTime:"4 min read",tag:"Pricing & Values",tagColor:"border-orange-500/30 bg-
1orange-500/5 text-orange-400"},{slug:"backdrop",title:"I Had 300 Hours of Video I Never Watched. So I Built BackDrop_.",excerpt:"A ghost video overlay for Windows that lets you watch any local video while working. No PiP limitations, no screen takeover. Your content, finally watched.",date:"June 4, 2026",readTime:"4 min read",tag:"Product",tagColor:"border-violet-500/30 bg-violet-500/5 text-violet-400"},{slug:"compress-large-video-files-windows",title:"How to compress large video files on Windows without losing quality",excerpt:"Any large MP4, MKV or AVI file — shrink it to 10% locally using your GPU. No cloud upload, no subscription, no quality loss.",date:"June 3, 2026",readTime:"5 min read",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"reddit-removed-my-post",title:"Reddit removed my post about compressing files. So I wrote a blog post about it.",excerpt:"After 20+ attempts to share useful content on Reddit, every post got removed. Here's what I think about it, and what actually works instead.",date:"June 3, 2026",readTime:"5 min read",tag:"Opinion",tagColor:"border-red-500/30 bg-red-500/5 text-red-400"},{slug:"compress-obs-recordings",title:"How to compress OBS recordings on Windows without uploading anywhere",excerpt:"OBS files hit 10–30 GB. Here's how to shrink them to 10% the size locally using your GPU — no cloud, no subscription, no account.",date:"June 3, 2026",readTime:"5 min read",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"community",title:"Building in public shouldn't mean building alone.",excerpt:"Why we're building a community space for indie devs, designers and the people who use our tools. A place to ask, share, and not feel alone in the process.",date:"June 3, 2026",readTime:"3 min read",tag:"Community",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"typography-fundamentals",title:"Typography Fundamentals: 8 Concepts Every Designer Must Know",excerpt:"Kerning, tracking, leading, type scale, contrast — the invisible rules that separate good design from great. Includes 8 free interactive demos.",date:"June 1, 2026",readTime:"6 min read",tag:"Design Lesson",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"compress-video-gpu-windows",title:"How to Compress Videos with GPU on Windows — 5–10x Faster than CPU",excerpt:"Use your NVIDIA, AMD or Intel GPU to compress H.264/H.265 video 5-10x faster. Free guide + the Windows tool built for this.",date:"May 30, 2026",readTime:"5 min read",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"delete-all-tweets",title:"How to Delete All Your Tweets at Once — Free, No API, No App",excerpt:"X has no native delete-all button. Paid tools charge monthly. This free browser script does it in minutes — no install, no account, no catch.",date:"May 30, 2026",readTime:"4 min read",tag:"Free Tool",tagColor:"border-emerald-500/30 bg-emerald-500/5 text-emerald-400"},{slug:"nextjs-multilingual-seo",title:"Why I build native multilingual Next.js routes (IT/EN/ES) by default on every commission",excerpt:"Mapping international SEO routes in Next.js/Astro prevents rendering lag and eliminates the flaws found when using slow automatic translators.",date:"May 28, 2026",readTime:"8 min read",tag:"Web Design",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"expressive-typography-branding",title:"Expressive typography as a primary branding tool for independent artisan studios",excerpt:"Against AI aesthetic normalization, the independent studio imposes itself by alternating asymmetric rhythms and striking Helvetica-style typefaces.",date:"April 15, 2026",readTime:"6 min read",tag:"Design Theory",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"}]},it:{readMore:"Leggi l'articolo →",posts:[{slug:"aftercast",title:"Aftercast: Ho Aperto uno Studio di Giochi da Solo e Pubblicato uno Sniper Gratis",excerpt:"Niente pubblicità durante il gioco, niente dark pattern, numeri di versione onesti, changelog pubblico. Ecco Aftercast — e Snaiper, uno sniper gratuito nel browser con vento, caduta e tempo di volo reali.",date:"27 Settembre 2026",readTime:"6 min di lettura",tag:"Studio",tagColor:"border-indigo-500/30 bg-indigo-500/5 text-indigo-400"},{slug:"startup-launch-directories-we-actually-use",title:"Abbiamo Costruito Due Directory di Lancio. Ecco Ogni Altra Che Usiamo Davvero.",excerpt:"La storia reale dietro runs.space e runs-this.today — più la lista onesta di ogni altra directory di lancio startup attualmente nella nostra rotazione.",date:"15 Settembre 2026",readTime:"8 min di lettura",tag:"Guida",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"reelnox-vs-handbrake",title:"ReelNox Studio vs HandBrake: Quale Usare Davvero?",excerpt:"Un confronto onesto, funzione per funzione — gratis e open source contro un toolkit da $39 una tantum, impostazioni dense contro un'interfaccia moderna, e dove vince davvero ciascuno.",date:"1 Settembre 2026",readTime:"11 min di lettura",tag:"Confronto",tagColor:"border-teal-500/30 bg-teal-500/5 text-teal-400"},{slug:"timezone-widget-windows",title:"Il Widget Fuso Orario per Windows Pensato per Non Farti Mai Più Perdere una Call",excerpt:"Time Precision è un widget gratuito per Windows — 233 città, hover per i secondi in tempo reale, 9 finiture, riordino drag-and-drop. Nessun account, nessun abbonamento.",date:"5 Agosto 2026",readTime:"8 min di lettura",tag:"Prodotto",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"}
1,{slug:"software-license-key-guide",title:"Le Chiavi di Licenza Software, Spiegate Bene",excerpt:'"Chiave di licenza", "product key", "serial key" — quattro termini che descrivono sistemi piuttosto diversi. Cosa sono, come funzionano, i tipi, e come aggiungerne una alla tua app.',date:"30 Luglio 2026",readTime:"13 min di lettura",tag:"Guida",tagColor:"border-emerald-500/30 bg-emerald-500/5 text-emerald-400"},{slug:"ui-vs-ux-difference",title:"UI vs UX: La Differenza che Nessuno Spiega Bene",excerpt:"UI e UX non sono la stessa cosa, e confonderle costa soldi veri. 8 confronti chiari, esempi reali e un quiz interattivo per metterti alla prova.",date:"28 Luglio 2026",readTime:"9 min di lettura",tag:"Lezione di Design",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"nicklaunches-review",title:"Ho Sottomesso BackDrop_ a NickLaunches — Ecco Cosa È Successo Davvero",excerpt:"Un resoconto onesto e in prima persona sulla pubblicazione di BackDrop_ su NickLaunches — cosa significano davvero backlink e DR, le vere analytics e gli strumenti di crescita dietro le quinte, e se ne è valsa la pena.",date:"23 Luglio 2026",readTime:"10 min di lettura",tag:"Opinione",tagColor:"border-red-500/30 bg-red-500/5 text-red-400"},{slug:"video-wallpaper-app-windows",title:"Cerchi un'App di Sfondo Video Live? Ecco Cosa Funziona Davvero.",excerpt:"La maggior parte delle app di 'sfondo video' viene coperta appena apri una finestra. BackDrop_ v1.1.2 risolve il vero problema — un overlay video che resta visibile mentre lavori davvero.",date:"18 Luglio 2026",readTime:"7 min di lettura",tag:"Prodotto",tagColor:"border-violet-500/30 bg-violet-500/5 text-violet-400"},{slug:"multilingual-content-seo-organic-reach",title:"I Contenuti Multilingua Sono SEO Vera. Ecco Esattamente Come Lo Facciamo.",excerpt:"Perché i contenuti multilingua sono una vera strategia di reach organico (non solo hype), e come scriviamo e localizziamo un articolo reale sul tuo prodotto in 9 lingue.",date:"18 Luglio 2026",readTime:"7 min di lettura",tag:"SEO & Contenuti",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"how-much-does-a-website-cost",title:"Quanto Costa Davvero un Sito Web nel 2026? Prezzi Reali, Niente Indovinelli",excerpt:"Prezzi reali per un sito web nel 2026 — builder fai-da-te, freelancer, agenzie e siti custom a prezzo fisso, suddivisi per tipo di attività, con i costi nascosti che nessuno ti dice.",date:"14 Luglio 2026",readTime:"8 min di lettura",tag:"Web Design",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"web-design-fine-dining-restaurants",title:"La Tua Cucina È da Stella Michelin. Il Tuo Sito Web?",excerpt:"Perché il sito di un ristorante fine dining è spesso l'anello più debole dell'esperienza, cosa costa davvero agli ospiti, e come dovrebbe essere un sito all'altezza della cucina.",date:"12 Luglio 2026",readTime:"6 min di lettura",tag:"Web Design",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"offline-license-verification",title:"Come Verificare una Licenza Software Offline (Senza Internet)",excerpt:"Come far controllare a un'app desktop una licenza con zero chiamate di rete, usando lease firmati Ed25519 invece di una semplice cache locale modificabile. Codice reale per Python e Node.js/Electron.",date:"9 Luglio 2026",readTime:"7 min di lettura",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"license-keys-desktop-app",title:"Come Aggiungere Chiavi di Licenza alla Tua App Desktop Senza Costruire un Backend",excerpt:"Guida pratica per aggiungere chiavi di licenza vincolate al dispositivo, attivazione e trial alla tua app Electron, Python o .NET — usando una piccola API in cloud invece di un tuo backend di licensing.",date:"9 Luglio 2026",readTime:"6 min di lettura",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"nuitka-python-standalone",title:"Compilare esecutibili Python standalone con Nuitka per azzerare l'overhead di macchina",excerpt:"La guida definitiva per lanciare file .exe ultraveloci su Windows, eliminando la necessità di lenti pacchetti runtime con PyInstaller.",date:"10 Giugno 2026",readTime:"12 min di lettura",tag:"Windows Dev",tagColor:"border-orange-500/30 bg-
1orange-500/5 text-orange-400"},{slug:"authenticity-in-tech",title:"Internet sta annegando nelle copie — Un manifesto sulla autenticità",excerpt:"Internet si sta annegando in cloni generati dall'AI. Un manifesto personale su perché autenticità e impegno contano ancora nel 2026 — e cosa facciamo al riguardo.",date:"9 Giugno 2026",readTime:"5 min di lettura",tag:"Valori",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"},{slug:"watch-video-while-working-windows",title:"Come guardare video mentre si lavora su Windows — Il metodo che funziona davvero",excerpt:"Hai video sul disco che vuoi guardare. Hai lavoro da fare. Ogni soluzione esistente ti costringe a scegliere uno dei due. Questa guida confronta ogni opzione reale per i file locali.",date:"6 Giugno 2026",readTime:"5 min di lettura",tag:"Guida",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"purchasing-power-parity",title:"Prezzi equi per tutti: perché supportiamo il Purchasing Power Parity",excerpt:"Abbiamo reso il nostro software più economico per 35+ paesi — automaticamente, senza coupon. Ecco perché crediamo che prezzi equi contino più del profitto massimo.",date:"6 Giugno 2026",readTime:"4 min di lettura",tag:"Prezzi & Valori",tagColor:"border-orange-500/30 bg-
1orange-500/5 text-orange-400"},{slug:"backdrop",title:"Avevo 300 Ore di Video che Non Guardavo Mai. Così Ho Costruito BackDrop_.",excerpt:"Un ghost video overlay per Windows che ti permette di guardare qualsiasi video locale mentre lavori. Nessun limite PiP, nessuno screen takeover. Il tuo contenuto, finalmente visto.",date:"4 Giugno 2026",readTime:"4 min di lettura",tag:"Prodotto",tagColor:"border-violet-500/30 bg-violet-500/5 text-violet-400"},{slug:"compress-large-video-files-windows",title:"Come comprimere file video di grandi dimensioni su Windows senza perdere qualità",excerpt:"Qualsiasi file MP4, MKV o AVI grande — riducilo al 10% in locale con la GPU. Niente cloud, nessun abbonamento, nessuna perdita di qualità.",date:"3 Giugno 2026",readTime:"5 min di lettura",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"reddit-removed-my-post",title:"Reddit ha rimosso il mio post sulla compressione video. Quindi ho scritto un blog post.",excerpt:"Dopo 20+ tentativi di condividere contenuti utili su Reddit, ogni post è stato rimosso. Cosa ne penso e cosa funziona davvero invece.",date:"3 Giugno 2026",readTime:"5 min di lettura",tag:"Opinione",tagColor:"border-red-500/30 bg-red-500/5 text-red-400"},{slug:"compress-obs-recordings",title:"Come comprimere le registrazioni OBS su Windows senza caricarle da nessuna parte",excerpt:"I file OBS raggiungono 10–30 GB. Ecco come ridurli al 10% localmente con la GPU — niente cloud, nessun abbonamento.",date:"3 Giugno 2026",readTime:"5 min di lettura",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"community",title:"Costruire in pubblico non dovrebbe significare costruire da soli.",excerpt:"Perché stiamo costruendo uno spazio community per indie dev, designer e chi usa i nostri strumenti. Un posto per chiedere, condividere e non sentirsi soli nel processo.",date:"3 Giugno 2026",readTime:"3 min di lettura",tag:"Community",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"typography-fundamentals",title:"Fondamenti di Tipografia: 8 Concetti che Ogni Designer Deve Conoscere",excerpt:"Kerning, tracking, leading, scala tipografica, contrasto — le regole invisibili che separano un buon design da uno ottimo. Con 8 demo interattive gratuite.",date:"1 Giugno 2026",readTime:"6 min di lettura",tag:"Lezione di Design",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"compress-video-gpu-windows",title:"Come comprimere video con la GPU su Windows — 5–10 volte più veloce della CPU",excerpt:"Usa la tua GPU NVIDIA, AMD o Intel per comprimere video H.264/H.265 molto più velocemente. Guida gratuita + il tool Windows costruito per questo.",date:"30 Maggio 2026",readTime:"5 min di lettura",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"delete-all-tweets",title:"Come eliminare tutti i tweet in una volta — Gratis, senza API",excerpt:"X non ha un pulsante elimina-tutto. I tool a pagamento costano €15/mese. Questo script gratuito lo fa in pochi minuti — nessuna installazione, nessun trucco.",date:"30 Maggio 2026",readTime:"4 min di lettura",tag:"Tool Gratuito",tagColor:"border-emerald-500/30 bg-emerald-500/5 text-emerald-400"},{slug:"nextjs-multilingual-seo",title:"Perché disegno itinerari Next.js multilingua nativi (IT/EN/ES) di base su qualunque commissione",excerpt:"Tracciare percorsi SEO internazionali in Next.js/Astro previene lag di rendering ed elimina i difetti riscontrati usando traduttori automatici lenti.",date:"28 Maggio 2026",readTime:"8 min di lettura",tag:"Web Design",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"expressive-typography-branding",title:"La tipografia espressiva come strumento primario di branding per studi artigianali indipendenti",excerpt:"Contro la normalizzazione estetica delle IA, lo studio indipendente si impone alternando ritmi asimmetrici e graffianti caratteri elvetici.",date:"15 Aprile 2026",readTime:"6 min di lettura",tag:"Design Theory",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"}]},es:{readMore:"Leer artículo →",posts:[{slug:"aftercast",title:"Aftercast: Abrí un Estudio de Juegos en Solitario y Lancé un Sniper Gratis",excerpt:"Sin anuncios durante la partida, sin dark patterns, números de versión honestos, changelog público. Conoce Aftercast — y juega Snaiper, un sniper gratuito en el navegador con viento, caída y tiempo de vuelo reales.",date:"27 de septiembre de 2026",readTime:"6 min de lectura",tag:"Estudio",tagColor:"border-indigo-500/30 bg-indigo-500/5 text-indigo-400"},{slug:"startup-launch-directories-we-actually-use",title:"Construimos Dos Directorios de Lanzamiento. Aquí Está Cada Otro Que Usamos de Verdad.",excerpt:"La historia real detrás de runs.space y runs-this.today — más la lista honesta de cada otro directorio de lanzamiento de startups actualmente en nuestra rotación.",date:"15 de septiembre de 2026",readTime:"8 min de lectura",tag:"Guía",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"reelnox-vs-handbrake",title:"ReelNox Studio vs HandBrake: ¿Cuál Deberías Usar Realmente?",excerpt:"Una comparación honesta, función por función — gratis y open source frente a un toolkit de $39 de una vez, ajustes densos frente a una interfaz moderna, y dónde gana cada uno de verdad.",date:"1 de septiembre de 2026",readTime:"11 min de lectura",tag:"Comparativa",tagColor:"border-teal-500/30 bg-teal-500/5 text-teal-400"},{slug:"timezone-widget-windows",title:"El Widget de Zona Horaria para Windows Hecho para Que Nunca Más Pierdas una Llamada",excerpt:"Time Precision es un widget gratuito para Windows — 233 ciudades, hover para segundos en vivo, 9 acabados, reordenar con drag-and-drop. Sin cuenta, sin suscripción.",date:"5 de agosto de 2026",readTime:"8 min de lectura",tag:"Producto",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"}
1,{slug:"software-license-key-guide",title:"Claves de Licencia de Software, Explicadas de Verdad",excerpt:'"Clave de licencia", "product key", "serial key" — cuatro términos que describen sistemas bastante distintos. Qué son, cómo funcionan, los tipos, y cómo añadir una a tu app.',date:"30 de julio de 2026",readTime:"13 min de lectura",tag:"Guía",tagColor:"border-emerald-500/30 bg-emerald-500/5 text-emerald-400"},{slug:"ui-vs-ux-difference",title:"UI vs UX: La Diferencia que Nadie Explica Bien",excerpt:"UI y UX no son lo mismo, y confundirlos cuesta dinero real. 8 comparaciones claras, ejemplos reales y un quiz interactivo para ponerte a prueba.",date:"28 de julio de 2026",readTime:"9 min de lectura",tag:"Lección de Diseño",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"nicklaunches-review",title:"Envié BackDrop_ a NickLaunches — Esto Es Lo Que Realmente Pasó",excerpt:"Un relato honesto y en primera persona sobre listar BackDrop_ en NickLaunches — qué significan realmente los backlinks y el DR, las analíticas y herramientas de crecimiento reales detrás, y si valió la pena.",date:"23 Julio 2026",readTime:"10 min de lectura",tag:"Opinión",tagColor:"border-red-500/30 bg-red-500/5 text-red-400"},{slug:"video-wallpaper-app-windows",title:"¿Buscas una App de Fondo de Pantalla de Vídeo en Vivo? Esto Es Lo Que Realmente Funciona.",excerpt:"La mayoría de las apps de 'fondo de pantalla de vídeo' se tapan en cuanto abres una ventana. BackDrop_ v1.1.2 resuelve el problema real — un overlay de vídeo que sigue visible mientras trabajas de verdad.",date:"18 de julio de 2026",readTime:"7 min de lectura",tag:"Producto",tagColor:"border-violet-500/30 bg-violet-500/5 text-violet-400"},{slug:"multilingual-content-seo-organic-reach",title:"El Contenido Multilingüe Es SEO Real. Así Es Exactamente Cómo Lo Hacemos.",excerpt:"Por qué el contenido multilingüe es una estrategia real de alcance orgánico (no solo hype), y cómo escribimos y localizamos un artículo real sobre tu producto en 9 idiomas.",date:"18 de julio de 2026",readTime:"7 min de lectura",tag:"SEO y Contenido",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"how-much-does-a-website-cost",title:"¿Cuánto Cuesta Realmente una Página Web en 2026? Precios Reales, Sin Adivinar",excerpt:"Precios reales de páginas web para 2026 — creadores DIY, freelancers, agencias y desarrollos a medida con precio fijo, desglosados por tipo de negocio, con los costes ocultos que nadie te cuenta.",date:"14 de julio de 2026",readTime:"8 min de lectura",tag:"Diseño Web",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"web-design-fine-dining-restaurants",title:"Tu Comida Es de Nivel Michelin. ¿Y Tu Sitio Web?",excerpt:"Por qué el sitio web de un restaurante de alta cocina suele ser el eslabón más débil de la experiencia, lo que realmente cuesta a los huéspedes, y cómo debería ser un sitio a la altura de la cocina.",date:"12 de julio de 2026",readTime:"6 min de lectura",tag:"Diseño Web",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"offline-license-verification",title:"Cómo Verificar una Licencia de Software Offline (Sin Internet)",excerpt:"Cómo hacer que tu app de escritorio verifique una licencia con cero llamadas de red, usando leases firmados con Ed25519 en vez de una simple caché local editable. Código real para Python y Node.js/Electron.",date:"9 de Julio de 2026",readTime:"7 min de lectura",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"license-keys-desktop-app",title:"Cómo Añadir Claves de Licencia a Tu App de Escritorio Sin Construir un Backend",excerpt:"Guía práctica para añadir claves de licencia vinculadas a la máquina, activación y pruebas a tu app Electron, Python o .NET — con una pequeña API alojada en vez de tu propio backend de licencias.",date:"9 de Julio de 2026",readTime:"6 min de lectura",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"nuitka-python-standalone",title:"Compilar ejecutables Python standalone con Nuitka para eliminar la sobrecarga de máquina",excerpt:"La guía definitiva para lanzar archivos .exe ultrarrápidos en Windows, eliminando la necesidad de lentos paquetes runtime como PyInstaller.",date:"10 Junio 2026",readTime:"12 min de lectura",tag:"Windows Dev",tagColor:"border-orange-500/30 bg-
1orange-500/5 text-orange-400"},{slug:"authenticity-in-tech",title:"Internet se está ahogando en copias — Un manifiesto sobre la autenticidad",excerpt:"Internet se está ahogando en clones generados por IA. Un manifiesto personal sobre por qué la autenticidad y el esfuerzo siguen importando en 2026 — y lo que hacemos al respecto.",date:"9 de Junio de 2026",readTime:"5 min de lectura",tag:"Valores",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"},{slug:"watch-video-while-working-windows",title:"Cómo ver videos mientras trabajas en Windows — El método que realmente funciona",excerpt:"Tienes videos en tu disco que quieres ver. Tienes trabajo que hacer. Cada solución existente te obliga a elegir uno u otro. Esta guía compara cada opción real para archivos locales.",date:"6 Junio 2026",readTime:"5 min de lectura",tag:"Guía",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"purchasing-power-parity",title:"Precios justos para todos: por qué apoyamos la paridad de poder adquisitivo",excerpt:"Acabamos de hacer nuestro software más barato para 35+ países — automáticamente, sin cupón. Por qué creemos que los precios justos importan más que el máximo beneficio.",date:"6 Junio 2026",readTime:"4 min de lectura",tag:"Precios & Valores",tagColor:"border-orange-500/30 bg-
1orange-500/5 text-orange-400"},{slug:"backdrop",title:"Tenía 300 Horas de Video que Nunca Veía. Así que Construí BackDrop_.",excerpt:"Un ghost video overlay para Windows que te permite ver cualquier video local mientras trabajas. Sin limitaciones PiP, sin ocupar la pantalla. Tu contenido, finalmente visto.",date:"4 Junio 2026",readTime:"4 min de lectura",tag:"Producto",tagColor:"border-violet-500/30 bg-violet-500/5 text-violet-400"},{slug:"compress-large-video-files-windows",title:"Cómo comprimir archivos de video grandes en Windows sin perder calidad",excerpt:"Cualquier archivo MP4, MKV o AVI grande — redúcelo al 10% localmente con GPU. Sin nube, sin suscripción, sin pérdida de calidad.",date:"3 Junio 2026",readTime:"5 min de lectura",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"reddit-removed-my-post",title:"Reddit eliminó mi post sobre compresión de video. Así que escribí un blog post sobre ello.",excerpt:"Después de 20+ intentos de compartir contenido útil en Reddit, cada post fue eliminado. Lo que pienso al respecto y qué funciona en cambio.",date:"3 Junio 2026",readTime:"5 min de lectura",tag:"Opinión",tagColor:"border-red-500/30 bg-red-500/5 text-red-400"},{slug:"compress-obs-recordings",title:"Cómo comprimir grabaciones de OBS en Windows sin subirlas a ningún lado",excerpt:"Los archivos OBS alcanzan 10–30 GB. Aquí cómo reducirlos al 10% localmente con tu GPU — sin nube, sin suscripción.",date:"3 Junio 2026",readTime:"5 min de lectura",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"community",title:"Construir en público no debería significar construir solo.",excerpt:"Por qué estamos construyendo un espacio comunitario para devs indie, diseñadores y quienes usan nuestras herramientas. Un lugar para preguntar, compartir y no sentirse solo.",date:"1 Junio 2026",readTime:"3 min de lectura",tag:"Comunidad",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"typography-fundamentals",title:"Fundamentos de Tipografía: 8 Conceptos que Todo Diseñador Debe Conocer",excerpt:"Kerning, tracking, interlineado, escala tipográfica, contraste — las reglas invisibles que separan el buen diseño del excelente. Con 8 demos interactivos gratuitos.",date:"1 Junio 2026",readTime:"6 min de lectura",tag:"Lección de Diseño",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"compress-video-gpu-windows",title:"Cómo comprimir videos con GPU en Windows — 5–10x más rápido que la CPU",excerpt:"Usa tu GPU NVIDIA, AMD o Intel para comprimir video H.264/H.265 mucho más rápido. Guía gratuita + la herramienta Windows para esto.",date:"30 Mayo 2026",readTime:"5 min de lectura",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"delete-all-tweets",title:"Cómo eliminar todos tus tweets de una vez — Gratis, sin API",excerpt:"X no tiene botón de eliminar todo. Las herramientas de pago cobran mensualmente. Este script gratuito lo hace en minutos — sin instalación, sin trampa.",date:"30 Mayo 2026",readTime:"4 min de lectura",tag:"Herramienta Gratuita",tagColor:"border-emerald-500/30 bg-emerald-500/5 text-emerald-400"},{slug:"nextjs-multilingual-seo",title:"Por qué diseño rutas Next.js multilingüe nativas (IT/EN/ES) por defecto en cada comisión",excerpt:"Mapear rutas SEO internacionales en Next.js/Astro previene el lag de renderizado y elimina los defectos encontrados usando traductores automáticos lentos.",date:"28 Mayo 2026",readTime:"8 min de lectura",tag:"Web Design",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"expressive-typography-branding",title:"La tipografía expresiva como herramienta principal de branding para estudios artesanales independientes",excerpt:"Contra la normalización estética de la IA, el estudio independiente se impone alternando ritmos asimétricos y llamativas tipografías estilo Helvética.",date:"15 Abril 2026",readTime:"6 min de lectura",tag:"Design Theory",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"}]},de:{readMore:"Artikel lesen →",posts:[{slug:"aftercast",title:"Aftercast: Ich Habe ein Solo-Spielestudio Gestartet und ein Kostenloses Sniper-Spiel Veröffentlicht",excerpt:"Keine Werbung während des Spiels, keine Dark Patterns, ehrliche Versionsnummern, öffentliches Changelog. Lernen Sie Aftercast kennen — und spielen Sie Snaiper, ein kostenloses Browser-Sniper-Spiel mit echtem Wind, Fall und Flugzeit.",date:"27. September 2026",readTime:"6 Min. Lesezeit",tag:"Studio",tagColor:"border-indigo-500/30 bg-indigo-500/5 text-indigo-400"},{slug:"startup-launch-directories-we-actually-use",title:"Wir Haben Zwei Launc
1h-Verzeichnisse Selbst Gebaut. Hier Ist Jedes Andere, Das Wir Wirklich Nutzen.",excerpt:"Die echte Geschichte hinter runs.space und runs-this.today — plus eine ehrliche Liste jedes anderen Startup-Launch-Verzeichnisses, das derzeit in unserer eigenen Rotation ist.",date:"15. September 2026",readTime:"8 Min. Lesezeit",tag:"Leitfaden",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"reelnox-vs-handbrake",title:"ReelNox Studio vs HandBrake: Welches Solltest Du Wirklich Nutzen?",excerpt:"Ein ehrlicher Vergleich, Feature für Feature — kostenlos und Open Source gegen ein einmaliges $39-Toolkit, dichte Einstellungen gegen eine moderne Oberfläche, und wo jedes wirklich gewinnt.",date:"1. September 2026",readTime:"11 Min. Lesezeit",tag:"Vergleich",tagColor:"border-teal-500/30 bg-teal-500/5 text-teal-400"},{slug:"timezone-widget-windows",title:"Das Zeitzonen-Widget für Windows, Gebaut Damit du Nie Wieder Einen Call Verpasst",excerpt:"Time Precision ist ein kostenloses Windows-Widget — 233 Städte, Hover für Live-Sekunden, 9 Finishes, Drag-and-Drop-Sortierung. Kein Konto, kein Abo.",date:"5. August 2026",readTime:"8 Min. Lesezeit",tag:"Produkt",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"},{slug:"software-license-key-guide",title:"Software-Lizenzschlüssel, Richtig Erklärt",excerpt:'"Lizenzschlüssel", "Produktschlüssel", "Seriennummer" — vier Begriffe für recht unterschiedliche Systeme. Was sie sind, wie sie funktionieren, die Typen, und wie man einen zur App hinzufügt.',date:"30. Juli 2026",readTime:"13 Min. Lesezeit",tag:"Guide",tagColor:"border-emerald-500/30 bg-emerald-500/5 text-emerald-400"},{slug:"ui-vs-ux-difference",title:"UI vs UX: Der Unterschied, Den Niemand Richtig Erklärt",excerpt:"UI und UX sind nicht dasselbe, und sie zu verwechseln kostet echtes Geld. 8 klare Vergleiche, echte Beispiele und ein interaktives Quiz zum Selbsttest.",date:"28. Juli 2026",readTime:"9 Min. Lesezeit",tag:"Design-Lektion",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"nicklaunches-review",title:"Ich Habe BackDrop_ bei NickLaunches Eingereicht — Das Ist Wirklich Passiert",excerpt:"Ein ehrlicher Erfahrungsbericht aus erster Hand über die Einreichung von BackDrop_ bei NickLaunches — was Backlinks und DR wirklich bedeuten, die echten Analytics und Wachstumstools dahinter, und ob es sich gelohnt hat.",date:"23. Juli 2026",readTime:"10 Min. Lesezeit",tag:"Meinung",tagColor:"border-red-500/30 bg-red-500/5 text-red-400"},{slug:"video-wallpaper-app-windows",title:"Suchst du eine Live-Video-Wallpaper-App? Das Funktioniert Wirklich.",excerpt:"Die meisten 'Video-Wallpaper'-Apps werden zugedeckt, sobald du ein Fenster öffnest. BackDrop_ v1.1.2 löst das echte Problem — ein Video-Overlay, das sichtbar bleibt, während du wirklich arbeitest.",date:"18. Juli 2026",readTime:"7 Min. Lesezeit",tag:"Produkt",tagColor:"border-violet-500/30 bg-violet-500/5 text-violet-400"},{slug:"multilingual-content-seo-organic-reach",title:"Mehrsprachiger Content Ist Echtes SEO. So Machen Wir Es Genau.",excerpt:"Warum mehrsprachiger Content eine echte Strategie für organische Reichweite ist (kein Hype), und wie wir einen echten Artikel über dein Produkt in 9 Sprachen schreiben und lokalisieren.",date:"18. Juli 2026",readTime:"7 Min. Lesezeit",tag:"SEO & Content",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"how-much-does-a-website-cost",title:"Was Kostet eine Website Wirklich im Jahr 2026? Echte Preise, Kein Raten",excerpt:"Echte Website-Preise für 2026 — DIY-Baukästen, Freelancer, Agenturen und maßgeschneiderte Festpreis-Websites, aufgeschlüsselt nach Branche, mit den versteckten Kosten, die dir niemand nennt.",date:"14. Juli 2026",readTime:"8 Min. Lesezeit",tag:"Webdesign",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"web-design-fine-dining-restaurants",title:"Ihre Küche Ist Michelin-Niveau. Ihre Website Auch?",excerpt:"Warum die Website eines Fine-Dining-Restaurants oft das schwächste Glied im Erlebnis ist, was das die Gäste wirklich kostet, und wie eine Website aussieht, die dem Niveau der Küche entspricht.",date:"12. Juli 2026",readTime:"6 Min. Lesezeit",tag:"Webdesign",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"offline-license-verification",title:"Wie Man eine Softwarelizenz Offline Verifiziert (Ohne Internet)",excerpt:"Wie deine Desktop-App eine Lizenz mit null Netzwerkaufrufen prüfen kann — mit Ed25519-signierten Leases statt eines einfachen lokalen Caches, den jeder bearbeiten kann. Echter Code für Python und Node.js/Electron.",date:"9. Juli 2026",readTime:"7 Min. Lesezeit",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"license-keys-desktop-app",title:"Wie Man Lizenzschlüssel zu Seiner Desktop-App Hinzufügt, Ohne ein Eigenes Backend zu Bauen",excerpt:"Praktische Anleitung zum Hinzufügen von gerätegebundenen Lizenzschlüsseln, Aktivierung und Testversionen zu deiner Electron-, Python- oder .NET-App — mit einer kleinen gehosteten API statt eigenem Backend.",date:"9. Juli 2026",readTime:"6 Min. Lesezeit",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"nuitka-python-standalone",title:"Standalone-Python-Executables mit Nuitka kompilieren und Maschinen-Overhead eliminieren",excerpt:"Der ultimative Leitfaden für ultraschnelle .exe-Dateien unter Windows, ohne langsame Runtime-Pakete wie PyInstaller.",date:"10. Juni 2026",readTime:"12 Min. Lesezeit",tag:"Windows Dev",tagColor:"border-orange-500/30 bg-
1orange-500/5 text-orange-400"},{slug:"authenticity-in-tech",title:"Das Internet ertrinkt in Kopien — Ein Manifest über Authentizität",excerpt:"Das Internet ertrinkt in KI-generierten Klonen. Ein persönliches Manifest darüber, warum Authentizität und Einsatz 2026 noch wichtig sind — und was wir bei Sublimearts dagegen tun.",date:"9. Juni 2026",readTime:"5 Min. Lesezeit",tag:"Werte",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"},{slug:"watch-video-while-working-windows",title:"Videos während der Arbeit unter Windows ansehen — Die Methode, die wirklich funktioniert",excerpt:"Du hast Videos auf deiner Festplatte, die du sehen möchtest. Du hast Arbeit zu erledigen. Jede bestehende Lösung zwingt dich zu wählen. Dieser Leitfaden vergleicht alle echten Optionen für lokale Dateien.",date:"6. Juni 2026",readTime:"5 Min. Lesezeit",tag:"Leitfaden",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"purchasing-power-parity",title:"Faire Preise für alle: Warum wir Kaufkraftparität unterstützen",excerpt:"Wir haben unsere Software für 35+ Länder günstiger gemacht — automatisch, ohne Gutschein. Warum wir glauben, dass faire Preise wichtiger sind als maximaler Gewinn.",date:"6. Juni 2026",readTime:"4 Min. Lesezeit",tag:"Preise & Werte",tagColor:"border-orange-500/30 bg-
1orange-500/5 text-orange-400"},{slug:"backdrop",title:"Ich hatte 300 Stunden Video, die ich nie geschaut habe. Also baute ich BackDrop_.",excerpt:"Ein Ghost-Video-Overlay für Windows, das dir ermöglicht, jedes lokale Video während der Arbeit zu schauen. Keine PiP-Einschränkungen, keine Bildschirmübernahme.",date:"4. Juni 2026",readTime:"4 Min. Lesezeit",tag:"Produkt",tagColor:"border-violet-500/30 bg-violet-500/5 text-violet-400"},{slug:"compress-large-video-files-windows",title:"Wie man große Videodateien unter Windows ohne Qualitätsverlust komprimiert",excerpt:"Jede große MP4-, MKV- oder AVI-Datei — lokal auf 10% verkleinern mit GPU. Keine Cloud, kein Abo, kein Qualitätsverlust.",date:"3. Juni 2026",readTime:"5 Min. Lesezeit",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"reddit-removed-my-post",title:"Reddit hat meinen Post über Videokomprimierung entfernt. Also habe ich einen Blog-Post darüber geschrieben.",excerpt:"Nach 20+ Versuchen, nützliche Inhalte auf Reddit zu teilen, wurde jeder Post entfernt. Was ich darüber denke und was stattdessen wirklich funktioniert.",date:"3. Juni 2026",readTime:"5 Min. Lesezeit",tag:"Meinung",tagColor:"border-red-500/30 bg-red-500/5 text-red-400"},{slug:"compress-obs-recordings",title:"OBS-Aufnahmen auf Windows komprimieren ohne sie hochzuladen",excerpt:"OBS-Dateien erreichen 10–30 GB. So schrumpfen Sie sie lokal mit der GPU auf 10% — keine Cloud, kein Abo.",date:"3. Juni 2026",readTime:"5 Min. Lesezeit",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"community",title:"In der Öffentlichkeit zu bauen sollte nicht bedeuten, alleine zu bauen.",excerpt:"Warum wir einen Community-Raum für Indie-Devs, Designer und Nutzer unserer Tools aufbauen. Ein Ort zum Fragen, Teilen und nicht allein zu sein.",date:"3. Juni 2026",readTime:"3 Min. Lesezeit",tag:"Community",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"typography-fundamentals",title:"Typographie-Grundlagen: 8 Konzepte, die jeder Designer kennen muss",excerpt:"Kerning, Tracking, Zeilenabstand, Typografieskala, Kontrast — die unsichtbaren Regeln des guten Designs. Mit 8 kostenlosen interaktiven Demos.",date:"1. Juni 2026",readTime:"6 Min. Lesezeit",tag:"Design-Lektion",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"compress-video-gpu-windows",title:"Videos mit GPU unter Windows komprimieren — 5–10x schneller als die CPU",excerpt:"Nutze deine NVIDIA, AMD oder Intel GPU für schnellere H.264/H.265 Komprimierung. Kostenlose Anleitung + das Windows-Tool dafür.",date:"30. Mai 2026",readTime:"5 Min. Lesezeit",tag:"Tutorial",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"delete-all-tweets",title:"Wie man alle Tweets auf einmal löscht — Kostenlos, kein API",excerpt:"X hat keinen 'Alles löschen'-Button. Kostenpflichtige Tools verlangen monatliche Gebühren. Dieses kostenlose Skript erledigt es in Minuten.",date:"30. Mai 2026",readTime:"4 Min. Lesezeit",tag:"Kostenloses Tool",tagColor:"border-emerald-500/30 bg-emerald-500/5 text-emerald-400"},{slug:"nextjs-multilingual-seo",title:"Warum ich für jeden Auftrag standardmäßig native mehrsprachige Next.js-Routen (IT/EN/ES) entwerfe",excerpt:"Die Abbildung internationaler SEO-Routen in Next.js/Astro verhindert Rendering-Lag und eliminiert Fehler durch langsame automatische Übersetzer.",date:"28. Mai 2026",readTime:"8 Min. Lesezeit",tag:"Web Design",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"expressive-typography-branding",title:"Ausdrucksstarke Typografie als primäres Branding-Werkzeug für unabhängige Handwerksstudios",excerpt:"Gegen KI-Ästhetik-Normalisierung setzt das unabhängige Studio auf asymmetrische Rhythmen und markante Helvetica-Schriften.",date:"15. April 2026",readTime:"6 Min. Lesezeit",tag:"Design Theory",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"}]},fr:{readMore:"Lire l'article →",posts:[{slug:"aftercast",title:"Aftercast : J'ai Lancé un Studio de Jeu en Solo et Sorti un Jeu de Sniper Gratuit",excerpt:"Aucune publicité pendant la partie, aucun dark pattern, des numéros de version honnêtes, un changelog public. Découvrez Aftercast — et jouez à Snaiper, un jeu de sniper gratuit dans le navigateur avec vent, chute et temps de vol réels.",date:"27 septembre 2026",readTime:"6 min de lecture",tag:"Studio",tagColor:"border-indigo-500/30 bg-indigo-500/5 text-indigo-400"},{slug:"startup-launch-directories-we-actually-use",title:"On a Construit Deux Annuaires de Lancement. Voici Tous les Autres Qu'on Utilise Vraiment.",excerpt:"La vraie histoire derrière runs.space et runs-this.today — plus la liste honnête de chaque autre annuaire de lancement de startup actuellement dans notre propre rotation.",date:"15 septembre 2026",readTime:"8 min de lecture",tag:"Guide",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"reelnox-vs-handbrake",title:"ReelNox Studio vs HandBrake : Lequel Utiliser Vraiment ?",excerpt:"Une comparaison honnête, fonction par fonction — gratuit et open source contre une suite à $39 en paiement unique, réglages denses contre interface moderne, et où chacun gagne vraiment.",date:"1 septembre 2026",readTime:"11 min de lecture",tag:"Comparatif",tagColor:"border-teal-500/30 bg-teal-500/5 text-teal-400"},{slug:"timezone-widget-windows",title:"Le Widget de Fuseau Horaire pour Windows Conçu pour Ne Plus Jamais Rater un Appel",excerpt:"Time Precision est un widget Windows gratuit — 233 villes, survol pour les secondes en direct, 9 finitions, glisser-déposer. Sans compte, sans abonnement.",date:"5 août 2026",readTime:"8 min de lecture",tag:"Produit",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"}
1,{slug:"software-license-key-guide",title:"Les Clés de Licence Logicielle, Enfin Bien Expliquées",excerpt:'"Clé de licence", "product key", "serial key" — quatre termes pour des systèmes assez différents. Ce qu\'ils sont, comment ils fonctionnent, les types, et comment en ajouter une à votre app.',date:"30 Juillet 2026",readTime:"13 min de lecture",tag:"Guide",tagColor:"border-emerald-500/30 bg-emerald-500/5 text-emerald-400"},{slug:"ui-vs-ux-difference",title:"UI vs UX : La Différence que Personne N'explique Vraiment",excerpt:"UI et UX ne sont pas la même chose, et les confondre coûte de l'argent réel. 8 comparaisons claires, des exemples concrets et un quiz interactif pour te tester.",date:"28 juillet 2026",readTime:"9 min de lecture",tag:"Leçon de Design",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"nicklaunches-review",title:"J'ai Soumis BackDrop_ à NickLaunches — Voici Ce Qui S'est Vraiment Passé",excerpt:"Un récit honnête à la première personne sur la soumission de BackDrop_ à NickLaunches — ce que backlinks et DR signifient vraiment, les vraies analytics et outils de croissance derrière, et si ça en valait la peine.",date:"23 juillet 2026",readTime:"10 min de lecture",tag:"Opinion",tagColor:"border-red-500/30 bg-red-500/5 text-red-400"},{slug:"video-wallpaper-app-windows",title:"Tu Cherches une App de Fond d'Écran Vidéo Live ? Voici Ce Qui Marche Vraiment.",excerpt:'La plupart des apps de "fond d\'écran vidéo" sont recouvertes dès que tu ouvres une fenêtre. BackDrop_ v1.1.2 résout le vrai problème — un overlay vidéo qui reste visible pendant que tu travailles vraiment.',date:"18 juillet 2026",readTime:"7 min de lecture",tag:"Produit",tagColor:"border-violet-500/30 bg-violet-500/5 text-violet-400"},{slug:"multilingual-content-seo-organic-reach",title:"Le Contenu Multilingue Est du Vrai SEO. Voici Exactement Comment On Le Fait.",excerpt:"Pourquoi le contenu multilingue est une vraie stratég
1ie de portée organique (pas juste du hype), et comment nous écrivons et localisons un vrai article sur votre produit en 9 langues.",date:"18 juillet 2026",readTime:"7 min de lecture",tag:"SEO & Contenu",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"how-much-does-a-website-cost",title:"Combien Coûte Vraiment un Site Web en 2026 ? Vrais Prix, Sans Deviner",excerpt:"Vrais prix de sites web pour 2026 — créateurs DIY, freelances, agences et sites sur mesure à prix fixe, détaillés par type d'activité, avec les coûts cachés que personne ne mentionne.",date:"14 juillet 2026",readTime:"8 min de lecture",tag:"Web Design",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"web-design-fine-dining-restaurants",title:"Votre Cuisine Est de Niveau Michelin. Votre Site l'Est-Il ?",excerpt:"Pourquoi le site d'un restaurant gastronomique est souvent le maillon le plus faible de l'expérience, ce que cela coûte vraiment aux clients, et à quoi ressemble un site à la hauteur de la cuisine.",date:"12 juillet 2026",readTime:"6 min de lecture",tag:"Web Design",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"offline-license-verification",title:"Comment Vérifier une Licence Logicielle Hors Ligne (Sans Internet)",excerpt:"Comment faire vérifier une licence à votre app de bureau avec zéro appel réseau, avec des leases signés Ed25519 au lieu d'un simple cache local modifiable. Code réel pour Python et Node.js/Electron.",date:"9 Juillet 2026",readTime:"7 min de lecture",tag:"Tutoriel",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"license-keys-desktop-app",title:"Comment Ajouter des Clés de Licence à Votre App de Bureau Sans Construire de Backend",excerpt:"Guide pratique pour ajouter des clés de licence liées à la machine, l'activation et les essais à votre app Electron, Python ou .NET — avec une petite API hébergée au lieu de votre propre backend.",date:"9 Juillet 2026",readTime:"6 min de lecture",tag:"Tutoriel",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"nuitka-python-standalone",title:"Compiler des exécutables Python standalone avec Nuitka pour éliminer la surcharge machine",excerpt:"Le guide définitif pour lancer des fichiers .exe ultra-rapides sous Windows, sans avoir besoin de lents paquets runtime comme PyInstaller.",date:"10 Juin 2026",readTime:"12 min de lecture",tag:"Windows Dev",tagColor:"border-orange-500/30 bg-
1orange-500/5 text-orange-400"},{slug:"authenticity-in-tech",title:"Internet se noie dans les copies — Un manifeste sur l'authenticité",excerpt:"Internet se noie dans des clones générés par IA. Un manifeste personnel sur pourquoi l'authenticité et l'effort comptent encore en 2026 — et ce que nous faisons à ce sujet.",date:"9 Juin 2026",readTime:"5 min de lecture",tag:"Valeurs",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"},{slug:"watch-video-while-working-windows",title:"Comment regarder des vidéos en travaillant sous Windows — La méthode qui fonctionne vraiment",excerpt:"Tu as des vidéos sur ton disque que tu veux regarder. Tu as du travail à faire. Chaque solution existante te force à choisir l'un ou l'autre. Ce guide compare toutes les options réelles pour les fichiers locaux.",date:"6 Juin 2026",readTime:"5 min de lecture",tag:"Guide",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"purchasing-power-parity",title:"Prix équitables pour tous : pourquoi nous soutenons la parité de pouvoir d'achat",excerpt:"Nous venons de rendre notre logiciel moins cher pour 35+ pays — automatiquement, sans coupon. Pourquoi nous croyons que des prix équitables comptent plus que le profit maximum.",date:"6 Juin 2026",readTime:"4 min de lecture",tag:"Prix & Valeurs",tagColor:"border-orange-500/30 bg-
1orange-500/5 text-orange-400"},{slug:"backdrop",title:"J'avais 300 heures de vidéo que je n'ai jamais regardées. Alors j'ai créé BackDrop_.",excerpt:"Un overlay vidéo fantôme pour Windows qui te permet de regarder n'importe quelle vidéo locale tout en travaillant. Sans limites PiP, sans occuper l'écran.",date:"4 Juin 2026",readTime:"4 min de lecture",tag:"Produit",tagColor:"border-violet-500/30 bg-violet-500/5 text-violet-400"},{slug:"compress-large-video-files-windows",title:"Comment compresser de grands fichiers vidéo sous Windows sans perte de qualité",excerpt:"N'importe quel grand fichier MP4, MKV ou AVI — réduisez-le à 10% localement avec GPU. Sans cloud, sans abonnement, sans perte de qualité.",date:"3 Juin 2026",readTime:"5 min de lecture",tag:"Tutoriel",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"reddit-removed-my-post",title:"Reddit a supprimé mon post sur la compression vidéo. Alors j'ai écrit un article de blog.",excerpt:"Après 20+ tentatives de partager du contenu utile sur Reddit, chaque post a été supprimé. Ce que j'en pense et ce qui fonctionne vraiment à la place.",date:"3 Juin 2026",readTime:"5 min de lecture",tag:"Opinion",tagColor:"border-red-500/30 bg-red-500/5 text-red-400"},{slug:"compress-obs-recordings",title:"Comment compresser les enregistrements OBS sur Windows sans les uploader nulle part",excerpt:"Les fichiers OBS atteignent 10–30 Go. Voici comment les réduire à 10% localement avec votre GPU — sans cloud, sans abonnement.",date:"3 Juin 2026",readTime:"5 min de lecture",tag:"Tutoriel",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"community",title:"Construire en public ne devrait pas signifier construire seul.",excerpt:"Pourquoi nous construisons un espace communautaire pour les devs indés, designers et utilisateurs de nos outils. Un endroit pour poser des questions, partager et ne pas se sentir seul.",date:"3 Juin 2026",readTime:"3 min de lecture",tag:"Communauté",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"typography-fundamentals",title:"Fondamentaux de la Typographie : 8 Concepts que Tout Designer Doit Connaître",excerpt:"Crénage, approche, interlignage, échelle typographique, contraste — les règles invisibles du bon design. Avec 8 démos interactives gratuites.",date:"1 Juin 2026",readTime:"6 min de lecture",tag:"Leçon de Design",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"compress-video-gpu-windows",title:"Compresser des vidéos avec GPU sous Windows — 5–10x plus rapide que le CPU",excerpt:"Utilisez votre GPU 
1NVIDIA, AMD ou Intel pour une compression H.264/H.265 beaucoup plus rapide. Guide gratuit + l'outil Windows dédié.",date:"30 Mai 2026",readTime:"5 min de lecture",tag:"Tutoriel",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"delete-all-tweets",title:"Comment supprimer tous ses tweets d'un coup — Gratuit, sans API",excerpt:"X n'a pas de bouton 'tout supprimer'. Les outils payants facturent mensuellement. Ce script gratuit le fait en quelques minutes.",date:"30 Mai 2026",readTime:"4 min de lecture",tag:"Outil Gratuit",tagColor:"border-emerald-500/30 bg-emerald-500/5 text-emerald-400"},{slug:"nextjs-multilingual-seo",title:"Pourquoi je conçois des routes Next.js multilingues natives (IT/EN/ES) par défaut sur chaque commande",excerpt:"Mapper les routes SEO internationales dans Next.js/Astro prévient le lag de rendu et élimine les défauts rencontrés avec les traducteurs automatiques lents.",date:"28 Mai 2026",readTime:"8 min de lecture",tag:"Web Design",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"expressive-typography-branding",title:"La typographie expressive comme outil de branding primaire pour les studios artisanaux indépendants",excerpt:"Face à la normalisation esthétique de l'IA, le studio indépendant s'impose en alternant rythmes asymétriques et caractères helvetiques percutants.",date:"15 Avril 2026",readTime:"6 min de lecture",tag:"Design Theory",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"}]},zh:{readMore:"阅读文章 →",posts:[{slug:"aftercast",title:"Aftercast:我独自创立了一家游戏工作室,并发布了一款免费狙击游戏",excerpt:"游戏过程中无广告、无暗黑模式、诚实的版本号、公开的更新日志。认识 Aftercast——畅玩 Snaiper,一款拥有真实风力、弹道下坠与飞行时间的免费浏览器狙击游戏。",date:"2026å¹´9月27日",readTime:"6分钟阅读",tag:"工作室",tagColor:"border-indigo-500/30 bg-indigo-500/5 text-indigo-400"},{slug:"startup-launch-directories-we-actually-use",title:"我们亲手建了两个发布目录。这是我们真正在用的其他每一个。",excerpt:"runs.space和runs-this.today背后的真实故事——以及我们目前实际在用的每一个其他创业发布目录的诚实清单。",date:"2026å¹´9月15日",readTime:"8分钟阅读",tag:"指南",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"reelnox-vs-handbrake",title:"ReelNox Studio vs HandBrake:你到底该用哪个?",excerpt:"一份诚实的逐项功能对比——免费开源 vs 一次性 $39 工具包,密集的设置 vs 现代化界面,以及各自真正的优势所在。",date:"2026å¹´9月1日",readTime:"11分钟阅读",tag:"对比",tagColor:"border-teal-500/30 bg-teal-500/5 text-teal-400"},{slug:"timezone-widget-windows",title:"这款Windows时区小组件,专为让你再也不会错过一次通话而生",excerpt:"Time Precision是一款免费的Windows桌面小组件——233座城市,悬停查看实时秒数,9种外观,拖放排序。无需账户,无需订阅。",date:"2026å¹´8月5日",readTime:"阅读需8分钟",tag:"产品",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"},{slug:"software-license-key-guide",title:"软件许可证密钥,讲清楚",excerpt:"「许可证密钥」「产品密钥」「序列号」——四个描述完全不同系统的术语。它们是什么、如何运作、有哪些类型,以及如何为你的应用添加一个。",date:"2026å¹´7月30日",readTime:"13分钟阅读",tag:"指南",tagColor:"border-emerald-500/30 bg-emerald-500/5 text-emerald-400"},{slug:"ui-vs-ux-difference",title:"UI 与 UX:没人讲清楚的那个区别",excerpt:"UI 和 UX 并不是一回事,混淆它们会付出真金白银的代价。8组清晰对比、真实案例,以及一个互动测验让你亲自检验。",date:"2026å¹´7月28日",readTime:"阅读需9分钟",tag:"设计课程",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"nicklaunches-review",title:"我把 BackDrop_ 提交给了 NickLaunches——真实经历分享",excerpt:"一份诚实的第一人称记录:在 NickLaunches 上架 BackDrop_——backlink 和 DR 到底是什么意思,平台背后真实的分析数据和增长工具,以及这一切是否值得。",date:"2026å¹´7月23日",readTime:"阅读需10分钟",tag:"观点",tagColor:"border-red-500/30 bg-red-500/5 text-red-400"},{slug:"video-wallpaper-app-windows",title:"在找动态视频壁纸应用?这才是真正有用的方案。",excerpt:"大多数「视频壁纸」应用一打开窗口就被遮住了。BackDrop_ v1.1.2解决了真正的问题——一个在你真正工作时依然可见的视频叠加层。",date:"2026å¹´7月18日",readTime:"阅读需7分钟",tag:"产品",tagColor:"border-violet-500/30 bg-violet-500/5 text-violet-400"},{slug:"multilingual-content-seo-organic-reach",title:"多语言内容才是真正的SEO。这正是我们的做法。",excerpt:"为什么多语言内容是一种真实的自然流量增长策略(而非炒作),以及我们究竟如何为您的产品撰写并本地化一篇真实文章,覆盖9种语言。",date:"2026å¹´7月18日",readTime:"阅读需7分钟",tag:"SEO与内容",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"how-much-does-a-website-cost",title:"2026年一个网站究竟要花多少钱?真实价格,不再猜测",excerpt:"2026年真实的网站建设价格——DIY建站工具、自由职业者、代理机构与固定价格的定制建站,按行业类型细分,附上没人告诉你的隐藏费用。",date:"2026å¹´7月14日",readTime:"阅读需8分钟",tag:"网页设计",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"web-design-fine-dining-restaurants",title:"您的料理已达米其林水准。您的网站呢?",excerpt:"为什么高端餐厅的网站常常是体验中最薄弱的一环ï¼
1Œè¿™å¯¹å®¢æˆ·æ„å‘³ç€ä»€ä¹ˆä»£ä»·ï¼Œä»¥åŠä¸€ä¸ªé…å¾—上您料理水准的网站应该是什么样子。",date:"2026å¹´7月12日",readTime:"阅读需6分钟",tag:"网页设计",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"offline-license-verification",title:"如何离线验证软件许可证(无需互联网)",excerpt:"如何让你的桌面应用以零网络调用验证许可证——使用 Ed25519 签名租约,而非任何人都能编辑的简单本地缓存。附 Python 和 Node.js/Electron 的真实代码。",date:"2026å¹´7月9日",readTime:"7分钟阅读",tag:"教程",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"license-keys-desktop-app",title:"如何在不自建后端的情况下为你的桌面应用添加许可证密钥",excerpt:"为你的 Electron、Python 或 .NET 桌面应用添加设备绑定许可证密钥、激活和试用的实用指南——使用小型托管 API,而不是自建授权后端。",date:"2026å¹´7月9日",readTime:"6分钟阅读",tag:"教程",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"nuitka-python-standalone",title:"使用Nuitka编译Python独立可执行文件以消除机器开销",excerpt:"在Windows上启动超快.exe文件的权威指南,无需PyInstaller等慢速运行时包。",date:"2026å¹´6月10日",readTime:"12分钟阅读",tag:"Windows Dev",tagColor:"border-orange-500/30 bg-
1orange-500/5 text-orange-400"},{slug:"authenticity-in-tech",title:"互联网正在被复制品淹没 — 一位开发者关于真实性的宣言",excerpt:"互联网正在被AI生成的克隆品淹没。一篇关于真实性和努力为何在2026年仍然重要的个人宣言——以及我们在Sublimearts为此所做的事情。",date:"2026年6月9日",readTime:"5分钟阅读",tag:"价值观",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"},{slug:"watch-video-while-working-windows",title:"如何在Windows工作时看视频——真正有效的方法",excerpt:"你有想看的视频,也有工作要做。现有的每种解决方案都强迫你二选一。本指南比较了所有本地文件播放的真实选项。",date:"2026年6月6日",readTime:"5分钟阅读",tag:"指南",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"purchasing-power-parity",title:"人人公平定价:为什么我们支持购买力平价",excerpt:"我们刚刚为35+个国家自动降低了软件价格——无需优惠券。为什么我们相信公平定价比最大利润更重要。",date:"2026年6月6日",readTime:"4分钟阅读",tag:"定价与价值观",tagColor:"border-orange-500/30 bg-
1orange-500/5 text-orange-400"},{slug:"backdrop",title:"我有300小时的视频从未看过。于是我构建了BackDrop_。",excerpt:"一款Windows幽灵视频叠加层,让你在工作时观看任何本地视频。无PiP限制,无屏幕占用。你的内容,终于被观看。",date:"2026年6月4日",readTime:"4分钟阅读",tag:"产品",tagColor:"border-violet-500/30 bg-violet-500/5 text-violet-400"},{slug:"compress-large-video-files-windows",title:"如何在Windows上压缩大型视频文件而不损失质量",excerpt:"任何大型MP4、MKV或AVI文件——用GPU在本地压缩到10%。无需云端,无需订阅,无质量损失。",date:"2026年6月3日",readTime:"5分钟阅读",tag:"教程",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"reddit-removed-my-post",title:"Reddit删除了我的视频压缩帖子。所以我写了一篇博客文章。",excerpt:"在20多次尝试在Reddit上分享有用内容后,每篇帖子都被删除了。我的想法以及真正有效的替代方案。",date:"2026年6月3日",readTime:"5分钟阅读",tag:"观点",tagColor:"border-red-500/30 bg-red-500/5 text-red-400"},{slug:"compress-obs-recordings",title:"如何在Windows上压缩OBS录像而不上传到任何地方",excerpt:"OBS文件可达10–30GB。以下是如何用GPU在本地将其压缩到10%大小——无需云端,无需订阅。",date:"2026年6月3日",readTime:"5分钟阅读",tag:"教程",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"community",title:"公开构建不应该意味着独自构建。",excerpt:"为什么我们要为独立开发者、设计师和工具用户构
1建社区空间。一个提问、分享、不再孤独的地方。",date:"2026年6月3日",readTime:"3分钟阅读",tag:"社区",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"typography-fundamentals",title:"排版基础:每个设计师必须了解的8个概念",excerpt:"字距、追踪、行距、字体比例、对比度——将好设计与优秀设计区分开来的隐形规则。包含8个免费互动演示。",date:"2026年6月1日",readTime:"6分钟阅读",tag:"设计课程",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"compress-video-gpu-windows",title:"如何在Windows上用GPU压缩视频 — 比CPU快5–10倍",excerpt:"使用NVIDIA、AMD或Intel GPU以更快速度压缩H.264/H.265视频。免费指南 + 专为此构建的Windows工具。",date:"2026年5月30日",readTime:"5分钟阅读",tag:"教程",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"delete-all-tweets",title:"如何一次性删除所有推文 — 免费,无需API",excerpt:"X没有全部删除按钮。付费工具按月收费。这个免费浏览器脚本几分钟就能搞定。",date:"2026年5月30日",readTime:"4分钟阅读",tag:"免费工具",tagColor:"border-emerald-500/30 bg-emerald-500/5 text-emerald-400"},{slug:"nextjs-multilingual-seo",title:"为什么我在每个项目中默认构建原生多语言Next.js路由(IT/EN/ES)",excerpt:"在Next.js/Astro中映射国际SEO路由可防止渲染延迟,并消除使用慢速自动翻译器时发现的缺陷。",date:"2026年5月28日",readTime:"8分钟阅读",tag:"Web Design",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"expressive-typography-branding",title:"表达性排版作为独立工匠工作室的主要品牌工具",excerpt:"对抗AI审美同质化,独立工作室通过交替使用不对称节奏和醒目的Helvetica风格字体来彰显自我。",date:"2026年4月15日",readTime:"6分钟阅读",tag:"Design Theory",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"}]},ja:{readMore:"記事を読む →",posts:[{slug:"aftercast",title:"Aftercast:ひとりでゲームスタジオを立ち上げ、無料の狙撃ゲームを公開した",excerpt:"プレイ中の広告なし、ダークパターンなし、正直なバージョン番号、公開チェンジログ。Aftercastを紹介——そしてSnaiperをプレイ。本物の風、弾道落下、飛行時間を再現した無料ブラウザ狙撃ゲーム。",date:"2026年9月27日",readTime:"6分で読めます",tag:"スタジオ",tagColor:"border-indigo-500/30 bg-indigo-500/5 text-indigo-400"},{slug:"startup-launch-directories-we-actually-use",title:"自分たちでローンチディレクトリを2つ作りました。実際に使っている他のすべてがこちらです。",excerpt:"runs.spaceとruns-this.todayの裏にある本当の物語——そして現在実際にローテーションで使っている他のすべてのスタートアップローンチディレクトリの正直なリスト。",date:"2026年9月15日",readTime:"8分で読めます",tag:"ガイド",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"reelnox-vs-handbrake",title:"ReelNox Studio vs HandBrake:実際どちらを使うべき?",excerpt:"無料でオープンソース vs 一括払い$39のツールキット、密度の高い設定 vs モダンなインターフェース——機能ごとに正直に比較し、それぞれが本当に勝る点を検証。",date:"2026年9月1日",readTime:"11分で読了",tag:"比較",tagColor:"border-teal-500/30 bg-teal-500/5 text-teal-400"},{slug:"timezone-widget-windows",title:"Windowsタイムゾーンウィジェット——もう二度と通話を逃さないために作られました",excerpt:"Time Precisionは無料のWindowsデスクトップウィジェットです——233都市、ホバーでリアルタイムの秒数、9種類の仕上げ、ドラッグ&ドロップで並べ替え。アカウント不要、サブスクリプションなし。",date:"2026年8月5日",readTime:"読了時間8分",tag:"製品",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"}
1,{slug:"software-license-key-guide",title:"ソフトウェアライセンスキーを、きちんと解説する",excerpt:"「ライセンスキー」「プロダクトキー」「シリアルキー」——4つの言葉が指すのは、実はかなり違う仕組み。それが何か、どう機能するか、種類、そしてアプリへの追加方法。",date:"2026å¹´7月30日",readTime:"13分で読めます",tag:"ガイド",tagColor:"border-emerald-500/30 bg-emerald-500/5 text-emerald-400"},{slug:"ui-vs-ux-difference",title:"UI と UX:誰もちゃんと説明しない違い",excerpt:"UIとUXは同じものではなく、混同すると実際にお金を無駄にします。8つの明快な比較、実例、そして自分を試せるインタラクティブなクイズ。",date:"2026å¹´7月28日",readTime:"読了時間9分",tag:"デザインレッスン",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"nicklaunches-review",title:"BackDrop_をNickLaunchesに登録してみた——実際に起きたこと",excerpt:"BackDrop_をNickLaunchesに掲載した、正直な一人称の体験談——バックリンクやDRが実際に何を意味するのか、その裏にある本物の分析データと成長ツール、そしてそれだけの価値があったã
1®ã‹ã€‚",date:"2026å¹´7月23日",readTime:"10分で読めます",tag:"意見",tagColor:"border-red-500/30 bg-red-500/5 text-red-400"},{slug:"video-wallpaper-app-windows",title:"ライブ動画壁紙アプリをお探しですか?本当に機能するのはこれです。",excerpt:"ほとんどの「動画壁紙」アプリはウィンドウを開いた瞬間に隠れてしまいます。BackDrop_ v1.1.2は、実際に作業している間も表示され続ける動画オーバーレイという本当の解決策を提供します。",date:"2026å¹´7月18日",readTime:"読了時間7分",tag:"製品",tagColor:"border-violet-500/30 bg-violet-500/5 text-violet-400"},{slug:"multilingual-content-seo-organic-reach",title:"多言語コンテンツは本物のSEOです。具体的なやり方をご紹介します。",excerpt:"多言語コンテンツがなぜ本物のオーガニックリーチ戦略なのか(単なる誇大宣伝ではなく)、そして実際にあなたの製品について9言語で記事を執筆・ローカライズする方法を解説します。",date:"2026å¹´7月18日",readTime:"読了時間7分",tag:"SEO&コンテンツ",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"how-much-does-a-website-cost",title:"2026年、ウェブサイトの制作費用は実際いくら?本当の価格、推測なし",excerpt:"2026年の実際のウェブサイト制作費用——DIYビルダー、フリーランス、制作会社、そして固定価格のオーダーメイド制作を業種別に分解し、誰も教えてくれない隠れたコストまで解説。",date:"2026å¹´7月14日",readTime:"読了時間8分",tag:"ウェブデザイン",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"web-design-fine-dining-restaurants",title:"あなたの料理はミシュランレベル。あなたのサイトはどうですか?",excerpt:"高級レストランのウェブサイトがなぜ体験の中で最も弱い部分になりがちなのか、それが顧客にとって実際にどのようなコストになるのか、そして料理のレベルに見合ったサイトとはどのようなものか。",date:"2026å¹´7月12日",readTime:"読了時間6分",tag:"ウェブデザイン",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"offline-license-verification",title:"ソフトウェアライセンスをオフラインで検証する方法(インターネット不要)",excerpt:"誰でも編集できる単純なローカルキャッシュの代わりに Ed25519 署名リースを使い、デスクトップアプリがネットワーク呼び出しゼロでライセンスを確認できるようにする方法。Python と Node.js/Electron の実コード付き。",date:"2026å¹´7月9日",readTime:"7分で読めます",tag:"チュートリアル",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"license-keys-desktop-app",title:"自前のバックエンドを構築せずにデスクトップアプリにライセンスキーを追加する方法",excerpt:"Electron、Python、.NETデスクトップアプリに、マシン固定のライセンスキー、アクティベーション、トライアルを追加する実践ガイド——小さなホスト型APIを使う方法。",date:"2026å¹´7月9日",readTime:"6分で読めます",tag:"チュートリアル",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"nuitka-python-standalone",title:"Nuitkaを使用してスタンドアロンPython実行ファイルをコンパイルし、マシンオーバーヘッドを解消する",excerpt:"WindowsでPyInstallerのような低速なランタイムパッケージを必要とせず、超高速.exeファイルを起動するための決定的ガイド。",date:"2026å¹´6月10日",readTime:"12分で読めます",tag:"Windows Dev",tagColor:"border-orange-500/30 bg-
1orange-500/5 text-orange-400"},{slug:"authenticity-in-tech",title:"インターネットはコピーで溺れている — 真正性についての開発者のマニフェスト",excerpt:"インターネットはAI生成のクローンで溢れている。真正性と努力が2026年にもまだ重要な理由についての個人的なマニフェスト——Sublimearts での取り組み。",date:"2026年6月9日",readTime:"5分で読めます",tag:"価値観",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"},{slug:"watch-video-while-working-windows",title:"Windowsで作業しながら動画を見る方法——本当に機能する方法",excerpt:"ドライブに見たい動画がある。やるべき仕事もある。既存のあらゆる解決策はどちらかを選ばせる。このガイドはローカルファイルのすべての実際の選択肢を比較します。",date:"2026年6月6日",readTime:"5分で読めます",tag:"ガイド",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"purchasing-power-parity",title:"すべての人への公平な価格:購買力平価をサポートする理由",excerpt:"35カ国以上のソフトウェアを自動的に値下げしました——クーポン不要。最大利益よりも公平な価格が重要だと信じる理由。",date:"2026年6月6日",readTime:"4分で読めます",tag:"価格・価値観",tagColor:"border-orange-500/30 bg-
1orange-500/5 text-orange-400"},{slug:"backdrop",title:"見ていない動画が300時間分あった。だからBackDrop_を作った。",excerpt:"作業しながらローカル動画を視聴できるWindows用ゴーストビデオオーバーレイ。PiPの制限なし、画面占有なし。あなたのコンテンツ、ついに視聴できます。",date:"2026年6月4日",readTime:"4分で読めます",tag:"製品",tagColor:"border-violet-500/30 bg-violet-500/5 text-violet-400"},{slug:"compress-large-video-files-windows",title:"Windowsで大きな動画ファイルを画質を落とさずに圧縮する方法",excerpt:"大きなMP4、MKV、AVIファイルをGPUでローカルに10%に圧縮。クラウド不要、サブスク不要、画質劣化なし。",date:"2026年6月3日",readTime:"5分で読めます",tag:"チュートリアル",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"reddit-removed-my-post",title:"Redditが動画圧縮に関する投稿を削除した。だからブログ記事を書いた。",excerpt:"Redditで役立つコンテンツを20回以上投稿しようとしたが、すべて削除された。私の考えと、代わりに実際に機能するもの。",date:"2026年6月3日",readTime:"5分で読めます",tag:"意見",tagColor:"border-red-500/30 bg-red-500/5 text-red-400"},{slug:"compress-obs-recordings",title:"OBS録画をどこにもアップロードせずにWindows上で圧縮する方法",excerpt:"OBSファイルは10〜30GBになります。GPUを使ってローカルで10%のサイズに圧縮する方法 — クラウド不要、サブスク不要。",date:"2026年6月3日",readTime:"5分で読めます",tag:"チュートリアル",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"community",title:"公開で作ることは、一人で作ることを意味しない。",excerpt:"インディーデブ、デザイナー、ツールユーザーのためのコミュニティスペースを構築する理由。質問し、共有し、孤独を感じない場所。",date:"2026年6月3日",readTime:"3分で読めます",tag:"コミュニティ",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"typography-fundamentals",title:"タイポグラフィ基礎:すべてのデザイナーが知るべき8つのコンセプト",excerpt:"カーニング、トラッキング、行間、タイプスケール、コントラスト — 良いデザインと素晴らしいデザインを分ける目に見えないルール。8つの無料インタラクティブデモ付き。",date:"2026年6月1日",readTime:"6分で読めます",tag:"デザインレッスン",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"compress-video-gpu-windows",title:"WindowsでGPUを使って動画を圧縮する方法 — CPUより5–10倍高速",excerpt:"NVIDIA、AMD、IntelのGPUでH.264/H.265動画をより速く圧縮。無料ガイド + このために作られたWindowsツール。",date:"2026年5月30日",readTime:"5分で読めます",tag:"チュートリアル",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"delete-all-tweets",title:"すべてのツイートを一度に削除する方法 — 無料、API不要",excerpt:"X/Twitterには「すべて削除」ボタンがありません。有料ツールは月額課金。この無料スクリプトなら数分で完了。",date:"2026年5月30日",readTime:"4分で読めます",tag:"無料ツール",tagColor:"border-emerald-500/30 bg-emerald-500/5 text-emerald-400"},{slug:"nextjs-multilingual-seo",title:"すべての案件でデフォルトとしてネイティブ多言語Next.jsルート(IT/EN/ES)を設計する理由",excerpt:"Next.js/AstroでグローバルSEOルートをマッピングすることで、レンダリングの遅延を防ぎ、低速な自動翻訳ツールで見つかる欠陥を排除します。",date:"2026年5月28日",readTime:"8分で読めます",tag:"Web Design",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"expressive-typography-branding",title:"独立した職人スタジオのための主要なブランディングツールとしての表現的タイポグラフィ",excerpt:"AIによる美的標準化に対抗して、独立スタジオは非対称のリズムとHelveticaスタイルのフォントを組み合わせることで存在感を示します。",date:"2026年4月15日",readTime:"6分で読めます",tag:"Design Theory",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"}]},ko:{readMore:"기사 읽기 →",posts:[{slug:"aftercast",title:"Aftercast: 혼자 게임 스튜디오를 시작해 무료 저격 게임을 출시했습니다",excerpt:"플레이 중 광고 없음, 다크 패턴 없음, 정직한 버전 번호, 공개 체인지로그. Aftercast를 소개합니다 — 그리고 실제 바람, 탄착 낙하, 비행 시간을 구현한 무료 브라우저 저격 게임 Snaiper를 플레이해보세요.",date:"2026년 9월 27일",readTime:"6분 읽기",tag:"스튜디오",tagColor:"border-indigo-500/30 bg-indigo-500/5 text-indigo-400"},{slug:"startup-launch-directories-we-actually-use",title:"직접 런칭 디렉토리 두 개를 만들었습니다. 실제로 사용하는 다른 모든 곳을 소개합니다.",excerpt:"runs.space와 runs-this.today 뒤에 숨은 진짜 이야기 — 그리고 현재 우리가 실제로 돌아가며 쓰고 있는 다른 모든 스타트업 런칭 디렉토리의 솔직한 목록.",date:"2026년 9월 15일",readTime:"8분 읽기",tag:"가이드",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"reelnox-vs-handbrake",title:"ReelNox Studio vs HandBrake: 실제로 어떤 걸 써야 할까?",excerpt:"무료 오픈소스 vs 일회성 결제 $39 툴킷, 빽빽한 설정 vs 모던한 인터페이스 — 기능별로 솔직하게 비교하고 각각이 실제로 우위인 지점을 짚어봅니다.",date:"2026년 9월 1일",readTime:"11분 읽기",tag:"비교",tagColor:"border-teal-500/30 bg-teal-500/5 text-teal-400"},{slug:"timezone-widget-windows",title:"다시는 통화를 놓치지 않도록 만들어진 윈도우 시간대 위젯",excerpt:"Time Precision은 무료 윈도우 데스크톱 위젯입니다 — 233개 도시, 호버로 실시간 초 확인, 9가지 마감, 드래그 앤 드롭 재정렬. 계정 불필요, 구독 없음.",date:"2026년 8월 5일",readTime:"읽는 시간 8분",tag:"제품",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"}
1,{slug:"software-license-key-guide",title:"소프트웨어 라이선스 키, 제대로 설명합니다",excerpt:'"라이선스 키", "제품 키", "시리얼 키" — 꽤 다르게 작동하는 시스템을 가리키는 네 가지 용어. 무엇인지, 어떻게 작동하는지, 종류는 무엇인지, 앱에 추가하는 방법까지.',date:"2026년 7월 30일",readTime:"13분 읽기",tag:"가이드",tagColor:"border-emerald-500/30 bg-emerald-500/5 text-emerald-400"},{slug:"ui-vs-ux-difference",title:"UI vs UX: 아무도 제대로 설명해주지 않는 차이",excerpt:"UI와 UX는 같은 것이 아니며, 이를 혼동하면 실제로 돈이 낭비됩니다. 8가지 명확한 비교, 실제 사례, 그리고 직접 테스트해볼 수 있는 인터랙티브 퀴즈.",date:"2026년 7월 28일",readTime:"읽는 시간 9분",tag:"디자인 레슨",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"nicklaunches-review",title:"BackDrop_를 NickLaunches에 등록해봤다 — 실제로 일어난 일",excerpt:"BackDrop_를 NickLaunches에 등록한 솔직한 1인칭 후기 — 백링크와 DR이 실제로 무엇을 의미하는지, ê·¸ 뒤에 있는 진짜 분석 데이터와 성장 도구들, 그리고 그럴 가치가 있었는지.",date:"2026년 7월 23일",readTime:"10분 읽기",tag:"의견",tagColor:"border-red-500/30 bg-red-500/5 text-red-400"},{slug:"video-wallpaper-app-windows",title:"라이브 비디오 배경화면 앱을 찾고 계신가요? 진짜 효과 있는 방법은 이것입니다.",excerpt:"대부분의 '비디오 배경화면' 앱은 창을 여는 순간 가려집니다. BackDrop_ v1.1.2는 실제로 작업하는 동안에도 계속 보이는 비디오 오버레이로 진짜 문제를 해결합니다.",date:"2026년 7월 18일",readTime:"읽는 시간 7분",tag:"제품",tagColor:"border-violet-500/30 bg-violet-500/5 text-violet-400"},{slug:"multilingual-content-seo-organic-reach",title:"다국어 콘텐츠는 진짜 SEO입니다. 정확히 이렇게 진행합니다.",excerpt:"다국어 콘텐츠가 왜 진짜 오가닉 리치 전략인지(단순한 과장이 아니라), 그리고 실제로 당신의 제품에 대한 진짜 기사를 9개 언어로 작성하고 현지화하는 방법을 소개합니다.",date:"2026년 7월 18일",readTime:"읽는 시간 7분",tag:"SEO & 콘텐츠",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"how-much-does-a-website-cost",title:"2026년 웹사이트 제작 비용은 실제로 얼마일까요? 진짜 가격, 추측 없이",excerpt:"2026년 실제 웹사이트 가격 — DIY 빌더, 프리랜서, 에이전시, 고정가 맞춤 제작을 업종별로 정리하고, 아무도 말해주지 않는 숨겨진 비용까지 공개합니다.",date:"2026년 7월 14일",readTime:"읽는 시간 8분",tag:"웹 디자인",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"web-design-fine-dining-restaurants",title:"당신의 요리는 미슐랭 수준입니다. 웹사이트도 그런가요?",excerpt:"고급 레스토랑의 웹사이트가 왜 종종 경험에서 가장 약한 부분이 되는지, 그것이 고객에게 실제로 어떤 비용을 초래하는지, 그리고 요리 수준에 걸맞은 사이트는 어떤 모습이어야 하는지.",date:"2026년 7월 12일",readTime:"읽는 시간 6분",tag:"웹 디자인",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"offline-license-verification",title:"인터넷 없이 소프트웨어 라이선스를 오프라인으로 검증하는 방법",excerpt:"누구나 수정할 수 있는 단순한 로컬 캐시 대신 Ed25519 서명 리스를 사용해 데스크톱 앱이 네트워크 호출 없이 라이선스를 확인하게 하는 방법. Pythonê³¼ Node.js/Electron용 실제 코드 포함.",date:"2026년 7월 9일",readTime:"7분 읽기",tag:"튜토리얼",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"license-keys-desktop-app",title:"자체 백엔드 없이 데스크톱 앱에 라이선스 키 추가하는 방법",excerpt:"Electron, Python, .NET 데스크톱 앱에 기기 잠금 라이선스 키, 활성화, 체험판을 추가하는 실용 가이드 — 작은 호스팅 API를 사용하세요.",date:"2026년 7월 9일",readTime:"6분 읽기",tag:"튜토리얼",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"nuitka-python-standalone",title:"Nuitka로 독립 실행형 Python 실행 파일ì
1„ 컴파일하여 기계 오버헤드 제거",excerpt:"PyInstaller 같은 느린 런타임 패키지 없이 Windows에서 초고속 .exe 파일을 실행하기 위한 완벽한 가이드.",date:"2026년 6월 10일",readTime:"12분 읽기",tag:"Windows Dev",tagColor:"border-orange-500/30 bg-orange-500/5 text-orange-400"},{slug:"authenticity-in-tech",title:"인터넷은 복사본에 익사하고 있다 — 진정성에 대한 개발자의 선언문",excerpt:"인터넷은 AI 생성 클론으로 넘쳐나고 있다. 진정성과 노력이 2026년에도 여전히 중요한 이유에 대한 개인 선언문 — 그리고 우리가 Sublimearts에서 이에 대해 하는 것.",date:"2026년 6월 9일",readTime:"5분 읽기",tag:"가치관",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"},{slug:"watch-video-while-working-windows",title:"Windows에서 일하면서 동영상 보는 방법 — 실제로 작동하는 방법",excerpt:"드라이브에 ë³´ê³  싶은 동영상이 있습니다. 해야 할 일도 있습니다. 기존의 모든 솔루션은 하나를 선택하도록 강요합니다. 이 가이드는 로컬 파일의 모든 실제 옵션을 비교합니다.",date:"2026년 6월 6일",readTime:"5분 읽기",tag:"가이드",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"purchasing-power-parity",title:"모두를 위한 공정한 가격: 구매력 평가를 지지하는 이유",excerpt:"35개 이상의 국가에서 소프트웨어를 자동으로 더 저렴하게 만들었습니다 — 쿠폰 없이. 공정한 가격이 최대 이익보다 중요하다고 믿는 이유.",date:"2026년 6월 6일",readTime:"4분 읽기",tag:"가격 & 가치",tagColor:"border-orange-500/30 bg-
1orange-500/5 text-orange-400"},{slug:"backdrop",title:"한 번도 본 적 없는 동영상이 300시간이나 있었다. 그래서 BackDrop_을 만들었다.",excerpt:"작업하면서 로컬 비디오를 볼 수 있는 Windows용 고스트 비디오 오버레이. PiP 제한 없음, 화면 점령 없음. 당신의 콘텐츠, 드디어 시청됩니다.",date:"2026년 6월 4일",readTime:"4분 읽기",tag:"제품",tagColor:"border-violet-500/30 bg-violet-500/5 text-violet-400"},{slug:"compress-large-video-files-windows",title:"Windows에서 품질 손실 없이 대용량 동영상 파일 압축하는 방법",excerpt:"대용량 MP4, MKV, AVI 파일을 GPU로 로컬에서 10%로 압축. 클라우드 없이, 구독 없이, 화질 손실 없이.",date:"2026년 6월 3일",readTime:"5분 읽기",tag:"튜토리얼",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"reddit-removed-my-post",title:"Reddit이 내 동영상 압축 게시물을 삭제했다. 그래서 블로그 포스트를 썼다.",excerpt:"Reddit에 유용한 콘텐츠를 20번 이상 공유하려 했지만 모두 삭제됐다. 내 생각과 실제로 효과적인 대안.",date:"2026년 6월 3일",readTime:"5분 읽기",tag:"의견",tagColor:"border-red-500/30 bg-red-500/5 text-red-400"},{slug:"compress-obs-recordings",title:"어디에도 업로드하지 않고 Windows에서 OBS 녹화 파일 압축하는 방법",excerpt:"OBS 파일은 10~30GB에 달합니다. GPU로 로컬에서 10% 크기로 줄이는 방법 — 클라우드 없이, 구독 없이.",date:"2026년 6월 3일",readTime:"5분 읽기",tag:"튜토리얼",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"community",title:"공개적으로 만드는 것이 혼자 만드는 것을 의미하지 않아야 한다.",excerpt:"인디 개발자, 디자이너, 도구 사용자를 위한 커뮤니티 공간을 만드는 이유. 질문하고, 공유하고, 혼자가 아닌 곳.",date:"2026년 6월 3일",readTime:"3분 읽기",tag:"커뮤니티",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"typography-fundamentals",title:"타이포그래피 기초: 모든 디자이너가 알아야 할 8가지 개념",excerpt:"자간, 트래킹, 행간, 타입 스케일, 대비 — 좋은 디자인과 훌륭한 디자인을 구분하는 보이지 않는 규칙. 8개의 무료 인터랙티브 데모 포함.",date:"2026년 6월 1일",readTime:"6분 읽기",tag:"디자인 레슨",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"compress-video-gpu-windows",title:"Windows에서 GPU로 동영상 압축하는 방법 — CPU보다 5–10배 빠름",excerpt:"NVIDIA, AMD 또는 Intel GPU를 사용하여 H.264/H.265 동영상을 훨씬 빠르게 압축하세요. 무료 가이드 + 이를 위한 Windows 도구.",date:"2026년 5월 30일",readTime:"5분 읽기",tag:"튜토리얼",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"delete-all-tweets",title:"모든 트윗을 한 번에 삭제하는 방법 — 무료, API 없이",excerpt:"X/Twitter에는 '전체 삭제' 버튼이 없습니다. 유료 도구는 매월 요금을 청구합니다. 이 무료 스크립트는 몇 분 만에 완료됩니다.",date:"2026년 5월 30일",readTime:"4분 읽기",tag:"무료 도구",tagColor:"border-emerald-500/30 bg-emerald-500/5 text-emerald-400"},{slug:"nextjs-multilingual-seo",title:"모든 커미션에서 기본적으로 네이티브 다국어 Next.js 라우트(IT/EN/ES)를 설계하는 이유",excerpt:"Next.js/Astro에서 국제 SEO 라우트를 매핑하면 렌더링 지연을 방지하고 느린 자동 번역기 사용 시 발견되는 결함을 제거합니다.",date:"2026년 5월 28일",readTime:"8분 읽기",tag:"Web Design",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"expressive-typography-branding",title:"독립 장인 스튜디오를 위한 주요 브랜딩 도구로서의 표현적 타이포그래피",excerpt:"AI 미학 표준화에 맞서, 독립 스튜디오는 비대칭 리듬과 인상적인 Helvetica 스타일 서체를 교대로 사용해 존재감을 드러냅니다.",date:"2026년 4월 15일",readTime:"6분 읽기",tag:"Design Theory",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"}]},ru:{readMore:"Читать статью →",posts:[{slug:"aftercast",title:"Aftercast: Я Запустил Соло-Студию Игр и Выпустил Бесплатную Снайперскую Игру",excerpt:"Никакой рекламы во время игры, никаких тёмных паттернов, честные номера версий, публичный список изменений. Знакомьтесь с Aftercast — и играйте в Snaiper, бесплатную снайперскую игру в браузере с настоящим ветром, падением и временем полёта пули.",date:"27 сентября 2026",readTime:"6 мин. чтения",tag:"Студия",tagColor:"border-indigo-500/30 bg-indigo-500/5 text-indigo-400"},{slug:"startup-launch-directories-we-actually-use",title:"Мы Сами Создали Две Директории Запуска. Вот Каждой Другой, Которой Мы Реально Пользуемся.",excerpt:"Настоящая история за runs.space и runs-this.today — плюс честный список каждой другой директории запуска стартапов, которая сейчас в нашей собственной ротации.",date:"15 сентября 2026",readTime:"8 мин. чтения",tag:"Гайд",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"reelnox-vs-handbrake",title:"ReelNox Studio против HandBrake: Что Выбрать На Самом Деле?",excerpt:"Честное сравнение функция за функцией — бесплатный опенсорс против разового набора инструментов за $39, перегруженные настройки против современного интерфейса, и где каждый из них действительно побеждает.",date:"1 сентября 2026",readTime:"11 мин. чтения",tag:"Сравнение",tagColor:"border-teal-500/30 bg-teal-500/5 text-teal-400"},{slug:"timezone-widget-windows",title:"Виджет Часовых Поясов для Windows, Созданный, Чтобы Вы Больше Никогда Не Пропустили Звонок",excerpt:"Time Precision — бесплатный виджет для Windows: 233 города, наведение курсора для секунд в реальном времени, 9 оформлений, перетаскивание для сортировки. Без аккаунта, без подписки.",date:"5 августа 2026",readTime:"8 мин чтения",tag:"Продукт",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"}
1,{slug:"software-license-key-guide",title:"Лицензионные Ключи ПО — Разбираем По-Настоящему",excerpt:"«Лицензионный ключ», «product key», «серийный номер» — четыре термина для довольно разных систем. Что это, как работает, какие типы бывают, и как добавить его в приложение.",date:"30 июля 2026",readTime:"13 мин. чтения",tag:"Гид",tagColor:"border-emerald-500/30 bg-emerald-500/5 text-emerald-400"},{slug:"ui-vs-ux-difference",title:"UI vs UX: Разница, Которую Никто Толком Не Объясняет",excerpt:"UI и UX — это не одно и то же, и путаница между ними стоит реальных денег. 8 чётких сравнений, реальные примеры и интерактивный тест, чтобы проверить себя.",date:"28 июля 2026",readTime:"9 мин. чтения",tag:"Урок дизайна",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"nicklaunches-review",title:"Я Отправил BackDrop_ на NickLaunches — Вот Что Произошло На Самом Деле",excerpt:"Честный рассказ от первого лица о размещении BackDrop_ на NickLaunches — что на самом деле значат backlink и DR, реальная аналитика и инструменты роста за кулисами, и стоило ли оно того.",date:"23 июля 2026",readTime:"10 мин. чтения",tag:"Мнение",tagColor:"border-red-500/30 bg-red-500/5 text-red-400"},{slug:"video-wallpaper-app-windows",title:"Ищете Приложение для Живых Видео-Обоев? Вот Что Реально Работает.",excerpt:"Большинство приложений для «видео-обоев» перекрываются в тот момент, когда вы открываете окно. BackDrop_ v1.1.2 решает настоящую проблему — видео-оверлей, который остаётся видимым, пока вы реально работаете.",date:"18 июля 2026",readTime:"7 мин чтения",tag:"Продукт",tagColor:"border-violet-500/30 bg-violet-500/5 text-violet-400"},{slug:"multilingual-content-seo-organic-reach",title:"Многоязычный Контент — Это Настоящее SEO. Вот Как Именно Мы Это Делаем.",excerpt:"Почему многоязычный контент — это реальная стратегия органического охвата (а не просто хайп), и как мы пишем и локализуем настоящую статью о вашем продукте на 9 языков.",date:"18 июля 2026",readTime:"7 мин чтения",tag:"SEO и Контент",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"how-much-does-a-website-cost",title:"Сколько на самом деле стоит сайт в 2026 году? Реальные цены, без гаданий",excerpt:"Реальные цены на сайты в 2026 году — DIY-конструкторы, фрилансеры, агентства и индивидуальная разработка по фиксированной цене, с разбивкой по типам бизнеса и скрытыми расходами, о которых никто не рассказывает.",date:"14 июля 2026",readTime:"8 мин чтения",tag:"Веб-дизайн",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"web-design-fine-dining-restaurants",title:"Ваша кухня на уровне Мишлен. А ваш сайт?",excerpt:"Почему сайт ресторана высокой кухни часто оказывается самым слабым звеном во впечатлении, во что это реально обходится клиентам, и как выглядит сайт, достойный уровня вашей кухни.",date:"12 июля 2026",readTime:"6 мин чтения",tag:"Веб-дизайн",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"offline-license-verification",title:"Как Проверить Лицензию Программы Офлайн (Без Интернета)",excerpt:"Как позволить настольному приложению проверять лицензию с нулём сетевых запросов — с помощью подписанных Ed25519 арендных токенов вместо простого локального кэша, который может отредактировать кто угодно. Реальный код для Python и Node.js/Electron.",date:"9 июля 2026",readTime:"7 мин. чтения",tag:"Руководство",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"license-keys-desktop-app",title:"Как Добавить Лицензионные Ключи в Настольное Приложение Без Создания Бэкенда",excerpt:"Практическое руководство по добавлению привязанных к устройству лицензионных ключей, активации и пробных версий в приложение на Electron, Python или .NET — с небольшим хостинговым API.",date:"9 июля 2026",readTime:"6 мин. чтения",tag:"Руководство",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"nuitka-python-standalone",title:"Компиляция автономных Python-исполняемых файлов с Nuitka для устранения накладных расходов",excerpt:"Исчерпывающее руководство по запуску сверхбыстрых .exe-файлов в Windows без медленных пакетов времени выполнения вроде PyInstaller.",date:"10 июня 2026",readTime:"12 мин. чтения",tag:"Windows Dev",tagColor:"border-orange-500/30 bg-
1orange-500/5 text-orange-400"},{slug:"authenticity-in-tech",title:"Интернет тонет в копиях — Манифест разработчика об аутентичности",excerpt:"Интернет тонет в клонах, сгенерированных ИИ. Личный манифест о том, почему аутентичность и усилия всё ещё важны в 2026 году — и что мы делаем с этим в Sublimearts.",date:"9 июня 2026",readTime:"5 мин. чтения",tag:"Ценности",tagColor:"border-amber-500/30 bg-amber-500/5 text-amber-400"},{slug:"watch-video-while-working-windows",title:"Как смотреть видео во время работы на Windows — Метод, который действительно работает",excerpt:"У тебя есть видео на диске, которые ты хочешь посмотреть. Есть работа, которую нужно сделать. Каждое существующее решение вынуждает выбирать одно из двух. Этот гид сравнивает все реальные варианты для локальных файлов.",date:"6 июня 2026",readTime:"5 мин. чтения",tag:"Руководство",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"purchasing-power-parity",title:"Справедливые цены для всех: почему мы поддерживаем паритет покупательной способности",excerpt:"Мы только что сделали наш софт дешевле для 35+ стран — автоматически, без купона. Почему мы считаем, что справедливые цены важнее максимальной прибыли.",date:"6 июня 2026",readTime:"4 мин. чтения",tag:"Цены & Ценности",tagColor:"border-orange-500/30 bg-
1orange-500/5 text-orange-400"},{slug:"backdrop",title:"У меня было 300 часов видео, которые я никогда не смотрел. Поэтому я создал BackDrop_.",excerpt:"Призрачный видеооверлей для Windows, позволяющий смотреть любое локальное видео во время работы. Без ограничений PiP, без захвата экрана. Твой контент, наконец просмотрен.",date:"4 июня 2026",readTime:"4 мин. чтения",tag:"Продукт",tagColor:"border-violet-500/30 bg-violet-500/5 text-violet-400"},{slug:"compress-large-video-files-windows",title:"Как сжать большие видеофайлы в Windows без потери качества",excerpt:"Любой большой файл MP4, MKV или AVI — сожмите до 10% локально с помощью GPU. Без облака, без подписки, без потери качества.",date:"3 июня 2026",readTime:"5 мин. чтения",tag:"Руководство",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"reddit-removed-my-post",title:"Reddit удалил мой пост о сжатии видео. Поэтому я написал блог-пост.",excerpt:"После 20+ попыток поделиться полезным контентом на Reddit каждый пост был удалён. Мои мысли и что реально работает вместо этого.",date:"3 июня 2026",readTime:"5 мин. чтения",tag:"Мнение",tagColor:"border-red-500/30 bg-red-500/5 text-red-400"},{slug:"compress-obs-recordings",title:"Как сжать записи OBS на Windows без загрузки куда-либо",excerpt:"Файлы OBS достигают 10–30 ГБ. Как сжать их до 10% локально с помощью GPU — без облака, без подписки.",date:"3 июня 2026",readTime:"5 мин. чтения",tag:"Руководство",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"community",title:"Строить публично не должно означать строить в одиночестве.",excerpt:"Почему мы строим сообщество для инди-разработчиков, дизайнеров и пользователей наших инструментов. Место для вопросов, обмена и не быть одному.",date:"3 июня 2026",readTime:"3 мин. чтения",tag:"Сообщество",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"typography-fundamentals",title:"Основы типографики: 8 концепций, которые должен знать каждый дизайнер",excerpt:"Кернинг, трекинг, интерлиньяж, типографская шкала, контраст — невидимые правила хорошего дизайна. 8 бесплатных интерактивных демо.",date:"1 июня 2026",readTime:"6 мин. чтения",tag:"Урок дизайна",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"},{slug:"compress-video-gpu-windows",title:"Как сжимать видео с GPU в Windows — В 5–10 раз быстрее CPU",excerpt:"Используйте GPU NVIDIA, AMD или Intel для более быстрого сжатия H.264/H.265. Бесплатное руководство + инструмент Windows для этого.",date:"30 мая 2026",readTime:"5 мин. чтения",tag:"Руководство",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"delete-all-tweets",title:"Как удалить все твиты сразу — Бесплатно, без API",excerpt:"В X/Twitter нет кнопки «удалить всё». Платные инструменты берут помесячно. Этот бесплатный скрипт справится за несколько минут.",date:"30 мая 2026",readTime:"4 мин. чтения",tag:"Бесплатный инструмент",tagColor:"border-emerald-500/30 bg-emerald-500/5 text-emerald-400"},{slug:"nextjs-multilingual-seo",title:"Почему я разрабатываю нативные многоязычные Next.js-маршруты (IT/EN/ES) по умолчанию для каждого заказа",excerpt:"Маппинг международных SEO-маршрутов в Next.js/Astro предотвращает задержки рендеринга и устраняет недостатки, характерные для медленных автопереводчиÐ
1ºÐ¾Ð².",date:"28 мая 2026",readTime:"8 мин. чтения",tag:"Web Design",tagColor:"border-blue-500/30 bg-blue-500/5 text-blue-400"},{slug:"expressive-typography-branding",title:"Выразительная типографика как основной инструмент брендинга для независимых студий",excerpt:"Против эстетической нормализации ИИ независимая студия заявляет о себе, чередуя асимметричные ритмы и броские шрифты в стиле Helvetica.",date:"15 апреля 2026",readTime:"6 мин. чтения",tag:"Design Theory",tagColor:"border-purple-500/30 bg-purple-500/5 text-purple-400"}]}},l={it:{badge:"DAL BLOG",title:"Ultimi Articoli",subtitle:"Approfondimenti tecnici, storie di prodotto e guide pratiche — aggiornato ad ogni pubblicazione.",viewAll:"Vedi tutti gli articoli",readPost:"Leggi"},en:{badge:"FROM THE BLOG",title:"Latest Articles",subtitle:"Technical deep dives, product stories and practical guides — updated with every publish.",viewAll:"View all articles",readPost:"Read"},es:{badge:"DEL BLOG",title:"Últimos Artículos",subtitle:"Análisis técnicos, historias de producto y guías prácticas — actualizado con cada publicación.",viewAll:"Ver todos los artículos",readPost:"Leer"},de:{badge:"AUS DEM BLOG",title:"Neueste Artikel",subtitle:"Technische Tiefgänge, Produktgeschichten und praktische Anleitungen — aktualisiert bei jeder Veröffentlichung.",viewAll:"Alle Artikel ansehen",readPost:"Lesen"},fr:{badge:"DEPUIS LE BLOG",title:"Derniers Articles",subtitle:"Analyses techniques, histoires de produits et guides pratiques — mis à jour à chaque publication.",viewAll:"Voir tous les articles",readPost:"Lire"},zh:{badge:"来自博客",title:"最新文章",subtitle:"技术深度解析、产品故事与实用指南——每次发布即更新。",viewAll:"查看所有文章",readPost:"阅读"},ja:{badge:"ブログから",title:"最新記事",subtitle:"技術的な深掘り、プロダクトストーリー、実践ガイド——公開の度に更新。",viewAll:"すべての記事を見る",readPost:"読む"},ko:{badge:"블로그에서",title:"최신 글",subtitle:"기술 심층 분석, 제품 이야기, 실용 가이드 — 게시할 때마다 업데이트됩니다.",viewAll:"모든 글 보기",readPost:"읽기"},ru:{badge:"ИЗ БЛОГА",title:"Последние Статьи",subtitle:"Технические разборы, истории продуктов и практические руководства — обновляется с каждой публикацией.",viewAll:"Смотреть все статьи",readPost:"Читать"}};e.s(["default",0,function({locale:e}){let u=l[e]??l.en,d=(s[e]??s.en).posts.slice(0,3),[c,g]=(0,r.useState)({});return(0,r.useEffect)(()=>{let e=d.map(e=>e.slug);o.supabase.from("blog_likes").select("slug").in("slug",e).then(({data:e})=>{if(!e)return;let t={};for(let r of e)t[r.slug]=(t[r.slug]??0)+1;g(t)})},[e]),(0,t.jsx)("section",{className:"py-20 px-4 sm:px-6 lg:px-8 bg-[#0a0a0a] border-b border-zinc-900",children:(0,t.jsxs)("div",{className:"max-w-7xl mx-auto",children:[(0,t.jsxs)("div",{className:"flex flex-col sm:flex-row sm:items-end sm:justify-between gap-4 mb-10",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"text-xs font-mono tracking-widest text-[#f97316] uppercase bg-orange-500/10 px-3 py-1 rounded-full",children:u.badge}),(0,t.jsx)("h2",{className:"text-3xl md:text-4xl font-display font-medium tracking-tight text-white mt-4",children:u.title}),(0,t.jsx)("p",{className:"text-zinc-400 mt-2 text-sm max-w-xl",children:u.subtitle})]}),(0,t.jsxs)(i.Link,{href:"/blog",className:"shrink-0 inline-flex items-center gap-1.5 text-sm font-mono text-zinc-400 hover:text-white transition-colors",children:[u.viewAll," ",(0,t.jsx)(n.ArrowRight,{className:"w-3.5 h-3.5","aria-hidden":"true"})]})]}),(0,t.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:d.map(e=>(0,t.jsx)(i.Link,{href:`/blog/${e.slug}`,className:"group",children:(0,t.jsxs)("article",{className:"h-full bg-zinc-900/40 border border-[#1e2020] hover:border-zinc-700 p-6 rounded-2xl transition-all flex flex-col",children:[(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2 font-mono text-[10px] text-zinc-500 mb-3",children:[(0,t.jsx)("span",{className:"text-[#f97316] font-bold uppercase tracking-wide",children:e.tag}),(0,t.jsx)("span",{children:"•"}),(0,t.jsx)("span",{children:e.readTime}),!!c[e.slug]&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("span",{children:"•"}),(0,t.jsxs)("span",{className:"flex items-center gap-1 text-pink-400/70",children:[(0,t.jsx)(a.Heart,{className:"w-3 h-3 fill-current","aria-hidden":"true"}),c[e.slug]]})]})]}),(0,t.jsx)("h3",{className:"text-lg font-display font-semibold text-white group-hover:text-[#f97316] transition-colors leading-snug",children:e.title}),(0,t.jsx)("p",{className:"text-zinc-400 text-xs leading-relaxed mt-2 flex-1",children:e.excerpt}),(0,t.jsxs)("span",{className:"mt-4 text-xs font-mono text-zinc-500 group-hover:text-white group-hover:translate-x-1 transition-all inline-flex items-center gap-1.5",children:[u.readPost," ",(0,t.jsx)(n.ArrowRight,{className:"w-3 h-3","aria-hidden":"true"})]})]})},e.slug))})]})})}],9720)},62369,e=>{"use strict";var t=e.i(43476),r=e.i(71645);let i="▓▒░█▀▄■□▪◆!@#$%?<>▌▐╳╱╲╔╗╚╝",a="SUBLIMEARTS.IO";function n(e,t){return e.split("").map((e,r)=>"."===e||"-"===e||" "===e||r<t?e:i[Math.floor(Math.random()*i.length)]).join("")}e.s(["default",0,function(){let[e,i]=(0,r.useState)("check"),[o,s]=(0,r.useState)(a),l=(0,r.useRef)(0),u=(0,r.useRef)(0);if((0,r.useEffect)(()=>sessionStorage.getItem("sa-intro-seen")?void i("done"):(sessionStorage.setItem("sa-intro-seen","1"),document.body.style.overflow="hidden",s(n(a,0)),i("glitch"),u.current=performance.now(),l.current=requestAnimationFrame(function e(){let t=performance.now()-u.current;if(t<600)s(n(a,0)),l.current=requestAnimationFrame(e);else if(t<1300){let r=Math.floor((t-600)/700*a.length);s(n(a,r)),l.current=requestAnimationFrame(e)}else s(a),i("hold"),document.body.style.overflow="",setTimeout(()=>{i("fade"),setTimeout(()=>i("done"),550)},250)}),()=>{cancelAnimationFrame(l.current),document.body.style.overflow=""}),[]),"done"===e)return null;let d="glitch"===e;return(0,t.jsxs)("div",{"aria-hidden":"true",className:"fixed inset-0 z-[99999] bg-[#0a0a0a] flex flex-col items-center justify-center select-none pointer-events-none",style:{opacity:+("check"!==e&&"fade"!==e),transition:"fade"===e?"opacity 0.55s cubic-bezier(0.4, 0, 1, 1)":"none"},children:[(0,t.jsx)("div",{className:"absolute inset-0 pointer-events-none",style:{backgroundImage:"repeating-linear-gradient(0deg, transparent, transparent 2px, rgba(255,255,255,0.025) 2px, rgba(255,255,255,0.025) 4px)",opacity:+!!d,transition:"opacity 0.3s ease"}}),(0,t.jsx)("img",{src:"/sublimearts-logo.png",alt:"",width:80,height:80,className:`object-contain mb-8 ${d?"glitch-img-intro":""}`,style:{transition:d?"none":"filter 0.3s ease, transform 0.3s ease"}}),(0,t.jsxs)("div",{className:"relative font-mono font-bold tracking-[0.18em] text-white",style:{fontSize:"clamp(2rem, 8vw, 6rem)"}
1,children:[d&&(0,t.jsx)("span",{"aria-hidden":!0,className:"absolute inset-0 text-orange-500/90 intro-ghost-orange whitespace-nowrap",children:o}),d&&(0,t.jsx)("span",{"aria-hidden":!0,className:"absolute inset-0 text-fuchsia-500/90 intro-ghost-fuchsia whitespace-nowrap",children:o}),(0,t.jsx)("span",{className:"relative z-10 whitespace-nowrap",children:o})]}),(0,t.jsx)("p",{className:"absolute bottom-10 font-mono text-[10px] tracking-widest text-zinc-600 uppercase",style:{opacity:+!d,transition:"opacity 0.4s ease"},children:"Sublimearts Lab · Worldwide"})]})}])}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.