export component MainWindow inherits Window { in property city; in property country; in property weather_main; in property weather_description; in property weather_icon; in property temperature; in property unit; always-on-top: true; no-frame: true; width: 300px; height: 124px; background: transparent; default-font-family: "IosevkaTermSlab Nerd Font Mono"; weather_popup := Rectangle { width: 100%; height: 100%; border-radius: 12px; background: @linear-gradient(160deg, #236a8bc7, #c5edff5c); drop-shadow-blur: 15px; drop-shadow-color: #00000066; VerticalLayout { spacing: 2px; // Consistent vertical spacing horizontal-stretch: 1.0; padding: 12px; // Consistent padding throughout /* Top: City */ Text { text: city + ", " + country; font-size: 14px; color: #fff; //font-family: horizontal-alignment: TextHorizontalAlignment.left; height: 18px; // Fixed height for consistent spacing font-weight: 600; } /* Middle: icon on left, temp on right */ HorizontalLayout { horizontal-stretch: 1.0; height: 50px; // Fixed height for main content area padding: 0px; /* Icon */ Text { text: weather_icon; font-size: 40px; horizontal-alignment: TextHorizontalAlignment.left; color: #fff; vertical-alignment: TextVerticalAlignment.center; width: 46px; // Fixed width for consistent alignment } /* Flexible spacer to help with alignment */ Rectangle { horizontal-stretch: 1.0; background: transparent; } /* Temperature group */ HorizontalLayout { spacing: 4px; // Tighter spacing for temperature elements padding: 0px; //height: 50px; Text { text: temperature; font-size: 40px; color: #fff; vertical-alignment: TextVerticalAlignment.center; font-weight: 900; } VerticalLayout { height: 50px; // Match temperature text height padding: 0px; spacing: 0px; Text { text: "o"; font-size: 16px; color: #fff; horizontal-alignment: TextHorizontalAlignment.left; vertical-alignment: TextVerticalAlignment.center; height: 25px; font-weight: 800; } Text { text: unit; font-size: 16px; color: #fff; horizontal-alignment: TextHorizontalAlignment.left; vertical-alignment: TextVerticalAlignment.center; height: 20px; width: 20px; font-weight: 800; } } } } /* Bottom: summary + description */ HorizontalLayout { spacing: 8px; horizontal-stretch: 1.0; height: 32px; padding: 0px; /* Summary */ Text { text: weather_main; font-size: 18px; color: #fff; vertical-alignment: TextVerticalAlignment.top; horizontal-alignment: TextHorizontalAlignment.left; width: 40%; // Fixed percentage width for consistent layout font-weight: 800; } /* Description */ Text { text: weather_description; font-size: 12px; color: #ffffffcc; horizontal-alignment: TextHorizontalAlignment.right; vertical-alignment: TextVerticalAlignment.top; horizontal-stretch: 1.0; wrap: word-wrap; height: 100%; font-weight: 600; } } } } }