Adds the Orion theme and a couple of small changes to the cargo programs (#22655)

The orion theme has arrived! This theme is intentionally not using the
orion colors, as I couldn't get them to look good and I found this theme
to feel better for the warehouse aesthetic.
Other changes include:
- It is now possible to clear the currently selected/viewed order in the
cargo control and cargo delivery programs.
- The cargo delivery program was fixed to not crash if you clicked
overview or pay before selecting an order
- It is now possible to pick a theme for the program selection screen
(see last image) for modular computers. This is currently only used for
the operations delivery tablets.
- The cargo delivery program can print invoices, if the modular computer
has a nanoprinter. One was given to the delivery tablet in the HT
locker.

<img width="800" height="800" alt="image"
src="https://github.com/user-attachments/assets/4f2de8dd-9e94-4898-9907-c97a53084771"
/>
<img width="800" height="800" alt="image"
src="https://github.com/user-attachments/assets/afc841ca-a257-4cd0-9d9d-654ba6abe8f6"
/>
<img width="800" height="800" alt="image"
src="https://github.com/user-attachments/assets/7d2e757e-79fb-4100-a373-9a378d18d6ec"
/>
<img width="1200" height="800" alt="image"
src="https://github.com/user-attachments/assets/bc2da18b-1a5c-463e-a63c-a79b10de20b0"
/>
<img width="1200" height="800" alt="image"
src="https://github.com/user-attachments/assets/441e3479-71b0-4898-a5f0-14f6441ebf97"
/>
<img width="575" height="700" alt="image"
src="https://github.com/user-attachments/assets/25e95e1a-3b1d-4a5b-bc8f-dc01ba07c107"
/>
<img width="620" height="800" alt="image"
src="https://github.com/user-attachments/assets/f68f6954-f077-40c7-b57d-d65e16b897ae"
/>
<img width="575" height="700" alt="image"
src="https://github.com/user-attachments/assets/879d97d3-e5ed-499b-9e15-5459e16ee38e"
/>
<img width="400" height="500" alt="image"
src="https://github.com/user-attachments/assets/ae7b4123-b556-438e-8d55-a826611f00bf"
/>

---------

Co-authored-by: Batrachophreno <batrochophreno@gmail.com>
This commit is contained in:
Casper3667
2026-06-18 20:02:49 +00:00
committed by GitHub
co-authored by Batrachophreno
parent 1c6f0d938b
commit 45372d6f97
12 changed files with 433 additions and 81 deletions
@@ -41,7 +41,7 @@
data["PC_showbatteryicon"] = !!battery_module
data["PC_batterypercent"] = battery_module ? "[round(battery_module.battery.percent())] %" : null
data["PC_apclinkicon"] = (tesla_link?.enabled && apc_powered) ? "charging.gif" : ""
data["PC_device_theme"] = active_program ? active_program.tgui_theme : "scc"
data["PC_device_theme"] = active_program ? active_program.tgui_theme : device_theme
data["PC_ntneticon"] = get_ntnet_status_icon()
data["PC_stationtime"] = worldtime2text()
data["PC_stationdate"] = "[time2text(world.realtime, "DDD, Month DD")], [GLOB.game_year]"
@@ -79,6 +79,10 @@
var/screensaver_light_range = 0
var/screensaver_light_color
var/menu_light_color
/// Default theme if the program doesn't set it
var/device_theme = "scc"
/// Adds onto the output_message proc's range
var/message_output_range = 0
/// Maximal hardware size. Currently, tablets have 1, laptops 2 and consoles 3. Limits what hardware types can be installed.
@@ -83,6 +83,11 @@
// Cargo Delivery
/obj/item/modular_computer/handheld/preset/supply/cargo_delivery
_app_preset_type = /datum/modular_computer_app_presets/cargo_delivery
device_theme = "orion"
/obj/item/modular_computer/handheld/preset/supply/cargo_delivery/install_default_hardware()
. = ..()
nano_printer = new /obj/item/computer_hardware/nano_printer(src)
// Medical
@@ -12,10 +12,14 @@
usage_flags = PROGRAM_LAPTOP | PROGRAM_CONSOLE | PROGRAM_TELESCREEN
tgui_id = "CargoControl"
var/page = "overview_main" //overview_main - Main Menu, overview_submitted - Submitted Order Overview, overview_approved - Approved Order Overview, settings - Settings, details - order details, bounties - centcom bounties
var/status_message //A status message that can be displayed
var/list/order_details = list() //Order Details for the order
var/list/shipment_details = list() //Shipment Details for a selected shipment
//overview_main - Main Menu, overview_submitted - Submitted Order Overview, overview_approved - Approved Order Overview, settings - Settings, details - order details, bounties - centcom bounties
var/page = "overview_main"
//A status message that can be displayed
var/status_message = "Awaiting input"
//Order Details for the order
var/list/order_details = null
//Shipment Details for a selected shipment
var/list/shipment_details = list()
/datum/computer_file/program/civilian/cargocontrol/ui_data(mob/user)
var/list/data = initial_data()
@@ -33,7 +37,7 @@
data["order_submitted_number"] = submitted_orders.len
data["order_submitted_value"] = SScargo.get_orders_value_by_status("submitted",1)
data["order_submitted_suppliers"] = SScargo.get_order_suppliers_by_status("submitted",1)
data["order_submitted_shuttle_time"] = SScargo.get_pending_shipment_time("submitted")
data["order_submitted_shuttle_time"] = SScargo.get_pending_shipment_time("submitted") + SScargo.min_movetime
data["order_submitted_shuttle_price"] = SScargo.get_pending_shipment_cost("submitted")
if(page == "overview_submitted")
data["order_list"] = submitted_orders
@@ -42,7 +46,7 @@
data["order_approved_number"] = approved_orders.len
data["order_approved_value"] = SScargo.get_orders_value_by_status("approved",1)
data["order_approved_suppliers"] = SScargo.get_order_suppliers_by_status("approved",1)
data["order_approved_shuttle_time"] = SScargo.get_pending_shipment_time("approved")
data["order_approved_shuttle_time"] = SScargo.get_pending_shipment_time("approved") + SScargo.min_movetime
data["order_approved_shuttle_price"] = SScargo.get_pending_shipment_cost("approved")
if(page == "overview_approved")
data["order_list"] = approved_orders
@@ -59,8 +63,7 @@
if(page == "overview_delivered")
data["order_list"] = delivered_orders
if(length(order_details))
data["order_details"] = order_details
data["order_details"] = order_details
if(page == "overview_shipments")
data["shipment_list"] = SScargo.get_shipment_list()
@@ -109,24 +112,33 @@
//Page switch between main, submitted, approved and settings
if("page")
switch(params["page"])
//Main overview page with links to the different sub overview pages - submitted, approved, shipped
if("overview_main")
page = "overview_main" //Main overview page with links to the different sub overview pages - submitted, approved, shipped
page = "overview_main"
//Overview page listing the orders that have been submitted with options to view them, approve them and reject them
if("overview_submitted")
page = "overview_submitted" //Overview page listing the orders that have been submitted with options to view them, approve them and reject them
page = "overview_submitted"
//Overview page listing the current elevator price and time as well as orders that have been approved, with options to view the details
if("overview_approved")
page = "overview_approved" //Overview page listing the current shuttle price and time as well as orders that have been approved, with options to view the details
page = "overview_approved"
//Overview page listing the orders that have been moved to the top of the cargo elevator but not delivered
if("overview_shipped")
page = "overview_shipped" //Overview page listing the orders that have been shipped to the station but not delivered
page = "overview_shipped"
//Overview page listing the orders that have been delivered
if("overview_delivered")
page = "overview_delivered" //Overview page listing the orders that have been delivered
if("overview_shipments") //Overview of the shipments to / from the station
page = "overview_delivered"
//Overview of the shipments to / from the ship
if("overview_shipments")
page = "overview_shipments"
//Settings page that allows to tweak various settings such as the cargo handling fee
if("settings")
page = "settings" //Settings page that allows to tweak various settings such as the cargo handling fee
page = "settings"
//Page listing the currently available centcom bounties
if("bounties")
page = "bounties" //Page listing the currently available centcom bounties
page = "bounties"
//fall back to overview_main if a unknown page has been supplied
else
page = "overview_main" //fall back to overview_main if a unknown page has been supplied
page = "overview_main"
return TRUE
//Approve a order
@@ -170,7 +182,13 @@
//Clear Status Message
if("clear_message")
status_message = null
status_message = "Awaiting input"
return TRUE
//Clear selected order
if("clear_order")
order_details = null
status_message = "Selected order cleared."
return TRUE
//Change the handling fee
@@ -252,7 +270,8 @@
else
computer.visible_message(SPAN_NOTICE("\The [computer] prints out paper."))
/datum/computer_file/program/civilian/cargocontrol/proc/post_signal(var/command) //Old code right here - Used to send a refresh command to the status screens incargo
//Old code right here - Used to send a refresh command to the status screens incargo
/datum/computer_file/program/civilian/cargocontrol/proc/post_signal(var/command)
var/datum/radio_frequency/frequency = SSradio.return_frequency(1435)
if(!frequency)
@@ -74,7 +74,6 @@
//Check if its already delivered
if(order_details["status"] == "delivered")
status_message = "Unable to Deliver - Order has already been delivered."
return TRUE
//If a payment is not needed and we are at the status shipped, then confirm the delivery
else if(order_details["status"] == "shipped")
@@ -83,10 +82,9 @@
order_details = co.get_list()
else
status_message = "The order is not yet shipped."
return TRUE
else
status_message = "Unable to process - Network Card or Card Reader Missing"
return TRUE
return TRUE
if(action == "pay")
if(computer && computer.card_slot && computer.network_card)
@@ -144,15 +142,17 @@
playsound(computer, 'sound/machines/chime.ogg', 50, TRUE)
status_message = co.set_paid(GetNameAndAssignmentFromId(id_card), usr.character_id, destinationact)
order_details = co.get_list()
return TRUE
else
status_message = "Unable to process - Network Card or Card Reader Missing"
return TRUE
return FALSE
//But only cargo can switch between the pages
if(!istype(I) || !I.registered_name || !(ACCESS_CARGO in I.access) || issilicon(usr))
to_chat(usr, SPAN_WARNING("Authentication error: Unable to locate ID with appropriate access to allow this operation."))
return
if(action == "clear_order")
co = null
order_details = list()
status_message = "Selected order cleared."
page = "overview_main"
return TRUE
if(action == "page")
status_message = null //Null the previous status, so its not confusing
@@ -163,15 +163,19 @@
page = "order_overview" //Details page for a specific order - Lists the contents of the orde with the suppliers, prices and required access levels
//Fetch the order details and store it for the order. No need to fetch it again every 2 seconds
co = SScargo.get_order_by_id(text2num(params["order_overview"]))
order_details = co.get_list()
order_details = co?.get_list()
if("order_payment")
page = "order_payment"
co = SScargo.get_order_by_id(text2num(params["order_payment"]))
order_details = co.get_list()
order_details = co?.get_list()
else
page = "overview_main" //fall back to overview_main if a unknown page has been supplied
return TRUE
if(action == "accountselect")
// Only cargo can switch between the paying accounts
if(!access_check(I))
return FALSE
var/list/choices = assoc_to_keys(SSeconomy.department_accounts)
choices += "Personal"
var/dest = tgui_input_list(usr, "What account would you like to select?", "Destination Account", choices)
@@ -179,3 +183,24 @@
return FALSE
destinationact = dest
return TRUE
//Print functions
if(action == "order_print")
if(!access_check(I))
return FALSE
//Get the order
var/datum/cargo_order/co = SScargo.get_order_by_id(text2num(params["order_print"]))
if(co && computer.nano_printer)
if(!computer.nano_printer.print_text(co.get_report_invoice(),"Order Invoice #[co.order_id]"))
to_chat(usr, SPAN_WARNING("Hardware error: Printer was unable to print the file. It may be out of paper."))
return
else
computer.visible_message(SPAN_NOTICE("\The [computer] prints out paper."))
return TRUE
// Cargo access check
/datum/computer_file/program/civilian/cargodelivery/proc/access_check(var/obj/item/card/id/I)
if(!istype(I) || !I.registered_name || !(ACCESS_CARGO in I.access) || issilicon(usr))
to_chat(usr, SPAN_WARNING("Authentication error: Unable to locate ID with appropriate access to allow this operation."))
return FALSE
return TRUE
+10
View File
@@ -0,0 +1,10 @@
author: TheGreyWolf
delete-after: True
changes:
- rscadd: "Added a new Orion theme and applied it to the cargo control, cargo order and cargo delivery programs."
- rscadd: "Modular computers can now have a front page theme defined. Currently this is only applied to the operations delivery tablets."
- bugfix: "Fixed some issues with the cargo programs displaying the wrong delivery time."
- rscadd: "Added the ability to clear the currently selected order in the delivery program and cargo control program."
- rscadd: "It is now possible to print invoices from the cargo delivery program."
+45
View File
@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.0"
width="187.5pt"
height="188.25pt"
viewBox="0 0 187.5 188.25"
preserveAspectRatio="xMidYMid meet"
id="svg1"
sodipodi:docname="bg-orion3.svg"
inkscape:version="1.4.4 (dcaf3e7, 2026-05-05)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:document-units="pt"
inkscape:zoom="3.247012"
inkscape:cx="124.88405"
inkscape:cy="125.5"
inkscape:window-width="1920"
inkscape:window-height="1017"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<g
transform="matrix(0.075,0,0,0.075,0,188.25)"
id="g1"
inkscape:highlight-color="#aaaaaa">
<path
id="path1"
d="m 80 -2502 v 7 l 138 138 137 137 h 895 895 l 138 -138 137 -137 v -8 -7 H 1250 80 Z M 20 -1240 V -70 h 8 7 l 138 -138 137 -137 v -895 -895 L 172 -2273 35 -2410 h -8 -7 z m 2342 -1027 -132 132 v 895 895 l 135 135 135 135 v -1163 -1162 h -3 -2 z m -1641 464 -301 308 v 208 208 l 13 -8 12 -8 493 -496 492 -496 v -11 -12 h -204 -204 z m 292 291 -592 597 -1 207 v 208 h 8 9 l 786 -794 787 -794 v -11 -11 h -202 -203 z m -593 -383 v 205 h 7 7 l 198 -197 198 -197 v -8 -8 H 625 420 Z m 887 679 -787 794 v 11 11 h 203 202 l 593 -599 592 -599 v -206 -206 h -8 -9 z m 291 290 -498 503 v 11 12 h 204 204 l 301 -307 301 -307 v -208 -208 l -8 1 -7 1 z m 294 299 -212 212 v 8 7 h 220 220 v -220 -220 h -8 -7 z M 237 -152 100 -15 v 8 7 h 1170 1170 v -8 -7 L 2302 -153 2165 -290 H 1270 375 Z"
style="opacity:0.33" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

+1
View File
@@ -34,6 +34,7 @@ import './styles/themes/hephaestus.scss';
import './styles/themes/sol.scss';
import './styles/themes/vaurca.scss';
import './styles/themes/amberpos.scss';
import './styles/themes/orion.scss';
import { setupGlobalEvents } from 'tgui-core/events';
import { setupHotKeys } from 'tgui-core/hotkeys';
+16 -11
View File
@@ -115,7 +115,7 @@ export const CargoControl = (props) => {
// FUCK THE WAY THESE FUCKING TOPIC CALLS WERE MADE
// THIS BULLSHIT GAVE ME ARTHRITIS
return (
<NtosWindow resizable width={1200} height={800}>
<NtosWindow resizable width={1200} height={800} theme="orion">
<NtosWindow.Content scrollable>
<Section
title="Operations Management"
@@ -142,12 +142,7 @@ export const CargoControl = (props) => {
</>
}
>
<Box
mb={2}
p={1}
backgroundColor="rgba(255,255,255,0.05)"
textColor="yellow"
>
<Box className="OrionNotice" mb={2} p={1}>
{data.status_message}
</Box>
<Tabs>
@@ -203,7 +198,16 @@ export const CargoControl = (props) => {
{showAppropriateWindow(data.page)}
</Section>
{data.order_details && (
<Section title="Order Details">
<Section
title="Order Details"
buttons={
<Button
content="Clear Selected Order"
icon="times"
onClick={() => act('clear_order')}
/>
}
>
<LabeledList>
<LabeledList.Item label="ID">
{data.order_details.order_id}
@@ -359,16 +363,17 @@ export const OverviewSubmitted = (props) => {
<Table.Cell>
<Button
content="Approve"
color="green"
color="approve"
onClick={() =>
act('order_approve', {
order_approve: order.order_id.toString(),
})
}
/>
<Button
content="Reject"
color="red"
color="reject"
onClick={() =>
act('order_reject', {
order_reject: order.order_id.toString(),
@@ -432,7 +437,7 @@ export const OverviewApproved = (props) => {
<Table.Cell>
<Button
content="Reject"
color="red"
color="reject"
onClick={() =>
act('order_reject', {
order_reject: order.order_id.toString(),
+66 -37
View File
@@ -58,42 +58,48 @@ type Item = {
supplier_name: string;
};
const hasValidOrder = (order?: Order | null) => !!order?.order_id;
export const CargoDelivery = (props) => {
const { act, data } = useBackend<CargoData>();
return (
<NtosWindow resizable>
<NtosWindow resizable theme="orion" width={620} height={800}>
<NtosWindow.Content scrollable>
<Section>
<Tabs>
<Tabs.Tab onClick={() => act('page', { page: 'overview_main' })}>
Main
</Tabs.Tab>
{data.order_details && (
<>
{' '}
<Tabs.Tab
onClick={() =>
act('page', {
page: 'order_overview',
order_overview: data.order_details?.order_id?.toString(),
})
}
>
Overview
</Tabs.Tab>
<Tabs.Tab
onClick={() =>
act('page', {
page: 'order_payment',
order_payment: data.order_details?.order_id?.toString(),
})
}
>
Payment
</Tabs.Tab>
</>
)}
<Tabs.Tab
onClick={() =>
act('page', {
page: 'order_overview',
order_overview: data.order_details?.order_id?.toString(),
})
}
>
Overview
</Tabs.Tab>
<Tabs.Tab
onClick={() =>
act('page', {
page: 'order_payment',
order_payment: data.order_details?.order_id?.toString(),
})
}
>
Payment
</Tabs.Tab>
<Button
content="Clear Selected Order"
icon="times"
disabled={!data.order_details?.order_id}
onClick={() => act('clear_order')}
style={{ marginLeft: 'auto' }}
/>
</Tabs>
</Section>
{data.page === 'overview_main' ? (
@@ -146,6 +152,14 @@ export const MainView = (props) => {
export const Overview = (props) => {
const { act, data } = useBackend<CargoData>();
if (!hasValidOrder(data.order_details)) {
return (
<Section title="Overview">
No order selected. Please select an order from the main list first.
</Section>
);
}
return (
<Section title="Overview">
<LabeledList>
@@ -223,6 +237,14 @@ export const Overview = (props) => {
export const Payment = (props) => {
const { act, data } = useBackend<CargoData>();
if (!hasValidOrder(data.order_details)) {
return (
<Section title="Payment">
No order selected. Please select an order from the main list first.
</Section>
);
}
return (
<Section
title={`Payment: Order No. ${data.order_details.order_id}`}
@@ -230,29 +252,36 @@ export const Payment = (props) => {
<>
<Button
content="Account"
color="good"
color="caution"
onClick={() => act('accountselect')}
/>
<Button
content={
data.order_details.status === 'shipped'
? 'Confirm Delivery'
: data.order_details.status === 'delivered'
? 'Delivered Already'
: 'Not Shipped'
}
disabled={data.order_details.status !== 'shipped'}
icon="check"
color="green"
color="approve"
onClick={() => act('deliver', { deliver: 'true' })}
/>
>
{data.order_details.status === 'shipped'
? 'Deliver'
: data.order_details.status === 'delivered'
? 'Delivered'
: 'Not Shipped'}
</Button>
<Button
content="Pay"
disabled={!data.order_details.needs_payment}
icon="credit-card"
color="green"
color="approve"
onClick={() => act('pay', { deliver: 'true' })}
/>
<Button
content="Print"
onClick={() =>
act('order_print', {
order_print: data.order_details.order_id.toString(),
})
}
/>
</>
}
>
+3 -2
View File
@@ -95,7 +95,7 @@ export const CargoOrder = (props) => {
const { act, data } = useBackend<CargoData>();
return (
<NtosWindow resizable width={800} height={800}>
<NtosWindow resizable width={800} height={800} theme="orion">
<NtosWindow.Content scrollable>
<Tabs fluid>
<Tabs.Tab
@@ -152,12 +152,13 @@ export const MainPage = (props) => {
/>
<Button
content="Clear"
color="red"
color="reject"
icon="stop"
onClick={() => act('clear_order')}
/>
<Button
content="Submit Order"
color="approve"
icon="check"
onClick={() => act('submit_order')}
/>
+208
View File
@@ -0,0 +1,208 @@
.theme-orion:root {
// Base
--color-base: hsl(24, 100%, 5%);
--color-primary: hsl(from var(--color-base) h s calc(l - 30));
--color-label: #d86c00;
--secondary-saturation: 10;
--secondary-lightness-adjustment: -56;
--base-gradient-spread: 0;
--border-radius-unit: 0;
--base-font-stack:
ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas,
'DejaVu Sans Mono', monospace;
// Components
--button-color: var(--color-label);
--button-background-default: var(--color-base);
--button-background-selected: hsl(0, 90%, 35%);
--button-background-caution: hsl(30, 85%, 40%);
--button-background-danger: hsl(31, 100%, 30%);
--progress-bar-background: hsl(0, 0%, 0%, 0.5);
--input-background: transparent;
--button-background-approve_button: hsl(38, 90%, 24%);
--button-background-danger_button: hsl(8, 80%, 26%);
--button-background-caution: hsl(28, 85%, 32%);
--button-border-approve: hsl(45, 100%, 55%);
--button-border-reject: hsl(8, 100%, 55%);
// Background
body,
:root {
background-color: var(--color-base);
}
.Window {
background-color: var(--color-base);
background-image: none;
}
.Button {
font-family: var(--base-font-stack);
border: var(--border-thickness-small) outset var(--color-base);
outline: var(--border-thickness-tiny) solid hsl(60, 6%, 8%);
&-disabled {
color: hsl(60, 6%, 77%);
font-family: var(--base-font-stack);
&:hover {
color: hsl(0, 0%, 100%);
}
}
&--selected {
color: var(--color-white);
border-style: inset;
}
&--color--approve,
&--color--success {
background-color: var(--button-background-approve_button);
border-color: var(--button-border-approve);
color: hsl(45, 100%, 75%);
&:hover:not(.Button--disabled) {
background-color: hsl(38, 90%, 30%);
color: hsl(45, 100%, 88%);
border-color: hsl(45, 100%, 68%);
}
}
&--color--danger,
&--color--reject {
background-color: var(--button-background-danger_button);
border-color: var(--button-border-reject);
color: hsl(12, 100%, 78%);
font-weight: bold;
&:hover:not(.Button--disabled) {
background-color: hsl(31, 100%, 36%);
color: hsl(12, 100%, 90%);
border-color: hsl(8, 100%, 68%);
}
}
&--caution {
background-color: var(--button-background-caution);
color: hsl(32, 100%, 75%);
&::before {
content: '! ';
}
}
}
.Section {
font-family: var(--base-font-stack);
background-color: hsla(24, 100%, 4%, 0.82);
border: var(--border-thickness-small) solid hsl(31, 80%, 18%);
box-shadow:
inset 0 0 0 1px hsla(31, 100%, 45%, 0.12),
0 0 8px hsla(24, 100%, 2%, 0.8);
&__title {
border-bottom: 1px solid hsl(31, 80%, 18%);
}
&__titleText {
color: var(--color-label);
letter-spacing: 0.04em;
text-transform: uppercase;
}
}
.Table {
background-color: hsla(24, 100%, 3%, 0.45);
border: 1px solid hsla(31, 100%, 35%, 0.22);
border-collapse: separate;
border-spacing: 0;
box-shadow: inset 0 0 0 1px hsla(31, 100%, 50%, 0.06);
&__row {
background-color: hsla(24, 100%, 5%, 0.42);
&:nth-child(even):not(&--header) {
background-color: hsla(31, 70%, 8%, 0.34);
}
&:hover:not(&--header) {
background-color: hsla(31, 100%, 18%, 0.45);
}
&--header {
background-color: hsla(31, 100%, 14%, 0.65);
color: hsl(31, 100%, 72%);
text-transform: uppercase;
letter-spacing: 0.035em;
box-shadow: inset 0 -1px 0 hsla(31, 100%, 50%, 0.28);
}
}
&__cell {
border-bottom: 1px solid hsla(31, 100%, 32%, 0.18);
border-right: 1px solid hsla(31, 100%, 24%, 0.1);
padding-left: 10px;
padding-top: 0.35rem;
padding-bottom: 0.35rem;
&:last-child {
border-right: none;
}
}
}
.Tabs {
border-bottom: 1px solid hsl(31, 80%, 18%);
margin-bottom: 0.5rem;
&__tab {
background-color: hsla(24, 100%, 3%, 0.7);
border: 1px solid hsl(31, 70%, 14%);
color: hsl(31, 80%, 55%);
&:hover {
background-color: hsla(31, 100%, 28%, 0.18);
color: hsl(31, 100%, 72%);
}
&--selected {
background-color: hsl(31, 100%, 18%);
border-color: hsl(31, 100%, 42%);
color: hsl(45, 100%, 75%);
box-shadow: inset 0 -2px 0 hsl(45, 100%, 55%);
}
}
}
.OrionNotice {
background-color: hsla(45, 100%, 45%, 0.08);
border-left: 3px solid hsl(45, 100%, 55%);
color: hsl(45, 100%, 75%);
text-shadow: 0 0 4px hsla(45, 100%, 50%, 0.25);
}
.Layout__content {
background-image: url('../../assets/bg-orion.svg');
}
div,
h1,
h2,
h3,
h4 {
font-family: var(--base-font-stack);
color: var(--color-label);
}
h1 {
font-size: 250%;
padding: 32px;
padding-bottom: 0;
}
h2 {
font-size: 120%;
}
}