[{"channel_id":1068453571,"post_id":6662,"date":1776780002000,"forwards":"1","views":"67","comments":"1","text":"<b>page-agent.js \u2014 JavaScript in-page GUI agent. Control web interfaces with natural language.<\/b><br><br>JavaScript in-page GUI agent. Control web interfaces with natural language. - alibaba\/page-agent<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/github.com\/alibaba\/page-agent\">https:\/\/github.com\/alibaba\/page-agent<\/a>","text_length":228,"media":{"root":"\/006\/BhoAAMNOrz8AAAAA9Y1SiVGN9zo","photo":{"thumbs":{"m":{"w":320,"h":160,"hash":"EBN8JTdtSR37HfbaAu-Wtg&ts=1776838216"},"x":{"w":800,"h":400,"hash":"uZDMj92IFclKsEs1YMaBDg&ts=1776838216"},"y":{"w":1280,"h":640,"hash":"uIF231w0Z0YWyLRw69GwQg&ts=1776838216"},"i":{"bytes":"AUACg|DFpyjLAepxSxoZJFQEAscZPSpRay8Mu0jOAQeDzigC02nZiDxkkbiuT6g46VnVe33Eh2qq7lbsQcEmq5tpBjOBltuSe9MCCinMCpIPUUUgG04MQCASAeo9aKKABSQcg4I7ihiSck5JoooAbRRRQB\/\/2Q=="}}}}},{"channel_id":1068453571,"post_id":6661,"date":1776770401000,"forwards":"1","views":"107","text":"<b>How To Use Standard HTML Video &amp; Audio Lazy-Loading on the Web Today<\/b><br><br>HTML video and audio lazy loading is now a web standard and quickly gaining support in all major browsers. Given Squarespace\u2019s role in proposing and implementing it, we\u2019re very excited to see how developers use it on the web. Let\u2019s cover some best practices for using video and audio lazy loading in<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/engineering.squarespace.com\/blog\/2026\/how-to-use-standard-html-video-and-audio-lazy-loading-on-the-web-today\">https:\/\/engineering.squarespace.com\/blog\/2026\/how-to-use-standard-html-video-and-audio-lazy-loading-on-the-web-today<\/a>","text_length":487,"media":{"root":"\/00b\/BRoAAMNOrz8AAAAAcfykEiq0HPE","photo":{"thumbs":{"m":{"w":320,"h":180,"hash":"sAJv3TLixRP27NfYnPV9PQ&ts=1776838216"},"x":{"w":800,"h":451,"hash":"RTJ9khwZc2_aYtsl-77x2A&ts=1776838216"},"y":{"w":1280,"h":721,"hash":"EpfaeAphQFwePBPsoJK9DA&ts=1776838216"},"w":{"w":2000,"h":1126,"hash":"UTx19pfP7xwqF1ylsXAmqA&ts=1776838216"},"i":{"bytes":"AXACg|ChQOoz0p842zuPc02JfNlSMHliBQBM1txu3BU6ZbpSeXB0FyufdTio7mQSSkDOxeEGe1RhBjqaANiyjcoRu2DsVOQaKraVK0c4izlHzx6GinzMnkQ+506aa6kkUqFY8Zp1tpLQzpK0oOw5wBRRSKM2eIxzNH3U4poYAYHJ+tFFAFvTMvep0wuSaKKKAP\/Z"}}}}},{"channel_id":1068453571,"post_id":6660,"date":1776759301000,"forwards":"2","views":"83","text":"<b>Moving Railway\u2019s Frontend Off Next.js<\/b><br><br>We migrated<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/blog.railway.com\/p\/moving-railways-frontend-off-nextjs\">https:\/\/blog.railway.com\/p\/moving-railways-frontend-off-nextjs<\/a>","text_length":114,"media":{"root":"\/00c\/BBoAAMNOrz8AAAAAyftKRtvKeRA.Sw1rG7-frFIZlDCJ2HA_SgQ.Aj-vTsMAABoEaec10_pJnh7xKBAcNZrxC1Dtpqg","photo":{"thumbs":{"m":{"w":320,"h":168,"hash":"ofAGRgFr2uITycwoEcSOLQ&ts=1776838216"},"x":{"w":800,"h":420,"hash":"IdvavH9kXhL3VJ4UrOBaOw&ts=1776838216"},"y":{"w":1200,"h":630,"hash":"CJ6j9im0omsRbsQXQWn-bQ&ts=1776838216"},"i":{"bytes":"AVACg|DSHmecfu+Vj8c1JULO4bA6fQ05WkP938jQBJRTf3nqv5U4ZxzjPtQAUUUUAR4570DiiigB6niloooAKKKKAP\/Z"}}}}},{"channel_id":1068453571,"post_id":6659,"date":1776693602000,"views":"76","text":"<b>Looking at New CSS Multi-Column Layout Wrapping Features<\/b><br><br>Chrome 145 introduces the column-height and column-wrap CSS multi-column layout properties, enabling us to wrap the additional content into a new row.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/css-tricks.com\/css-multi-column-layout-wrapping-features\/\">https:\/\/css-tricks.com\/css-multi-column-layout-wrapping-features\/<\/a>","text_length":275,"media":{"root":"\/011\/AxoAAMNOrz8AAAAARADLqKcEz7s","photo":{"thumbs":{"m":{"w":320,"h":160,"hash":"FzZ04NQi4EhDUqSgN4fzRw&ts=1776838216"},"x":{"w":800,"h":400,"hash":"86o2H-U54t6LkUFEU1Jqfw&ts=1776838216"},"y":{"w":1200,"h":600,"hash":"L59G6L6-8UcNbPbjEtmuqQ&ts=1776838216"},"i":{"bytes":"AUACg|A7Ug70U5T61kdcnZXECORkISPXFByODx9asRD94CDwB0\/CopmDy8fTNJv3rIiE+foM\/CilXlxRQ3Y0EYUhoopoBTkAgE49KQUUUCQ+L71FFFZy3Bn\/2Q=="}}}}},{"channel_id":1068453571,"post_id":6658,"date":1776672902000,"forwards":"1","views":"99","text":"<b>Tailwind CSS v4.0: What changed, how fast it is, and should you upgrade<\/b><br><br>Tailwind CSS v4.0 shipped January 22, 2025. Full builds are up to 5\u00d7 faster, config moves to CSS, and setup takes one import. Here&#039;s what changed and how to migrate.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/fireup.pro\/news\/tailwind-css-v4-0\">https:\/\/fireup.pro\/news\/tailwind-css-v4-0<\/a>","text_length":281,"media":{"root":"\/001\/AhoAAMNOrz8AAAAAXEVBFl2y_Do","photo":{"thumbs":{"m":{"w":320,"h":168,"hash":"FDAxkYEBzq9rqhGKi82mbw&ts=1776838216"},"x":{"w":800,"h":420,"hash":"m3n4CLhFCw-0Riu8NLInpA&ts=1776838216"},"y":{"w":1200,"h":630,"hash":"FYQ68bskJlWP-SAVBo_U-g&ts=1776838216"},"i":{"bytes":"AVACg|DHoqRfLyN27GOcUfuf9v8ASgBlGKVtuflzj3o60AJRS4ooAbRRRQAtJRRQAtFFFAH\/2Q=="}}}}},{"channel_id":1068453571,"post_id":6657,"date":1776607202000,"views":"70","text":"<b>Inverted themes with light-dark()<\/b><br><br>We rolled out adaptive light-dark() support on our design system themes and it\u2019s been a delightful upgrade. Creating light and dark variable sets isn\u2019t difficult, but delivery has trade-offs. Most apps that do this probably ship both sets of token values in a single stylesheet. That\u2019s fine until you have multiple kilobytes of duplicate definitions. To get around the performance problems we built two separate stylesheets \u2013which is also n<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/daverupert.com\/2026\/04\/inverted-light-dark\/\">https:\/\/daverupert.com\/2026\/04\/inverted-light-dark\/<\/a>","text_length":528,"media":{"root":null,"webpage":{"url":"https:\/\/daverupert.com\/2026\/04\/inverted-light-dark","type":"article","title":"Inverted themes with light-dark()","site_name":"Dave","display_url":"daverupert.com\/2026\/04\/inverted-light-dark","description":"We rolled out adaptive light-dark() support on our design system themes and it\u2019s been a delightful upgrade. Creating light and dark variable sets isn\u2019t difficult, but delivery has trade-offs. Most apps that do this probably ship both sets of token values in a single stylesheet. That\u2019s fine until you have multiple kilobytes of duplicate definitions. To get around the performance problems we built two separate stylesheets \u2013which is also not great\u2013 but my coworker Zacky found a good trick with <link disabled> to make it tolerable. Ultimately, we wanted to offer a single stylesheet for our human (and agent) friends to control theming.","author":"Dave Rupert"}}},{"channel_id":1068453571,"post_id":6656,"date":1776520801000,"forwards":"1","views":"82","comments":"1","text":"<b>Selecting a Date Range in CSS<\/b><br><br>A clever approach for selecting multiple dates on a calendar where the :nth-child()&#039;s \u201cn of selector\u201d syntax does all the heavy lifting... even in the JavaScript.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/css-tricks.com\/selecting-a-date-range-in-css\/\">https:\/\/css-tricks.com\/selecting-a-date-range-in-css\/<\/a>","text_length":248,"media":{"root":"\/00b\/ABoAAMNOrz8AAAAAcfykEiq0HPE","webpage":{"url":"https:\/\/css-tricks.com\/selecting-a-date-range-in-css","type":"photo","title":"Selecting a Date Range in CSS | CSS-Tricks","site_name":"CSS-Tricks","display_url":"css-tricks.com\/selecting-a-date-range-in-css","description":"A clever approach for selecting multiple dates on a calendar where the :nth-child()'s \u201cn of selector\u201d syntax does all the heavy lifting... even in the JavaScript.","thumbs":{"m":{"w":320,"h":156,"hash":"Hz4Rfz6OeCLMzHmVJP9zLg&ts=1776838216"},"x":{"w":800,"h":390,"hash":"ueQqxNkFBybsMwZDSH-cNw&ts=1776838216"},"y":{"w":1206,"h":588,"hash":"EYURR49gUknSxLAk2M5hCA&ts=1776838216"},"i":{"bytes":"AUACg|DZpjsqZLNgcd6fTGUNwcEccEZoAO3X170vfr39aZIrMhCttPrinICFAY5I6n8KAH0UUUAFGKKKAAUUUUAFFFFAH\/\/Z"}}}}},{"channel_id":1068453571,"post_id":6655,"date":1776434402000,"forwards":"1","views":"289","text":"<b>SVG Filters Guide: Getting Started with the Basics<\/b><br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/frontendmasters.com\/blog\/svg-filters-guide-getting-started-with-the-basics\/\">https:\/\/frontendmasters.com\/blog\/svg-filters-guide-getting-started-with-the-basics\/<\/a>","text_length":135,"media":{"root":"\/002\/_xkAAMNOrz8AAAAA-0QLDSDqzdw","photo":{"thumbs":{"m":{"w":320,"h":168,"hash":"xJebotQXfvlSGhdM_Z_Y5g&ts=1776838216"},"x":{"w":800,"h":420,"hash":"nSJ7omwvpYcXJiSrWPLFcw&ts=1776838216"},"y":{"w":1200,"h":630,"hash":"qAi606cs86IW_sW4lDhPuQ&ts=1776838216"},"i":{"bytes":"AVACg|CFkJIJY496sLaLJBnqRyMGpRb2xYIZiT6ZFNUweWSiSkDjFGpq2nsMCxqI1k3BQCP1NPiWNIZ1QMYyByR3pYrxRhUhwM9zQL+YybfJ2\/Wglix26iaORFYMCO3H+cUUpu5R6D8KKHoFmyMRqPLcABgRzinISQe3J7UUUAVZZXEu3IP4UyWZwxwf0FFFAED3MvXd+gooopBdn\/\/Z"}}}}},{"channel_id":1068453571,"post_id":6654,"date":1776424802000,"forwards":"2","views":"37","text":"<b>What\u2019s new in DevTools (Chrome 147)<\/b><br><br>Automatic context switching for AI assistance, Updates for DevTools for agents, and code completion for Console and Sources panels.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/developer.chrome.com\/blog\/new-in-devtools-147\">https:\/\/developer.chrome.com\/blog\/new-in-devtools-147<\/a>","text_length":223,"media":{"root":"\/012\/_hkAAMNOrz8AAAAAuhE98Io2d_8","photo":{"thumbs":{"m":{"w":320,"h":180,"hash":"bWinnem8F_liZO5mg08dLQ&ts=1776838216"},"x":{"w":800,"h":450,"hash":"rlVklZnu6sdLus53Cbdeyw&ts=1776838216"},"y":{"w":1280,"h":720,"hash":"kyzQG5ZCCa8cpt7knsa_0Q&ts=1776838216"},"w":{"w":1920,"h":1080,"hash":"8nwDImjb3tj3BQqc8cv3fw&ts=1776838216"},"i":{"bytes":"AXACg|CzSq2GBHaonYLIpYEj0pIuZGIUhT6iugxNSioHVy4K7sbezYpAJiMfOPfcK5zYsUUyMMBlyc+hNFAFOlQbmA9TRRXQzJF6iiiuc1CiiigD\/9k="}}}}},{"channel_id":1068453571,"post_id":6653,"date":1776348003000,"forwards":"1","views":"119","text":"<b>Let\u2019s Get Puzzled!<\/b><br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/frontendmasters.com\/blog\/creating-puzzle-peices-in-css\/\">https:\/\/frontendmasters.com\/blog\/creating-puzzle-peices-in-css\/<\/a>","text_length":83,"media":{"root":"\/003\/_RkAAMNOrz8AAAAAjlbK98rimU4","photo":{"thumbs":{"m":{"w":320,"h":168,"hash":"2V69GvwBGIrkdsbmn_RazA&ts=1776838216"},"x":{"w":800,"h":420,"hash":"ttf-yq1U3lXk98uxyzmUOw&ts=1776838216"},"y":{"w":1200,"h":630,"hash":"TN3_XSa5wGMW2sdJ6O68EA&ts=1776838216"},"i":{"bytes":"AVACg|B22k56gZA\/OpBTVH7w44A6j1pnQ2IAxGRx6A0u0jHPzHtmpelNJU89+3rSJuOxRTlzgZ60UhXKodvWlJJG7OCO+KKKYyMyuy4Ldfaozcy4zu6ewoooIGPeTgHEn6CiiikDP\/\/Z"}}}}},{"channel_id":1068453571,"post_id":6652,"date":1776338402000,"forwards":"1","views":"56","text":"<b>Name-Only Containers: The Scoping We Needed<\/b><br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/frontendmasters.com\/blog\/name-only-containers-the-scoping-we-needed\/\">https:\/\/frontendmasters.com\/blog\/name-only-containers-the-scoping-we-needed\/<\/a>","text_length":121,"media":{"root":"\/011\/_BkAAMNOrz8AAAAARADLqKcEz7s","photo":{"thumbs":{"m":{"w":320,"h":168,"hash":"PMKZsAYtu3vH7in3XoFXwg&ts=1776838216"},"x":{"w":800,"h":420,"hash":"QdZ_GMLHhwO5h8JKYTM8-w&ts=1776838216"},"y":{"w":1200,"h":630,"hash":"d2nYo3qkNxE3KWH2dv2ygw&ts=1776838216"},"i":{"bytes":"AVACg|C3ikKZqfy6RlAFac6OajTaepW8vnpxTHFWWIxUD1UZ3PRp6MhNFKaK05joL29vWopSxGc80UV53U4EVJJnBxu\/QVA8zqMhjRRWqNEyJ7iUZIb9BRRRVXE5y7n\/2Q=="}}}}},{"channel_id":1068453571,"post_id":6651,"date":1776327301000,"views":"115","text":"<b>An Interactive Cover Component<\/b><br><br>A technical walkthrough on how to build a small interactive cover component, with some nifty CSS tricks.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/kittygiraudel.com\/2026\/04\/09\/an-interactive-cover-component\/\">https:\/\/kittygiraudel.com\/2026\/04\/09\/an-interactive-cover-component\/<\/a>","text_length":206,"media":{"root":"\/011\/-xkAAMNOrz8AAAAARADLqKcEz7s","webpage":{"url":"https:\/\/kittygiraudel.com\/2026\/04\/09\/an-interactive-cover-component","type":"article","title":"An Interactive Cover Component","site_name":"kittygiraudel.com","display_url":"kittygiraudel.com\/2026\/04\/09\/an-interactive-cover-component","description":"A technical walkthrough on how to build a small interactive cover component, with some nifty CSS tricks.","author":"Kitty Giraudel","thumbs":{"m":{"w":192,"h":192,"hash":"lU6AvRO1vKyKlq73CeJWiA&ts=1776838216"},"i":{"bytes":"AoACg|Bj4f5D97ceKRGfAiJye1OcjcXxxkkU6Aou6RuSOlSNK4jR7Fw3U1Xbnp2qxJK0y4ROOpz6Ux5UEIjWLDj+IUmgasNijOd2OVoqaKUBTkDDcGikhCHBBABP0FRxRk5Dfd9KVZQowDyfSq4mO88kLmmiosvhAg4Jz2xUDxEvk4BNTEqV3I\/FKLbcNzOeetNNob1RFJB5S8nPvRTJg0TGMnI6iipZA62iWeXaRhcZ461Je2aGI+SuGHbPWiiqQ1sZYkkRdgYgelbdtJ51krHrjBoopsaILgLJEH\/unGf0oooqWJn\/2Q=="}}}}},{"channel_id":1068453571,"post_id":6650,"date":1776261604000,"forwards":"1","views":"129","text":"<b>Creating Custom Page Transitions in Astro with Barba.js and GSAP<\/b><br><br>Follow along as we build page transitions in Astro with Barba.js and GSAP, from the initial setup to a working animated transition flow.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/tympanus.net\/codrops\/2026\/04\/08\/creating-custom-page-transitions-in-astro-with-barba-js-and-gsap\/\">https:\/\/tympanus.net\/codrops\/2026\/04\/08\/creating-custom-page-transitions-in-astro-with-barba-js-and-gsap\/<\/a>","text_length":309,"media":{"root":"\/00b\/-hkAAMNOrz8AAAAAcfykEiq0HPE","photo":{"thumbs":{"m":{"w":320,"h":240,"hash":"ZeLnS-QvYYBPudA90leguw&ts=1776838216"},"x":{"w":800,"h":600,"hash":"sw2bP-ACa7BhjaXAAXfTbA&ts=1776838216"},"y":{"w":1200,"h":900,"hash":"n-U42KC90Hn2JdgorZ0IEQ&ts=1776838216"},"i":{"bytes":"AeACg|DPjja8ulRBtXoP9kCt23tordcRrz3J6ms3RAPMmbuAAKvm6O\/AQ9fzGRz+tZTvewyZ41kUq6hlPY1iaha\/ZJleLIRuV9jWsLhsD5Qc\/wB05xyP8ao6pPvtUVgA2Qf0P\/1vzohdMChMTuSZRt3\/ADcdiOv+NFJJxawjvlj+HH+BorQRPYTG0vMSfKD8rZ7Vvg5GR0rm8CeJm5Dxryf7w4H58ipLS\/ltxszuT0IziolG4HQVlalaTS3HmZHlAdScBad\/apxgR81Qu7yW4PzN8g\/hAwKUYtMYwqJp1SM4QfKCew7n+ZopZB9nUxAZdgCzex5wKK0Ef\/\/Z"}}}}},{"channel_id":1068453571,"post_id":6649,"date":1776252002000,"forwards":"1","views":"71","text":"<b>Why CSS art disappeared from frontend culture<\/b><br><br>CSS art once made frontend feel playful and accessible. Here\u2019s why it faded as the web became more practical and prestige-driven.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/blog.logrocket.com\/css-art-frontend-culture\/\">https:\/\/blog.logrocket.com\/css-art-frontend-culture\/<\/a>","text_length":230,"media":{"root":"\/006\/-RkAAMNOrz8AAAAA9Y1SiVGN9zo","photo":{"thumbs":{"m":{"w":320,"h":214,"hash":"e868CQb_qpHS1_KwCZcVcA&ts=1776838216"},"x":{"w":800,"h":534,"hash":"4xKoRj876tsLNT7JfUEosg&ts=1776838216"},"y":{"w":895,"h":597,"hash":"47B96VWr1X6c0us4hb87vg&ts=1776838216"},"i":{"bytes":"AbACg|C3Sd6cww1V7iZopIwCgDZyX6DFaX0JLIprJms+W7mDkDYT2IP\/ANertnO08bF8AqccUrhsOWMiineYN2KKeorsUjcSaVRzSr0p1S2AwpUUoYjC9KnNGOKiM3exbVlcphCnJNFVbl2NwwLHAorrWpSjdH\/\/2Q=="}}}}},{"channel_id":1068453571,"post_id":6648,"date":1776240901000,"forwards":"1","views":"132","text":"<b>Alternatives to the !important Keyword<\/b><br><br>Cascade layers, specificity tricks, smarter ordering, and even some clever selector hacks can often replace !important with something cleaner, more predictable, and far less embarrassing to explain to your future self.<br><br><a target=\"_blank\" rel=\"noreferrer nofollow\" href=\"https:\/\/css-tricks.com\/alternatives-to-the-important-keyword\/\">https:\/\/css-tricks.com\/alternatives-to-the-important-keyword\/<\/a>","text_length":321,"media":{"root":"\/001\/-BkAAMNOrz8AAAAAXEVBFl2y_Do","photo":{"thumbs":{"m":{"w":320,"h":160,"hash":"C8FITLgAGkFYDELKOK38QQ&ts=1776838216"},"x":{"w":800,"h":400,"hash":"0_W6GpX_g-tsmku-G4gcew&ts=1776838216"},"y":{"w":1200,"h":600,"hash":"ATqxyEelVAbTWAlGVhSE6Q&ts=1776838216"},"i":{"bytes":"AUACg|DPAJ6ClAPoaTOOlKGxQA4Z9KM03f7Cjd7CgBxNFNJ9qKAG0UUUAFFFFABRRRQB\/9k="}}}}}]