contralabs/HumanCreativityBenchmark
The Human Creativity Benchmark (HCB) Expert evaluations of AI-generated creative work, built to separate two signals that single-score benchmarks collapse: convergence, where professionals align around shared, checkable standards, and divergence, where creative taste legitimately differs. Each AI output is judged by domain professionals through three complementary lenses — forced-choice pairwise comparisons, 1-5 scalar ratings on prompt adherence, usability, and visual appeal… See the full description on the dataset page: https://huggingface.co/datasets/contralabs/HumanCreativityBenchmark.
2209
1prompt_id,domain,stage,prompt_text,input_image,input_html2ad_image_idea_01,Ad Images,Ideation,"Luxury silk scarf inspired by the classical Greek wet drapery technique, where fabric appears sculpted yet fluid. Ultra-fine silk printed with mythological motifs and ornamental Hellenic patterns, designed to mimic the illusion of carved translucency while remaining soft and wearable. The brand tone is mystical, feminine, ancestral and eternal, positioning the piece as a modern heirloom. Designed for women who value heritage, artistry and statement elegance. The emotional goal is to evoke awe and quiet power through craftsmanship. Narrative concept: transforming eternal stone aesthetics into living silk movement. Nocturnal, lunar atmosphere inspired by Selene and ancient Athens mythology. Product-focused composition with visible silk flow and negative space for branding.",,3ad_image_idea_02,Ad Images,Ideation,"Minimalist sustainable water bottle named “DA’BICA”, inspired by the thermal intelligence of the traditional Brazilian clay water filter, reinterpreted through contemporary architectural design. The bottle features a sculptural, clean silhouette with refined proportions. Softly rounded shoulders, compact body and precise neck detailing. Material appears as ultra-matte mineral ceramic in monochromatic tones such as off-white clay, sand beige, muted terracotta or deep charcoal. Surface texture is smooth and uniform, not rustic. Branding is subtle, embossed or debossed directly into the ceramic surface with minimal typographic presence. The design blends ancestral passive cooling principles with modern lifestyle aesthetics. Optional internal glass core or charcoal filtration system integrated discreetly inside. No excessive ornamentation. No rustic exaggeration. Emotional tone: quiet luxury, grounded minimalism, sculptural functionality. Product-focused composition, clean neutral background, soft diffused light emphasizing form and material purity.",,4ad_image_idea_03,Ad Images,Ideation,"Limited edition bone-conduction headphone designed as an ultra-thin sterling-silver ear cuff, resting discreetly against the mastoid bone while appearing as a delicate wearable accessory rather than a traditional headset.The visible structure on the ear is slender and refined, functioning primarily as a sculptural support element that stabilizes the concealed bone-conduction module positioned behind the ear.The polished metal form features fluid architectural lines and a lightweight profile, emphasizing elegance and restraint instead of bulk or technical heaviness.Advanced spatial audio tuning and intelligent bass enhancement are controlled through a dedicated mobile app, prioritizing immersive clarity while maintaining environmental awareness.The brand tone is restrained, futuristic and sophisticated, positioning the piece as a collectible fashion-tech object rather than a sporty gadget.Designed for urban creatives and culturally aware professionals who view technology as an extension of personal style.Narrative concept: transforming high-fidelity open-ear audio into sculpted, jewelry-like wearable design.Minimalist futuristic luxury atmosphere with seamless silver finishes and product-focused composition centered on anatomical integration, leaving subtle negative space for campaign typography.",https://media.contra.com/image/upload/fxhkaajz6qkgipzg1scs.jpg,5ad_image_idea_04,Ad Images,Ideation,"Create a luxury campaign visual for “IARA,” an amazonian-inspired perfume infused with creamy cupuaçu, warm tonka bean, and deep jungle moss. The fragrance is positioned for modern women who value grounding rituals, sensual depth, and connection to nature. The concept should evoke the feeling of the forest breathing at golden hour, humid air, filtered amber light, and a quiet yet powerful feminine presence. The narrative centers on nature as both origin and adornment, where the perfume feels distilled directly from the jungle. Visually incorporate tactile natural elements such as raw wood, moss textures, botanical accents, and viscous golden resin to symbolize warmth and richness. The tone should feel cinematic, intimate, and elevated, balancing organic wilderness with refined luxury. Position the bottle as a sacred object within its environment, grounded yet luminous, with atmospheric depth and soft diffusion to create immersion. The aesthetic should feel editorial, premium, and expandable into a full fragrance campaign.",,6ad_image_idea_05,Ad Images,Ideation,"A modern aluminum beverage can labeled “Luma Iced Tea – Passion Fruit”, zero sugar, featuring vibrant tropical packaging in deep purple and golden-yellow tones inspired by passion fruit rind and glossy pulp, realistic condensation droplets covering the can surface, (a soft pastel coral studio backdrop with subtle warm gradient tones and clean color blocking, styled like a bright contemporary summer beverage campaign), surrounded by several whole purple passion fruits and multiple halved passion fruits revealing glossy golden pulp with black seeds, a small ceramic plate in the foreground holding neatly arranged passion fruit halves and pulp segments, a light patterned napkin partially visible beneath the plate, a glass pitcher filled with iced tea softly blurred in the background, fruits spaced evenly around the can to frame it naturally, (bright directional sunlight casting defined but soft-edged shadows, crisp highlights on the aluminum surface, fresh commercial studio lighting creating a vibrant tropical mood), (centered hero composition with the can upright and dominant in frame, eye-level camera angle, balanced negative space, playful yet clean fruit arrangement surrounding the product in a modern beverage advertisement aesthetic).",,7ad_image_idea_06,Ad Images,Ideation,"A sculptural luxury leather handbag by Mata Forma, crafted from vegetable-tanned Brazilian leather with architectural brass hardware, positioned as a symbol of modern strength rooted in biodiversity and craftsmanship, designed for confident women who value structure, heritage materials, and quiet authority, (a minimal studio environment inspired by the tones of Amazonian earth and raw clay rather than literal forest scenery), subtle references to Brazilian nature translated into form through curved silhouettes inspired by tree trunks and organic growth rings, refined tailoring details, and natural tonal layering in wardrobe styling, (soft directional lighting creating sculptural shadow play and depth, evoking the feeling of strength emerging from the earth without overt wilderness imagery), (editorial hero composition where the handbag feels like a design object and extension of the wearer’s posture, balanced negative space, premium fashion campaign aesthetic expandable into a full luxury accessories series).",,8ad_image_idea_07,Ad Images,Ideation,"Premium over-ear noise-canceling headphones by Arbórea Audio, designed with matte biodegradable polymer shells and recycled aluminum framing, featuring moss-toned acoustic fabric ear cushions inspired by forest textures, positioned for environmentally conscious creatives who seek immersive sound without disconnecting from nature, (an expansive Brazilian highland landscape with rolling green hills and open sky rather than dense jungle, representing openness and breathable sound architecture), subtle wind movement through hair and fabric to suggest sound as a living, atmospheric presence rather than an isolated digital experience, minimal styling with natural knitwear and earthy tones to emphasize sustainability, (golden directional sunlight creating dimensional highlights on curved surfaces and soft rim light tracing the silhouette of the headphones), (cinematic side-profile composition with the headphones as the central focal point against negative sky space, immersive yet refined tech campaign aesthetic scalable into a premium sustainable audio brand narrative).",,9ad_image_mockup_01,Ad Images,Mockup,"High-end product photography of a limited edition bone-conduction ear cuff headphone, captured in a minimalist fashion editorial studio setting. Two models stand back-to-back against a clean white high-key background. A white male model wears structured black minimalist clothing, while a Black female model wears modern sculptural white garments, creating strong visual contrast. Both are wearing the ultra-thin polished sterling silver bone-conduction ear cuff, with the slender metallic structure wrapping around the upper ear and the discreet conduction module resting behind the ear on the mastoid bone. The visible structure must appear delicate and jewelry-scale, refined and sculptural, no thicker than a fine metallic ear cuff. Soft diffused studio lighting creates gentle highlights on the silver surface and subtle contouring on the face and garments. The composition is balanced and symmetrical, slightly angled profiles to clearly reveal the product on both models, with shallow depth of field and generous negative space. The image should evoke futuristic minimalism, refined technology, Scandinavian luxury and fashion-forward sophistication. No sporty elements, no plastic texture, no bulkiness.","https://media.contra.com/image/upload/keo1adhu4jmaegnisjdd.avif, https://media.contra.com/image/upload/gbjhoanuvcxc84qbwrcj.avif",10ad_image_mockup_02,Ad Images,Mockup,"Top-view high-end studio product photography of the minimalist sustainable water bottle “DA’BICA”. The bottle is positioned centrally over a shallow layer of clear water inside a controlled studio environment. Smooth light river stones in soft neutral tones surround the bottle in a minimal sculptural arrangement. Subtle natural water ripples create soft caustic reflections on the matte terracotta ceramic surface. The bottle color is muted warm terracotta with ultra-matte mineral finish, soft-touch texture, minimal embossed branding. Lighting is clean, soft and directional, creating gentle shadow definition while maintaining architectural clarity. The composition is calm and spacious, with negative space and visual breathing room. No glossy reflections. No perfume aesthetic. No excessive highlights. The focus is on mineral texture, purity, sustainable design and quiet luxury. Cinematic realism, high resolution, refined minimalism.","https://media.contra.com/image/upload/b15fo2wbp1et1j0samn5.avif, https://media.contra.com/image/upload/foin8u9xjwmejzafsert.avif",11ad_image_mockup_03,Ad Images,Mockup,"Luxury amazonian niche perfume product photography for “IARA – Eau de Parfum.” A crystal-clear glass perfume bottle with a minimal ivory label in refined serif typography (deep forest green text) and a brushed matte gold metallic cap, filled with a muted warm amber liquid with subtle olive undertones and a soft resin glow. The bottle is centered on three stacked dark Amazonian bark slabs with rich wood grain texture. Translucent golden tree resin (not honey) drips from above onto the cap and flows down the glass and bark in smooth, glossy, viscous streams with a darker, resinous tone. Surrounding elements include cracked cupuaçu fruit with creamy white pulp, scattered tonka beans, deep green jungle moss growing organically along the bark layers, and subtle white rainforest blossoms. Background: deep rainforest emerald fading into near-black jungle teal with subtle atmospheric humidity. Lighting is cinematic luxury studio style, warm controlled key light from upper left, soft rim light tracing the glass edges, and delicate backlight enhancing translucency. High contrast but refined, no harsh highlights. Shallow depth of field, sharp focus on bottle and resin, editorial luxury fragrance campaign aesthetic.",https://media.contra.com/image/upload/qym6lt8bvdfxsqcjwtow.avif,12ad_image_mockup_04,Ad Images,Mockup,"A high-resolution commercial product mockup of a 12oz slim aluminum beverage can labeled “Luma Iced Tea – Passion Fruit”, zero sugar, featuring professionally designed tropical packaging in deep metallic purple with rich golden-yellow passion fruit illustrations, ultra-crisp typography, refined label alignment, realistic aluminum texture with micro surface grain and detailed condensation droplets interacting naturally with light, (a clean pastel coral studio background with subtle warm gradient and seamless backdrop, styled as a premium beverage photography set), surrounded by whole deep-purple passion fruits and freshly cut halves revealing glossy golden pulp with realistic black seeds and natural juice texture, a ceramic plate in the foreground holding passion fruit pulp pieces with slight juice residue, a soft linen napkin partially visible, a glass pitcher of iced tea softly defocused in the background for depth, (controlled directional key light from the left, soft fill light to balance shadows, sharp yet natural specular highlights on the can, physically accurate shadows and reflections, professional commercial beverage lighting setup), (centered hero composition, eye-level camera angle, 85mm lens look, shallow depth of field, product sharply in focus with foreground and background subtly blurred, balanced fruit placement framing the can symmetrically, high-end summer beverage advertisement aesthetic, ultra-realistic, print-ready quality).",https://media.contra.com/image/upload/mgijbvgybgg4gdo4gvnv.avif,13ad_image_mockup_05,Ad Images,Mockup,"A high-resolution luxury fashion product portrait of the Mata Forma structured leather handbag in warm terracotta vegetable-tanned leather with visible natural grain and subtle tonal variation, featuring a brushed architectural brass flap with clean geometric curvature and precision edge finishing, (a refined neutral studio backdrop in soft clay beige with gentle gradient depth and matte surface texture), styled with a tailored taupe blazer and fluid silk skirt in muted earth tones to complement the bag without overpowering it, minimal gold jewelry accents and natural makeup to reinforce understated luxury, (controlled studio lighting with a soft key light from upper left, subtle fill to preserve leather depth, crisp but controlled reflections on brass hardware, realistic shadow grounding beneath the bag), (three-quarter seated editorial composition, eye-level camera angle, shallow depth of field, handbag as clear focal point positioned at the center of visual hierarchy, premium contemporary fashion campaign aesthetic).",https://media.contra.com/image/upload/u9op7qgdvvi2htsyby6t.avif,14ad_image_mockup_06,Ad Images,Mockup,"A high-resolution premium tech portrait of Arbórea Audio over-ear noise-canceling headphones featuring matte forest-green biodegradable polymer ear cups with refined micro-texture, recycled brushed aluminum headband with soft satin grain, and moss-toned woven acoustic fabric cushions with visible fiber structure and depth, (a minimal architectural pavilion overlooking a Brazilian highland landscape, featuring clean concrete planes and open sky with softened rolling hills in the far distance to reduce environmental distraction), styled on a model in neutral cream knitwear with hair gently wind-swept to suggest atmospheric immersion without overpowering the product, (controlled golden-hour sunlight from the right creating precise highlights along the aluminum frame, soft shadow contouring the ear cup curvature, subtle natural rim light separating silhouette from background, realistic surface reflections without artificial gloss), (three-quarter side-profile composition with the model slightly angled forward to emphasize the headphone ear cup as the dominant focal point, shallow depth of field, balanced negative sky and architectural space, premium sustainable technology campaign aesthetic with structured compositional clarity).",https://media.contra.com/image/upload/lhyztbyabvabu7cc5f3s.avif,15ad_image_mockup_07,Ad Images,Mockup,"Luxury silk scarf photography inspired by the classical wet drapery sculpture technique, where fabric appears to melt and conform to marble surfaces. Deep midnight blue silk with refined metallic gold detailing, emphasizing texture, sheen and intricate woven patterns.Night atmosphere with a soft moon-inspired tonal palette, cool blue undertones balanced by warm golden highlights. The fabric gently cascades over a pale marble pedestal, subtly clinging to the stone as if sculpted.Minimalist composition with generous negative space and a dark, softly blurred background suggesting night without heavy shadows. Subtle classical elements such as a carved marble fragment or a traditional bronze vessel placed discreetly. Controlled cinematic lighting, diffused and elegant, enhancing the silk’s luminosity while preserving texture detail. Dreamlike, poetic and refined aesthetic. High-end editorial luxury still life, product-centered, intimate framing, shallow depth of field.",https://media.contra.com/image/upload/etb49ybvz0u4mqy2hyhj.avif,16ad_image_refinement_01,Ad Images,Refinement,"Refine the existing commercial mockup of the ""Luma Iced Tea – Passion Fruit"" aluminum can to include copy for an ad placement. Add a headline ""Sip like it’s summer."" with the CTA ""Try now"". All caps chunky modern sans serif font. Rounded button. The text should standout against the dark can; add background as needed to accommodate text.",https://media.contra.com/image/upload/tzfumivwbb0z2lpgt5jc.avif,17ad_image_refinement_02,Ad Images,Refinement,"Refine the image to include ad design text for meta ads. The headline should read ""Crafted in Brazil. Carried Everywhere."" The CTA should be ""Shop now"". Use an all caps serif font. Sharp corner outline button.",https://media.contra.com/image/upload/cwef1rizujnjczcrhba8.avif,18ad_image_refinement_03,Ad Images,Refinement,"Refine the image to be ad-ready with copy and CTA. The headline should be placed at the bottom ""Sustainable silence. Serious sound."" Include a CTA at top right ""Shop now"" Use modern sans serif. Sentence case. Solid button with slightly rounded corners. Choose a color that pull froms the headphone tone.",https://media.contra.com/image/upload/mqregowipo6gvfbtnm5f.avif,19ad_image_refinement_04,Ad Images,Refinement,"Refine the existing close-up macro shot of the silk scarf to include text for an ad design. Add text across the imagie with the headline ""Art that flows with you"". Add a CTA at the bottom that says ""Shop now"". Use Thin serif font. Sentence case. Solid button with sharp corners and all caps sans serif text in the button.",https://media.contra.com/image/upload/ewmeizx8h5ki9ryra7ui.avif,20ad_image_refinement_05,Ad Images,Refinement,"Refine the high-fashion editorial composition to include text to be used as an ad. Add a headline at the bottom that says ""Limited run. Unlimited sound."" Include a CTA ""Shop now"". Modern thin and tall sans serif. Sentence case. Solid button with rounded corners. Use text shaidng that reflects the color and lighting of the headphones.",https://media.contra.com/image/upload/wkbr3jdspcogitcp2ixj.avif,21ad_image_refinement_06,Ad Images,Refinement,"Refine the existing top-view studio image of the ""DA’BICA"" bottle to be used for an ad campaign. Add text on top of the image for headline ""Good for You. Better for Earth"" with a CTA ""Shop Now""",https://media.contra.com/image/upload/vx4sjxf9oyxmkfvck7ql.avif,22ad_video_idea_01,Ad Video,Ideation,"Premium matte black wireless earbuds with metallic silver accents floating gently in foreground, soft blue waveform particles dissipating outward to show noise cancellation, blurred busy golden-hour city street crowd in background, young professional calmly walking through chaos wearing the buds, cool teal-blue cinematic grading, minimalist tech ad style, high contrast, subtle lens flares, photorealistic product focus, sharp details on earbuds",https://media.contra.com/image/upload/y6y0xwkfmwqtkbkpg8qp.avif,23ad_video_idea_02,Ad Video,Ideation,"Premium black leather heeled ankle boots with sleek pointed toe, metallic gold hardware accents, and cushioned insole for comfort. Targets urban professional women 25-35 who want fashion-forward style without sacrificing mobility. Lifestyle + demonstration ad strategy: dynamic motion showcase in real city environment. Visual system: rich black tones with gold highlights, high contrast, cinematic golden-hour lighting. Position brand as empowering elegance in motion. Fluid upward energy. Camera: dynamic low-angle tracking push-in following boots up stairs, ending wide reveal of woman ascending subway stairs energetically.",https://media.contra.com/image/upload/q4bttk8ajpcu82uhtlv5.avif,24ad_video_idea_03,Ad Video,Ideation,"using attached image to make an ad. attached image sharp foreground against softly blurred modern kitchen counter morning background. Match warm metallic tones, high contrast, consistent top-right key lighting soft rim shadows. Animate portafilter lock-in, slow thick crema pour, natural rising steam with gentle dissipation, subtle glow on controls. Medium close-up shallow depth of field on machine, smooth orbital dolly camera circling unit blending brewing action seamlessly, no mismatches, strong demonstration clarity.",https://media.contra.com/image/upload/samkzl6tjaagrkwhdxva.avif,25ad_video_idea_04,Ad Video,Ideation,"A singular bright chrome-yellow hiking backpack, with no gear, no accessories, and no props surrounding it, sits nestled in a lush alpine meadow with wildflowers, centered in the frame. White daisies and golden buttercups are scattered across vivid emerald grass, framing the pack at ground level. Behind the backpack stands a massive snow-covered mountain with rocky peaks, glaciers, and patches of snow, set against a deep blue sky with a few clouds in sight. The camera sits at a low, slightly upward-tilted angle. Natural midday light floods the scene from above. The overall visual tone is bold, aspirational, and editorial, hyperrealistic photography.",https://media.contra.com/image/upload/sy9yq3snwljprfgbnqye.avif,26ad_video_idea_05,Ad Video,Ideation,"Create a studio hero video for a premium body wash brand positioned as modern, minimal, and luxurious. The product is a translucent, body wash bottle with no visible typography.27 28The target audience is women 40+ who appreciate quiet luxury aesthetics. The goal is to make the product feel elevated and calm.29 30This is a hero-style ad focused entirely on the product. The bottle is held upright in a wet hand, standing vertically and clearly visible, partially covered in foam and water. The liquid inside the bottle is a soft light green tone that subtly glows through the packaging. The background is clean white with soft backlighting. The overall look should feel realistic, minimal, and not overly glossy or too bright.",https://media.contra.com/image/upload/aamuafkcusuk1itxzoia.avif,31ad_video_idea_06,Ad Video,Ideation,"A wide establishing shot captured with a 35mm lens from a slightly elevated front three-quarter angle, positioning the desk as an architectural element within the room. The matte surface, monitor, edge-integrated lighting, and subtle environmental glow define the space without dominating it. The space is a contemporary residential gaming room at night with carpeted flooring, neutral walls, acoustic panels, and window panels showing distant city lights. The lighting system includes subtle neon-style ambient desk edge illumination and faint internal dock lighting that softly adapts in tone, suggesting environmental responsiveness without becoming visually aggressive. No people are present. Lighting across the desk remains softly active but stable in the same frozen moment, with no animated changes. Use realistic depth of field appropriate to each focal length and maintain consistent cool-toned practical lighting falloff across the scene.",https://media.contra.com/image/upload/pkbtbilpyr8daglnfhox.avif,32ad_video_mockup_01,Ad Video,Mockup,"use the attached image to create an ad for matte black wireless earbuds with silver accents floating sharp in foreground, add prominent soft blue waveform particles expanding/dissipating outward to showcase active noise cancellation blocking city noise. Blurred golden-hour busy street background with a young professional woman calmly walking through crowd wearing the earbuds, serene confident expression. Match exact cool teal-blue cinematic grade, high contrast, subtle lens flares. Consistent upper-right volumetric lighting/shadows across all elements. Animate gentle earbuds rotation + organic waveform flow (clear fade from buds), subtle background pedestrian motion only. Medium close-up shallow DoF starting on product, smooth 6-8 second horizontal tracking camera following the earbuds then revealing the woman walking calmly at end, seamless blend, enhanced realism on her face/clothing and stronger ANC visual clarity.",https://media.contra.com/image/upload/aurqxr4sccdu2itikamq.avif,33ad_video_mockup_02,Ad Video,Mockup,"use the provided heeled boot image in sharp foreground with blurred golden-hour subway station stairs background. Match rich black-gold palette, high contrast, consistent upper-left key lighting and soft shadows. Animate boots with natural heel strike flex and confident stride motion, a stylish east asian woman (young professional in chic outfit) ascending stairs wearing the boots, subtle energy trails on steps for function. Medium wide framing, shallow depth of field on boots, smooth 6-second upward tracking dolly camera following woman's ascent, seamless blend, strong fashion-function emphasis.",https://media.contra.com/image/upload/uqdycejawkiexnox6xn8.avif,34ad_video_mockup_03,Ad Video,Mockup,"using attached image as ref to make an ad for home coffee lovers 25-45 craving premium ritual. Hero-demonstration strategy: brewing focus to morning enjoyment. Visual system: warm metallic tones, soft golden-hour morning light, high-end minimalism. Position as effortless luxury. Primary motion: slow crema pour, rising steam, gentle portafilter insertion. Camera: slow smooth orbital dolly around machine starting macro on portafilter, push-in to brewing stream, ending wide pull-back on kitchen counter with fresh espresso cup.",https://media.contra.com/image/upload/ap4z3pmssdlzx2w91crz.avif,35ad_video_mockup_04,Ad Video,Mockup,"A singular bright chrome-yellow hiking backpack, with no gear, no accessories, and no props surrounding it, sits centered in the frame in a lush alpine meadow with wildflowers. White daisies and golden buttercups fill the foreground, slightly blurred by shallow depth of field, while a massive snow-covered mountain range spans the full width of the background. The camera begins at ground level with a low upward tilt, then performs a slow push-in, keeping the pack centered throughout the video. A gentle breeze animates the surrounding grass and flower stems while the backpack remains completely static. Natural midday light is consistent throughout, hitting the pack from slightly above and in front, casting soft directional shadows into the grass. The visual tone is hyperrealistic, shot-on-location editorial, full-frame DSLR, 35mm lens, natural film grain, no CGI feel.",https://media.contra.com/image/upload/ixwwyqwajluf8oz0nyis.avif,36ad_video_mockup_05,Ad Video,Mockup,"Create a single continuous video shot that feels observational and lightly handheld, as if a human operator is calmly exploring the product in real space. Movement is slow and deliberate, small weight shifts, and slight rotational adjustments. Close-to-medium handheld observation of the EPOCH Tactical Atmosphere Desk in its environment. As the camera naturally shifts perspective, two minimal motion graphic indicators appear: A subtle temperature symbol anchored to the tempered glass keyboard zone, a subtle cooling indicator anchored to the lower PC dock beneath the desk. Motion graphics remain subtle and informational, not futuristic or holographic. These indicators remain spatially locked to the physical surfaces they reference and move consistently with perspective changes as the camera moves. The desk remains still while ambient lighting and internal dock illumination subtly breathe. Minimal, clean, non-glowing icons indicating temperature modulation and airflow cooling. The symbols appear softly and remain locked to their respective surfaces in 3D space, maintaining accurate positional tracking as the camera moves.",https://media.contra.com/image/upload/peue0k5inoyjjasunkpn.avif,37ad_video_mockup_06,Ad Video,Mockup,"Create a studio hero video for a premium body wash brand positioned as modern, minimal, and luxurious. The product is a translucent, body wash bottle with no visible typography.38 39The target audience is women 40+ who appreciate quiet luxury aesthetics. The goal is to make the product feel elevated and calm.40 41This is a hero-style ad focused entirely on the product. The bottle is held upright in a wet hand, standing vertically and clearly visible, partially covered in foam and water. The liquid inside the bottle is a soft light green tone that subtly glows through the packaging. The background is clean white with soft backlighting. The overall look should feel realistic, minimal, and not overly glossy or too bright.",https://media.contra.com/image/upload/rykf96uvcbm2psajqkk4.avif,42ad_video_refinement_01,Ad Video,Refinement,"Create a studio hero video for a premium body wash brand that feels modern, minimal, and luxurious. The hand stays steady and fixed while the camera slowly and slightly zoom in toward the center of the frame, keeping everything centered. The movement should feel calm and smooth. Change the liquid inside the bottle to a soft light blue, keeping the semi-transparent and natural look. Add thin streaks slowly slide down slowly, with consistent, subtle motion. The lighting should feel dimensional and realistic, with gentle shadow falloff on the white background, not flat and not overly bright.",https://media.contra.com/image/upload/rykf96uvcbm2psajqkk4.avif,43ad_video_refinement_02,Ad Video,Refinement,"The woman calmly walking forward through softly blurred golden-hour city street crowd, wearing the black matt earbuds, ultra-detailed serene confident face with natural skin glow and subtle smile, realistic hair flow in light breeze, crisp fabric texture on blazer. Cool teal-blue cinematic grade, high contrast, subtle volumetric lens flares, consistent upper-right key lighting with soft rim shadows across every element. Begin with medium close-up shallow depth of field on earbuds, gentle slow orbital rotation reveal, then smooth 6-8 second horizontal dolly tracking camera left-to-right following the earbuds, panning to reveal the woman walking serenely at the end with elegant ease-in/ease-out motion. Photorealistic high-fidelity materials, natural fluid animation, seamless integration, zero artifacts, ultra-premium polished ad quality.",https://media.contra.com/image/upload/hqqquyfpr8j4njw2k8dv.avif,44ad_video_refinement_03,Ad Video,Refinement,"Boots showing realistic leather grain texture, high-shine metallic reflections, natural heel flex during powerful stride. Young stylish east asian woman ascending subway stairs in golden-hour urban station, wearing boots, ultra-detailed serene confident face with natural darker skin glow, subtle smile, realistic hair flow, crisp blazer fabric details. Deep black-gold cinematic grade, high contrast, subtle volumetric lens flares, consistent upper-left key lighting with soft rim shadows. Extreme low-angle Dutch tilt close-up on heel impact, smooth transition to straight upward dolly tracking camera following stride, pan to high-angle reveal of woman striding confidently at top with elegant ease-in/ease-out motion, natural fluid gait. Photorealistic high-fidelity materials, seamless integration, zero artifacts, ultra-premium fashion ad polish",https://media.contra.com/image/upload/uqdycejawkiexnox6xn8.avif,45ad_video_refinement_04,Ad Video,Refinement,"using the attached image, every angle catching light with exquisite specular highlights, minimalist luxury design in perfect macro focus, slow floating parallax arc slider gliding around the machine, creating depth and dynamic reflections across its flawless surfaces. Smooth arcing pull-back reveals the machine elegantly positioned on a high-end open-concept kitchen island with marble veining and soft ambient luxury lighting. Cut to poised young woman in the luxurious space, cup in hand, face lighting up with authentic joy and peaceful fulfillment, subtle blissful smile spreading as she takes a slow, contented sip, emotional warmth and sophistication, rich cinematic grade, subtle lens glow, luxury motion.",https://media.contra.com/image/upload/ap4z3pmssdlzx2w91crz.avif,46ad_video_refinement_05,Ad Video,Refinement,"Using this image, change the angle so the camera begins at ground level with a low upward tilt, then performs a slow push-in, keeping the pack centered. Surrounding grass and flower stems sway softly in a light breeze, clouds slowly drift, while the backpack holds completely still, grounding the motion around it. The yellow nylon fabric should show realistic material texture, slight sheen where direct sun hits, softer diffused tone on the shadowed side, nothing smooth, plastic, or CGI. Keep the color grading, composition, and mountain backdrop exactly intact, hyperrealistic, full-frame DSLR, 35mm lens, natural film grain, shot-on-location feel throughout.",https://media.contra.com/image/upload/ixwwyqwajluf8oz0nyis.avif,47ad_video_refinement_06,Ad Video,Refinement,"Analyze the attached reference image and extend this exact moment into motion.Create a single continuous video shot that feels precise and controlled, as if captured using a stabilized camera system mounted on a vertical slider. The camera performs a smooth, fixed vertical pan from top to bottom, beginning slightly above the desk surface and gradually revealing. Close-to-medium controlled observation of the EPOCH Tactical Atmosphere Desk in its environment. A keyboard and mouse remain placed on the desk surface as static objects throughout the shot. Adjust the lighting so that during the shot, the surrounding room lighting gradually dims in a natural and controlled way, increasing contrast so the desk’s neon edge illumination and internal cooling glow become more visually prominent.",https://media.contra.com/image/upload/peue0k5inoyjjasunkpn.avif,48brand_design_idea_01,Brand Design,Ideation,"A runner cuts through the frame in motion, the figure partially blurred against a clear, light blue sky. Light trails curve around the runner as the composition leans into speed and forward movement, letting motion define the form rather than detail. Clean color and dynamic framing turn the moment into a surreal visual emphasizing momentum and forward movement.",,49brand_design_idea_02,Brand Design,Ideation,"A female tennis player leaps into a powerful serve at night, the body suspended midair as motion blur traces the arc of the racket. City lights streak across the dark background, turning speed and force into glowing lines of energy. Cinematic motion photography and a high-contrast minimal palette elevate athletic performance into art, emphasizing power, lift, and momentum over sharp detail.",,50brand_design_idea_03,Brand Design,Ideation,"An open notebook sits in warm natural light, a fountain pen resting across softly textured pages as long plant shadows move through the frame. Light becomes the primary subject, turning a simple writing ritual into a moment of quiet luxury. Minimal composition, negative space, and warm tones create a light-driven minimalist scene that feels calm, intentional, and editorial.",,51brand_design_idea_04,Brand Design,Ideation,"A woman raises two coupe cocktails toward the camera, her face partially obscured by the glasses as she laughs mid-gesture. The scene is lit with direct flash, creating crisp highlights and deep shadows against a rich red curtain backdrop. Warm, saturated tones and sharp contrast evoke a retro cinematic nightlife atmosphere, reminiscent of vintage editorial bar photography. The composition feels playful and indulgent, with bold color, expressive hands, and a frozen moment of celebration that blends old-school glamour with modern spontaneity.",,52brand_design_idea_05,Brand Design,Ideation,"A fashion figure balances on a mirrored disco ball, white heeled boots reflecting soft studio light as motion blur and film grain abstract the form. Muted tones and warm highlights create a retro cinematic fashion moment, where sculptural posing and texture evoke a film-forward, disco-era editorial atmosphere.",,53brand_design_idea_06,Brand Design,Ideation,"A red sports car races across the frame at speed, its form partially softened by motion blur against a wide, open sky. The horizon tilts as the landscape streaks past, letting movement and direction define the image more than sharp detail. Muted natural color and soft focus evoke film-forward realism, while the sparse composition and expansive negative space turn the moment into a minimalist, cinematic study of velocity and freedom.",,54brand_design_mockup_01,Brand Design,Mockup,"Combine these images. Base the subject and proportions entirely off of [image_0], but reiterpret it into the style of [image_1]. The result should feel as if [image_0] was art directed by [image_1]","https://media.contra.com/image/upload/rjqhgol5el9dreoqmt6n.avif, https://media.contra.com/image/upload/grauobmnw4mksaolcaxh.avif",55brand_design_mockup_02,Brand Design,Mockup,"Combine these images. Base the subject and proportions entirely off of [image_0], but reiterpret it into the style of [image_1]. The result should feel as if [image_0] was art directed by [image_1]","https://media.contra.com/image/upload/pgfxkcoijbjrkz1ssoln.avif, https://media.contra.com/image/upload/umak2mt3gkfosy9vcgtx.avif",56brand_design_mockup_03,Brand Design,Mockup,"Combine these images. Base the subject and proportions entirely off of [image_0], but reiterpret it into the style of [image_1]. The result should feel as if [image_0] was art directed by [image_1]","https://media.contra.com/image/upload/t9ioasg7cwjaik5vktdk.avif, https://media.contra.com/image/upload/bvmpi4xbdttzzsufqulj.avif",57brand_design_mockup_04,Brand Design,Mockup,"Combine these images. Base the subject and proportions entirely off of [image_0], but reiterpret it into the style of [image_1]. The result should feel as if [image_0] was art directed by [image_1]","https://media.contra.com/image/upload/fmzsbmxyuttszvrym8fz.avif, https://media.contra.com/image/upload/vmv7javu4jdp1i9bwmqh.avif",58brand_design_mockup_05,Brand Design,Mockup,"Combine these images. Base the subject and proportions entirely off of [image_0], but reiterpret it into the style of [image_1]. The result should feel as if [image_0] was art directed by [image_1]","https://media.contra.com/image/upload/x2rwnccr7ny8u45pmt3i.avif, https://media.contra.com/image/upload/e5rvdbcdmzkgmubkmzgj.avif",59brand_design_mockup_06,Brand Design,Mockup,"Combine these images. Base the subject and proportions entirely off of [image_0], but reiterpret it into the style of [image_1]. The result should feel as if [image_0] was art directed by [image_1]","https://media.contra.com/image/upload/lrjns6qnqyya1yvsc3sp.avif, https://media.contra.com/image/upload/nc9ypj7c7ai3ynjvnvaa.avif",60brand_design_refinement_01,Brand Design,Refinement,"Add shadows behind the floating digital assets for more visual depth. Turn the background in a soft, subtle gradient",https://media.contra.com/image/upload/katog41k7mwrkooomy1n.avif,61brand_design_refinement_02,Brand Design,Refinement,Change the jewelry to be gold to align to client's product,https://media.contra.com/image/upload/ewuntohqak8ybgygj9hf.avif,62brand_design_refinement_03,Brand Design,Refinement,"Simplify the color story, soften the reflections, and create a clearer focal point of the compact",https://media.contra.com/image/upload/xksjpu7pgf6aw6yjjmkm.avif,63brand_design_refinement_04,Brand Design,Refinement,"Clean up the background texture, warm the coffee tones slightly",https://media.contra.com/image/upload/paon03utctpa8mlnowxm.avif,64brand_design_refinement_05,Brand Design,Refinement,"Sharpen the silhouette, tighten the color palette, and light the headphones just enough so the product—not just the feeling—owns the frame",https://media.contra.com/image/upload/qhmuhcf5mzecxs3hggce.avif,65brand_design_refinement_06,Brand Design,Refinement,"Keep the bold illustrated energy, but soften the pose, constrain the color palette, and sharpen the headset",https://media.contra.com/image/upload/xunxlychgqkbimk8gjhq.avif,66desktop_app_idea_01,Desktop App,Ideation,"Finfam is a mobile-first, dark-mode family expense-tracking app. Design the UI for three core screens:67 68Dashboard (Home): Default view on open. Prioritize current-month totals with a clear primary CTA to add an expense. Hierarchy flows from macro totals at top, breakdown list below, and a floating action button anchored at the bottom.69 70Add Expense: Uses a stepped/conditional form where macro selection drives which fields appear next (payment type, micro vs. name-only, currency). Minimize visible fields at each step.71 72Monthly Summary: Spend organized by macro, then broken down into micro or name-only items within each. Filter controls at the top for time-range selection.73 74Navigation: bottom tabs with three items (Dashboard, Add, History). Modals only for confirmation states (e.g., delete expense); all primary flows navigate to full screens. The Add Expense form and category selector are reusable components that appear consistently across macros.",,75desktop_app_idea_02,Desktop App,Ideation,"Build a desktop-first mental health journaling app called Melo. Three core screens:76 77Home: Leads with today's date and a single daily prompt as the primary focus. Secondary mood selector below, with a subtle entry history feed at the bottom.78 79Journal Entry: Distraction-free writing canvas with a minimal toolbar. Guided prompts appear as dismissible inline suggestions rather than interrupting flow.80 81Insights: Soft, rounded data visualizations of mood and entry trends over time, organized chronologically. Time filter at the top.82 83Navigation: left-side vertical rail with three items (Home, Journal, Insights). Modals only for mood selector expansion; all other flows use full-screen transitions.",,84desktop_app_idea_03,Desktop App,Ideation,"Build a desktop-first online course platform called Coursly. Three core screens:85 86Dashboard: Welcome header and active courses grid as primary content. Progress summary sidebar on the right showing streaks and completion stats.87 88Course View: Two-column layout with a left sidebar listing all modules and lessons (with completion indicators) and a main content area showing selected lesson details + a primary CTA to continue.89 90Lesson Player: Full main area with content window at top, lesson notes below, and previous/next navigation anchored at the bottom.91 92Navigation: left-side vertical rail with icons for Dashboard, My Courses, and Explore. Modals only for course enrollment confirmation; all other transitions are full-screen.",,93desktop_app_idea_04,Desktop App,Ideation,"Build a desktop-first video editing app called Slicer. Persistent single-screen layout with three panels:94 95Asset Library (left panel): Collapsible sidebar showing imported media. Tabs for Video, Audio, and Effects with a search field at top.96 97Preview Window (center, dominant): Occupies the majority of the viewport. Playback controls anchored directly below: play/pause, scrub, timestamp, and volume inline in a single control bar.98 99Timeline (bottom, full width): Multiple horizontal track lanes (video, audio, effects) with a playhead scrubber and zoom controls at the far right. Track labels fixed on the left edge, lane content scrolls horizontally.100 101Top toolbar: Import, Export, Undo/Redo, and project title. Modals only for Export settings; all other interactions happen within the single-screen layout. Asset Library and Timeline panels are resizable by dragging boundary edges.",,102desktop_app_idea_05,Desktop App,Ideation,"Build a desktop-first investment portfolio management app called Vesta. Three core screens:103 104Portfolio Overview: Multi-column layout. Left column: total portfolio value, allocation breakdown, performance summary chart. Right column: sortable asset list table (ticker, value, change, weight).105 106Asset Detail: Left panel with asset metadata (price, sector, allocation %, key stats). Dominant right panel with full-width performance chart and transaction history list below.107 108Performance History: Full-width trend graphs with a time range selector at top and a benchmark comparison toggle.109 110Navigation: top horizontal bar with three items (Overview, Assets, Performance). Modals only for adding or editing a position; all other flows are full-screen.",,111desktop_app_idea_06,Desktop App,Ideation,"Build a desktop-first vacation and experience planning app called Roam. Three core screens:112 113Destination Discovery: Full-bleed editorial layout with large destination photography dominating the viewport. Search and filter bar anchored at top, destination cards in a masonry-style grid below.114 115Trip Planner: Left itinerary panel listing days and scheduled items chronologically. Right content area showing a map or destination overview. Persistent top bar with trip name, dates, and traveler count.116 117Experience Detail: Full-width hero image at top. Two-column layout below: left for description, highlights, and pricing; right for availability, booking CTA, and similar experiences.118 119Navigation: vertical rail on the left with icons for Discover, My Trips, and Saved. Modals only for adding experiences to a trip; all other flows are full-screen.",,120desktop_app_idea_07,Desktop App,Ideation,"Build a mobile-first shopping list app called Lolist. Two screens only:121 122Home (persistent screen): Current list at top showing selected items as dismissible chips or compact rows. Below, a scrollable grid of preloaded recurring items organized by category (produce, dairy, meat, bakery, cleaning, etc.) that can be tapped to add. An ""Add all"" button at the top of the preloaded items section. Small inline text input at the bottom for adding custom items to both the current list and the permanent preloaded set. A single prominent ""Send to WhatsApp"" CTA at the bottom navigates to Share.123 124Share: Clean preview of the formatted list as it will appear in WhatsApp (plain text, grouped by category). Single confirm send button.125 126No bottom nav, sidebar, or settings. The entire experience lives on these two screens.",,127desktop_app_mockup_01,Desktop App,Mockup,"Apply Finfam's visual system, inspired by Vercel's design language:128 129Background: near-black (#0a0a0a). Text: off-white (#ededed). Single accent: teal (#00c9a7) for CTAs, active states, and progress indicators.130Icons: monochrome line icons instead of emoji for a minimal, utilitarian look.131Typography: large numeric totals in medium-weight sans-serif. Section labels in uppercase with tracked spacing. Supporting text at reduced opacity (50-60%).132Dashboard cards: subtle borders, unfilled. Inline category rows show name, amount, and percentage in a single horizontal line.133Buttons: outlined for secondary actions, filled teal for the primary Add Expense CTA. Spacing on an 8pt grid with 16px horizontal padding and 24px between major sections.",,"<!DOCTYPE html>134<html lang=""en"">135<head>136 <meta charset=""UTF-8"">137 <meta name=""viewport"" content=""width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"">138 <title>Finfam - Family Expense Tracker</title>139 140 <!-- Google Fonts: Inter -->141 <link rel=""preconnect"" href=""https://fonts.googleapis.com"">142 <link rel=""preconnect"" href=""https://fonts.gstatic.com"" crossorigin>143 <link href=""https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"" rel=""stylesheet"">144 145 <!-- Phosphor Icons -->146 <script src=""https://unpkg.com/@phosphor-icons/web""></script>147 148 <style>149 :root {150 /* Color Palette */151 --color-bg: #121212;152 --color-surface: #1E1E1E;153 --color-surface-hover: #2C2C2C;154 --color-primary: #10B981;155 --color-primary-dark: #059669;156 --color-danger: #EF4444;157 --color-danger-dark: #DC2626;158 --color-text-main: #F9FAFB;159 --color-text-muted: #9CA3AF;160 --color-border: #374151;161 162 /* Typography */163 --font-family: 'Inter', sans-serif;164 --font-size-xs: 0.75rem;165 --font-size-sm: 0.875rem;166 --font-size-base: 1rem;167 --font-size-lg: 1.25rem;168 --font-size-xl: 2rem;169 170 /* Spacing & Layout */171 --spacing-1: 4px;172 --spacing-2: 8px;173 --spacing-3: 12px;174 --spacing-4: 16px;175 --spacing-5: 24px;176 --spacing-6: 32px;177 --radius-sm: 8px;178 --radius-md: 12px;179 --radius-lg: 16px;180 --radius-full: 9999px;181 182 /* Shadows & Transitions */183 --shadow-sm: 0 1px 2px rgba(0,0,0,0.5);184 --shadow-md: 0 4px 6px -1px rgba(0,0,0,0.5);185 --shadow-lg: 0 10px 15px -3px rgba(0,0,0,0.5);186 --transition-fast: 0.15s ease-in-out;187 }188 189 /* Base Reset */190 *, *::before, *::after {191 box-sizing: border-box;192 margin: 0;193 padding: 0;194 }195 196 html, body {197 height: 100%;198 background-color: var(--color-bg);199 color: var(--color-text-main);200 font-family: var(--font-family);201 line-height: 1.5;202 -webkit-font-smoothing: antialiased;203 }204 205 /* Accessibility Focus */206 :focus-visible {207 outline: 2px solid var(--color-primary);208 outline-offset: 2px;209 border-radius: 2px;210 }211 212 /* App Container (Mobile First) */213 .app-container {214 position: relative;215 width: 100%;216 height: 100%;217 display: flex;218 flex-direction: column;219 overflow: hidden;220 background-color: var(--color-bg);221 }222 223 /* Desktop/Tablet Constraint */224 @media (min-width: 600px) {225 body {226 background-color: #0A0A0A;227 display: flex;228 align-items: center;229 justify-content: center;230 }231 .app-container {232 max-width: 400px;233 height: 90vh;234 max-height: 850px;235 border-radius: var(--radius-lg);236 box-shadow: var(--shadow-lg), 0 0 0 1px var(--color-border);237 }238 }239 240 /* Screens & Routing */241 .screen {242 display: none;243 flex-direction: column;244 height: 100%;245 width: 100%;246 padding-bottom: 70px; /* Space for bottom nav */247 }248 249 .screen-active {250 display: flex;251 animation: fadeIn var(--transition-fast);252 }253 254 @keyframes fadeIn {255 from { opacity: 0; transform: translateY(5px); }256 to { opacity: 1; transform: translateY(0); }257 }258 259 /* Header */260 .header {261 padding: var(--spacing-5) var(--spacing-4) var(--spacing-4);262 background-color: var(--color-bg);263 position: sticky;264 top: 0;265 z-index: 10;266 }267 268 .header-title {269 font-size: var(--font-size-lg);270 font-weight: 600;271 }272 273 /* Scrollable Content */274 .content-scrollable {275 flex: 1;276 overflow-y: auto;277 padding: 0 var(--spacing-4) var(--spacing-4);278 }279 280 /* Typography Utilities */281 .text-muted { color: var(--color-text-muted); }282 .text-danger { color: var(--color-danger); }283 .text-success { color: var(--color-primary); }284 .text-sm { font-size: var(--font-size-sm); }285 .text-xs { font-size: var(--font-size-xs); }286 .font-medium { font-weight: 500; }287 .font-bold { font-weight: 700; }288 .text-center { text-align: center; }289 290 .mb-2 { margin-bottom: var(--spacing-2); }291 .mb-4 { margin-bottom: var(--spacing-4); }292 .mt-4 { margin-top: var(--spacing-4); }293 .flex-between { display: flex; justify-content: space-between; align-items: center; }294 295 /* Cards */296 .card {297 background-color: var(--color-surface);298 border-radius: var(--radius-md);299 padding: var(--spacing-4);300 box-shadow: var(--shadow-sm);301 border: 1px solid var(--color-border);302 }303 304 .total-card {305 text-align: center;306 padding: var(--spacing-5);307 background: linear-gradient(145deg, var(--color-surface), #1a1a1a);308 }309 310 .total-amount {311 font-size: var(--font-size-xl);312 font-weight: 700;313 margin: var(--spacing-2) 0;314 color: var(--color-primary);315 }316 317 /* Lists */318 .list-group {319 display: flex;320 flex-direction: column;321 gap: var(--spacing-3);322 }323 324 .list-item {325 display: flex;326 justify-content: space-between;327 align-items: center;328 padding: var(--spacing-3);329 background-color: var(--color-surface);330 border-radius: var(--radius-md);331 border: 1px solid var(--color-border);332 transition: background-color var(--transition-fast);333 cursor: pointer;334 }335 336 .list-item:hover, .list-item:active {337 background-color: var(--color-surface-hover);338 }339 340 .item-icon {341 width: 40px;342 height: 40px;343 border-radius: var(--radius-full);344 background-color: rgba(16, 185, 129, 0.1);345 color: var(--color-primary);346 display: flex;347 align-items: center;348 justify-content: center;349 font-size: 1.25rem;350 margin-right: var(--spacing-3);351 }352 353 .item-details {354 flex: 1;355 }356 357 .item-title {358 font-weight: 500;359 font-size: var(--font-size-base);360 }361 362 .item-subtitle {363 font-size: var(--font-size-xs);364 color: var(--color-text-muted);365 margin-top: 2px;366 }367 368 .item-amount {369 font-weight: 600;370 font-size: var(--font-size-base);371 }372 373 /* Grouped History Headers */374 .group-header {375 font-size: var(--font-size-sm);376 font-weight: 600;377 color: var(--color-text-muted);378 text-transform: uppercase;379 letter-spacing: 0.05em;380 margin: var(--spacing-4) 0 var(--spacing-2);381 display: flex;382 justify-content: space-between;383 }384 385 /* Forms */386 .form-section {387 transition: opacity var(--transition-fast), transform var(--transition-fast);388 opacity: 1;389 transform: translateY(0);390 margin-bottom: var(--spacing-5);391 }392 393 .form-section-hidden {394 display: none;395 opacity: 0;396 transform: translateY(-10px);397 }398 399 .form-group {400 margin-bottom: var(--spacing-4);401 }402 403 .form-label {404 display: block;405 font-size: var(--font-size-sm);406 font-weight: 500;407 color: var(--color-text-muted);408 margin-bottom: var(--spacing-2);409 }410 411 .form-input, .form-select {412 width: 100%;413 background-color: var(--color-surface);414 border: 1px solid var(--color-border);415 color: var(--color-text-main);416 padding: var(--spacing-3);417 border-radius: var(--radius-md);418 font-size: var(--font-size-base);419 font-family: var(--font-family);420 transition: border-color var(--transition-fast);421 }422 423 .form-input:focus, .form-select:focus {424 outline: none;425 border-color: var(--color-primary);426 }427 428 /* Radio Cards (Macro & Payment Selection) */429 .radio-grid {430 display: grid;431 grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));432 gap: var(--spacing-3);433 }434 435 .radio-card {436 position: relative;437 display: block;438 cursor: pointer;439 }440 441 .radio-card input {442 position: absolute;443 opacity: 0;444 width: 0;445 height: 0;446 }447 448 .radio-content {449 display: flex;450 flex-direction: column;451 align-items: center;452 justify-content: center;453 padding: var(--spacing-3);454 background-color: var(--color-surface);455 border: 1px solid var(--color-border);456 border-radius: var(--radius-md);457 text-align: center;458 transition: all var(--transition-fast);459 gap: var(--spacing-2);460 }461 462 .radio-content i {463 font-size: 1.5rem;464 color: var(--color-text-muted);465 }466 467 .radio-card input:checked + .radio-content {468 background-color: rgba(16, 185, 129, 0.1);469 border-color: var(--color-primary);470 color: var(--color-primary);471 }472 473 .radio-card input:checked + .radio-content i {474 color: var(--color-primary);475 }476 477 .radio-card input:focus-visible + .radio-content {478 outline: 2px solid var(--color-primary);479 outline-offset: 2px;480 }481 482 /* Buttons */483 .btn {484 display: inline-flex;485 align-items: center;486 justify-content: center;487 padding: var(--spacing-3) var(--spacing-4);488 border-radius: var(--radius-md);489 font-size: var(--font-size-base);490 font-weight: 600;491 font-family: var(--font-family);492 cursor: pointer;493 border: none;494 transition: background-color var(--transition-fast), transform 0.1s;495 gap: var(--spacing-2);496 }497 498 .btn:active {499 transform: scale(0.98);500 }501 502 .btn-block {503 width: 100%;504 }505 506 .btn-primary {507 background-color: var(--color-primary);508 color: #fff;509 }510 511 .btn-primary:hover, .btn-primary:focus-visible {512 background-color: var(--color-primary-dark);513 }514 515 .btn-secondary {516 background-color: var(--color-surface);517 color: var(--color-text-main);518 border: 1px solid var(--color-border);519 }520 521 .btn-secondary:hover, .btn-secondary:focus-visible {522 background-color: var(--color-surface-hover);523 }524 525 .btn-danger {526 background-color: var(--color-danger);527 color: #fff;528 }529 530 .btn-danger:hover, .btn-danger:focus-visible {531 background-color: var(--color-danger-dark);532 }533 534 /* Floating Action Button */535 .fab {536 position: absolute;537 bottom: 86px; /* Above bottom nav */538 right: var(--spacing-4);539 width: 56px;540 height: 56px;541 border-radius: var(--radius-full);542 background-color: var(--color-primary);543 color: #fff;544 display: flex;545 align-items: center;546 justify-content: center;547 font-size: 1.5rem;548 box-shadow: var(--shadow-lg);549 text-decoration: none;550 transition: transform var(--transition-fast), background-color var(--transition-fast);551 z-index: 20;552 }553 554 .fab:hover, .fab:focus-visible {555 background-color: var(--color-primary-dark);556 transform: scale(1.05);557 }558 559 .fab:active {560 transform: scale(0.95);561 }562 563 /* Bottom Navigation */564 .bottom-nav {565 position: absolute;566 bottom: 0;567 left: 0;568 width: 100%;569 height: 70px;570 background-color: var(--color-surface);571 border-top: 1px solid var(--color-border);572 display: flex;573 justify-content: space-around;574 align-items: center;575 padding-bottom: env(safe-area-inset-bottom); /* iOS safe area */576 z-index: 30;577 }578 579 .nav-item {580 display: flex;581 flex-direction: column;582 align-items: center;583 justify-content: center;584 color: var(--color-text-muted);585 text-decoration: none;586 flex: 1;587 height: 100%;588 gap: 4px;589 transition: color var(--transition-fast);590 }591 592 .nav-icon {593 font-size: 1.5rem;594 }595 596 .nav-text {597 font-size: var(--font-size-xs);598 font-weight: 500;599 }600 601 .nav-item:hover, .nav-item:focus-visible {602 color: var(--color-text-main);603 }604 605 .nav-item-active {606 color: var(--color-primary);607 }608 609 .nav-item-active:hover, .nav-item-active:focus-visible {610 color: var(--color-primary);611 }612 613 /* Modal */614 .modal {615 margin: auto;616 background-color: var(--color-surface);617 border: 1px solid var(--color-border);618 border-radius: var(--radius-lg);619 padding: var(--spacing-5);620 color: var(--color-text-main);621 max-width: 90%;622 width: 320px;623 box-shadow: var(--shadow-lg);624 }625 626 .modal::backdrop {627 background-color: rgba(0, 0, 0, 0.7);628 backdrop-filter: blur(2px);629 }630 631 .modal-title {632 font-size: var(--font-size-lg);633 font-weight: 600;634 margin-bottom: var(--spacing-2);635 }636 637 .modal-actions {638 display: flex;639 gap: var(--spacing-3);640 margin-top: var(--spacing-5);641 }642 643 .modal-actions .btn {644 flex: 1;645 }646 647 /* Empty State */648 .empty-state {649 text-align: center;650 padding: var(--spacing-6) var(--spacing-4);651 color: var(--color-text-muted);652 }653 654 .empty-state i {655 font-size: 3rem;656 margin-bottom: var(--spacing-3);657 opacity: 0.5;658 }659 </style>660</head>661<body>662 663 <div class=""app-container"">664 665 <!-- ================= DASHBOARD VIEW ================= -->666 <main id=""view-dashboard"" class=""screen screen-active"">667 <header class=""header"">668 <h1 class=""header-title"">Dashboard</h1>669 </header>670 671 <div class=""content-scrollable"">672 <div class=""card total-card mb-4"">673 <p class=""text-sm text-muted font-medium"">Current Month Spend</p>674 <h2 class=""total-amount"" id=""dash-total"">$0.00</h2>675 <p class=""text-xs text-muted"" id=""dash-month-label"">October 2023</p>676 </div>677 678 <div class=""flex-between mb-2"">679 <h3 class=""text-sm font-bold text-muted"" style=""text-transform: uppercase; letter-spacing: 0.05em;"">Recent Transactions</h3>680 <a href=""#history"" class=""text-xs text-success"" style=""text-decoration: none;"">View All</a>681 </div>682 683 <div class=""list-group"" id=""dash-recent-list"">684 <!-- Populated by JS -->685 </div>686 </div>687 688 <a href=""#add"" class=""fab"" aria-label=""Add Expense"">689 <i class=""ph ph-plus""></i>690 </a>691 </main>692 693 <!-- ================= ADD EXPENSE VIEW ================= -->694 <main id=""view-add"" class=""screen"">695 <header class=""header"">696 <h1 class=""header-title"">Add Expense</h1>697 </header>698 699 <div class=""content-scrollable"">700 <form id=""add-expense-form"">701 702 <!-- Step 1: Macro Category -->703 <div class=""form-section"" id=""step-macro"">704 <label class=""form-label"">1. Select Category</label>705 <div class=""radio-grid"">706 <label class=""radio-card"">707 <input type=""radio"" name=""macro"" value=""Housing"" required>708 <div class=""radio-content"">709 <i class=""ph ph-house""></i>710 <span class=""text-xs font-medium"">Housing</span>711 </div>712 </label>713 <label class=""radio-card"">714 <input type=""radio"" name=""macro"" value=""Food"">715 <div class=""radio-content"">716 <i class=""ph ph-shopping-cart""></i>717 <span class=""text-xs font-medium"">Food</span>718 </div>719 </label>720 <label class=""radio-card"">721 <input type=""radio"" name=""macro"" value=""Transport"">722 <div class=""radio-content"">723 <i class=""ph ph-car""></i>724 <span class=""text-xs font-medium"">Transport</span>725 </div>726 </label>727 <label class=""radio-card"">728 <input type=""radio"" name=""macro"" value=""Utilities"">729 <div class=""radio-content"">730 <i class=""ph ph-lightning""></i>731 <span class=""text-xs font-medium"">Utilities</span>732 </div>733 </label>734 <label class=""radio-card"">735 <input type=""radio"" name=""macro"" value=""Personal"">736 <div class=""radio-content"">737 <i class=""ph ph-user""></i>738 <span class=""text-xs font-medium"">Personal</span>739 </div>740 </label>741 </div>742 </div>743 744 <!-- Step 2: Payment Type -->745 <div class=""form-section form-section-hidden"" id=""step-payment"">746 <label class=""form-label"">2. Payment Method</label>747 <div class=""radio-grid"">748 <label class=""radio-card"">749 <input type=""radio"" name=""payment"" value=""Credit"" required>750 <div class=""radio-content"">751 <i class=""ph ph-credit-card""></i>752 <span class=""text-xs font-medium"">Credit</span>753 </div>754 </label>755 <label class=""radio-card"">756 <input type=""radio"" name=""payment"" value=""Debit"">757 <div class=""radio-content"">758 <i class=""ph ph-bank""></i>759 <span class=""text-xs font-medium"">Debit</span>760 </div>761 </label>762 <label class=""radio-card"">763 <input type=""radio"" name=""payment"" value=""Cash"">764 <div class=""radio-content"">765 <i class=""ph ph-money""></i>766 <span class=""text-xs font-medium"">Cash</span>767 </div>768 </label>769 </div>770 </div>771 772 <!-- Step 3: Details -->773 <div class=""form-section form-section-hidden"" id=""step-details"">774 <label class=""form-label"">3. Details</label>775 776 <div class=""card"">777 <div class=""form-group"">778 <label class=""form-label"" for=""micro-select"">Specific Item</label>779 <select id=""micro-select"" name=""micro"" class=""form-select"" required>780 <option value="""" disabled selected>Select specific category</option>781 <!-- Populated by JS -->782 </select>783 </div>784 785 <div class=""form-group"">786 <label class=""form-label"" for=""expense-date"">Date</label>787 <input type=""date"" id=""expense-date"" name=""date"" class=""form-input"" required>788 </div>789 790 <div style=""display: flex; gap: var(--spacing-3);"">791 <div class=""form-group"" style=""flex: 2;"">792 <label class=""form-label"" for=""expense-amount"">Amount</label>793 <input type=""number"" id=""expense-amount"" name=""amount"" class=""form-input"" step=""0.01"" min=""0.01"" placeholder=""0.00"" required>794 </div>795 <div class=""form-group"" style=""flex: 1;"">796 <label class=""form-label"" for=""expense-currency"">Currency</label>797 <select id=""expense-currency"" name=""currency"" class=""form-select"" required>798 <option value=""USD"">USD</option>799 <option value=""EUR"">EUR</option>800 <option value=""GBP"">GBP</option>801 </select>802 </div>803 </div>804 805 <button type=""submit"" class=""btn btn-primary btn-block mt-4"">806 <i class=""ph ph-check-circle""></i> Save Expense807 </button>808 </div>809 </div>810 811 </form>812 </div>813 </main>814 815 <!-- ================= HISTORY VIEW ================= -->816 <main id=""view-history"" class=""screen"">817 <header class=""header"">818 <h1 class=""header-title mb-4"">Monthly Summary</h1>819 <input type=""month"" id=""history-month-filter"" class=""form-input"">820 </header>821 822 <div class=""content-scrollable"" id=""history-content"">823 <!-- Populated by JS -->824 </div>825 </main>826 827 <!-- ================= BOTTOM NAVIGATION ================= -->828 <nav class=""bottom-nav"">829 <a href=""#dashboard"" class=""nav-item nav-item-active"" aria-label=""Dashboard"">830 <i class=""ph ph-squares-four nav-icon""></i>831 <span class=""nav-text"">Dashboard</span>832 </a>833 <a href=""#add"" class=""nav-item"" aria-label=""Add Expense"">834 <i class=""ph ph-plus-circle nav-icon""></i>835 <span class=""nav-text"">Add</span>836 </a>837 <a href=""#history"" class=""nav-item"" aria-label=""History"">838 <i class=""ph ph-chart-pie-slice nav-icon""></i>839 <span class=""nav-text"">History</span>840 </a>841 </nav>842 843 <!-- ================= CONFIRMATION MODAL ================= -->844 <dialog id=""confirm-modal"" class=""modal"">845 <h3 class=""modal-title"">Delete Expense?</h3>846 <p class=""text-sm text-muted"">This action cannot be undone. Are you sure you want to remove this record?</p>847 <div class=""modal-actions"">848 <button type=""button"" class=""btn btn-secondary"" id=""btn-cancel-delete"">Cancel</button>849 <button type=""button"" class=""btn btn-danger"" id=""btn-confirm-delete"">Delete</button>850 </div>851 </dialog>852 853 </div>854 855 <!-- ================= JAVASCRIPT ================= -->856 <script>857 // --- State Management ---858 const STORAGE_KEY = 'finfam_data';859 let expenses = JSON.parse(localStorage.getItem(STORAGE_KEY)) || [];860 let itemToDelete = null;861 862 // --- Micro Category Mapping ---863 const microOptions = {864 'Housing': ['Rent/Mortgage', 'Maintenance', 'Furniture', 'Property Tax'],865 'Food': ['Groceries', 'Dining Out', 'Coffee', 'Delivery'],866 'Transport': ['Gas', 'Public Transit', 'Car Maintenance', 'Rideshare'],867 'Utilities': ['Electricity', 'Water', 'Internet', 'Phone'],868 'Personal': ['Clothing', 'Entertainment', 'Health', 'Education']869 };870 871 const macroIcons = {872 'Housing': 'ph-house',873 'Food': 'ph-shopping-cart',874 'Transport': 'ph-car',875 'Utilities': 'ph-lightning',876 'Personal': 'ph-user'877 };878 879 // --- DOM Elements ---880 const form = document.getElementById('add-expense-form');881 const stepPayment = document.getElementById('step-payment');882 const stepDetails = document.getElementById('step-details');883 const microSelect = document.getElementById('micro-select');884 const dateInput = document.getElementById('expense-date');885 const historyMonthFilter = document.getElementById('history-month-filter');886 const modal = document.getElementById('confirm-modal');887 888 // --- Initialization ---889 function init() {890 // Set default dates891 const today = new Date();892 const currentMonthStr = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}`;893 dateInput.value = today.toISOString().split('T')[0];894 historyMonthFilter.value = currentMonthStr;895 896 // Event Listeners897 window.addEventListener('hashchange', handleRoute);898 historyMonthFilter.addEventListener('change', renderHistory);899 900 document.querySelectorAll('input[name=""macro""]').forEach(input => {901 input.addEventListener('change', handleMacroChange);902 });903 904 document.querySelectorAll('input[name=""payment""]').forEach(input => {905 input.addEventListener('change', () => stepDetails.classList.remove('form-section-hidden'));906 });907 908 form.addEventListener('submit', handleFormSubmit);909 910 document.getElementById('btn-cancel-delete').addEventListener('click', () => modal.close());911 document.getElementById('btn-confirm-delete').addEventListener('click', executeDelete);912 913 // Initial Route914 handleRoute();915 }916 917 // --- Routing ---918 function handleRoute() {919 const hash = window.location.hash || '#dashboard';920 921 // Update Screens922 document.querySelectorAll('.screen').forEach(el => el.classList.remove('screen-active'));923 const activeScreen = document.querySelector(hash.replace('#', '#view-'));924 if (activeScreen) activeScreen.classList.add('screen-active');925 926 // Update Nav927 document.querySelectorAll('.nav-item').forEach(el => el.classList.remove('nav-item-active'));928 const activeNav = document.querySelector(`.nav-item[href=""${hash}""]`);929 if (activeNav) activeNav.classList.add('nav-item-active');930 931 // Render specific view data932 if (hash === '#dashboard' || hash === '') renderDashboard();933 if (hash === '#history') renderHistory();934 }935 936 // --- Form Logic ---937 function handleMacroChange(e) {938 const selectedMacro = e.target.value;939 stepPayment.classList.remove('form-section-hidden');940 941 // Populate Micro Select942 microSelect.innerHTML = '<option value="""" disabled selected>Select specific category</option>';943 if (microOptions[selectedMacro]) {944 microOptions[selectedMacro].forEach(opt => {945 microSelect.innerHTML += `<option value=""${opt}"">${opt}</option>`;946 });947 }948 }949 950 function handleFormSubmit(e) {951 e.preventDefault();952 const formData = new FormData(form);953 954 const newExpense = {955 id: Date.now().toString(),956 date: formData.get('date'),957 macro: formData.get('macro'),958 payment: formData.get('payment'),959 micro: formData.get('micro'),960 amount: parseFloat(formData.get('amount')),961 currency: formData.get('currency')962 };963 964 expenses.push(newExpense);965 saveData();966 967 // Reset Form968 form.reset();969 stepPayment.classList.add('form-section-hidden');970 stepDetails.classList.add('form-section-hidden');971 972 // Navigate to Dashboard973 window.location.hash = '#dashboard';974 }975 976 // --- Rendering Logic ---977 function formatCurrency(amount, currency) {978 return new Intl.NumberFormat('en-US', { style: 'currency', currency: currency }).format(amount);979 }980 981 function getMonthLabel(dateString) {982 const [year, month] = dateString.split('-');983 const date = new Date(year, month - 1);984 return date.toLocaleString('default', { month: 'long', year: 'numeric' });985 }986 987 function renderDashboard() {988 const today = new Date();989 const currentMonthPrefix = `${today.getFullYear()}-${String(today.getMonth() + 1).padStart(2, '0')}`;990 991 document.getElementById('dash-month-label').textContent = getMonthLabel(currentMonthPrefix);992 993 // Filter current month994 const currentMonthExpenses = expenses.filter(exp => exp.date.startsWith(currentMonthPrefix));995 996 // Calculate Total (Assuming USD for simplicity in total, in a real app would need conversion)997 const total = currentMonthExpenses.reduce((sum, exp) => sum + exp.amount, 0);998 document.getElementById('dash-total').textContent = formatCurrency(total, 'USD');999 1000 // Render Recent (Last 5)1001 const recentList = document.getElementById('dash-recent-list');1002 recentList.innerHTML = '';1003 1004 const recentExpenses = [...expenses].sort((a, b) => new Date(b.date) - new Date(a.date)).slice(0, 5);1005 1006 if (recentExpenses.length === 0) {1007 recentList.innerHTML = `1008 <div class=""empty-state"">1009 <i class=""ph ph-receipt""></i>1010 <p class=""text-sm"">No expenses yet.</p>1011 </div>1012 `;1013 return;1014 }1015 1016 recentExpenses.forEach(exp => {1017 const iconClass = macroIcons[exp.macro] || 'ph-receipt';1018 const el = document.createElement('div');1019 el.className = 'list-item';1020 el.onclick = () => promptDelete(exp.id);1021 el.innerHTML = `1022 <div class=""item-icon""><i class=""ph ${iconClass}""></i></div>1023 <div class=""item-details"">1024 <div class=""item-title"">${exp.micro}</div>1025 <div class=""item-subtitle"">${exp.macro} • ${exp.payment}</div>1026 </div>1027 <div class=""item-amount text-danger"">-${formatCurrency(exp.amount, exp.currency)}</div>1028 `;1029 recentList.appendChild(el);1030 });1031 }1032 1033 function renderHistory() {1034 const filterMonth = historyMonthFilter.value;1035 const content = document.getElementById('history-content');1036 content.innerHTML = '';1037 1038 const filteredExpenses = expenses.filter(exp => exp.date.startsWith(filterMonth));1039 1040 if (filteredExpenses.length === 0) {1041 content.innerHTML = `1042 <div class=""empty-state"">1043 <i class=""ph ph-calendar-blank""></i>1044 <p class=""text-sm"">No expenses found for this month.</p>1045 </div>1046 `;1047 return;1048 }1049 1050 // Group by Macro1051 const grouped = filteredExpenses.reduce((acc, exp) => {1052 if (!acc[exp.macro]) acc[exp.macro] = { total: 0, items: [] };1053 acc[exp.macro].items.push(exp);1054 acc[exp.macro].total += exp.amount;1055 return acc;1056 }, {});1057 1058 // Render Groups1059 for (const [macro, data] of Object.entries(grouped)) {1060 // Sort items by date desc1061 data.items.sort((a, b) => new Date(b.date) - new Date(a.date));1062 1063 const groupHeader = document.createElement('div');1064 groupHeader.className = 'group-header';1065 groupHeader.innerHTML = `1066 <span>${macro}</span>1067 <span>${formatCurrency(data.total, 'USD')}</span>1068 `;1069 content.appendChild(groupHeader);1070 1071 const listGroup = document.createElement('div');1072 listGroup.className = 'list-group mb-4';1073 1074 data.items.forEach(exp => {1075 const el = document.createElement('div');1076 el.className = 'list-item';1077 el.onclick = () => promptDelete(exp.id);1078 el.innerHTML = `1079 <div class=""item-details"">1080 <div class=""item-title"">${exp.micro}</div>1081 <div class=""item-subtitle"">${exp.date} • ${exp.payment}</div>1082 </div>1083 <div class=""item-amount text-danger"">-${formatCurrency(exp.amount, exp.currency)}</div>1084 `;1085 listGroup.appendChild(el);1086 });1087 1088 content.appendChild(listGroup);1089 }1090 }1091 1092 // --- Deletion Logic ---1093 function promptDelete(id) {1094 itemToDelete = id;1095 modal.showModal();1096 }1097 1098 function executeDelete() {1099 if (itemToDelete) {1100 expenses = expenses.filter(exp => exp.id !== itemToDelete);1101 saveData();1102 itemToDelete = null;1103 modal.close();1104 1105 // Re-render current view1106 if (window.location.hash === '#history') renderHistory();1107 else renderDashboard();1108 }1109 }1110 1111 function saveData() {1112 localStorage.setItem(STORAGE_KEY, JSON.stringify(expenses));1113 }1114 1115 // Boot app1116 init();1117 </script>1118</body>1119</html>"1120desktop_app_mockup_02,Desktop App,Mockup,"Apply Melo's visual system:1121 1122Background: warm off-white (#f5f2ec). Primary color: deep forest green (#2d4a3e) for navigation, CTAs, and active states. Secondary: muted sage (#8fa898) for supporting elements and data visualizations.1123Mood indicators: replace emoji with minimal abstract shape icons (five small filled circles or organic blobs with varying opacity levels). Keep them label-supported but visually refined.1124Typography: serif for date headers and large display text. Clean sans-serif for body, labels, and UI elements. Section labels in small uppercase with generous tracking.1125Journal canvas: guided prompt chips anchored at top as a horizontal scrollable row. Writing area fills the remaining height. Slim mood selector pinned to the bottom edge.1126Insights cards: soft rounded corners, unfilled, subtle sage borders, generous internal padding on an 8pt spacing grid.",,"<!DOCTYPE html>1127<html lang=""en"">1128<head>1129 <meta charset=""UTF-8"">1130 <meta name=""viewport"" content=""width=device-width, initial-scale=1.0"">1131 <title>Melo - Mental Health Journal</title>1132 1133 <!-- Google Fonts: Lora (Serif) for headings, Nunito (Sans-serif) for body -->1134 <link rel=""preconnect"" href=""https://fonts.googleapis.com"">1135 <link rel=""preconnect"" href=""https://fonts.gstatic.com"" crossorigin>1136 <link href=""https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,500;1,400&family=Nunito:wght@400;600&display=swap"" rel=""stylesheet"">1137 1138 <!-- Feather Icons -->1139 <script src=""https://unpkg.com/feather-icons""></script>1140 1141 <style>1142 /* --- Design System & Variables --- */1143 :root {1144 /* Colors */1145 --color-bg: #F4F6F5;1146 --color-surface: #FFFFFF;1147 --color-primary: #6B8E7B;1148 --color-primary-hover: #5A7A68;1149 --color-accent: #D4A373;1150 --color-text-main: #2C363F;1151 --color-text-muted: #828C94;1152 --color-border: #E2E8E4;1153 1154 /* Mood Colors */1155 --color-mood-great: #81B29A;1156 --color-mood-good: #F2CC8F;1157 --color-mood-okay: #E07A5F;1158 --color-mood-bad: #3D405B;1159 --color-mood-none: #E2E8E4;1160 1161 /* Typography */1162 --font-heading: 'Lora', serif;1163 --font-body: 'Nunito', sans-serif;1164 1165 /* Spacing & Layout */1166 --spacing-1: 8px;1167 --spacing-2: 16px;1168 --spacing-3: 24px;1169 --spacing-4: 32px;1170 --spacing-5: 48px;1171 --spacing-6: 64px;1172 --radius-sm: 8px;1173 --radius-md: 16px;1174 --radius-lg: 24px;1175 --shadow-sm: 0 2px 8px rgba(44, 54, 63, 0.04);1176 --shadow-md: 0 8px 24px rgba(44, 54, 63, 0.08);1177 --transition-fast: 0.2s ease;1178 }1179 1180 /* --- Base Reset --- */1181 *, *::before, *::after {1182 box-sizing: border-box;1183 margin: 0;1184 padding: 0;1185 }1186 1187 html, body {1188 height: 100%;1189 background-color: var(--color-bg);1190 color: var(--color-text-main);1191 font-family: var(--font-body);1192 line-height: 1.6;1193 -webkit-font-smoothing: antialiased;1194 }1195 1196 a {1197 text-decoration: none;1198 color: inherit;1199 }1200 