@keyframes rise{0%{opacity:0;transform:translateY(22px)}to{opacity:1;transform:translateY(0)}}@keyframes word-up{0%{transform:translateY(112%)}to{transform:translateY(0)}}@keyframes pen-draw{to{stroke-dashoffset:0}}.hero{background:radial-gradient(55% 55% at 14% -6%,rgba(30,132,190,.44),transparent 62%),radial-gradient(48% 46% at 92% 18%,rgba(24,110,98,.36),transparent 60%),radial-gradient(46% 42% at 55% 108%,rgba(217,138,43,.26),transparent 62%),linear-gradient(160deg,#163c56,#1c5573 55%,#164a5c);color:#fff;overflow:hidden;padding:68px 0 160px;position:relative;text-align:center}.hero:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23a)'/%3E%3C/svg%3E");inset:-10%;mix-blend-mode:overlay;opacity:.06;z-index:0}.hero:after,.hero:before{content:"";position:absolute}.hero:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 100' preserveAspectRatio='none'%3E%3Cpath d='M0 32c320 58 760-32 1120 6 140 16 240 14 320-2v64H0Z' fill='%23fafbfc'/%3E%3C/svg%3E");background-size:100% 100%;bottom:-1px;height:96px;left:0;right:0;z-index:1}@media(max-width:900px){.hero{padding:64px 0 120px}.hero:after{height:64px}}.hero--tight-shot,.hero--tight.hero--tight-shot{padding-bottom:34px}@media(max-width:900px){.hero--tight-shot,.hero--tight.hero--tight-shot{padding-bottom:22px}}.hero .eyebrow{color:#c3e6f9}.hero__back{display:flex;left:0;position:absolute;top:-54px;width:max-content}@media(max-width:900px){.hero__back{top:-34px}}.hero .chip{background:hsla(0,0%,100%,.13);border-color:hsla(0,0%,100%,.28);color:#e4eef5}.hero .btn--accent{background:linear-gradient(180deg,#ecab5c,var(--amber));box-shadow:0 14px 30px -14px rgba(0,0,0,.45);color:var(--ink)}.hero .btn--accent:hover{box-shadow:0 20px 40px -14px rgba(0,0,0,.5)}.hero--compact{padding:52px 0 104px}.hero--compact .hero__title{font-size:clamp(2.1rem,4vw,3.2rem);max-width:34ch}.hero--compact .hero__sub{font-size:clamp(1.05rem,1.4vw,1.2rem);margin-top:18px}@media(max-width:900px){.hero--compact{padding:36px 0 76px}}.hero--tight{padding:56px 0 116px}@media(max-width:900px){.hero--tight{padding:48px 0 84px}}.hero .wrap{position:relative;z-index:1}.hero__aurora{inset:0;mask-image:linear-gradient(180deg,#000 72%,transparent);pointer-events:none;position:absolute;z-index:0}.hero__fwk{display:block;margin:0 auto;width:auto}.hero__fwk+.hero__title{margin-top:28px}@media(max-width:900px){.hero__fwk+.hero__title{margin-top:22px}}.hero__fwk--symfony{height:28px}.hero__fwk--sylius{height:26px}@media(max-width:900px){.hero__fwk--symfony{height:24px}.hero__fwk--sylius{height:22px}}.hero__title{font-size:clamp(2.5rem,5.4vw,4.5rem);letter-spacing:-.032em;line-height:1.05;margin:18px auto 0;max-width:22ch}.hero__clip,.hero__line{display:inline-block;margin-bottom:-.06em;overflow:hidden;padding-bottom:.06em;vertical-align:bottom}.hero__line--mark{margin:0 -.16em -.42em;overflow:visible;padding:0 .16em .42em;position:relative}.hero__word{animation:word-up .85s cubic-bezier(.2,.7,.2,1) forwards;animation-delay:calc(.12s + var(--i, 0)*.07s);display:inline-block;transform:translateY(112%)}.hero__highlight{position:relative;white-space:nowrap}.hero__stroke{fill:none;stroke-linecap:round;bottom:.19em;height:.38em;left:0;overflow:visible;pointer-events:none;position:absolute;width:100%}.hero__stroke path{stroke-dasharray:100 200;stroke-dashoffset:102}.hero__stroke-a{stroke-width:2.4;animation:pen-draw .38s cubic-bezier(.4,.05,.35,1) forwards;animation-delay:calc(1.02s + var(--i, 0)*.07s)}.hero__stroke-b{stroke-width:1.5;animation:pen-draw .26s cubic-bezier(.2,.7,.2,1) forwards;animation-delay:calc(1.4s + var(--i, 0)*.07s);opacity:.82}.hero__sub{color:#fff;font-size:clamp(1.18rem,1.7vw,1.4rem);margin:24px auto 0;max-width:56ch}.hero__quote{color:#d5e5ef;font-size:1.05rem;font-style:italic;margin:22px auto 0;max-width:56ch}.hero__quote cite{color:hsla(0,0%,100%,.62);display:block;font-family:var(--mono);font-size:.64rem;font-style:normal;letter-spacing:.1em;margin-top:8px;text-transform:uppercase}.hero__cta{margin-top:34px}.hero__micro{color:#d5e5ef;font-family:var(--mono);font-size:.72rem;margin-top:18px}.hero__checks{display:grid;gap:14px 22px;grid-template-columns:repeat(4,minmax(0,1fr));list-style:none;margin:40px auto 0;max-width:860px;padding:0;text-align:left}.hero__checks li{align-items:flex-start;display:flex;gap:10px}@media(max-width:900px){.hero__checks{grid-template-columns:1fr 1fr;max-width:520px}}@media(max-width:560px){.hero__checks{grid-template-columns:1fr;max-width:320px}}.hero__check-mark{background:#6ee7a8;border-radius:50%;color:#0d3a26;display:grid;flex:none;height:20px;margin-top:1px;place-items:center;width:20px}.hero__check-body{display:flex;flex-direction:column;line-height:1.35}.hero__check-body b{color:#fff;font-size:.92rem;font-weight:600}.hero__check-body span{color:#b9d2e2;font-size:.82rem}.hero__shot{margin-top:44px;max-width:1000px}@media(max-width:900px){.hero__shot{margin-top:32px}}.hero__rating{align-items:center;backdrop-filter:blur(6px);background:hsla(0,0%,100%,.13);border:1px solid hsla(0,0%,100%,.28);border-radius:99px;box-shadow:0 8px 22px -14px rgba(0,0,0,.4);color:#fff;display:inline-flex;gap:14px;margin:34px auto 0;padding:11px 22px}.hero__rating .stars{color:var(--amber);font-size:1.3rem;letter-spacing:3px}.hero__rating strong{font-size:1.45rem;font-weight:700;letter-spacing:-.02em;line-height:1}@media(max-width:560px){.hero__rating{border-radius:18px;flex-wrap:wrap;justify-content:center}}.hero__rating-sep{background:hsla(0,0%,100%,.32);height:20px;width:1px}.hero__rating-logo{height:20px;width:auto}.rise{animation:rise .9s cubic-bezier(.2,.7,.2,1) forwards;opacity:0}@media(prefers-reduced-motion:reduce){.hero__word{transform:none!important}.hero__stroke path{stroke-dashoffset:0!important}.rise{opacity:1!important}}.cta-band{background:linear-gradient(120deg,var(--blue-deep),var(--blue));border-radius:32px;color:#fff;overflow:hidden;padding:76px 56px;position:relative;text-align:center}@media(max-width:560px){.cta-band{padding:52px 28px}}.cta-band:before{background:radial-gradient(circle,rgba(217,138,43,.4),transparent 65%);border-radius:50%;content:"";filter:blur(50px);height:460px;position:absolute;right:-110px;top:-180px;width:460px}.cta-band .eyebrow{color:#a9d2ec;justify-content:center}.cta-band__title{font-size:clamp(2rem,3.8vw,3rem);font-weight:800;letter-spacing:-.028em;max-width:22ch}.cta-band__text,.cta-band__title{margin:14px auto 0;position:relative}.cta-band__text{color:#cbe4f4;max-width:52ch}.cta-band .cta-row{margin-top:30px;position:relative}.cta-band--compact{align-items:center;border-radius:var(--r-lg);display:flex;flex-wrap:wrap;gap:20px;justify-content:space-between;padding:32px 40px;text-align:left}.cta-band--compact:before{display:none}.cta-band--compact .cta-band__title{font-size:clamp(1.25rem,2.2vw,1.5rem);margin:0;max-width:40ch}.cta-band--compact .cta-row{margin-top:0}@media(max-width:560px){.cta-band--compact{justify-content:center;text-align:center}}.blog-layout{align-items:start;display:grid;gap:56px;grid-template-columns:minmax(0,1fr) 300px}@media(max-width:900px){.blog-layout{gap:48px;grid-template-columns:1fr}}.blog-main{min-width:0}@media(width > 900px){.blog-side{align-self:stretch}}@media(max-width:900px){.blog-side{border-top:1px solid var(--line);padding-top:36px}}.blog-side__inner{display:flex;flex-direction:column;gap:34px}@media(width > 900px){.blog-side__inner{max-height:calc(100vh - 122px);overflow-y:auto;position:sticky;scrollbar-width:thin;top:98px}}.widget__title{border-bottom:1px solid var(--line);color:var(--ink);font-size:1rem;font-weight:600;letter-spacing:-.01em;margin-bottom:18px;padding-bottom:12px;position:relative}.widget__title:after{background:var(--blue);bottom:-1px;content:"";height:2px;left:0;position:absolute;width:34px}.widget__list{display:flex;flex-direction:column;gap:18px;list-style:none;margin:0;padding:0}.post-row{padding-left:18px;position:relative}.post-row:before{border:1.5px solid var(--blue);border-radius:50%;content:"";height:7px;left:0;position:absolute;top:.5em;transition:border-color .2s,background .2s;width:7px}.post-row:hover:before{background:var(--blue);border-color:var(--blue)}.post-row__title{color:var(--ink);display:block;font-size:.95rem;line-height:1.35;text-decoration-color:transparent;text-underline-offset:3px;transition:color .2s,text-decoration-color .2s}.post-row__title:hover{color:var(--blue);text-decoration:underline;text-decoration-color:currentcolor}.post-row__date{color:var(--ink-dim);display:block;font-family:var(--mono);font-size:.6rem;letter-spacing:.1em;margin-top:5px;text-transform:uppercase}.tagcloud{display:flex;flex-wrap:wrap;gap:8px}.side-cta{background:var(--navy);color:#fff;overflow:hidden;position:relative}.side-cta:before{background:radial-gradient(circle,rgba(30,132,190,.28),transparent 65%);border-radius:50%;content:"";filter:blur(40px);height:520px;position:absolute;right:-160px;top:-220px;width:520px}.side-cta .arrowlink,.side-cta .eyebrow{color:#7cc4e8}.side-cta{border-radius:var(--r-md);padding:24px}.side-cta__title{font-size:1.12rem;letter-spacing:-.015em;line-height:1.25;position:relative}.side-cta__text{color:#b9cddb;font-size:.92rem;margin:10px 0 18px;position:relative}.side-cta .btn{justify-content:center;position:relative;width:100%}.blog-feed-link{align-items:center;color:var(--ink-dim);display:inline-flex;font-family:var(--mono);font-size:.62rem;gap:7px;letter-spacing:.1em;text-transform:uppercase;width:max-content}.blog-feed-link:hover{color:var(--blue)}.blog-search{margin-bottom:30px}.blog-search__row{align-items:stretch;display:flex;gap:12px}@media(max-width:560px){.blog-search__row{flex-wrap:wrap}}.blog-search__field{align-items:center;background:var(--white);border:1px solid var(--line);border-radius:99px;display:flex;flex:1;gap:10px;min-width:0;padding:6px 18px;transition:border-color .2s,box-shadow .2s}.blog-search__field:focus-within{border-color:var(--blue);box-shadow:0 0 0 4px var(--blue-soft)}@media(max-width:560px){.blog-search__field{flex-basis:100%}}.blog-search__icon{color:var(--ink-dim);display:flex;flex:none}.blog-search__input{background:none;border:0;color:var(--ink);flex:1;font:inherit;font-size:1rem;min-width:0;padding:10px 0}.blog-search__input:focus{outline:none}.blog-search__input::-webkit-search-cancel-button{appearance:none}.blog-search__submit{flex:none;padding-inline:26px}@media(max-width:560px){.blog-search__submit{justify-content:center;width:100%}}.blog-search__state{align-items:baseline;color:var(--ink-soft);display:flex;flex-wrap:wrap;gap:6px 14px;margin:-14px 0 30px}.blog-search__clear{color:var(--blue-deep);font-family:var(--mono);font-size:.62rem;letter-spacing:.1em;text-transform:uppercase}.blog-search__clear:hover{text-decoration:underline}.tag-filter{align-items:center;display:flex;flex-wrap:wrap;gap:10px;margin:-8px 0 30px}.tag-filter__label{color:var(--ink-dim);font-family:var(--mono);font-size:.64rem;letter-spacing:.1em;text-transform:uppercase}.tag-filter__clear{color:var(--ink-soft);font-size:.9rem}.tag-filter__clear:hover{color:var(--blue)}.post-grid{display:grid;gap:26px}.post-grid--2{grid-template-columns:repeat(2,minmax(0,1fr))}.post-grid--3{grid-template-columns:repeat(3,minmax(0,1fr))}@media(max-width:900px){.post-grid--3{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:560px){.post-grid{grid-template-columns:1fr}}.post-card{position:relative}.post-card:after{background:radial-gradient(340px circle at var(--mx,50%) var(--my,50%),var(--spot,rgba(30,132,190,.09)),transparent 65%);content:"";inset:0;opacity:0;pointer-events:none;position:absolute;transition:opacity .35s}.post-card:hover:after{opacity:1}.post-card{background:var(--white);border:1px solid var(--line);border-radius:var(--r-md);display:flex;flex-direction:column;overflow:hidden;transition:transform .25s,box-shadow .25s}.post-card:hover{box-shadow:var(--shadow);transform:translateY(-6px)}.post-card__link{color:inherit;text-decoration:none}.post-card__link:after{content:"";inset:0;position:absolute;z-index:1}.post-card__thumb{aspect-ratio:16/9;background:linear-gradient(135deg,var(--blue-deep),var(--blue));overflow:hidden;position:relative}.post-card__thumb img{height:100%;inset:0;object-fit:cover;position:absolute;transition:transform .5s ease;width:100%}.post-card__thumb i{background-image:radial-gradient(hsla(0,0%,100%,.16) 1px,transparent 0);background-size:18px 18px;inset:0;position:absolute}.post-card:hover .post-card__thumb img{transform:scale(1.04)}.post-card__body{display:flex;flex:1;flex-direction:column;padding:20px 24px 24px}.post-card__tags{display:flex;flex-wrap:wrap;gap:8px;margin:4px 0 14px;position:relative;z-index:2}.post-card__title{font-size:1.14rem;letter-spacing:-.015em;line-height:1.3;margin:0}.post-card .post-meta--card{margin-top:12px}.post-card__desc{-webkit-line-clamp:3;-webkit-box-orient:vertical;color:var(--ink-soft);display:-webkit-box;font-size:.94rem;margin:12px 0 0;overflow:hidden}.post-meta{color:var(--ink-dim);flex-wrap:wrap;font-family:var(--mono);font-size:.62rem;gap:6px 16px;letter-spacing:.1em;list-style:none;margin:0;padding:0;text-transform:uppercase}.post-meta,.post-meta li{align-items:center;display:flex}.post-meta li{gap:6px}.post-meta--card li+li:before{content:"·";margin-right:10px}.blog-empty{color:var(--ink-soft);padding:40px 0;text-align:center}.pager{gap:10px;justify-content:center;margin-top:56px}.pager,.pager__pages{align-items:center;display:flex}.pager__pages{gap:4px;list-style:none;margin:0;padding:0}.pager__page,.pager__step{align-items:center;background:var(--white);border:1px solid var(--line);border-radius:10px;color:var(--ink-soft);display:inline-flex;font-size:.92rem;height:38px;justify-content:center;min-width:38px;padding-inline:10px;transition:border-color .2s,color .2s,background .2s}.pager__page.is-current,.pager__page:hover,.pager__step:hover{border-color:var(--blue);color:var(--blue-deep)}.pager__page.is-current{background:var(--blue-soft);font-weight:600}.pager__step.is-disabled{opacity:.35;pointer-events:none}.pager__gap{color:var(--ink-dim);padding-inline:4px}.reading-progress{height:3px;inset:0 0 auto;pointer-events:none;position:fixed;z-index:200}.reading-progress i{background:linear-gradient(90deg,var(--blue),var(--amber));display:block;height:100%;width:var(--progress,0)}@media(prefers-reduced-motion:reduce){.reading-progress{display:none}}.post__cover{border-radius:var(--r-md);display:block;width:100%}.post-byline{align-items:flex-start;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:16px;margin-bottom:34px;padding:26px 0}.post-byline__meta{align-items:center;display:flex;flex-wrap:wrap;gap:10px 20px;width:100%}.post-byline__author{align-items:center;display:flex;gap:12px}.post-byline__avatar{border:1px solid var(--line);border-radius:50%;height:44px;object-fit:cover;width:44px}.post-byline__name{color:var(--ink);display:flex;flex-direction:column;font-size:.95rem;line-height:1.3}.post-byline__label{color:var(--ink-dim);font-family:var(--mono);font-size:.58rem;letter-spacing:.1em;text-transform:uppercase}.post-byline__role{color:var(--ink-dim);font-size:.84rem}.post-byline__tags{display:flex;flex-wrap:wrap;gap:8px;margin-left:auto}.post-toc__list{border-left:1px solid var(--line);list-style:none;margin:0;padding:0}.post-toc li a{border-left:2px solid transparent;color:var(--ink-soft);display:block;font-size:.88rem;line-height:1.35;margin-left:-1px;padding:6px 0 6px 16px;transition:color .2s,border-color .2s}.post-toc li a:hover{color:var(--ink)}.post-toc li a.is-active{border-left-color:var(--blue);color:var(--blue-deep)}.post-toc li.is-sub a{font-size:.84rem;padding-left:28px}.post-share{align-items:center;display:flex;gap:10px;margin-top:44px}.post-share__label{color:var(--ink-dim);font-family:var(--mono);font-size:.62rem;letter-spacing:.1em;margin-right:4px;text-transform:uppercase}.post-share__link{align-items:center;background:var(--white);border:1px solid var(--line);border-radius:10px;color:var(--ink-soft);cursor:pointer;display:inline-flex;height:36px;justify-content:center;transition:border-color .2s,color .2s;width:36px}.post-share__link:hover{border-color:var(--blue);color:var(--blue)}.post-share__link.is-copied{background:var(--blue-soft);border-color:var(--blue);color:var(--blue-deep)}.author-box{align-items:flex-start;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--r-md);display:flex;gap:18px;margin-top:40px;padding:24px}.author-box__avatar{border:1px solid var(--line);border-radius:50%;flex:none;height:64px;object-fit:cover;width:64px}.author-box__name{font-size:1.05rem;letter-spacing:-.015em}.author-box__name span{color:var(--ink-dim);font-weight:400}.author-box__bio{color:var(--ink-soft);font-size:.94rem;margin:8px 0 0}.author-box__links{color:var(--ink-dim);display:flex;gap:12px;margin-top:14px}.author-box__links a:hover{color:var(--blue)}@media(max-width:560px){.author-box{flex-direction:column}}.search-results{display:flex;flex-direction:column;gap:16px;list-style:none;margin:32px 0 0;padding:0}