[{"data":1,"prerenderedAt":99},["ShallowReactive",2],{"blog-index-en":3},{"featuredPosts":4,"initialPosts":41,"totalPosts":59,"categories":60,"tags":68},[5,14,23,32],{"id":6,"path":7,"image":8,"title":9,"description":10,"categoryText":11,"categorySlug":12,"categoryPath":13},"blog\u002Fblog\u002Fdark-mode-is-a-second-design.md","\u002Fblog\u002Fdark-mode-is-a-second-design","\u002Fimages\u002Fblog\u002Fdark-mode-is-a-second-design\u002Fcover.jpg","Dark Mode Is a Second Design, Not a Filter","Inverting colors gives you a dark theme that technically works and looks slightly wrong everywhere. Semantic tokens fix most of it. Shadows and accents need extra care.","Design Systems","design-systems","\u002Fblog\u002Fcategories\u002Fdesign-systems",{"id":15,"path":16,"image":17,"title":18,"description":19,"categoryText":20,"categorySlug":21,"categoryPath":22},"blog\u002Fblog\u002Fsource-published-packages.md","\u002Fblog\u002Fsource-published-packages","\u002Fimages\u002Fblog\u002Fsource-published-packages\u002Fcover.jpg","Shipping a Vue Library Without a Build Step","UI Vintage publishes its source and lets each Nuxt app compile it. That choice removes a whole class of problems, and adds a couple of new ones.","Engineering","engineering","\u002Fblog\u002Fcategories\u002Fengineering",{"id":24,"path":25,"image":26,"title":27,"description":28,"categoryText":29,"categorySlug":30,"categoryPath":31},"blog\u002Fblog\u002Ffocus-states-people-notice.md","\u002Fblog\u002Ffocus-states-people-notice","\u002Fimages\u002Fblog\u002Ffocus-states-people-notice\u002Fcover.jpg","Designing Focus States People Actually Notice","Keyboard users rely on the focus ring to know where they are. Most designs hide it or make it faint. A few small rules make it both visible and good-looking.","Accessibility","accessibility","\u002Fblog\u002Fcategories\u002Faccessibility",{"id":33,"path":34,"image":35,"title":36,"description":37,"categoryText":38,"categorySlug":39,"categoryPath":40},"blog\u002Fblog\u002Fwhy-spring-animations-feel-faster.md","\u002Fblog\u002Fwhy-spring-animations-feel-faster","\u002Fimages\u002Fblog\u002Fwhy-spring-animations-feel-faster\u002Fcover.jpg","Why Spring Animations Feel Faster Than They Are","A spring that overshoots slightly can take longer than a plain fade and still feel quicker. Here is why, and where the trick stops working.","Motion Design","motion-design","\u002Fblog\u002Fcategories\u002Fmotion-design",[42,43,44,45,46,54],{"path":7,"image":8,"title":9,"description":10,"categoryText":11,"categorySlug":12,"categoryPath":13},{"path":16,"image":17,"title":18,"description":19,"categoryText":20,"categorySlug":21,"categoryPath":22},{"path":25,"image":26,"title":27,"description":28,"categoryText":29,"categorySlug":30,"categoryPath":31},{"path":34,"image":35,"title":36,"description":37,"categoryText":38,"categorySlug":39,"categoryPath":40},{"path":47,"image":48,"title":49,"description":50,"categoryText":51,"categorySlug":52,"categoryPath":53},"\u002Fblog\u002Fshipping-the-blog-migration","\u002Fimages\u002Fblog\u002Fshipping-the-blog-migration\u002Fcover.jpg","Shipping the Blog Migration Into the Library","A practical summary of what changed once the original blog implementation was moved into a reusable Nuxt-friendly component library.","Product Updates","product-updates","\u002Fblog\u002Fcategories\u002Fproduct-updates",{"path":55,"image":56,"title":57,"description":58,"categoryText":11,"categorySlug":12,"categoryPath":13},"\u002Fblog\u002Fdesigning-a-reusable-editorial-system","\u002Fimages\u002Fblog\u002Fdesigning-a-reusable-editorial-system\u002Fcover.jpg","Designing a Reusable Editorial System","How we turned a one-off blog UI into a reusable content surface that still feels intentional once it leaves the original product.",6,[61,63,65,66,67],{"name":11,"slug":12,"path":13,"count":62,"image":8},2,{"name":29,"slug":30,"path":31,"count":64,"image":26},1,{"name":51,"slug":52,"path":53,"count":64,"image":48},{"name":20,"slug":21,"path":22,"count":64,"image":17},{"name":38,"slug":39,"path":40,"count":64,"image":35},[69,71,74,77,80,83,84,87,90,93,96],{"name":11,"slug":12,"count":70},3,{"name":72,"slug":73,"count":64},"Theming","theming",{"name":75,"slug":76,"count":70},"CSS","css",{"name":78,"slug":79,"count":62},"Content","content",{"name":81,"slug":82,"count":64},"Vue","vue",{"name":29,"slug":30,"count":64},{"name":85,"slug":86,"count":62},"Nuxt","nuxt",{"name":88,"slug":89,"count":62},"Component Libraries","component-libraries",{"name":91,"slug":92,"count":64},"Tooling","tooling",{"name":94,"slug":95,"count":64},"Motion","motion",{"name":97,"slug":98,"count":64},"UX","ux",1792259219905]