| 
									
										
											  
											
												WebHost: Massive overhaul of options pages (#2614)
* Implement support for option groups. WebHost options pages still need to be updated.
* Remove debug output
* In-progress conversion of player-options to Jinja rendering
* Support "Randomize" button without JS, transpile SCSS to CSS, include map file for later editors
* Un-alphabetize options, add default group name for item/location Option classes, implement more option types
* Re-flow UI generation to avoid printing rows with unsupported or invalid option types, add support for TextChoice options
* Support all remaining option types
* Rendering improvements and CSS fixes for prettiness
* Wrap options in a form, update button styles, fix labels, disable inputs where the default is random, nuke the JS
* Minor CSS tweaks, as recommended by the designer
* Hide JS-required elements in noscript tag. Add JS reactivity to range, named-range, and randomize buttons.
* Fix labels, add JS handling for TextChoice
* Make option groups collapsable
* PEP8 current option_groups progress (#2604)
* Make the python more PEP8 and remove unneeded imports
* remove LocationSet from `Item & Location Options` group
* It's ugly, but YAML generation is working
* Stop generating JSON files for player-options pages
* Do not include ItemDict entries whose values are zero
* Properly format yaml output
* Save options when form is submitted, load options on page load
* Fix options being omitted from the page if a group has an even number of options
* Implement generate-game, escape option descriptions
* Fix "randomize" checkboxes not properly setting YAML options to "random"
* Add a separator between item/location groups and items/locations in their respective lists
* Implement option presets
* Fix docs to detail what actually ended up happening
* implement option groups on webworld to allow dev sorting (#2616)
* Force extremely long item/location/option names with no spaces to text-wrap
* Fix "randomize" button being too wide in single-column display, change page header to include game name
* Update preset select to read "custom" when updating form inputs. Show error message if the user doesn't input a name
* Un-break weighted-options, add option group names to weighted options
* Nuke weighted-options. Set up framework to rebuild it in Jinja.
* Generate styles with scss, remove styles which will be replaced, add placeholders for worlds
* Support Toggle, DefaultOnToggle, and Choice options in weighted-options
* Implement expand/collapse without JS for worlds and option groups
* Properly style set options
* Implement Range and NamedRange. Also, CSS is hard.
* Add support for remaining option types. JS and backend still forthcoming.
* Add JS functionality for collapsing game divs, populating span values on range updates. Add <noscript> tag to warn users with JS disabled.
* Support showing/hiding game divs based on range value for game
* Add support for adding/deleting range rows
* Save settings to localStorage on form submission
* Save deleted options on form submission
* Break weighted-options into a per-game page.
- Break weighted-options into a per-game page
- Add "advanced options" links to supported games page
- Use details/summary tags on supported games, player-options, and weighted-options
- Fix bug preventing previously deleted rows from being removed on page load if JS is enabled
- Move route handling for options pages to options.py
- Remove world handling from weighted-options
* Implement loading previous settings from localStorage on page load if JS is enabled
* Weighted options can now generate YAML files and single-player games
* options pages now respect option visibility settings for simple and complex pages
* Remove `/weighted-settings` redirect, fix weighted-options link on player-options page
* Fix instance of AutoWorld not having access to proper `random`
* Catch instances of frozenset along with set
* Restore word-wrap in tooltips
* Fix word wrap in player-options labels
* Add `dedent` filter to help with formatting tooltips in player-options
* Do not change the ordering of keys when printing yaml files
* Move necessary import out of conditional statement
* Expand only the first option group by default on both options pages
* Respect option visibility when generating yaml template files
* Swap to double quotes
* Replace instances of `/weighted-settings` with `/weighted-options`, swap out incomplete links
* Strip newlines and spaces after applying dedent filter
* Fix documentation for option groups
* Update site map
* Update various docs
* Sort OptionSet lists alphabetically
* Minor style tweak
* Fix extremely long text overflowing tooltips
* Convert player-options to use CSS grid instead of tables
* Do not display link to weighted-options page on supported games if the options page is an external link
* Update worlds/AutoWorld.py
Bugfix by @alwaysintreble
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Fix NamedRange options not being properly set if a preset it loaded
* Move option-presets route into options.py
* Include preset name in YAML if not "default" and not "custom"
* Removed macros for PlandoBosses and DefaultOnToggle, as they were handled by their parent classes
* Fix not disabling custom inputs when the randomize button is clicked
* Only sort OptionList and OptionSet valid_keys if they are unordered
* Quick style fixes for player-settings to give `select` elements `text-overflow: ellipsis` and increase base size of left-column
* Prevent showing a horizontal scroll bar on player-options if the browser width was beneath a certain threshold
* Fix a bug in weighted-options which prevented inputting a negative value for new range inputs
---------
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
											
										 
											2024-05-18 00:11:57 -04:00
										 |  |  | @import "../markdown.css"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | html{ | 
					
						
							|  |  |  |     background-image: url('../../static/backgrounds/grass.png'); | 
					
						
							|  |  |  |     background-repeat: repeat; | 
					
						
							|  |  |  |     background-size: 650px 650px; | 
					
						
							|  |  |  |     overflow-x: hidden; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #player-options{ | 
					
						
							|  |  |  |     box-sizing: border-box; | 
					
						
							|  |  |  |     max-width: 1024px; | 
					
						
							|  |  |  |     margin-left: auto; | 
					
						
							|  |  |  |     margin-right: auto; | 
					
						
							|  |  |  |     background-color: rgba(0, 0, 0, 0.15); | 
					
						
							|  |  |  |     border-radius: 8px; | 
					
						
							|  |  |  |     padding: 1rem; | 
					
						
							|  |  |  |     color: #eeffeb; | 
					
						
							| 
									
										
										
										
											2024-06-03 18:43:01 -04:00
										 |  |  |     word-break: break-word; | 
					
						
							| 
									
										
											  
											
												WebHost: Massive overhaul of options pages (#2614)
* Implement support for option groups. WebHost options pages still need to be updated.
* Remove debug output
* In-progress conversion of player-options to Jinja rendering
* Support "Randomize" button without JS, transpile SCSS to CSS, include map file for later editors
* Un-alphabetize options, add default group name for item/location Option classes, implement more option types
* Re-flow UI generation to avoid printing rows with unsupported or invalid option types, add support for TextChoice options
* Support all remaining option types
* Rendering improvements and CSS fixes for prettiness
* Wrap options in a form, update button styles, fix labels, disable inputs where the default is random, nuke the JS
* Minor CSS tweaks, as recommended by the designer
* Hide JS-required elements in noscript tag. Add JS reactivity to range, named-range, and randomize buttons.
* Fix labels, add JS handling for TextChoice
* Make option groups collapsable
* PEP8 current option_groups progress (#2604)
* Make the python more PEP8 and remove unneeded imports
* remove LocationSet from `Item & Location Options` group
* It's ugly, but YAML generation is working
* Stop generating JSON files for player-options pages
* Do not include ItemDict entries whose values are zero
* Properly format yaml output
* Save options when form is submitted, load options on page load
* Fix options being omitted from the page if a group has an even number of options
* Implement generate-game, escape option descriptions
* Fix "randomize" checkboxes not properly setting YAML options to "random"
* Add a separator between item/location groups and items/locations in their respective lists
* Implement option presets
* Fix docs to detail what actually ended up happening
* implement option groups on webworld to allow dev sorting (#2616)
* Force extremely long item/location/option names with no spaces to text-wrap
* Fix "randomize" button being too wide in single-column display, change page header to include game name
* Update preset select to read "custom" when updating form inputs. Show error message if the user doesn't input a name
* Un-break weighted-options, add option group names to weighted options
* Nuke weighted-options. Set up framework to rebuild it in Jinja.
* Generate styles with scss, remove styles which will be replaced, add placeholders for worlds
* Support Toggle, DefaultOnToggle, and Choice options in weighted-options
* Implement expand/collapse without JS for worlds and option groups
* Properly style set options
* Implement Range and NamedRange. Also, CSS is hard.
* Add support for remaining option types. JS and backend still forthcoming.
* Add JS functionality for collapsing game divs, populating span values on range updates. Add <noscript> tag to warn users with JS disabled.
* Support showing/hiding game divs based on range value for game
* Add support for adding/deleting range rows
* Save settings to localStorage on form submission
* Save deleted options on form submission
* Break weighted-options into a per-game page.
- Break weighted-options into a per-game page
- Add "advanced options" links to supported games page
- Use details/summary tags on supported games, player-options, and weighted-options
- Fix bug preventing previously deleted rows from being removed on page load if JS is enabled
- Move route handling for options pages to options.py
- Remove world handling from weighted-options
* Implement loading previous settings from localStorage on page load if JS is enabled
* Weighted options can now generate YAML files and single-player games
* options pages now respect option visibility settings for simple and complex pages
* Remove `/weighted-settings` redirect, fix weighted-options link on player-options page
* Fix instance of AutoWorld not having access to proper `random`
* Catch instances of frozenset along with set
* Restore word-wrap in tooltips
* Fix word wrap in player-options labels
* Add `dedent` filter to help with formatting tooltips in player-options
* Do not change the ordering of keys when printing yaml files
* Move necessary import out of conditional statement
* Expand only the first option group by default on both options pages
* Respect option visibility when generating yaml template files
* Swap to double quotes
* Replace instances of `/weighted-settings` with `/weighted-options`, swap out incomplete links
* Strip newlines and spaces after applying dedent filter
* Fix documentation for option groups
* Update site map
* Update various docs
* Sort OptionSet lists alphabetically
* Minor style tweak
* Fix extremely long text overflowing tooltips
* Convert player-options to use CSS grid instead of tables
* Do not display link to weighted-options page on supported games if the options page is an external link
* Update worlds/AutoWorld.py
Bugfix by @alwaysintreble
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
* Fix NamedRange options not being properly set if a preset it loaded
* Move option-presets route into options.py
* Include preset name in YAML if not "default" and not "custom"
* Removed macros for PlandoBosses and DefaultOnToggle, as they were handled by their parent classes
* Fix not disabling custom inputs when the randomize button is clicked
* Only sort OptionList and OptionSet valid_keys if they are unordered
* Quick style fixes for player-settings to give `select` elements `text-overflow: ellipsis` and increase base size of left-column
* Prevent showing a horizontal scroll bar on player-options if the browser width was beneath a certain threshold
* Fix a bug in weighted-options which prevented inputting a negative value for new range inputs
---------
Co-authored-by: Aaron Wagener <mmmcheese158@gmail.com>
											
										 
											2024-05-18 00:11:57 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     #player-options-header{ | 
					
						
							|  |  |  |         h1{ | 
					
						
							|  |  |  |             margin-bottom: 0; | 
					
						
							|  |  |  |             padding-bottom: 0; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         h1:nth-child(2){ | 
					
						
							|  |  |  |             font-size: 1.4rem; | 
					
						
							|  |  |  |             margin-top: -8px; | 
					
						
							|  |  |  |             margin-bottom: 0.5rem; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .js-warning-banner{ | 
					
						
							|  |  |  |         width: calc(100% - 1rem); | 
					
						
							|  |  |  |         padding: 0.5rem; | 
					
						
							|  |  |  |         border-radius: 4px; | 
					
						
							|  |  |  |         background-color: #f3f309; | 
					
						
							|  |  |  |         color: #000000; | 
					
						
							|  |  |  |         margin-bottom: 0.5rem; | 
					
						
							|  |  |  |         text-align: center; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .group-container{ | 
					
						
							|  |  |  |         padding: 0; | 
					
						
							|  |  |  |         margin: 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         h2{ | 
					
						
							|  |  |  |             user-select: none; | 
					
						
							|  |  |  |             cursor: unset; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             label{ | 
					
						
							|  |  |  |                 cursor: pointer; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     #player-options-button-row{ | 
					
						
							|  |  |  |         display: flex; | 
					
						
							|  |  |  |         flex-direction: row; | 
					
						
							|  |  |  |         justify-content: space-between; | 
					
						
							|  |  |  |         margin-top: 15px; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     #user-message{ | 
					
						
							|  |  |  |         display: none; | 
					
						
							|  |  |  |         width: calc(100% - 8px); | 
					
						
							|  |  |  |         background-color: #ffe86b; | 
					
						
							|  |  |  |         border-radius: 4px; | 
					
						
							|  |  |  |         color: #000000; | 
					
						
							|  |  |  |         padding: 4px; | 
					
						
							|  |  |  |         text-align: center; | 
					
						
							|  |  |  |         cursor: pointer; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     h1{ | 
					
						
							|  |  |  |         font-size: 2.5rem; | 
					
						
							|  |  |  |         font-weight: normal; | 
					
						
							|  |  |  |         width: 100%; | 
					
						
							|  |  |  |         margin-bottom: 0.5rem; | 
					
						
							|  |  |  |         text-shadow: 1px 1px 4px #000000; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     h2{ | 
					
						
							|  |  |  |         font-size: 40px; | 
					
						
							|  |  |  |         font-weight: normal; | 
					
						
							|  |  |  |         width: 100%; | 
					
						
							|  |  |  |         margin-bottom: 0.5rem; | 
					
						
							|  |  |  |         text-transform: lowercase; | 
					
						
							|  |  |  |         text-shadow: 1px 1px 2px #000000; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     h3, h4, h5, h6{ | 
					
						
							|  |  |  |         text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     input:not([type]){ | 
					
						
							|  |  |  |         border: 1px solid #000000; | 
					
						
							|  |  |  |         padding: 3px; | 
					
						
							|  |  |  |         border-radius: 3px; | 
					
						
							|  |  |  |         min-width: 150px; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         &:focus{ | 
					
						
							|  |  |  |             border: 1px solid #ffffff; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     select{ | 
					
						
							|  |  |  |         border: 1px solid #000000; | 
					
						
							|  |  |  |         padding: 3px; | 
					
						
							|  |  |  |         border-radius: 3px; | 
					
						
							|  |  |  |         min-width: 150px; | 
					
						
							|  |  |  |         background-color: #ffffff; | 
					
						
							|  |  |  |         text-overflow: ellipsis; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .game-options{ | 
					
						
							|  |  |  |         display: flex; | 
					
						
							|  |  |  |         flex-direction: row; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .left, .right{ | 
					
						
							|  |  |  |             display: grid; | 
					
						
							|  |  |  |             grid-template-columns: 12rem auto; | 
					
						
							|  |  |  |             grid-row-gap: 0.5rem; | 
					
						
							|  |  |  |             grid-auto-rows: min-content; | 
					
						
							|  |  |  |             align-items: start; | 
					
						
							|  |  |  |             min-width: 480px; | 
					
						
							|  |  |  |             width: 50%; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     #meta-options{ | 
					
						
							|  |  |  |         display: flex; | 
					
						
							|  |  |  |         justify-content: space-between; | 
					
						
							|  |  |  |         gap: 20px; | 
					
						
							|  |  |  |         padding: 3px; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         input, select{ | 
					
						
							|  |  |  |             box-sizing: border-box; | 
					
						
							|  |  |  |             width: 200px; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .left, .right{ | 
					
						
							|  |  |  |         flex-grow: 1; | 
					
						
							|  |  |  |         margin-bottom: 0.5rem; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .left{ | 
					
						
							|  |  |  |         margin-right: 20px; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .select-container{ | 
					
						
							|  |  |  |         display: flex; | 
					
						
							|  |  |  |         flex-direction: row; | 
					
						
							|  |  |  |         max-width: 270px; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         select{ | 
					
						
							|  |  |  |             min-width: 200px; | 
					
						
							|  |  |  |             flex-grow: 1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             &:disabled{ | 
					
						
							|  |  |  |                 background-color: lightgray; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .range-container{ | 
					
						
							|  |  |  |         display: flex; | 
					
						
							|  |  |  |         flex-direction: row; | 
					
						
							|  |  |  |         max-width: 270px; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         input[type=range]{ | 
					
						
							|  |  |  |             flex-grow: 1; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .range-value{ | 
					
						
							|  |  |  |             min-width: 20px; | 
					
						
							|  |  |  |             margin-left: 0.25rem; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .named-range-container{ | 
					
						
							|  |  |  |         display: flex; | 
					
						
							|  |  |  |         flex-direction: column; | 
					
						
							|  |  |  |         max-width: 270px; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .named-range-wrapper{ | 
					
						
							|  |  |  |             display: flex; | 
					
						
							|  |  |  |             flex-direction: row; | 
					
						
							|  |  |  |             margin-top: 0.25rem; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             input[type=range]{ | 
					
						
							|  |  |  |                 flex-grow: 1; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .free-text-container{ | 
					
						
							|  |  |  |         display: flex; | 
					
						
							|  |  |  |         flex-direction: column; | 
					
						
							|  |  |  |         max-width: 270px; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         input[type=text]{ | 
					
						
							|  |  |  |             flex-grow: 1; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .text-choice-container{ | 
					
						
							|  |  |  |         display: flex; | 
					
						
							|  |  |  |         flex-direction: column; | 
					
						
							|  |  |  |         max-width: 270px; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .text-choice-wrapper{ | 
					
						
							|  |  |  |             display: flex; | 
					
						
							|  |  |  |             flex-direction: row; | 
					
						
							|  |  |  |             margin-bottom: 0.25rem; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             select{ | 
					
						
							|  |  |  |                 flex-grow: 1; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .option-container{ | 
					
						
							|  |  |  |         display: flex; | 
					
						
							|  |  |  |         flex-direction: column; | 
					
						
							|  |  |  |         background-color: rgba(0, 0, 0, 0.25); | 
					
						
							|  |  |  |         border: 1px solid rgba(20, 20, 20, 0.25); | 
					
						
							|  |  |  |         border-radius: 3px; | 
					
						
							|  |  |  |         color: #ffffff; | 
					
						
							|  |  |  |         max-height: 10rem; | 
					
						
							|  |  |  |         min-width: 14.5rem; | 
					
						
							|  |  |  |         overflow-y: auto; | 
					
						
							|  |  |  |         padding-right: 0.25rem; | 
					
						
							|  |  |  |         padding-left: 0.25rem; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .option-divider{ | 
					
						
							|  |  |  |             width: 100%; | 
					
						
							|  |  |  |             height: 2px; | 
					
						
							|  |  |  |             background-color: rgba(20, 20, 20, 0.25); | 
					
						
							|  |  |  |             margin-top: 0.125rem; | 
					
						
							|  |  |  |             margin-bottom: 0.125rem; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .option-entry{ | 
					
						
							|  |  |  |             display: flex; | 
					
						
							|  |  |  |             flex-direction: row; | 
					
						
							|  |  |  |             align-items: flex-start; | 
					
						
							|  |  |  |             margin-bottom: 0.125rem; | 
					
						
							|  |  |  |             margin-top: 0.125rem; | 
					
						
							|  |  |  |             user-select: none; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             &:hover{ | 
					
						
							|  |  |  |                 background-color: rgba(20, 20, 20, 0.25); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             input[type=checkbox]{ | 
					
						
							|  |  |  |                 margin-right: 0.25rem; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             input[type=number]{ | 
					
						
							|  |  |  |                 max-width: 1.5rem; | 
					
						
							|  |  |  |                 max-height: 1rem; | 
					
						
							|  |  |  |                 margin-left: 0.125rem; | 
					
						
							|  |  |  |                 text-align: center; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 /* Hide arrows on input[type=number] fields */ | 
					
						
							|  |  |  |                 -moz-appearance: textfield; | 
					
						
							|  |  |  |                 &::-webkit-outer-spin-button, &::-webkit-inner-spin-button{ | 
					
						
							|  |  |  |                     -webkit-appearance: none; | 
					
						
							|  |  |  |                     margin: 0; | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             label{ | 
					
						
							|  |  |  |                 flex-grow: 1; | 
					
						
							|  |  |  |                 margin-right: 0; | 
					
						
							|  |  |  |                 min-width: unset; | 
					
						
							|  |  |  |                 display: unset; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .randomize-button{ | 
					
						
							|  |  |  |         display: flex; | 
					
						
							|  |  |  |         flex-direction: column; | 
					
						
							|  |  |  |         justify-content: center; | 
					
						
							|  |  |  |         height: 22px; | 
					
						
							|  |  |  |         max-width: 30px; | 
					
						
							|  |  |  |         margin: 0 0 0 0.25rem; | 
					
						
							|  |  |  |         font-size: 14px; | 
					
						
							|  |  |  |         border: 1px solid black; | 
					
						
							|  |  |  |         border-radius: 3px; | 
					
						
							|  |  |  |         background-color: #d3d3d3; | 
					
						
							|  |  |  |         user-select: none; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         &:hover{ | 
					
						
							|  |  |  |             background-color: #c0c0c0; | 
					
						
							|  |  |  |             cursor: pointer; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         label{ | 
					
						
							|  |  |  |             line-height: 22px; | 
					
						
							|  |  |  |             padding-left: 5px; | 
					
						
							|  |  |  |             padding-right: 2px; | 
					
						
							|  |  |  |             margin-right: 4px; | 
					
						
							|  |  |  |             width: 100%; | 
					
						
							|  |  |  |             height: 100%; | 
					
						
							|  |  |  |             min-width: unset; | 
					
						
							|  |  |  |             &:hover{ | 
					
						
							|  |  |  |                 cursor: pointer; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         input[type=checkbox]{ | 
					
						
							|  |  |  |             display: none; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         &:has(input[type=checkbox]:checked){ | 
					
						
							|  |  |  |             background-color: #ffef00; /* Same as .interactive in globalStyles.css */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             &:hover{ | 
					
						
							|  |  |  |                 background-color: #eedd27; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         &[data-tooltip]::after{ | 
					
						
							|  |  |  |             left: unset; | 
					
						
							|  |  |  |             right: 0; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     label{ | 
					
						
							|  |  |  |         display: block; | 
					
						
							|  |  |  |         margin-right: 4px; | 
					
						
							|  |  |  |         cursor: default; | 
					
						
							|  |  |  |         word-break: break-word; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     th, td{ | 
					
						
							|  |  |  |         border: none; | 
					
						
							|  |  |  |         padding: 3px; | 
					
						
							|  |  |  |         font-size: 17px; | 
					
						
							|  |  |  |         vertical-align: top; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @media all and (max-width: 1024px) { | 
					
						
							|  |  |  |     #player-options { | 
					
						
							|  |  |  |         border-radius: 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         #meta-options { | 
					
						
							|  |  |  |             flex-direction: column; | 
					
						
							|  |  |  |             justify-content: flex-start; | 
					
						
							|  |  |  |             gap: 6px; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         .game-options{ | 
					
						
							|  |  |  |             justify-content: flex-start; | 
					
						
							|  |  |  |             flex-wrap: wrap; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |