[{"data":1,"prerenderedAt":253},["ShallowReactive",2],{"i-lucide:chevron-down":3,"i-lucide:arrow-up-right":8,"i-simple-icons:github":10,"i-simple-icons:x":12,"i-brand:linkedin":14,"i-simple-icons:medium":18,"i-lucide:mail":20,"i-lucide:sun":22,"project:\u002Fprojects\u002Fsanad":24,"project-more:\u002Fprojects\u002Fsanad":211,"i-lucide:briefcase-business":233,"i-lucide:calendar":235,"i-lucide:globe":237,"i-simple-icons:raspberrypi":239,"i-lucide:smartphone":241,"i-lucide:languages":243,"i-lucide:house":245,"i-lucide:id-card":247,"i-lucide:wallet":249,"i-lucide:calendar-clock":251},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m6 9l6 6l6-6\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":9},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M7 7h10v10M7 17L17 7\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":11},"\u003Cpath fill=\"currentColor\" d=\"M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":13},"\u003Cpath fill=\"currentColor\" d=\"M14.234 10.162L22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299l-.929-1.329L3.076 1.56h3.182l5.965 8.532l.929 1.329l7.754 11.09h-3.182z\"\u002F>",{"left":4,"top":15,"width":16,"height":16,"rotate":4,"vFlip":6,"hFlip":6,"body":17},32,448,"\u003Cpath fill=\"currentColor\" d=\"M416 32L31.9 32C14.3 32 0 46.5 0 64.3L0 447.7C0 465.5 14.3 480 31.9 480L416 480c17.6 0 32-14.5 32-32.3l0-383.4C448 46.5 433.6 32 416 32zM135.4 416l-66.4 0 0-213.8 66.5 0 0 213.8-.1 0zM102.2 96a38.5 38.5 0 1 1 0 77 38.5 38.5 0 1 1 0-77zM384.3 416l-66.4 0 0-104c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9l0 105.8-66.4 0 0-213.8 63.7 0 0 29.2 .9 0c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9l0 117.2z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":19},"\u003Cpath fill=\"currentColor\" d=\"M4.21 0A4.2 4.2 0 0 0 0 4.21v15.58A4.2 4.2 0 0 0 4.21 24h15.58A4.2 4.2 0 0 0 24 19.79v-1.093a5 5 0 0 1-.422.02c-2.577 0-4.027-2.146-4.09-4.832a8 8 0 0 1 .022-.708c.093-1.186.475-2.241 1.105-3.022a3.9 3.9 0 0 1 1.395-1.1c.468-.237 1.127-.367 1.664-.367h.023q.151 0 .303.01V4.211A4.2 4.2 0 0 0 19.79 0Zm.198 5.583h4.165l3.588 8.435l3.59-8.435h3.864v.146l-.019.004c-.705.16-1.063.397-1.063 1.254h-.003l.003 10.274c.06.676.424.885 1.063 1.03l.02.004v.145h-4.923v-.145l.019-.005c.639-.144.994-.353 1.054-1.03V7.267l-4.745 11.15h-.261L6.15 7.569v9.445c0 .857.358 1.094 1.063 1.253l.02.004v.147H4.405v-.147l.019-.004c.705-.16 1.065-.397 1.065-1.253V6.987c0-.857-.358-1.094-1.064-1.254l-.018-.004zm19.25 3.668c-1.086.023-1.733 1.323-1.813 3.124H24V9.298a1.4 1.4 0 0 0-.342-.047m-1.862 3.632c-.1 1.756.86 3.239 2.204 3.634v-3.634z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":21},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"m22 7l-8.991 5.727a2 2 0 0 1-2.009 0L2 7\"\u002F>\u003Crect width=\"20\" height=\"16\" x=\"2\" y=\"4\" rx=\"2\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":23},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"4\"\u002F>\u003Cpath d=\"M12 2v2m0 16v2M4.93 4.93l1.41 1.41m11.32 11.32l1.41 1.41M2 12h2m16 0h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"\u002F>\u003C\u002Fg>",{"page":25,"project":192},{"id":26,"title":27,"body":28,"description":183,"extension":184,"meta":185,"navigation":186,"path":187,"seo":188,"sitemap":189,"stem":190,"__hash__":191},"projectPages\u002Fprojects\u002Fsanad.md","Sanad",{"type":29,"value":30,"toc":168},"minimark",[31,36,40,44,47,76,80,88,92,112,116,120,124,131,136,143,146,150,157,161],[32,33,35],"h2",{"id":34},"overview","Overview",[37,38,39],"p",{},"Sanad is a real-estate investment platform in Saudi Arabia. Investors verify their identity through Absher, top up a wallet, buy units in income-generating properties and receive their returns in the same wallet. As a part-time full-stack engineer, I built its API and its admin dashboard.",[32,41,43],{"id":42},"the-problem","The problem",[37,45,46],{},"The platform was new, and real money had to move through it safely.",[48,49,50,58,64,70],"ul",{},[51,52,53,57],"li",{},[54,55,56],"strong",{},"Money that always adds up."," Every balance had to be explainable, movement by movement.",[51,59,60,63],{},[54,61,62],{},"No half-finished investments."," Units, money and fees had to change together, or not at all.",[51,65,66,69],{},[54,67,68],{},"Returns for every investor."," Paying each investor by hand would be slow and error-prone.",[51,71,72,75],{},[54,73,74],{},"Control for the team."," Deposits, withdrawals and bank accounts needed a person to approve them.",[32,77,79],{"id":78},"the-solution","The solution",[81,82,85],"sketch-figure",{"alt":83,"name":84},"Four risks on the left, each with an arrow to what the platform does on the right. A balance nobody can trace back to its movements: a ledger where every movement is linked to the one before, with the balance after it. Units sold but not paid for, or paid for but not sold: one all-or-nothing step for units, money and fees, confirmed by a code. Returns worked out by hand, investor by investor: a schedule of returns, paid per unit to every investor in one action. Money moving in or out with nobody checking it: deposits, withdrawals and bank accounts approved by a person on the team.","sanad\u002Fbefore-after",[37,86,87],{},"Each risk has one safeguard in the platform, and I built each of them.",[32,89,91],{"id":90},"what-i-did","What I did",[48,93,94,97,100,103,106,109],{},[51,95,96],{},"Built the API from its first commit, on Domain-Driven Design, split into more than ten domains.",[51,98,99],{},"Built the parts where money moves: the wallet ledger, the investment flow and the returns.",[51,101,102],{},"Built sign-in with one-time codes, the approvals, and the connections to Absher and payment gateways.",[51,104,105],{},"Built the admin dashboard on my own.",[51,107,108],{},"Helped build the investor app's home and account pages, and guided the engineer who built the rest.",[51,110,111],{},"Wrote tests for the money paths.",[32,113,115],{"id":114},"what-it-offers","What it offers",[117,118],"feature-grid",{":items":119},"[{\"icon\":\"lucide:house\",\"title\":\"Shares in income properties\",\"text\":\"Investors buy units in income-generating properties, from the website or the app.\"},{\"icon\":\"lucide:id-card\",\"title\":\"Verified investors\",\"text\":\"Every investor verifies their identity through Absher before investing.\"},{\"icon\":\"lucide:wallet\",\"title\":\"A wallet for every investor\",\"text\":\"Top up from a bank account, invest from the balance and withdraw back.\"},{\"icon\":\"lucide:calendar-clock\",\"title\":\"Returns on a schedule\",\"text\":\"Returns are paid once, monthly or yearly, straight into the wallet.\"},{\"icon\":\"lucide:smartphone\",\"title\":\"Confirmed by a code\",\"text\":\"Signing in and every investment are confirmed by SMS.\"},{\"icon\":\"lucide:languages\",\"title\":\"Arabic and English\",\"text\":\"The apps, the messages and every wallet movement read in either language.\"}]",[32,121,123],{"id":122},"system-design","System design",[81,125,128],{"alt":126,"name":127},"Architecture: investors use the investor app and the website, and the operations team uses the admin dashboard. Each calls its own layer of one API: the investor API, the website API and the admin API, and investors and admins sign in separately. Behind them sit more than ten domains, each behind a contract, such as security, users, banks, opportunities, roles, settings, content and locations, with the finance domain's wallet ledger and the investments and returns domain highlighted. The API connects to Absher for identity verification, to payment gateways, and to SMS for codes and confirmations, which goes to a team chat in testing. A database and a queue for messages sit behind it, and the money paths are covered by tests.","sanad\u002Farchitecture",[37,129,130],{},"Three front ends share one API, and the money lives in two domains at its centre.",[132,133,135],"h3",{"id":134},"the-wallet-ledger","The wallet ledger",[81,137,140],{"alt":138,"name":139},"One investor's wallet as five movements, oldest first: a deposit from a bank account to the wallet, an investment and its fees from the wallet to the investment, a return to the wallet, and a withdrawal to a bank account. Each row shows the balance after it as a bar, and an arrow links each row to the one before it. The database writes the link and the balance on every movement, and the wallet's balance is always its last movement. Every movement also reads as one line in Arabic or English.","sanad\u002Fledger",[37,141,142],{},"Each movement points to the one before it, so a balance is always the end of a chain.",[37,144,145],{},"The application never writes a balance: it only adds movements, and the database keeps every wallet in step with them.",[132,147,149],{"id":148},"investing-in-one-step","Investing in one step",[81,151,154],{"alt":152,"name":153},"An investor picks the units and enters the code sent by SMS. Inside one all-or-nothing transaction, the platform checks that the code is right, the investor is verified, the opportunity is open, enough units are left, the investment is within the investor's limits and the wallet covers it all. Then it reserves the units, records the investment and debits the wallet with its fees. The investor gets a confirmation by SMS, and units and money always change together. If any check fails, nothing changes and the investor is told why.","sanad\u002Finvestment",[37,155,156],{},"Every check runs before anything changes, and every change happens together.",[132,158,160],{"id":159},"returns-for-every-investor","Returns for every investor",[81,162,165],{"alt":163,"name":164},"An opportunity's life: soon, available (investors buy units), offering complete, profit distribution (returns are paid, highlighted), liquidation complete and completed. Returns are paid in three steps. First, a return plan: a fixed amount or a percentage, paid once, monthly or yearly, between a start and an end date, which can change until the first period is paid. Second, a schedule of periods, with each period's return split per unit sold. Third, paying a period: an admin confirms their password and records a profit or a loss, and every investor gets their units times the share, in one transaction with one ledger row each.","sanad\u002Freturns",[37,166,167],{},"The plan is set once; paying a period is one confirmed action that pays every investor.",{"title":169,"searchDepth":170,"depth":170,"links":171},"",2,[172,173,174,175,176,177],{"id":34,"depth":170,"text":35},{"id":42,"depth":170,"text":43},{"id":78,"depth":170,"text":79},{"id":90,"depth":170,"text":91},{"id":114,"depth":170,"text":115},{"id":122,"depth":170,"text":123,"children":178},[179,181,182],{"id":134,"depth":180,"text":135},3,{"id":148,"depth":180,"text":149},{"id":159,"depth":180,"text":160},"The API and admin dashboard I built for Sanad, a Saudi real-estate investment platform: a wallet ledger that traces every riyal, investing in one step, and returns paid on a schedule.","md",{},true,"\u002Fprojects\u002Fsanad",{"description":183},{"loc":187},"projects\u002Fsanad","t1MoiFcDzY0l67vmHbgAIdYq0hA-WIHLKpdxJMn_Fkk",{"id":193,"title":194,"context":195,"description":196,"extension":197,"highlight":198,"links":201,"mark":205,"meta":207,"order":208,"stem":190,"year":209,"__hash__":210},"projects\u002Fprojects\u002Fsanad.yml","Sanad · Real-estate investment platform","Full-stack engineer · May 2024 – May 2025","The API and admin dashboard I built for a Saudi real-estate investment platform: verified investors, a wallet, investments and returns paid on a schedule.","yml",{"title":194,"description":199,"period":200,"order":180},"The API and admin dashboard behind a Saudi real-estate investment platform, from verified investors to scheduled returns.","2024 – 2025",[202],{"label":203,"to":204},"investsanad.sa","https:\u002F\u002Finvestsanad.sa\u002F",{"logo":206},"sanad",{},1,2024,"I7xw7gCpZ5lO1l6TrSUg89lF5gBKDkZX01f-i7hikls",[212,219,226],{"path":213,"title":214,"description":215,"mark":216,"year":218},"\u002Fprojects\u002Frunarks","Runarks · Governed access to production databases","My own product: every query against a production database is reviewed, approved, run once and logged, and nobody sees a password.",{"logo":217},"runarks",2026,{"path":220,"title":221,"description":222,"mark":223,"year":225},"\u002Fprojects\u002Fwinch","WINCH · Saudi logistics platform","The back end of a Saudi logistics platform for businesses and carriers: more than 50 domains, and the integration engine I built for government services, payments and AI.",{"logo":224},"winch",2023,{"path":227,"title":228,"description":229,"mark":230,"year":232},"\u002Fprojects\u002Fiot-wash-stations","IoT car-wash stations","Car-wash bays that start when a Faris card holder scans their card: a Raspberry Pi at every bay, driven by one server I built.",{"icon":231},"simple-icons:raspberrypi",2022,{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":234},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M12 12h.01M16 6V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2m14 7a18.15 18.15 0 0 1-20 0\"\u002F>\u003Crect width=\"20\" height=\"14\" x=\"2\" y=\"6\" rx=\"2\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":236},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M8 2v3m8-3v3\"\u002F>\u003Crect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"\u002F>\u003Cpath d=\"M3 9h18\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":238},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"M12 2a14.5 14.5 0 0 0 0 20a14.5 14.5 0 0 0 0-20M2 12h20\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":240},"\u003Cpath fill=\"currentColor\" d=\"m19.896 10.896l-.173-.303c.007-2.174-1.002-3.06-2.179-3.734c.356-.094.724-.172.825-.619c.611-.156.74-.44.8-.74c.16-.106.696-.406.64-.92c.3-.207.467-.473.382-.85c.322-.35.407-.641.27-.909c.387-.48.215-.73.05-.982c.29-.525.034-1.088-.776-.994c-.322-.473-1.024-.366-1.133-.364c-.121-.152-.281-.282-.775-.219c-.32-.285-.677-.236-1.046-.096c-.438-.34-.727-.068-1.058.036c-.53-.171-.652.063-.912.158c-.578-.12-.754.141-1.03.418l-.323-.006c-.872.506-1.305 1.536-1.459 2.066c-.153-.53-.586-1.56-1.457-2.066l-.323.006C9.942.501 9.766.239 9.19.36C8.927.265 8.806.03 8.276.202C8.059.134 7.86-.007 7.624 0a.7.7 0 0 0-.405.166c-.37-.14-.727-.189-1.046.096c-.494-.063-.654.068-.776.22c-.108-.003-.81-.11-1.133.363c-.81-.094-1.065.47-.776.994c-.165.252-.336.502.05.982c-.136.268-.051.558.27.91c-.084.376.083.642.383.849c-.056.515.48.814.639.92c.061.3.19.584.801.74c.1.448.469.525.825.619c-1.177.673-2.186 1.56-2.18 3.735l-.172.302c-1.349.809-2.562 3.406-.664 5.517c.124.661.332 1.136.517 1.661c.277 2.117 2.084 3.108 2.56 3.226c.699.524 1.443 1.02 2.45 1.37c.948.963 1.976 1.33 3.01 1.33h.046c1.034 0 2.062-.367 3.01-1.33c1.007-.35 1.751-.847 2.45-1.37c.476-.118 2.284-1.109 2.56-3.226c.186-.525.394-1 .517-1.66c1.899-2.112.685-4.71-.664-5.518m-1.04-.371c-.07.876-4.635-3.05-3.846-3.181c2.139-.356 3.919.896 3.847 3.18m-2.015 4.365c-1.148.74-2.802.262-3.695-1.069s-.686-3.01.462-3.75s2.803-.263 3.696 1.068c.892 1.33.686 3.01-.463 3.75M13.66 1.372c.04.197.084.321.135.358c.254-.272.462-.55.788-.813c.001.154-.077.321.117.443a2.3 2.3 0 0 1 .727-.624c-.152.26-.026.34.055.448c.24-.206.468-.414.91-.576c-.12.148-.29.292-.11.461c.247-.154.496-.309 1.083-.418c-.132.147-.406.295-.24.442Q17.59.915 18.158.84c-.182.15-.334.296-.184.412c.332-.102.79-.24 1.237-.121l-.283.285c-.032.038.662.03 1.12.036c-.167.232-.338.456-.437.855c.045.046.272.02.486 0c-.22.462-.6.578-.69.776c.135.101.32.075.524.006c-.158.325-.49.548-.751.812c.066.047.182.075.456.043a4.2 4.2 0 0 1-.88.703c.06.07.272.068.467.072c-.313.307-.717.466-1.095.667c.188.13.323.1.467.097c-.267.22-.722.335-1.144.467c.08.125.16.159.332.194c-.447.247-1.087.134-1.268.26c.044.125.167.206.314.274c-.72.041-2.688-.027-3.065-1.516c.737-.81 2.081-1.76 4.394-2.934c-1.8.602-3.423 1.405-4.782 2.51c-1.598-.744-.496-2.62.283-3.365m-1.613 5.372c1.133-.012 2.536.832 2.53 1.629c-.005.702-.985 1.271-2.52 1.26c-1.505-.017-2.518-.715-2.514-1.395c.002-.56 1.228-1.527 2.504-1.494m-5.764-.6c.172-.036.252-.07.332-.195c-.422-.132-.877-.247-1.145-.466c.145.001.28.031.468-.097c-.378-.201-.782-.36-1.095-.667c.195-.005.406-.002.467-.073a4.2 4.2 0 0 1-.88-.703c.274.032.39.004.456-.043c-.262-.264-.593-.487-.751-.812c.203.069.389.095.523-.006c-.089-.198-.47-.314-.69-.776c.215.02.442.046.487 0c-.1-.399-.27-.623-.437-.855c.458-.007 1.152.002 1.12-.036l-.283-.285c.447-.119.905.019 1.237.121c.15-.116-.002-.263-.184-.412q.569.076 1.034.254C7.106.946 6.833.798 6.7.651c.587.11.836.264 1.083.418c.18-.17.01-.313-.111-.46c.443.161.67.37.911.575c.081-.108.207-.187.055-.448c.315.178.552.389.727.624c.194-.122.116-.289.117-.442c.326.261.534.54.788.812c.05-.037.095-.161.135-.358c.78.745 1.88 2.621.283 3.365C9.33 3.633 7.707 2.83 5.909 2.228c2.312 1.174 3.656 2.124 4.392 2.933c-.377 1.49-2.345 1.558-3.065 1.516c.147-.068.27-.149.314-.273c-.18-.126-.821-.013-1.268-.26m2.817 1.133c.788.13-3.777 4.056-3.847 3.18C5.18 8.174 6.96 6.922 9.1 7.278m-4.847 8.756c-1.109-.879-1.466-3.453.59-4.61c1.24-.327.419 5.052-.59 4.61m4.266 4.6c-.626.371-2.145.218-3.225-1.31c-.729-1.282-.635-2.587-.123-2.97c.765-.46 1.946.16 2.856 1.2c.792.94 1.153 2.592.492 3.08m-1.242-5.61c-1.148-.74-1.355-2.42-.462-3.75s2.547-1.81 3.695-1.068c1.148.74 1.355 2.42.463 3.75c-.893 1.331-2.547 1.81-3.695 1.069m4.795 8.229c-1.376.058-2.726-1.11-2.708-1.516c-.02-.594 1.676-1.058 2.782-1.03c1.113-.049 2.607.352 2.61.884c.018.517-1.355 1.684-2.684 1.662m2.759-5.858c.008 1.39-1.226 2.522-2.757 2.53c-1.53.007-2.777-1.114-2.785-2.504v-.026c-.008-1.39 1.226-2.523 2.756-2.53s2.778 1.113 2.786 2.503zm3.855 2.003c-1.186 1.62-2.792 1.684-3.39 1.232c-.625-.58-.148-2.385.71-3.374c.98-1.092 2.03-1.804 2.76-1.248c.492.483.78 2.301-.08 3.39m1.072-3.43c-1.009.44-1.83-4.938-.59-4.61c2.057 1.157 1.7 3.73.59 4.61m-.026-8.328h.299v-.53h.299c.15 0 .205.062.226.205c.015.108.011.239.048.325h.298c-.053-.076-.052-.236-.057-.321c-.01-.138-.051-.28-.198-.318v-.004c.15-.06.215-.18.215-.34c0-.206-.154-.375-.397-.375h-.732zm.299-1.126h.327c.133 0 .205.058.205.188c0 .137-.072.194-.205.194h-.327zm-1.034.464a1.27 1.27 0 1 0 2.54 0a1.27 1.27 0 0 0-2.54 0m2.328 0a1.058 1.058 0 1 1-2.116 0a1.058 1.058 0 0 1 2.116 0\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":242},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"14\" height=\"20\" x=\"5\" y=\"2\" rx=\"2\" ry=\"2\"\u002F>\u003Cpath d=\"M12 18h.01\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":244},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m5 8l6 6m-7 0l6-6l2-3M2 5h12M7 2h1m14 20l-5-10l-5 10m2-4h6\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":246},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\"\u002F>\u003Cpath d=\"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":248},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M13 19a4 4 0 0 0-8 0m11-9h2m-2 4h2\"\u002F>\u003Ccircle cx=\"9\" cy=\"12\" r=\"3\"\u002F>\u003Crect width=\"20\" height=\"14\" x=\"2\" y=\"5\" rx=\"2\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":250},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1\"\u002F>\u003Cpath d=\"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":252},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M16 14v2.2l1.6 1M16 2v3m5 2.338V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h2.338M3 9h5.859M8 2v3\"\u002F>\u003Ccircle cx=\"16\" cy=\"16\" r=\"6\"\u002F>\u003C\u002Fg>",1791781460955]