diff --git a/.gitignore b/.gitignore index 38917d45..76f2d9a8 100644 --- a/.gitignore +++ b/.gitignore @@ -12,7 +12,6 @@ k8s-context *.sqlite3* tsconfig.tsbuildinfo .react-router -tailwind.css userInfoCache.json *timestamp* vite.config.ts* diff --git a/Dockerfile b/Dockerfile index a6f5e9f4..64823303 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,7 @@ RUN apk add --no-cache python3 make g++ COPY package.json package-lock.json ./ RUN npm install -COPY vite.config.ts tailwind.config.js kysely.config.ts tsconfig.json .eslint* .prettierignore ./ +COPY vite.config.ts kysely.config.ts tsconfig.json .eslint* .prettierignore ./ COPY app ./app RUN npm run build diff --git a/aesthetic/courts.md b/aesthetic/courts.md new file mode 100644 index 00000000..55d40f1b --- /dev/null +++ b/aesthetic/courts.md @@ -0,0 +1,65 @@ +The Architecture of Judgment: How Judicial Spaces Have Shaped the Experience of Justice Across History + +Every society that has organized itself around the rule of law has eventually confronted the same architectural question: what should the place where we judge one another look like? The answers have varied enormously in style, material, and scale, but they share a remarkable consistency of purpose. From the open-air tribunals of ancient Athens to the glass-clad federal courthouses of the twenty-first century, the spaces of justice have never been designed merely to house proceedings. They have been designed to transform the people who enter them -- to slow their pace, elevate their attention, and impress upon them that they have crossed a threshold into a place where ordinary social rules are suspended and something weightier applies. + +The Open-Air Origins: Greece and Rome + +The Western tradition of judicial architecture begins not with buildings at all, but with designated spaces within the civic landscape. In Athens, the administration of justice was woven into the fabric of the agora, the central public square that served simultaneously as marketplace, political forum, and court precinct. The Stoa Basileios, or Royal Stoa, stood in the northwestern corner of the Athenian agora -- a modest Doric colonnade, only about eighteen meters long, where the King Archon heard pretrial indictments and presided over cases of impiety and homicide. It was here, at this unassuming structure, that Socrates was formally charged. The Athenian dikasteria, or people's courts, operated in similarly spare settings: open-air enclosures, sometimes roped off or bounded by temporary barriers, where juries numbering in the hundreds gathered to hear arguments. What these spaces lacked in grandeur they compensated for in deliberate spatial choreography. The speakers stood; the jurors sat. The accused was placed apart. Even in the absence of monumental architecture, the arrangement of bodies in space communicated hierarchy and consequence. + +Rome transformed this inheritance into something far more architecturally ambitious. The Roman basilica -- a long rectangular hall with a central nave, flanking aisles, and an apse at one or both ends -- became the prototypical judicial building of the ancient world. The basilica was not exclusively a courthouse; it served commercial and administrative functions as well. But its design was particularly suited to the drama of legal proceedings. The apse, raised on a platform and often elaborated with a semicircular bench, housed the tribunal where magistrates sat in judgment. The height of the nave, the rhythm of the columns, the progression from entrance to apse -- all of it created an axial experience that drew the eye and the body toward the seat of authority. The Basilica Julia in the Roman Forum, where the Centumviri court convened, could accommodate multiple simultaneous proceedings within its vast interior. The Basilica Ulpia, completed under Trajan, stretched nearly 170 meters and featured massive granite columns that dwarfed the humans moving beneath them. + +What Rome contributed to the vocabulary of judicial architecture was the insight that vertical and horizontal scale could be instruments of authority. The raised tribunal, the towering column, the cavernous interior -- these were not decorative indulgences but spatial arguments about the relationship between the individual and the state. To stand before a Roman magistrate was to stand at the bottom of a carefully constructed hierarchy made literal in stone. + +The Medieval Inheritance: Church, Castle, and Hall + +The collapse of Roman civic infrastructure in Western Europe did not eliminate the need for judicial spaces, but it fundamentally altered where and how justice was administered. For several centuries, courts operated within structures that served other primary purposes: the great halls of castles, the naves of churches, the chapter houses of monasteries. Justice was dispensed not in purpose-built courthouses but in spaces borrowed from ecclesiastical and feudal authority. + +This borrowing was not merely practical; it was ideological. Medieval jurisprudence drew its legitimacy in large part from religious authority. Ecclesiastical courts, presided over by bishops and archdeacons, handled not only matters of church law but a wide range of civil disputes. By the end of the twelfth century, a fully developed hierarchy of church tribunals existed, with consistory courts presided over by chancellors trained in canon law. The physical settings of these proceedings -- vaulted stone chambers, carved wooden screens, the iconography of saints and scripture -- communicated that earthly judgment operated under divine sanction. The architecture of the church lent its moral authority to the act of adjudication. + +The most consequential medieval judicial space in the English-speaking world was Westminster Hall. Built in 1097 for William II, it was one of the largest halls in Europe and served for centuries as the seat of the courts of King's Bench, Chancery, and Common Pleas. When the Magna Carta stipulated in 1215 that common pleas should be heard in a fixed place, that place was generally Westminster Hall. Its hammerbeam roof, commissioned by Richard II in 1393 and considered one of the supreme achievements of medieval timber construction, created a single vast open space that could accommodate the full ceremony of royal justice. The trials of Thomas More, Guy Fawkes, and Charles I all took place beneath that roof. The English common law tradition, and by extension the American legal system, was substantially developed within its walls. + +What the medieval period established was the principle that judicial space should be shared with, or modeled upon, spaces of spiritual and sovereign authority. The courtroom inherited the church's vertical aspiration, its stone solemnity, its sense of being set apart from the profane world outside. When dedicated courthouses eventually emerged, they carried this inheritance forward. + +The Neoclassical Courthouse: Democracy in Marble + +The most visually recognizable courthouse form in the Western world -- the columned portico, the broad flight of steps, the pediment inscribed with civic maxims -- is a product of the eighteenth and nineteenth centuries, when democratic nations deliberately reached back across two millennia to claim the architectural language of ancient republics. + +The logic of this revival was explicitly ideological. Thomas Jefferson believed that the ordered geometry and columnar vocabulary of Greek and Roman civic architecture would provide the young American republic with an appropriate symbolic framework. His Virginia State Capitol, begun in 1785 and modeled on the Maison Carree, a first-century Roman temple in Nimes, was the first neoclassical public building in the United States and was intended, quite consciously, as a democratic shrine. The message was legible: this new nation governed itself according to principles as rational and enduring as the architecture of the ancients. + +Over the following century and a half, this logic was applied to courthouses across the country with extraordinary consistency. The neoclassical courthouse became, in effect, a recognizable building type -- a temple of justice whose columns and pediments signaled its function as surely as a steeple signaled a church. The Corinthian column, the symmetrical facade, the elevated entrance reached by a ceremonial staircase: these elements were not arbitrary aesthetic choices. They constituted a symbolic vocabulary through which communities declared their commitment to the rule of law and their faith in its ancient pedigree. + +The apotheosis of this tradition is the United States Supreme Court Building, designed by Cass Gilbert and completed in 1935. Gilbert conceived it explicitly as a Roman temple of justice, with a dominant central structure flanked by two horizontal wings. The western pediment bears the figures of great lawgivers -- Moses, Confucius, Solon -- while James Earle Fraser's seated sculptures, the Authority of Law and the Contemplation of Justice, guard the entrance. The frieze carries the inscription that has become perhaps the most famous architectural text in American law. Every element of the building's exterior was designed to communicate that the proceedings within partake of a tradition stretching back to antiquity. + +The symbolic vocabulary extended beyond the architecture itself. Lady Justice, derived from the Roman goddess Iustitia and her Greek predecessor Themis, became a ubiquitous figure in courthouse iconography. Her scales represent the weighing of evidence; her sword, the authority to enforce judgment; her blindfold, added in the sixteenth century and originally satirical, was reinterpreted as a symbol of impartiality. These figures, along with the recurring motifs of marble, bronze, and carved stone, constituted a visual language that reinforced the courthouse's claim to transcend the merely contemporary. The materials themselves were arguments: marble does not rot, bronze does not bend, stone endures. + +The Modern Courthouse: Transparency and Its Tensions + +The twentieth century brought a sustained challenge to the neoclassical courthouse tradition. After World War II, modernist architects rejected what they saw as the eclectic historicism of earlier public buildings. Functionalism and economy produced entirely new types of courthouses: concrete towers, glass-walled atria, buildings that sought to express democratic values not through classical reference but through openness, light, and accessibility. + +The shift was philosophical as much as aesthetic. If the neoclassical courthouse communicated authority through monumentality and historical allusion, the modern courthouse sought to communicate democratic transparency through literal transparency. Contemporary courthouse designers have emphasized the use of glass to evoke the openness of the judicial system and to flood courtrooms with natural light. The Los Angeles Federal Courthouse, designed by SOM and completed in 2016, features a pleated glass facade that admits daylight while managing thermal loads -- a building that aspires to make the administration of justice visible from the street. + +Yet the tension between gravitas and openness has proved difficult to resolve. A courthouse made entirely of glass risks communicating fragility rather than permanence. The ceremonial staircase, whatever its accessibility shortcomings, performed an important psychological function: it slowed the visitor's approach, created a transitional space between the street and the courtroom, and demanded a physical effort that mirrored the seriousness of the proceedings within. Modern designers have had to find new ways to achieve these effects. Many contemporary courthouses retain monumental elements -- processional lobbies, grand public staircases, facades of limestone or granite -- while incorporating glass, sustainable materials, and accessible design. The Multnomah County Central Courthouse in Portland, for instance, balances civic presence with environmental performance and universal access. + +Security concerns have added another layer of complexity. The modern courthouse must manage the separation of judges, jurors, defendants, and the public through distinct circulation paths, secure vestibules, and controlled sightlines -- functional requirements that inevitably shape the visitor's spatial experience. Where the classical courthouse used elevation and ornament to signal hierarchy, the contemporary courthouse uses security screening and controlled access points. The effect, paradoxically, can be similar: the visitor is made to feel that crossing the threshold requires something of them. + +The Judge's Chambers: Authority in Intimate Scale + +If the courthouse exterior addresses the public, the judge's chambers address the individual. These private workspaces occupy a unique position in the architectural program of any judicial building: they must convey authority without the advantage of monumental scale, and they must accommodate the intellectual labor of legal reasoning in an environment that nonetheless communicates formality and gravitas. + +The design conventions of judicial chambers have been remarkably stable. Wood paneling -- specifically, the raised-panel wainscoting that has come to be known simply as "judge's paneling" -- has been a defining feature for centuries, lending warmth and acoustic dampness while communicating a sober, traditional authority. The term itself has entered the general vocabulary of interior design, detached from its judicial origins but still carrying their connotations. Full-height bookshelves lined with legal volumes serve both practical and symbolic functions: they are working libraries, but they also constitute a visual argument about the depth of learning and precedent that informs judicial decision-making. The desk is substantial. The chairs are leather. The carpet is dark. Every surface and object participates in a carefully calibrated atmosphere of deliberate seriousness. + +Design standards for judicial chambers specify premium-grade architectural woodwork, careful attention to acoustics, and interior finishes that reinforce the dignity of the space. These are not merely aesthetic preferences; they are institutional requirements that reflect a judgment about how physical environment shapes behavior. A judge who deliberates in a room paneled in oak, surrounded by bound volumes, seated behind a desk of appropriate weight and proportion, inhabits a space that continually reminds both the judge and any visitor that the work performed here carries consequences. + +The chambers also serve a subtler function: they provide a controlled transition between the public theater of the courtroom and the private exercise of judgment. A litigant or attorney meeting a judge in chambers encounters authority in a different register -- more intimate, more conversational, but no less formal. The architecture of the space ensures that informality never collapses into casualness. + +The Persistent Thread: Architecture as Moral Argument + +Across every era and style surveyed here -- from the Stoa Basileios to the glass towers of the twenty-first century -- a single principle persists. Judicial architecture is never neutral. It is never merely functional. It is always, in every detail and at every scale, making an argument about the nature and importance of what takes place within it. + +The specific vocabulary changes: Doric columns give way to Gothic arches, which yield to neoclassical porticos, which are succeeded by curtain walls of glass. But the underlying intention remains constant. The architecture of justice is designed to create friction. It interposes barriers -- steps, thresholds, security checkpoints, heavy doors -- between the outside world and the space of adjudication. It demands that visitors slow down, look up, and adjust their behavior. It insists, through scale and material and spatial sequence, that the ordinary pace and posture of daily life are insufficient for what is about to occur. + +This friction is not a design flaw; it is the design itself. The elevated bench forces everyone in the courtroom to look up at the judge. The bar -- literally a railing -- separates participants from observers. The witness stand isolates the person who speaks. The jury box confines those who must listen. Every partition, every change in floor level, every material transition from public corridor to courtroom interior is a spatial argument about the seriousness of the enterprise. + +Even the modern courthouse, for all its commitment to transparency and accessibility, cannot escape this logic. It can replace marble with glass, swap Corinthian columns for steel, and eliminate the ceremonial staircase in favor of a ground-level entrance. But it must still find ways to communicate that crossing the threshold matters -- that the space within is governed by different rules, higher stakes, and a slower, more deliberate tempo than the world outside. The security screening that greets visitors to every contemporary courthouse performs, inadvertently or not, the same function as the long climb up the steps of a neoclassical temple: it creates a pause, a transition, a moment of heightened awareness. + +The physical environment of justice has always been designed to match the gravity of its purpose. The materials may be stone or glass, the style may be classical or modern, the scale may be monumental or intimate. But the intention is always the same: to construct a space that tells everyone who enters it that what happens here carries weight, that decisions made in this room will ripple outward into lives and communities, and that the ordinary carelessness of everyday existence must be set aside. The architecture of the courthouse is, in the end, a built argument that justice itself is real -- not abstract, not theoretical, but embodied in walls and columns and benches and light, demanding to be taken seriously, insisting that the humans who pass through its doors rise, however briefly, to meet its occasion. diff --git a/aesthetic/eunomia.md b/aesthetic/eunomia.md new file mode 100644 index 00000000..e2789520 --- /dev/null +++ b/aesthetic/eunomia.md @@ -0,0 +1,22 @@ +Eunomia: Greek Goddess of Good Order + +Eunomia is a goddess of the ancient Greek pantheon, born of two of the most powerful figures in the divine hierarchy: Zeus, king of the Olympian gods, and Themis, the Titaness of divine law and cosmic order. Her genealogy is recorded in Hesiod's Theogony, composed around the late eighth or early seventh century BCE, which establishes her as one of the second generation of the Horae -- goddesses who governed both the rhythms of the natural seasons and the moral order of human civilization. That her mother was Themis is significant: Themis represented the foundational, eternal principles of right and wrong, and her daughters were understood as the practical expressions of those principles in the world of mortals. The Horae were also described as keepers of the gates of heaven on Olympus, granting them a liminal role between the divine and human realms. Additionally, the Horae shared a familial connection with the three Moirai (the Fates), who were also daughters of Zeus and Themis, linking the concepts of order, justice, and destiny within a single divine family. + +Eunomia's name translates directly as "good order" or "governance according to good laws," from the Greek roots eu (good) and nomos (law, custom, or order). She personified the internal stability of a well-governed state: the enactment of just legislation, the maintenance of civil harmony, and the proper conduct of citizens within a political community. Her domain was not the enforcement of justice through punishment, but rather the underlying condition that makes justice possible -- the presence of sound institutions, fair customs, and a citizenry oriented toward the common good. Her conceptual opposite was the daimon Dysnomia, the spirit of lawlessness and disorder, against whom Eunomia stood as a counterbalancing force. Beyond the civic sphere, she also carried associations with the natural world, particularly the orderly arrival of spring and the greening of pastures, reflecting the Greek understanding that the same principle of harmonious arrangement governed both nature and the polis. The Athenian statesman Solon, in his famous poems of the sixth century BCE, invoked the concept of eunomia as the ideal political condition, arguing that good order restrains hubris and fosters collective well-being, while dysnomia breeds conflict and ruin. + +Eunomia formed an inseparable triad with her two sisters, Dike (Justice) and Eirene (Peace), and the three were understood not as independent forces but as deeply interdependent aspects of a flourishing society. Each Hora governed a specific dimension of civilized life: Eunomia established the constitutional and legislative framework of the city-state; Dike safeguarded fairness and moral accountability in human dealings; and Eirene nurtured the tranquility and prosperity that followed when order and justice were maintained. The Greeks recognized an implicit causal logic in this arrangement -- good laws produce justice, and justice produces peace -- making the three sisters a kind of philosophical sequence as much as a mythological family. The poet Pindar praised cities "governed by Eunomia," invoking not merely a goddess but an entire political philosophy in which beauty, prosperity, and righteousness could flourish only where chaos had been contained. Together, the three Horae were worshipped primarily in the cities of Athens, Argos, and Olympia, where civic order was a matter of both political necessity and religious devotion. + +In ancient art, Eunomia was frequently depicted in Athenian vase painting as one of the companions of Aphrodite, where she represented the lawful and orderly conduct expected of women within the institution of marriage -- an extension of her domain of good order into the domestic sphere. She was sometimes shown holding a staff or scepter as a symbol of authority, or scales representing fairness, and occasionally depicted with flowers connecting her to the seasonal aspects of the Horae. Though she never commanded the dramatic mythological narratives of gods like Athena or Apollo, her influence was arguably more pervasive: the concept she embodied became foundational to Greek political thought and, through it, to the Western tradition of governance and law. Solon built his reforms around the ideal of eunomia; Plato and Aristotle grappled with the same questions of order and justice that she personified. Her legacy persists not in temples or active worship, but in the enduring conviction -- inherited from the Greeks and still operative today -- that a good society requires not merely power or freedom, but the disciplined architecture of fair laws and shared civic norms. + +--- + +Sources: + +- Theoi Project: Eunomia +- Theoi Project: Horae +- Britannica: Hora (Greek Mythology) +- Wikipedia: Eunomia +- Wikipedia: Horae +- World History Encyclopedia: Horae +- Greece High Definition: Eunomia - The Deeper Meaning Behind an Ancient Greek Word +- History Cooperative: Eirene - Greek Goddess of Peace diff --git a/app/basics/login.tsx b/app/basics/login.tsx index 6dc968e5..75da18f5 100644 --- a/app/basics/login.tsx +++ b/app/basics/login.tsx @@ -16,7 +16,7 @@ export function Login({
diff --git a/app/basics/page.tsx b/app/basics/page.tsx index 30c912d0..a9f77b2f 100644 --- a/app/basics/page.tsx +++ b/app/basics/page.tsx @@ -3,7 +3,7 @@ import type { PropsWithChildren } from "react"; export function Page({ children }: PropsWithChildren) { return (
-
+
{children}
diff --git a/app/components/AddEunoCard.tsx b/app/components/AddEunoCard.tsx new file mode 100644 index 00000000..66c40ebf --- /dev/null +++ b/app/components/AddEunoCard.tsx @@ -0,0 +1,37 @@ +interface AddEunoCardProps { + id: string; + name: string; + icon: string | null; +} + +const INVITE_BASE = + "https://discord.com/oauth2/authorize?client_id=984212151608705054&permissions=8&scope=applications.commands%20bot"; + +export function AddEunoCard({ id, name, icon }: AddEunoCardProps) { + return ( +
+ {icon ? ( + {name} + ) : ( +
+ {name.charAt(0).toUpperCase()} +
+ )} + + {name} + + + Add Euno + +
+ ); +} diff --git a/app/components/DiscordLayout.tsx b/app/components/DiscordLayout.tsx index 066c727d..a6b2bb8d 100644 --- a/app/components/DiscordLayout.tsx +++ b/app/components/DiscordLayout.tsx @@ -44,17 +44,17 @@ export function DiscordLayout({ }; return ( -
+
{/* Server Selector Column */} -
+
{/* Home/Euno Icon */} -
+
E @@ -66,11 +66,11 @@ export function DiscordLayout({ {manageableGuilds.map((guild) => (
@@ -81,7 +81,7 @@ export function DiscordLayout({ className="h-10 w-10 rounded-xl" /> ) : ( - + {guild.name.charAt(0).toUpperCase()} )} @@ -94,10 +94,10 @@ export function DiscordLayout({ to={ "https://discord.com/oauth2/authorize?client_id=984212151608705054&scope=applications.commands%20bot" } - className={`flex h-12 w-12 items-center justify-center rounded-2xl bg-gray-700 transition-all duration-200 hover:rounded-xl hover:bg-gray-600`} + className={`bg-surface-overlay flex h-12 w-12 items-center justify-center rounded-2xl transition-all duration-200 hover:rounded-xl hover:bg-stone-600`} title={"Add to server"} > - + + +
@@ -118,10 +118,12 @@ export function DiscordLayout({
{/* Channel Sidebar */} -
+
{/* Channel Header */} -
-

Euno Dashboard

+
+

+ Euno Dashboard +

{/* Navigation */} @@ -134,21 +136,31 @@ export function DiscordLayout({ to={`/app/${guildId}/sh`} className={`group flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors ${ isActive(`/app/${guildId}/sh`) - ? "bg-gray-600 text-white" - : "text-gray-300 hover:bg-gray-700 hover:text-white" + ? "bg-surface-overlay text-stone-100" + : "hover:bg-surface-overlay text-stone-400 hover:text-stone-100" }`} > 🌟 Star Hunter -
+
)} + + 📊 Overview + ⚙️ Settings @@ -157,8 +169,8 @@ export function DiscordLayout({ to={`/app/${guildId}/onboard`} className={`group flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors ${ isActive(`/app/${guildId}/onboard`) - ? "bg-gray-600 text-white" - : "text-gray-300 hover:bg-gray-700 hover:text-white" + ? "bg-surface-overlay text-stone-100" + : "hover:bg-surface-overlay text-stone-400 hover:text-stone-100" }`} > 🆕 Onboarding flow @@ -169,45 +181,45 @@ export function DiscordLayout({ {/* Expanded Account Menu */} {accountExpanded && ( -
+
-

Account

+

Account

{/* Profile */} Profile Terms of Service Privacy Policy Contact Support -
+
-
+
Log Out
@@ -216,22 +228,22 @@ export function DiscordLayout({ )} {/* Account Section */} -
+
diff --git a/app/components/ServerCard.tsx b/app/components/ServerCard.tsx new file mode 100644 index 00000000..b1b19624 --- /dev/null +++ b/app/components/ServerCard.tsx @@ -0,0 +1,105 @@ +import { Link } from "react-router"; + +import { Sparkline } from "#~/components/Sparkline"; + +interface ServerCardProps { + id: string; + name: string; + icon: string | null; + tier: "free" | "paid" | "custom"; + openEscalations: number; + reportCount: number; + actionCount: number; + sparkline: number[]; +} + +const tierBadge: Record = { + free: { + label: "Free", + className: "bg-stone-700 text-stone-300", + }, + paid: { + label: "Pro", + className: "bg-amber-500/20 text-amber-400", + }, + custom: { + label: "Custom", + className: "bg-purple-500/20 text-purple-400", + }, +}; + +export function ServerCard({ + id, + name, + icon, + tier, + openEscalations, + reportCount, + actionCount, + sparkline, +}: ServerCardProps) { + const badge = tierBadge[tier] ?? tierBadge.free; + + return ( + + {/* Header: icon + name + tier */} +
+ {icon ? ( + {name} + ) : ( +
+ {name.charAt(0).toUpperCase()} +
+ )} +

+ {name} +

+ + {badge.label} + +
+ + {/* Escalations */} + {openEscalations > 0 ? ( +

+ {openEscalations} pending escalation + {openEscalations !== 1 && "s"} +

+ ) : ( +

No pending actions

+ )} + + {/* Sparkline */} +
+ +

Reports — last 30 days

+
+ + {/* Counts */} +
+ + {reportCount}{" "} + reports + + + {actionCount}{" "} + actions + +
+ + {/* Footer */} +
+ View details +
+ + ); +} diff --git a/app/components/Sparkline.tsx b/app/components/Sparkline.tsx new file mode 100644 index 00000000..10f5325f --- /dev/null +++ b/app/components/Sparkline.tsx @@ -0,0 +1,35 @@ +interface SparklineProps { + data: number[]; + width?: number; + height?: number; +} + +export function Sparkline({ data, width = 200, height = 40 }: SparklineProps) { + const max = Math.max(...data, 1); + const barWidth = width / data.length; + const gap = 1; + + return ( + + {data.map((value, i) => { + const barHeight = (value / max) * height; + return ( + 0 ? "fill-amber-500/80" : "fill-stone-700"} + rx={1} + /> + ); + })} + + ); +} diff --git a/app/components/TabsLayout.tsx b/app/components/TabsLayout.tsx index a474716c..6b9dd696 100644 --- a/app/components/TabsLayout.tsx +++ b/app/components/TabsLayout.tsx @@ -23,7 +23,7 @@ export default function TabsLayout() { {/* Tabs Navigation */}