Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • PantyNabber/fc-pregmod
  • pregmodfan/fc-pregmod
  • Alice.Grant/fc-pregmod
  • powerfful/fc-pregmod
  • elstumpo/fc-pregmod
  • Y/fc-pregmod
  • floer/fc-pregmod
  • oidocrop/fc-pregmod
  • hawk5005/fc-pregmod
  • nn/fc-pregmod
  • latios298/fc-pregmod
  • brpregmodfan/fc-pregmod
  • SomeoneTookMyUserName/fc-pregmod
  • 000-250-006/fc-pregmod
  • rewrica/fc-pregmod
  • Stuffedgame/fc-pregmod
  • wisepants314/fc-pregmod
  • fcanon/fc-pregmod
  • randomanon1/pregmod-mod-cyberfurry
  • teddy.buckland/fc-pregmod
  • farsinian_591b7a2d8b49d/fc-pregmod
  • FCShotadev/fc-pregmod
  • uselessartifact/fc-pregmod
  • irina_90/fc-pregmod
  • thaumx/fc-pregmod
  • MouseOfLight/fc-pregmod
  • empresssela/fc-pregmod
  • MasterAaran/fc-pregmod
  • ishy/fc-pregmod
  • psychofox/fc-pregmod
  • shadomancer/fc-pregmod
  • tycrakgg/fc-pregmod
  • azktaawc/fc-pregmod
  • andonno07/fc-pregmod
  • Onithyr/fc-pregmod
  • redneck987.jl/fc-pregmod
  • Farseeker/fc-pregmod
  • milliarc/fc-pregmod
  • BeefimusMaximus/fc-pregmod
  • magicknight79/fc-pregmod
  • hexall90/fc-pregmod
  • cantworkforever/fc-pregmod
  • jc052005/fc-pregmod
  • klorpa/fc-pregmod
  • doku/fc-pregmod
  • samhradh/fc-pregmod
  • scientist/fc-pregmod
  • albania420/fc-pregmod
  • Editoranon/fc-pregmod
  • Anony/fc-pregmod
  • deimios666/fc-pregmod
  • IvoHoe/fc-pregmod
  • bitty/fc-pregmod
  • RealAnon1800/fc-pregmod
  • brankirk/fc-pregmod
  • Amygdalan/fc-pregmod
  • DankWolf/fc-pregmod
  • Supot1951/fc-pregmod
  • bcy603/fc-pregmod
  • pwfxjpuv/fc-pregmod
  • ThreadAnon/fc-pregmod
  • Anon1800/fc-pregmod
  • Echoart/fc-pregmod
  • Dingotush/fc-pregmod
  • anonman/fc-pregmod
  • Arkerthan/fc-pregmod
  • svornost/fc-pregmod
  • wierdwierdos/fc-pregmod
  • wetwareAnon/fc-pregmod
  • QuartzHat/fc-pregmod
  • IchthysdeKilt/fc-pregmod
  • AnonAnonFC/fc-pregmod
  • Alexsis/fc-pregmod
  • LoyalTreeWP/fc-pregmod
  • aerialace/fc-pregmod
  • NurseryAnon/fc-pregmod
  • drakeashordcataclysm/fc-pregmod
  • AshVaris/fc-pregmod
  • purely0nothing/fc-pregmod
  • alex2011/fc-pregmod
  • Lindontree/fc-pregmod
  • FCaa/fc-pregmod
  • TR-8R/fc-pregmod
  • Jones/fc-pregmod
  • brr99/fc-pregmod
  • WriteAnon101/fc-pregmod
  • Drosil/fc-pregmod
  • Bob1221/fc-pregmod
  • vas/fc-pregmod
  • gitgud.user.937/fc-pregmod
  • D-K/fc-pregmod
  • AnonDev/fc-pregmod
  • madman23456/fc-pregmod
  • InarusLynx/fc-pregmod
  • Sonofrevvan/fc-pregmod
  • Randoisrando/fc-pregmod
  • cheez94/fc-pregmod
  • dldldl/fc-pregmod
  • alice321/fc-pregmod
  • Alexei91/fc-pregmod
  • darkcy/fc-pregmod
  • MapleMAD/fc-pregmod
  • pillarofsalt/fc-pregmod
  • vultureangels/fc-pregmod
  • kernel/fc-pregmod
  • nooneman/fc-pregmod
  • deepmurk/fc-pregmod
  • uglybead/fc-pregmod
  • lemongrab/fc-pregmod
  • temperence-chan/fc-pregmod
  • hcommenter/fc-pregmod
  • SpedeMemerson/fc-pregmod
  • qwijqwsf/fc-pregmod
  • BuDClow/fc-pregmod
  • HiveBro/fc-pregmod
  • shoku/fc-pregmod
  • ezsh/fc-pregmod
  • Blank/fc-pregmod
  • randoralcissian/fc-pregmod
  • benito92/fc-pregmod
  • balakart/fc-pregmod
  • wedonotsaw/fc-pregmod
  • Cayleth/fc-pregmod
  • Khip/fc-pregmod
  • Zfair/fc-pregmod
  • promethium/fc-pregmod
  • scyne/fc-pregmod
  • ZZC/fc-pregmod
  • SilverJanine/fc-pregmod
  • joxosix654email-9.co/fc-pregmod
  • Littlefootlittleguy/fc-pregmod
  • FelipeBA/fc-pregmod
  • bigtiddygothbf/fc-pregmod
  • Qotsafan/fc-pregmod
  • Zachpocalypse/fc-pregmod
  • milkanon66/fc-pregmod
  • GreGGoZZ/fc-pregmod
  • drsnarf86/fc-pregmod
  • valen102938/fc-pregmod
  • pregspammer/fc-pregmod
  • ponderin94/fc-pregmod
  • nook/fc-pregmod
  • carnifex34/fc-pregmod-mod-carni
  • SyntheticHigh/fc-pregmod
  • bob112211/fc-pregmod
  • amomynous0/fc-pregmod
  • oxone/fc-pregmod
  • MaxEuwe/fc-pregmod
  • nekoanon/fc-pregmod
  • preglocke/fc-pregmod
  • valen10293847/fc-pregmod
  • 2hu4u/fc-pregmod
  • mayibrad/fc-pregmod
  • Screm/fc-pregmod
  • Ansopedi/fc-pregmod
  • mrchaosbones/fc-pregmod
  • putrid/fc-pregmod
  • Kinnerman/fc-pregmod
  • gungrave1155/fc-pregmod
  • prndev/fc-pregmod
  • weresmilodon/fc-pregmod
  • auxxigobin/fc-pregmod
  • alice-chan/fc-pregmod
  • wigglie/fc-pregmod
  • jrliltfgb/fc-pregmod
  • Lord.alek.shade/fc-pregmod
  • truetailthesquire/fc-pregmod
  • lowercasedonkey/fc-pregmod
  • alice-chan9/fc-pregmod
  • eroglyphics/fc-pregmod
  • taliyent/fc-pregmod
  • zenzombie90/fc-pregmod
  • kjarik/fc-pregmod
  • wriggler/fc-pregmod
  • midnightblue/fc-pregmod
  • faraen/fc-pregmod
  • sigurd.cole/fc-pregmod
  • FCbuganon/fc-pregmod
  • kidkinster/fc-pregmod
  • Kar_Dragon/fc-pregmod
  • Zhafier/fc-pregmod
  • crcaretti/fc-pregmod
  • anond/fc-pregmod
  • tempmania/fc-pregmod
  • Dhanze/fc-pregmod
  • EstaUnCachucha/fc-pregmod
  • oniAnon/fc-pregmod
  • plebian/fc-pregmod
  • maxd569/fc-pregmod
  • Levarn/fc-pregmod
  • pumpkinspice/fc-pregmod
  • GammaXai/fc-pregmod
  • DanBackslide/fc-pregmod
  • i107760/fc-pregmod
  • Absimiliard/fc-pregmod
  • AmbrosiaCheesecake/fc-pregmod
  • fuguer/fc-pregmod
  • Azurel/fc-pregmod
  • Fake_Dev/fc-pregmod
  • ddongsanda/fc-pregmod
  • Combine456/fc-pregmod
  • UnwrappedGodiva/fc-pregmod
  • toyRuberDucky/fc-pregmod
  • zmobie/fc-pregmod
  • chuongk/fc-pregmod
  • BigWalnuts/fc-pregmod
  • Birdstrike/fc-pregmod
  • r3d/fc-pregmod
  • mawspa/fc-pregmod
  • sushila/fc-pregmod
  • DeathShip/fc-pregmod
  • eggrollsandwich/fc-pregmod
  • krayken/fc-pregmod
  • Reman/fc-pregmod
  • dwiafgts/fc-pregmod
  • jort93/fc-pregmod
  • teruterubouzu/fc-pregmod
  • flut/fc-pregmod
  • john-normal/fc-pregmod
  • Jonathan2405/fc-pregmod
  • Tyrgalon/fc-pregmod
  • NovX/fc-pregmod
  • Star1/fc-pregmod
  • Transhumanist01/fc-pregmod
  • m1017242/fc-pregmod
  • Rizal98798/fc-pregmod
  • jamezu369/fc-pregmod
  • thisisawittyname/fc-pregmod
  • KnightBoulegard/fc-pregmod
  • jblack/fc-pregmod
  • Souldrainr/fc-pregmod
  • torbjornhub/fc-pregmod
  • turnop/fc-pregmod
  • breadedpigeon/fc-pregmod
  • fire.maker/fc-pregmod
  • Inahaze/fc-pregmod
  • Waerjak/fc-pregmod
  • Trashman1138/fc-pregmod
  • supanintendo/fc-pregmod
  • _no0neman/fc-pregmod
  • Weslo/fc-pregmod
  • qw89/fc-pregmod
  • EvilDruid/fc-pregmod
  • dt25/fc-pregmod
  • Raou/fc-pregmod
  • DDouFu/fc-pregmod
  • Mauno/fc-pregmod
  • PandemoniumPenguin/fc-pregmod
  • AngelPuppet/fc-pregmod
  • DasUser79/fc-pregmod
  • Keaeag3s/fc-pregmod
  • HazeHazeHaze/fc-pregmod
  • hpotato/fc-pregmod
  • owouchthatbloodyhurt/fc-pregmod
  • v7Silent/fc-pregmod
  • nickylass/fc-pregmod
  • ThePrimer/fc-pregmod
  • PineCone/fc-pregmod
  • bruhmomentum17/fc-pregmod
  • CheatDude/fc-pregmod
  • synnove/fc-pregmod
  • en_bees/fc-pregmod
  • seronis/fc-pregmod
  • Nepidinepnep/fc-pregmod
  • Titanninja/fc-pregmod
  • Elohiem/fc-pregmod
  • cocoajazz/fc-pregmod
  • tfwncagf/fc-pregmod
  • ChunkyMonke/fc-pregmod
  • Dracoman671/fc-pregmod
  • jgl/fc-pregmod
  • Inev/fc-pregmod
  • jbige/fc-pregmod
  • MonsterMate/fc-pregmod
  • Konstantin6961/fc-pregmod
  • darth_ashi/fc-pregmod
  • shinx/fc-pregmod
  • Anu/fc-pregmod
  • Greytide/fc-pregmod
  • Bonafidemetal/fc-pregmod
  • Peje/fc-pregmod
  • Hexfy98/fc-pregmod
  • TooSlow/fc-pregmod
  • SoGu/fc-pregmod
  • CloudyCoffee/fc-pregmod
  • Welptard/fc-pregmod
  • Ploc/fc-pregmod-ploc
  • rain-/fc-pregmod
  • Pecanus/fc-pregmod
  • Jhortrax/fc-pregmod
  • valleytwo/fc-pregmod
  • QCmd/fc-pregmod
  • kung-wada/fc-pregmod
  • LolGaye/fc-pregmod
  • Exspiravit1/fc-pregmod
  • jadeddog/fc-pregmod
  • buster-scruggs/fs-antebellum-revivalism
  • policia123/fc-pregmod
  • evrgentesee/fc-pregmod
  • rko127/fc-pregmod
  • ExcalGrip12/fc-pregmod
  • BlackAion/fc-pregmod
  • Boss2020/fc-pregmod
  • Lawled/fc-pregmod
  • shiro/fc-pregmod
  • Skavenkeri/fc-pregmod
  • PooPooDooDooHead/fc-pregmod
  • Dugee/fc-pregmod
  • Portal124/fc-pregmod-vore
  • Fekenol/fc-pregmod
  • elGuapo/fc-pregmod
  • KelioSteel/fc-pregmod
  • sldlddk/fc-pregmod
  • lumepanter/fc-pregmod
  • ryuhana/fc-pregmod
  • Nene1009yb/fc-pregmod
  • DontAskDontTell/fc-pregmod-extra-events
  • Dulgi/fc-pregmod
  • Jate/fc-pregmod
  • percy365/fc-pregmod
  • franklygeorge/fc-pregmod
  • Dragneel117/fc-pregmod
  • vl96/fc-pregmod
  • Gorlom/fc-economicmod
  • NotAlive/fc-pregmod
  • Heretek/fc-pregmod
  • joeshmo828282/fc-pregmod
  • deswes/fc-pregmod
  • Nanana21/fc-pregmod
  • Gbr6/fc-pregmod
  • RandomNecro/fc-pregmod
  • Trinidad/fc-pregmod
  • anonymousey/fc-pregmod
  • macaronideath/fc-pregmod
  • fcbleh/fc-pregmod
  • jk3000/fc-pregmod
  • Akane/fc-pregmod
  • TheBoi/fc-pregmod
  • Sheenariel/fc-pregmod
  • Metapod/multi-custom
  • Banyanael/fc-pregmod
  • frogge/fc-pregmod
  • idkkk12385/fc-pregmod
  • Mirarara/fc-pregmod
  • DeaDa/fc-pregmod-thedeal
  • CobraCommander/fc-pregmod
  • bicobus/fc-pregmod
  • CardcaptorRLH85/fc-pregmod
  • temp-ui-start/fc-pregmod
  • PresidentConvert/fc-pregmod
  • delizious/fc-pregmod
  • Ducati/fc-pregmod
  • DerangedLoner/fc-pregmod-development-fork
  • ProjectVictory/fc-pregmod
  • forecastle/fc-pregmod
  • Apathy/fc-pregmod
  • indf/fc-pregmod-dev
  • GavAndAlt/fc-pregmod
  • hagamablabla/fc-pregmod
  • Alaco/fc-pregmod
  • DCoded/fc-pregmod
  • LittlePlague/fc-pregmod
  • MissOnahole/fc-pregmod
  • ishy2317/fc-pregmod
  • nielkazama/fc-pregmod
  • Phobos/fc-pregmod
  • kraster/fc-pregmod
  • JasWS/fc-pregmod
  • FelixJS/fc-pregmod
  • NCherfaoui/fc-pregmod
  • MidnightMoose/fc-pregmod
  • jjjjjj/fc-pregmod
  • Cl0ver/fc-pregmod
  • Pythoniqus/fc-pregmod
  • JohnMolotov/fc-pregmod
  • anonymouspregmodder/fc-pregmod-anonymouspregmodder
  • Fanatey/fc-pregmod
  • Mizako/fc-pregmod
  • Nithhogg/fc-pregmod
  • Bluecoffee/fc-pregmod
380 results
Show changes
Showing
with 6399 additions and 3805 deletions
#!/usr/bin/env python3
'''
"""
Application for splitting groups from one SVG file into separate files
Usage:
......@@ -8,112 +8,128 @@ python3 vector_layer_split.py infile format outdir
Usage Example:
python3 vector_layer_split.py vector_source.svg tw ../src/art/vector/layers/
'''
"""
import lxml.etree as etree
import sys
import os
import argparse
import copy
import os
import re
import inkscape_svg_fixup
input_file = sys.argv[1]
output_format = sys.argv[2]
output_directory = sys.argv[3]
import lxml.etree as etree
import normalize_svg
import svg_split_utils
parser = argparse.ArgumentParser(
description='Application for splitting groups from one SVG file into separate files.')
parser.add_argument('-o', '--output', dest='output_dir', required=True,
help='output directory')
parser.add_argument('-f', '--format', dest='output_format',
choices=['svg', 'tw'], default='svg', help='output format.')
parser.add_argument('-p', '--prefix', dest='prefix', default='',
help='Prepend this string to result file names')
parser.add_argument('input_file', metavar='FILENAME', nargs='+',
help='Input SVG file with layers')
args = parser.parse_args()
output_format = args.output_format
output_directory = args.output_dir
def split_file(input_file):
tree = etree.parse(input_file)
normalize_svg.fix(tree)
ns = {
'svg': 'http://www.w3.org/2000/svg',
'inkscape': 'http://www.inkscape.org/namespaces/inkscape',
'sodipodi': "http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd",
}
# strip undesired editor attributes from the tree
etree.strip_attributes(tree, f"{{{ns['inkscape']}}}*", f"{{{ns['sodipodi']}}}*");
# prepare output template
template = copy.deepcopy(tree)
root = template.getroot()
# remove all svg root attributes except document size
for a in root.attrib:
if a != "viewBox":
del root.attrib[a]
# remove all content, including metadata
# for twine output, style definitions are removed, too
defs = None
for e in root:
if e.tag == etree.QName(ns['svg'], 'defs'):
defs = e
if (e.tag == etree.QName(ns['svg'], 'g') or
e.tag == etree.QName(ns['svg'], 'metadata') or
e.tag == etree.QName(ns['svg'], 'defs') or
e.tag == etree.QName(ns['sodipodi'], 'namedview') or
(output_format == 'tw' and e.tag == etree.QName(ns['svg'], 'style'))
):
root.remove(e)
# template preparation finished
# prepare regex for later use
regex_xmlns = re.compile(' xmlns[^ ]+')
regex_space = re.compile(r'[>]\s+[<]')
# find all groups
layers = tree.xpath('//svg:g', namespaces=ns)
for layer in layers:
i = layer.get('id')
if ( # disregard non-content groups
i.endswith("_") or # manually suppressed with underscore
i.startswith("XMLID") or # Illustrator generated group
i.startswith("g") # Inkscape generated group
):
continue
# create new canvas
output = copy.deepcopy(template)
# copy all shapes into template
canvas = output.getroot()
for e in layer:
canvas.append(e)
# represent template as SVG (binary string)
svg = etree.tostring(output, pretty_print=False)
# poor man's conditional defs insertion
# TODO: extract only referenced defs (filters, gradients, ...)
# TODO: detect necessity by traversing the elements. do not stupidly search in the string representation
if "filter:" in svg.decode('utf-8'):
# it seems there is a filter referenced in the generated SVG, re-insert defs from main document
canvas.insert(0, defs)
# re-generate output
svg = etree.tostring(output, pretty_print=False)
if output_format == 'tw':
# remove unnecessary attributes
# TODO: never generate unnecessary attributes in the first place
svg = svg.decode('utf-8')
svg = regex_xmlns.sub('', svg)
svg = svg.replace('\n', '').replace('\r', '') # print cannot be multi-line
svg = regex_space.sub('><', svg) # remove indentation
svg = svg.replace('svg:', '') # svg namespace was removed
if "Boob" in i: # internal groups are used for scaling
svg = svg.replace('<g ', '<g data-transform="boob" ') # boob art uses the boob scaling
elif "Belly" in i:
svg = svg.replace('<g ', '<g data-transform="belly" ') # belly art uses the belly scaling
elif "Balls" in i:
svg = svg.replace('<g ', '<g data-transform="balls" ') # balls art uses the balls scaling
else:
svg = svg.replace('<g ', '<g data-transform="art" ') # otherwise use default scaling
if not svg.endswith(os.linesep):
svg += os.linesep
svg = svg.encode('utf-8')
# save SVG string to file
svg_split_utils.save(layer, args.prefix, output_directory, output_format, svg)
if not os.path.exists(output_directory):
os.makedirs(output_directory)
ns = {
'svg' : 'http://www.w3.org/2000/svg',
'inkscape' : 'http://www.inkscape.org/namespaces/inkscape',
'sodipodi':"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd",
}
tree = etree.parse(input_file)
inkscape_svg_fixup.fix(tree)
# prepare output template
template = copy.deepcopy(tree)
root = template.getroot()
# remove all svg root attributes except document size
for a in root.attrib:
if (a != "viewBox"):
del root.attrib[a]
# add placeholder for CSS class (needed for workaround for non HTML 5.1 compliant browser)
if output_format == 'tw':
root.attrib["class"] = "'+_art_display_class+'"
# remove all content, including metadata
# for twine output, style definitions are removed, too
defs = None
for e in root:
if (e.tag == etree.QName(ns['svg'], 'defs')):
defs = e
if (e.tag == etree.QName(ns['svg'], 'g') or
e.tag == etree.QName(ns['svg'], 'metadata') or
e.tag == etree.QName(ns['svg'], 'defs') or
e.tag == etree.QName(ns['sodipodi'], 'namedview') or
(output_format == 'tw' and e.tag == etree.QName(ns['svg'], 'style'))
):
root.remove(e)
# template preparation finished
# prepare regex for later use
regex_xmlns = re.compile(' xmlns[^ ]+',)
regex_space = re.compile('[>][ ]+[<]',)
# find all groups
layers = tree.xpath('//svg:g',namespaces=ns)
for layer in layers:
i = layer.get('id')
if ( # disregard non-content groups
i.endswith("_") or # manually suppressed with underscore
i.startswith("XMLID") or # Illustrator generated group
i.startswith("g") # Inkscape generated group
):
continue
# create new canvas
output = copy.deepcopy(template)
# copy all shapes into template
canvas = output.getroot()
for e in layer:
canvas.append(e)
# represent template as SVG (binary string)
svg = etree.tostring(output, pretty_print=False)
# poor man's conditional defs insertion
# TODO: extract only referenced defs (filters, gradients, ...)
# TODO: detect necessity by traversing the elements. do not stupidly search in the string representation
if ("filter:" in svg.decode('utf-8')):
# it seems there is a filter referenced in the generated SVG, re-insert defs from main document
canvas.insert(0,defs)
# re-generate output
svg = etree.tostring(output, pretty_print=False)
if (output_format == 'tw'):
# remove unnecessary attributes
# TODO: never generate unnecessary attributes in the first place
svg = svg.decode('utf-8')
svg = regex_xmlns.sub('',svg)
svg = svg.replace(' inkscape:connector-curvature="0"','') # this just saves space
svg = svg.replace('\n','').replace('\r','') # print cannot be multi-line
svg = regex_space.sub('><',svg) # remove indentaion
svg = svg.replace('svg:','') # svg namespace was removed
svg = svg.replace('<g ','<g transform="\'+_art_transform+\'"') # internal groups are used for scaling
svg = svg.encode('utf-8')
# save SVG string to file
i = layer.get('id')
output_path = os.path.join(output_directory,i+'.'+output_format)
with open(output_path, 'wb') as f:
if (output_format == 'svg'):
# Header for normal SVG (XML)
f.write('<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'.encode("utf-8"))
f.write(svg)
elif (output_format == 'tw'):
# Header for SVG in Twine file (SugarCube print statement)
f.write((':: Art_Vector_%s [nobr]\n\n'%(i)).encode("utf-8"))
f.write("<<print '<html>".encode("utf-8"))
f.write(svg)
f.write("</html>' >>".encode("utf-8"))
for f in args.input_file:
split_file(f)
#!/usr/bin/env python3
"""
Application for splitting groups from one SVG file into separate files
Usage:
python3 vector_layer_split.py infile format outdir
Usage Example:
python3 vector_layer_split.py vector_source.svg tw ../src/art/vector/layers/
"""
import argparse
import copy
import os
import re
import lxml.etree as etree
import normalize_svg
from lxml.etree import XMLParser, parse
import svg_split_utils
parser = argparse.ArgumentParser(
description='Application for splitting groups from one SVG file into separate files.')
parser.add_argument('-o', '--output', dest='output_dir', required=True,
help='output directory')
parser.add_argument('-f', '--format', dest='output_format',
choices=['svg', 'tw'], default='svg', help='output format.')
parser.add_argument('-p', '--prefix', dest='prefix', default='',
help='Prepend this string to result file names')
parser.add_argument('input_file', metavar='FILENAME', nargs=1,
help='Input SVG file with layers')
args = parser.parse_args()
output_format = args.output_format
output_directory = args.output_dir
input_file = args.input_file[0]
if not os.path.exists(output_directory):
os.makedirs(output_directory)
ns = {
'svg': 'http://www.w3.org/2000/svg',
'inkscape': 'http://www.inkscape.org/namespaces/inkscape',
'sodipodi': "http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd",
}
p = XMLParser(huge_tree=True)
tree = parse(input_file, parser=p)
normalize_svg.fix(tree)
# strip undesired editor attributes from the tree
etree.strip_attributes(tree, f"{{{ns['inkscape']}}}*", f"{{{ns['sodipodi']}}}*")
# prepare output template
template = copy.deepcopy(tree)
root = template.getroot()
# remove all svg root attributes except document size
for a in root.attrib:
if a != "viewBox":
del root.attrib[a]
# remove all content, including metadata
# for twine output, style definitions are removed, too
defs = None
for e in root:
if e.tag == etree.QName(ns['svg'], 'defs'):
defs = e
if (e.tag == etree.QName(ns['svg'], 'g') or
e.tag == etree.QName(ns['svg'], 'metadata') or
e.tag == etree.QName(ns['svg'], 'defs') or
e.tag == etree.QName(ns['sodipodi'], 'namedview') or
(output_format == 'tw' and e.tag == etree.QName(ns['svg'], 'style'))
):
root.remove(e)
# template preparation finished
# prepare regex for later use
regex_xmlns = re.compile(' xmlns[^ ]+')
regex_space = re.compile(r'[>]\s+[<]')
# create dict with all needed definitions
gra_dict = {}
for gra in defs:
if (gra.tag == etree.QName(ns['svg'], 'linearGradient') or
gra.tag == etree.QName(ns['svg'], 'radialGradient') or
gra.tag == etree.QName(ns['svg'], 'clipPath') or
gra.tag == etree.QName(ns['svg'], 'mask') or
gra.tag == etree.QName(ns['svg'], 'filter')):
gra_id = gra.get('id')
gra = etree.tostring(gra, pretty_print=False)
gra = gra.decode('utf-8')
gra_dict[gra_id] = gra
# find all groups
layers = tree.xpath('//svg:g', namespaces=ns)
for layer in layers:
i = layer.get('id')
if ( # disregard non-content groups
i.endswith("_") or # manually suppressed with underscore
i.startswith("XMLID") or # Illustrator generated group
i.startswith("g") # Inkscape generated group
):
continue
# create new canvas
output = copy.deepcopy(template)
# copy all shapes into template
canvas = output.getroot()
for e in layer:
canvas.append(e)
# represent template as SVG (binary string)
svg = etree.tostring(output, pretty_print=False)
# replace <use> with the referenced object
# this is a very poor way to do it. A more elegant way would be to insert
# referenced object in the <def> part of the file, but then the colors of
# objects with a class definition will not be changed.
# As a substitute the <use> is overwritten with the object.
# THIS WILL REMOVE ANY MODIFICATIONS (movement, clip-paths, etc.)
# To prevent this the cloned object should be put into a group, and changes
# made to the group.
# TODO: If colors can be changed based on class in defs - put reference in defs instead
if "<svg:use" in svg.decode('utf-8'):
# get a reference map
output_map = {c: p for p in canvas.iter() for c in p}
# find use elements
for elem in list(canvas.xpath('//svg:use', namespaces=ns)):
# get referenced id
def_id = elem.get('{http://www.w3.org/1999/xlink}href')
def_id = def_id[1:]
# loop through all layers to find the referenced element
def_orig = None
for def_l in layers:
for e in (e for e in def_l if e.get('id') == def_id):
def_orig = copy.deepcopy(e)
if def_orig is not None:
break
parent_index = list(output_map).index(elem)
output_map[elem].remove(elem)
output_map[elem].insert(parent_index, def_orig)
# Update svg
svg = etree.tostring(output, pretty_print=False)
# Conditional defs insertion - only inserts the needed defs
svg_dec = svg.decode('utf-8')
if any(x in svg_dec for x in ["filter", "Gradient", "mask=", "clip-path="]):
moreDefsNeeded = True
gra_str = '<defs>'
while moreDefsNeeded:
moreDefsNeeded = False
s = svg.decode('utf-8')
for key in gra_dict.keys():
if ('#' + key in s or '#' + key in gra_str) and 'id="' + key not in gra_str:
moreDefsNeeded = True
gra_str += gra_dict[key]
gra_str += '</defs>'
canvas.insert(0, etree.fromstring(gra_str))
# re-generate output
svg = etree.tostring(output, pretty_print=False)
if output_format == 'tw':
# remove unnecessary attributes
# TODO: never generate unnecessary attributes in the first place
svg = svg.decode('utf-8')
svg = regex_xmlns.sub('', svg)
svg = svg.replace('\n', '').replace('\r', '') # print cannot be multi-line
svg = regex_space.sub('><', svg) # remove indentation
svg = svg.replace('svg:', '') # svg namespace was removed
if not svg.endswith(os.linesep):
svg += os.linesep
svg = svg.encode('utf-8')
# save SVG string to file
svg_split_utils.save(layer, args.prefix, output_directory, output_format, svg)
Source diff could not be displayed: it is too large. Options to address this: view the blob.
Source diff could not be displayed: it is too large. Options to address this: view the blob.
<html>
<head>
<script> let App = {}; App.Art = {}; </script>
<script src="../bin/resources/webgl/scene1/scene1.js" type="text/javascript"> </script>
<script src="../src/art/webgl/engine.js" type="text/javascript"> </script>
<style>
html, body {
margin: 0;
padding: 0;
background-color: #E6E6FA;
}
#glcanvas {
float: left;
background-color: #000000;
}
.horizontal{
display: flex;
align-items: center;
justify-content: space-evenly;
border: 2px solid red;
width:fit-content;
height: 40px;
}
.forms{
flex: 1;
margin: 0px;
display: flex;
align-items: center;
justify-content: space-evenly;
}
.slider {
-webkit-appearance: none;
flex: auto;
height: 25px;
width: 120px;
margin: 0px;
background: #d3d3d3;
outline: none;
opacity: 0.7;
}
.slider:hover {
opacity: 1;
}
.slider::-webkit-slider-thumb {
-webkit-appearance: none;
width: 25px;
height: 25px;
background: rgb(8, 77, 156);
cursor: pointer;
}
.output{
width: 35px;
}
.textbox{
width: 120px;
padding: 0px;
}
.label{
width: 50px;
}
</style>
</head>
<body>
<canvas id="glcanvas" width="600px" height="750px"></canvas>
<p>Display</p>
<div class="horizontal">
<label style="width: 50px;">Fps</label>
<output class="output" id="fps"></output>
</div>
<div class="horizontal">
<label style="width: 60px;">rWidth</label>
<input class="textbox" type="text" id="rwidth" onchange="sceneParams.settings.rwidth = parseInt(this.value);">
<output class="output"></output>
<label style="width: 60px;">rHeight</label>
<input class="textbox" type="text" id="rheight" onchange="sceneParams.settings.rheight = parseInt(this.value);">
<output class="output"></output>
</div>
<div class="horizontal">
<label style="width: 75px;">Normals</label>
<input type="checkbox" id="normals" onchange="sceneParams.settings.normals = this.checked;">
<output class="output"></output>
<label style="width: 75px;">Ambient</label>
<input type="checkbox" id="ambient" onchange="sceneParams.settings.ambient = this.checked;">
<output class="output"></output>
<label style="width: 75px;">Diffuse</label>
<input type="checkbox" id="diffuse" onchange="sceneParams.settings.diffuse = this.checked;">
<output class="output"></output>
<label style="width: 75px;">Specular</label>
<input type="checkbox" id="specular" onchange="sceneParams.settings.specular = this.checked;">
<output class="output"></output>
</div>
<div class="horizontal">
<label style="width: 75px;">Normal</label>
<input type="checkbox" id="normal" onchange="sceneParams.settings.normal = this.checked;">
<output class="output"></output>
<label style="width: 75px;">Emission</label>
<input type="checkbox" id="emission" onchange="sceneParams.settings.emission = this.checked;">
<output class="output"></output>
<label style="width: 75px;">Alpha</label>
<input type="checkbox" id="alpha" onchange="sceneParams.settings.alpha = this.checked;">
<output class="output"></output>
<label style="width: 75px;">BackG</label>
<input type="checkbox" id="background" onchange="sceneParams.background.visible = this.checked;">
<output class="output"></output>
</div>
<p>Tonemapping</p>
<div class="horizontal">
<label style="width: 75px;">Rein</label>
<input class="textbox" type="text" id="whiteM" onchange="sceneParams.settings.whiteM = parseFloat(this.value);">
<input type="checkbox" id="reinhard" onchange="sceneParams.settings.reinhard = this.checked;">
<label style="width: 75px;">Gamma</label>
<input class="textbox" type="text" id="gammaY" onchange="sceneParams.settings.gammaY = parseFloat(this.value);">
<input type="checkbox" id="gamma" onchange="sceneParams.settings.gamma = this.checked;">
</div>
<p>Camera</p>
<div class="horizontal">
<label class="label">X</label>
<input class="textbox" type="text" id="cam_x" onchange="sceneParams.camera.x = parseFloat(this.value);">
<output class="output"></output>
<label class="label">Y</label>
<input class="textbox" type="text" id="cam_y" onchange="sceneParams.camera.y = parseFloat(this.value);">
<output class="output"></output>
<label class="label">Z</label>
<input class="textbox" type="text" id="cam_z" onchange="sceneParams.camera.z = parseFloat(this.value);">
<output class="output"></output>
</div>
<div class="horizontal">
<form class="forms">
<label class="label">XR</label>
<input class="slider" type="range" id="cam_xr" min="-180" max="180" oninput="cam_xr_out.value = cam_xr.value; sceneParams.camera.xr = parseFloat(this.value);">
<output class="output" id="cam_xr_out"></output>
</form>
<form class="forms">
<label class="label">YR</label>
<input class="slider" type="range" id="cam_yr" min="-180" max="180" oninput="cam_yr_out.value = cam_yr.value; sceneParams.camera.yr = parseFloat(this.value);">
<output class="output" id="cam_yr_out"></output>
</form>
<form class="forms">
<label class="label">ZR</label>
<input class="slider" type="range" id="cam_zr" min="-180" max="180" oninput="cam_zr_out.value = cam_zr.value; sceneParams.camera.zr = parseFloat(this.value);">
<output class="output" id="cam_zr_out"></output>
</form>
</div>
<div class="horizontal">
<label class="label">Fnear</label>
<input class="textbox" type="text" id="cam_fnear" onchange="sceneParams.camera.fnear = this.value">
<output class="output"></output>
<label class="label">Ffar</label>
<input class="textbox" type="text" id="cam_ffar" onchange="sceneParams.camera.ffar = this.value">
<output class="output"></output>
<form class="forms">
<label class="label">FOV</label>
<input class="slider" type="range" id="cam_fov" min="1" max="180" oninput="cam_fov_out.value = cam_fov.value; sceneParams.camera.fov = parseFloat(this.value);">
<output class="output" id="cam_fov_out"></output>
</form>
</div>
<p>DirectionalLight</p>
<div class="horizontal">
<form class="forms">
<label class="label">XR</label>
<input class="slider" type="range" id="light_xr" min="-90" max="90" oninput="light_xr_out.value = light_xr.value; sceneParams.directionalLights[0].xr = parseFloat(this.value);">
<output class="output" id="light_xr_out"></output>
</form>
<form class="forms">
<label class="label">YR</label>
<input class="slider" type="range" id="light_yr" min="-90" max="90" oninput="light_yr_out.value = light_yr.value; sceneParams.directionalLights[0].yr = parseFloat(this.value);">
<output class="output" id="light_yr_out"></output>
</form>
</div>
<div class="horizontal">
<form class="forms">
<label class="label">Int</label>
<input class="slider" type="range" id="light_int" min="0" max="3" step="0.05" oninput="light_int_out.value = light_int.value; sceneParams.directionalLights[0].intensity = parseFloat(this.value);">
<output class="output" id="light_int_out"></output>
</form>
<form class="forms">
<label class="label">Amb</label>
<input class="slider" type="range" id="light_amb" min="0" max="1" step="0.01" oninput="light_amb_out.value = light_amb.value; sceneParams.directionalLights[0].ambient = parseFloat(this.value);">
<output class="output" id="light_amb_out"></output>
</form>
<label class="label">Color</label>
<input class="textbox" type="color" id="light_color" onchange="sceneParams.directionalLights[0].color = hexToRgb(this.value)">
<output class="output"></output>
</div>
<p>PointLight</p>
<div class="horizontal">
<label class="label">X</label>
<input class="textbox" type="text" id="point_light_x" onchange="sceneParams.pointLights[0].x = parseFloat(this.value);">
<output class="output"></output>
<label class="label">Y</label>
<input class="textbox" type="text" id="point_light_y" onchange="sceneParams.pointLights[0].y = parseFloat(this.value);">
<output class="output"></output>
<label class="label">Z</label>
<input class="textbox" type="text" id="point_light_z" onchange="sceneParams.pointLights[0].z = parseFloat(this.value);">
<output class="output"></output>
</div>
<div class="horizontal">
<form class="forms">
<label class="label">Int</label>
<input class="slider" type="range" id="point_light_int" min="0" max="3" step="0.05" oninput="point_light_int_out.value = point_light_int.value; sceneParams.pointLights[0].intensity = parseFloat(this.value);">
<output class="output" id="point_light_int_out"></output>
</form>
<form class="forms">
<label class="label">Amb</label>
<input class="slider" type="range" id="point_light_amb" min="0" max="1" step="0.01" oninput="point_light_amb_out.value = point_light_amb.value; sceneParams.pointLights[0].ambient = parseFloat(this.value);">
<output class="output" id="point_light_amb_out"></output>
</form>
<label class="label">Color</label>
<input class="textbox" type="color" id="point_light_color" onchange="sceneParams.pointLights[0].color = hexToRgb(this.value)">
<output class="output"></output>
</div>
<p>Object</p>
<div class="horizontal">
<label class="label">X</label>
<input class="textbox" type="text" id="obj_x" onchange="sceneParams.models[0].transform.x = parseFloat(this.value);">
<output class="output"></output>
<label class="label">Y</label>
<input class="textbox" type="text" id="obj_y" onchange="sceneParams.models[0].transform.y = parseFloat(this.value);">
<output class="output"></output>
<label class="label">Z</label>
<input class="textbox" type="text" id="obj_z" onchange="sceneParams.models[0].transform.z = parseFloat(this.value);">
<output class="output"></output>
<label class="label">Scale</label>
<input class="textbox" type="text" id="obj_scale" onchange="sceneParams.models[0].transform.scale = parseFloat(this.value);">
<output class="output"></output>
</div>
<div class="horizontal">
<form class="forms">
<label class="label">XR</label>
<input class="slider" type="range" id="obj_xr" min="-180" max="180" oninput="obj_xr_out.value = obj_xr.value; sceneParams.transform.xr = parseFloat(this.value);">
<output class="output" id="obj_xr_out"></output>
</form>
<form class="forms">
<label class="label">YR</label>
<input class="slider" type="range" id="obj_yr" min="-180" max="180" oninput="obj_yr_out.value = obj_yr.value; sceneParams.transform.yr = parseFloat(this.value);">
<output class="output" id="obj_yr_out"></output>
</form>
<form class="forms">
<label class="label">ZR</label>
<input class="slider" type="range" id="obj_zr" min="-180" max="180" oninput="obj_zr_out.value = obj_zr.value; sceneParams.transform.zr = parseFloat(this.value);">
<output class="output" id="obj_zr_out"></output>
</form>
</div>
<p>Morphs</p>
<div id="morphs">
</div>
<script>
'use strict';
function rgbToHex(r, g, b) {
return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
}
function hexToRgb(hex) {
hex = hex.replace('#','');
let r = parseInt(hex.substring(0,2), 16);
let g = parseInt(hex.substring(2,4), 16);
let b = parseInt(hex.substring(4,6), 16);
return [r/255,g/255,b/255];
}
function updateElements() {
document.getElementById('rwidth').value = sceneParams.settings.rwidth;
document.getElementById('rheight').value = sceneParams.settings.rheight;
document.getElementById("fps").value = 0;
document.getElementById("normals").checked = sceneParams.settings.normals;
document.getElementById("ambient").checked = sceneParams.settings.ambient;
document.getElementById("diffuse").checked = sceneParams.settings.diffuse;
document.getElementById("specular").checked = sceneParams.settings.specular;
document.getElementById("emission").checked = sceneParams.settings.emission;
document.getElementById("normal").checked = sceneParams.settings.normal;
document.getElementById("alpha").checked = sceneParams.settings.alpha;
document.getElementById("background").value = sceneParams.background.visible;
document.getElementById("gamma").checked = sceneParams.settings.gamma;
document.getElementById("gammaY").value = sceneParams.settings.gammaY;
document.getElementById("reinhard").checked = sceneParams.settings.reinhard;
document.getElementById("whiteM").value = sceneParams.settings.whiteM;
document.getElementById("cam_x").value = sceneParams.camera.x;
document.getElementById("cam_y").value = sceneParams.camera.y;
document.getElementById("cam_z").value = sceneParams.camera.z;
document.getElementById("cam_xr").value = sceneParams.camera.xr;
document.getElementById("cam_xr_out").value = sceneParams.camera.xr;
document.getElementById("cam_yr").value = sceneParams.camera.yr;
document.getElementById("cam_yr_out").value = sceneParams.camera.yr;
document.getElementById("cam_zr").value = sceneParams.camera.zr;
document.getElementById("cam_zr_out").value = sceneParams.camera.zr;
document.getElementById("cam_fnear").value = sceneParams.camera.fnear;
document.getElementById("cam_ffar").value = sceneParams.camera.ffar;
document.getElementById("cam_fov").value = sceneParams.camera.fov;
document.getElementById("cam_fov_out").value = sceneParams.camera.fov;
document.getElementById("light_xr").value = sceneParams.directionalLights[0].xr;
document.getElementById("light_xr_out").value = sceneParams.directionalLights[0].xr;
document.getElementById("light_yr").value = sceneParams.directionalLights[0].yr;
document.getElementById("light_yr_out").value = sceneParams.directionalLights[0].yr;
document.getElementById("light_int").value = sceneParams.directionalLights[0].intensity;
document.getElementById("light_int_out").value = sceneParams.directionalLights[0].intensity;
document.getElementById("light_amb").value = sceneParams.directionalLights[0].ambient;
document.getElementById("light_amb_out").value = sceneParams.directionalLights[0].ambient;
document.getElementById("light_color").value = rgbToHex(sceneParams.directionalLights[0].color[0]*255, sceneParams.directionalLights[0].color[1]*255, sceneParams.directionalLights[0].color[2]*255);
document.getElementById("point_light_x").value = sceneParams.pointLights[0].x;
document.getElementById("point_light_y").value = sceneParams.pointLights[0].y;
document.getElementById("point_light_z").value = sceneParams.pointLights[0].z;
document.getElementById("point_light_int").value = sceneParams.pointLights[0].intensity;
document.getElementById("point_light_int_out").value = sceneParams.pointLights[0].intensity;
document.getElementById("point_light_amb").value = sceneParams.pointLights[0].ambient;
document.getElementById("point_light_amb_out").value = sceneParams.pointLights[0].ambient;
document.getElementById("point_light_color").value = rgbToHex(sceneParams.pointLights[0].color[0]*255, sceneParams.pointLights[0].color[1]*255, sceneParams.pointLights[0].color[2]*255);
document.getElementById("obj_x").value = sceneParams.models[0].transform.x;
document.getElementById("obj_y").value = sceneParams.models[0].transform.y;
document.getElementById("obj_z").value = sceneParams.models[0].transform.z;
document.getElementById("obj_scale").value = sceneParams.models[0].transform.scale;
document.getElementById("obj_xr").value = sceneParams.models[0].transform.xr;
document.getElementById("obj_xr_out").value = sceneParams.models[0].transform.xr;
document.getElementById("obj_yr").value = sceneParams.models[0].transform.yr;
document.getElementById("obj_yr_out").value = sceneParams.models[0].transform.yr;
document.getElementById("obj_zr").value = sceneParams.models[0].transform.zr;
document.getElementById("obj_zr_out").value = sceneParams.models[0].transform.zr;
}
function createMorphElements(){
let horizontal;
for (let i=0; i < sceneParams.models[0].morphs.length; i++) {
if ( i % 7 == 0) {
horizontal = document.createElement("label");
horizontal.setAttribute("class", "horizontal");
document.getElementById("morphs").appendChild(horizontal);
}
let label = document.createElement("label");
label.setAttribute("style", "width: 150px;");
let name = sceneParams.models[0].morphs[i].morphId;
let textnode = document.createTextNode(name);
label.appendChild(textnode);
horizontal.appendChild(label);
let textbox = document.createElement("input");
textbox.setAttribute("style", "width: 30px;");
textbox.setAttribute("type", "text");
textbox.setAttribute("id", "morph_" + name);
textbox.setAttribute("onchange", "sceneParams.models[0].morphs["+i+"].value = parseFloat(this.value);");
textbox.value = sceneParams.models[0].morphs[i].value;
horizontal.appendChild(textbox);
let output = document.createElement("output");
output.setAttribute("class", "output");
horizontal.appendChild(output);
}
}
const avg = arr => arr.reduce( ( p, c ) => p + c, 0 ) / arr.length;
function update(){
let t0 = performance.now();
engine.render(sceneParams, canvas);
requestAnimationFrame(update);
let t1 = performance.now();
fps.push((t1 - t0));
document.getElementById("fps").value = parseFloat(1/avg(fps)*1000).toFixed(0);
if (fps.length > 30) {
fps.shift();
}
}
// init
let fps = [];
let canvas = document.getElementById('glcanvas');
let sceneParams = App.Art.sceneGetParams();
let sceneData = App.Art.sceneGetData();
console.log(sceneParams);
let isDraggingCanvas = false;
canvas.onmousemove= function(e){
if(!isDraggingCanvas){return;}
e.preventDefault();
e.stopPropagation();
sceneParams.models[0].transform.y = sceneParams.models[0].transform.y - e.movementY/10;
sceneParams.models[0].transform.yr = sceneParams.models[0].transform.yr + e.movementX*5;
engine.render(sceneParams, canvas);
}
canvas.onmousedown= function(e){
e.preventDefault();
e.stopPropagation();
isDraggingCanvas=true;
}
canvas.onmouseup= function(e){
if(!isDraggingCanvas){return;}
e.preventDefault();
e.stopPropagation();
isDraggingCanvas=false;
}
canvas.onmouseout = function(e){
if(!isDraggingCanvas){return;}
e.preventDefault();
e.stopPropagation();
isDraggingCanvas=false;
}
canvas.onmousewheel = function(e){
sceneParams.camera.fov = sceneParams.camera.fov + e.deltaY/10;
if (sceneParams.camera.fov < 1)
sceneParams.camera.fov = 1;
if (sceneParams.camera.fov > 179)
sceneParams.camera.fov = 179;
engine.render(sceneParams, canvas);
return false;
}
createMorphElements();
updateElements();
let engine = new App.Art.Engine();
engine.bind(sceneData, sceneParams, "../bin/");
// loop
update();
</script>
</body>
</html>
\ No newline at end of file
# Ignore everything in this directory
*
# Except the following:
!.gitignore
!resources/vector/*
\ No newline at end of file
{
"dirs": {
"intermediate": "build",
"output": "bin",
"modOutput": "bin/mods"
},
"output": "FC_pregmod[extras].html",
"gitVersionFile": "src/002-config/fc-version.js.commitHash.js",
"sources": {
"module": {
"js": ["js/**/*.js"],
"css": ["css/**/*.css"]
},
"story": {
"js": ["src/**/*.js"],
"css": ["src/**/*.css"],
"twee": ["src/**/*.tw"],
"media": [
"src/art/map",
"src/art/vector/layers/",
"src/art/vector_revamp/layers/"
]
},
"mods": "mods/dev",
"themes": "themes",
"head": "resources/raster/favicon/arcologyVector.html"
},
"options": {
"css": {
"autoprefix": true
},
"twee": {
"environment": {
"TWEEGO_PATH": "devTools/tweeGo/storyFormats"
}
}
}
}
#!/bin/bash
# Find and insert current commit
COMMIT=$(git rev-list HEAD --count)
sed -i "s/COMMIT/$COMMIT/" ./src/init/storyInit.tw
# Will add all *.tw files to StoryIncludes.
./sanityCheck
rm -f src/config/start.tw
cp src/config/start.tw.proto start.tw.tmp
find src -name '*.tw' -print >>start.tw.tmp
mv start.tw.tmp src/config/start.tw
HASH=`git log -n1 |grep commit | sed 's/commit //'`
if [ $(uname -m) = "x86_64" ]
then
echo "x64 arch"
./devTools/tweeGo/tweego_nix64 -o bin/FC_pregmod.html src/config/start.tw
else
echo "x86 arch"
./devTools/tweeGo/tweego_nix86 -o bin/FC_pregmod.html src/config/start.tw
fi
#Make the output prettier, replacing \t with a tab and \n with a newline
sed -i -e '/^.*<div id="store-area".*$/s/\\t/\t/g' -e '/^.*<div id="store-area".*$/s/\\n/\n/g' bin/FC_pregmod.html
# Revert ./src/init/storyInit.tw for next compilation
git checkout -- ./src/init/storyInit.tw
rm -f src/config/start.tw
#!/bin/bash
# Will add all *.tw files to StoryIncludes.
./sanityCheck
rm -f src/config/start.tw
cp src/config/start.tw.proto start.tw.tmp
find src -name '*.tw' -print >>start.tw.tmp
mv start.tw.tmp src/config/start.tw
HASH=`git log -n1 |grep -m1 commit | sed 's/commit //'`
if [ $(uname -m) = "x86_64" ]
then
echo "x64 arch"
./devTools/tweeGo/tweego_nix64 -o bin/FC_pregmod_$HASH.html src/config/start.tw
else
echo "x86 arch"
./devTools/tweeGo/tweego_nix86 -o bin/FC_pregmod_$HASH.html src/config/start.tw
fi
#Make the output prettier, replacing \t with a tab and \n with a newline
sed -i -e '/^<div id="store-area".*$/s/\\t/\t/g' -e '/^<div id="store-area".*$/s/\\n/\n/g' bin/FC_pregmod_$HASH.html
rm -f src/config/start.tw
echo "FC_pregmod_$HASH.html" compilation finished.
@echo off
:: Free Cities Basic Compiler - Windows
:: See if we can find a git installation
setlocal enabledelayedexpansion
for %%k in (HKCU HKLM) do (
for %%w in (\ \Wow6432Node\) do (
for /f "skip=2 delims=: tokens=1*" %%a in ('reg query "%%k\SOFTWARE%%wMicrosoft\Windows\CurrentVersion\Uninstall\Git_is1" /v InstallLocation 2^> nul') do (
for /f "tokens=3" %%z in ("%%a") do (
set GIT=%%z:%%b
set GITFOUND=yes
goto FOUND
)
)
)
)
:FOUND
if %GITFOUND% == yes (
set "PATH=%GIT%bin;%PATH%"
bash --login -c ./sanityCheck
)
:: Will add all *.tw files to StoryIncludes.
del src\config\start.tw
copy src\config\start.tw.proto start.tw.tmp >nul
>>start.tw.tmp (for /r "src" %%F in (*.tw) do echo %%F)
move start.tw.tmp src\config\start.tw >nul
:: Run the appropriate compiler for the user's CPU architecture.
if %PROCESSOR_ARCHITECTURE% == AMD64 (
CALL "%~dp0devTools\tweeGo\tweego_win64.exe" -o "%~dp0bin/FC_pregmod.html" "%~dp0src\config\start.tw"
) else (
CALL "%~dp0devTools\tweeGo\tweego_win86.exe" -o "%~dp0bin/FC_pregmod.html" "%~dp0src\config\start.tw"
)
if %GITFOUND% == yes (
:: Make the output prettier, replacing \t with a tab and \n with a newline
bash -c "sed -i -e '/^.*<div id=\"store-area\".*$/s/\\\t/\t/g' -e '/^.*<div id=\"store-area\".*$/s/\\\n/\n/g' bin/FC_pregmod.html"
:: Revert ./src/init/storyInit.tw for next compilation
git checkout -- ./src/init/storyInit.tw
)
del src\config\start.tw
ECHO Done
@ECHO off
:: Free Cities Compiler - Windows
:processargs
SET ARG=%1
IF DEFINED ARG (
:: exit without user input
if "%ARG%"=="--no-wait" SET "NOWAIT=True"
SHIFT
GOTO processargs
)
:: run dependencyCheck.bat
CALL .\devTools\scripts\dependencyCheck.bat
SET CODE=%ERRORLEVEL%
IF %CODE% EQU 69 (
:: if exit code is 69, then we don't have all the dependencies we need
:: fall back to the simple compiler
ECHO.
ECHO Dependencies not met, falling back to simple compiler.
ECHO.
:: run simple-compiler.bat, passing all arguments to it
CALL ./simple-compiler.bat %*
EXIT /b 0
) ELSE IF %CODE% EQU 0 (
:: if exit code is 0, run new compiler passing all arguments to it
CALL node devTools\scripts\advancedCompiler.js
EXIT /b 0
) ELSE (
:: if exit code is not 0, print error message and then attempt to fall back to the simple compiler
ECHO.
ECHO dependencyCheck.bat exited with code: %CODE%
ECHO Dependency check failed unexpectedly, falling back to the simple compiler.
ECHO.
CALL ./simple-compiler.bat %*
EXIT /b 0
)
#!/bin/bash
# Free Cities Compiler - Unix
# run dependencyCheck.sh
./devTools/scripts/dependencyCheck.sh
exitCode=$?
# exit code is now stored in $exitCode
# if exit code is 69, then we don't have all the dependencies we need
# fall back to the simple compiler
if [[ $exitCode -eq 69 ]]; then
echo "Dependencies not met, falling back to the simple compiler."
echo ""
# run simple-compiler.sh, passing all arguments to it
./simple-compiler.sh "$@"
exit 0
# if exit code is not 0, print error message and then attempt to fall back to the simple compiler
elif [[ $exitCode -ne 0 ]]; then
echo "Dependency check failed unexpectedly, falling back to the simple compiler."
echo ""
# run simple-compiler.sh, passing all arguments to it
./simple-compiler.sh "$@"
exit 0
# if exit code is 0, run new compiler passing all arguments to it
else
node devTools/scripts/advancedCompiler.js
fi
@echo off
:: Free Cities Basic Compiler - Windows
:: Will add all *.tw files to StoryIncludes.
del src\config\start.tw
copy src\config\start.tw.proto start.tw.tmp >nul
>>start.tw.tmp (for /r "src" %%F in (*.tw) do echo %%F)
move start.tw.tmp src\config\start.tw >nul
:: Run the appropriate compiler for the user's CPU architecture.
if %PROCESSOR_ARCHITECTURE% == AMD64 (
CALL "%~dp0devTools\tweeGo\tweego_win64.exe" -o "%~dp0bin/FC_pregmod.html" "%~dp0src\config\start.tw"
) else (
CALL "%~dp0devTools\tweeGo\tweego_win86.exe" -o "%~dp0bin/FC_pregmod.html" "%~dp0src\config\start.tw"
)
del src\config\start.tw
ECHO Done
PAUSE
{
"version": "0.2",
"cache": {
"cacheFormat": "universal",
"cacheLocation": ".cspellcache",
"cacheStrategy": "content",
"useCache": true
},
"allowCompoundWords": true,
"ignorePaths": [
"./CHANGELOG.md",
"node_modules",
"bin",
"build",
"devNotes/Deepmurk_Vector_Art_Changelog.md",
"devNotes/legacy files",
"devTools/minify",
"devTools/tweeGo",
"devTools/types/tippy",
"js/001-lib/idb.js",
"js/003-data/arcologyNames.js",
"js/003-data/miscDataNames.js",
"js/003-data/poses.js",
"src/001-lib/Jquery/**",
"src/001-lib/mousetrap/**",
"src/001-lib/webgl/**",
"src/art/webgl.js",
"src/art/webgl/art.js",
"src/art/webgl/engine.js",
"src/data/backwardsCompatibility",
"src/gui/Encyclopedia/encyclopediaCredits.js",
"src/events/RE/reNickname.js",
"src/js/displayVariables.js",
"src/npc/databases/dSlavesDatabase.js",
"src/npc/databases/ddSlavesDatabase.js",
"src/npc/databases/cheatmodeDatabase.js",
"submodules",
"*.min.js",
"*.json",
"*.svg",
".gitignore",
"# Below ignored until properly cleaned up #",
"src/npc/children",
"src/npc/infants"
],
"language": "en",
"import": [
"@cspell/dict-medicalterms/cspell-ext.json",
"@cspell/dict-companies/cspell-ext.json",
"@cspell/dict-data-science/cspell-ext.json",
"@cspell/dict-scientific-terms-us/cspell-ext.json",
"@cspell/dict-software-terms/cspell-ext.json"
],
"dictionaries": [
"companies",
"softwareTerms",
"misc",
"typescript",
"node",
"html",
"css",
"filetypes",
"npm",
"countries_and_people_groups",
"names",
"japanese_custom",
"languages",
"misc"
],
"dictionaryDefinitions": [
{
"name": "countries_and_people_groups",
"path": "./devTools/dictionaries/countries_and_people_groups.txt"
},
{
"name": "names",
"path": "./devTools/dictionaries/names.txt"
},
{
"name": "japanese_custom",
"path": "./devTools/dictionaries/japanese.txt"
},
{
"name": "languages",
"path": "./devTools/dictionaries/languages.txt"
},
{
"name": "misc",
"path": "./devTools/dictionaries/misc.txt"
}
],
"flagWords": [
"automaticly->automatically",
"carress->caress",
"javascript->JavaScript",
"loras->LoRAs",
"non-lethal->nonlethal",
"randomise->randomize",
"seperator->separator",
"slave-owner->slaveowner",
"slave-owners->slaveowners",
"slave-ownership->slaveownership",
"tood->todo"
],
"ignoreWords": [
"aaah",
"adetailer",
"admi",
"ahhhh",
"arkerthan",
"awwww",
"breastflesh",
"coeff",
"coeffs",
"detaste",
"documentjs",
"elohiem's",
"eqnum",
"eqstr",
"fert",
"franklygeorge",
"freecitiesdev",
"horm",
"ievent",
"iife",
"inscrip",
"isamputee",
"isfertile",
"ismodded",
"isub",
"isunmodded",
"isvirile",
"mpreg",
"mult",
"neqnum",
"neqstr",
"pooljizzers",
"popperjs",
"precommit",
"preg",
"pregmodder",
"pregmodfan",
"recets",
"reci",
"refi",
"regs",
"repop",
"ress",
"shokushu",
"shokushu's",
"sonarjs",
"sooo",
"soooo",
"stylelintrc",
"subjugationistindoaryan",
"supr",
"syouthening",
"ternarynum",
"ts-nocheck",
"unittests",
"vign",
"weapmanu",
"xmax",
"xmin",
"ymax",
"ymin"
],
"words": [
"abaya",
"accelerants",
"acceptingly",
"actuals",
"anaphrodisiacs",
"anarcho",
"aphro",
"arcologies",
"arcology",
"asgardians",
"atrophiers",
"autosurgery",
"bacchian",
"ballsack",
"bdsm",
"beared",
"beribboned",
"bimbofication",
"biyelgee",
"breastgasm",
"broodmother",
"bukkake",
"burkini",
"buttcheeks",
"buttfuck",
"buttfucked",
"butthole",
"buttplug",
"buttslut",
"camelcase",
"cartoonishly",
"catgirl",
"ceramo-metallic",
"creampied",
"csec",
"cummunist",
"cumslut",
"cunny",
"cybersuit",
"defusal",
"degradationist",
"degradationists",
"dilf",
"dumbassening",
"décor",
"eary",
"electrolarynx",
"elven",
"enculées",
"ethnicities",
"evocati",
"exosuits",
"exposé",
"facefuck",
"fanbase",
"façade",
"fcfa",
"fchost",
"fcnn",
"fctv",
"felidae",
"fetishize",
"fetishizes",
"fetishizing",
"financials",
"fleur-de-lis",
"fssmr",
"fuckdoll",
"fuckdolls",
"fuckmachine",
"fuckpit",
"fucktoy",
"fucktoys",
"futa",
"futanari",
"futas",
"gestators",
"gigantomastia",
"gilf",
"girthy",
"gitgud",
"gladiatrix",
"gulpfile",
"hamsas",
"hanbok",
"handsy",
"hassaku",
"hastati",
"headgirl",
"headgirlsuite",
"heritance",
"heterochromia",
"hime",
"hippolyta",
"hooved",
"hucow",
"huipil",
"huipils",
"hyperleptinemia",
"hypoleptinemia",
"impregnatrix",
"incentivizes",
"incubatee",
"indo-aryan",
"intellicode",
"jetpack",
"jism",
"jizya",
"jizz",
"kemonomimi",
"kitsune",
"kitsunegirl",
"liposuctions",
"loli",
"lolified",
"lolis",
"macromastia",
"majicmix",
"mamluks",
"mammaries",
"mastersuite",
"meatshield",
"merc",
"mercs",
"micropenis",
"milkings",
"mindbreak",
"mindbroken",
"mmhm",
"mmmhmm",
"moddable",
"monokini",
"mounty",
"mrowling",
"mrowls",
"mélange",
"ménage",
"naizuri",
"nanotech",
"naïvely",
"naïveté",
"nethers",
"nieskowitz",
"niqab",
"nonuplets",
"nueva",
"nymphomni",
"old-timey",
"old-worlder",
"omnisexual",
"onahole",
"one-upmanship",
"onsen",
"oppai",
"orcish",
"orgasmed",
"outie",
"outro",
"painal",
"paizuri",
"pako",
"pantsu",
"pedo",
"pervy",
"pess",
"pmod",
"polyhydramnios",
"poofy",
"preferentialist",
"preggo",
"preggololi",
"preggos",
"pregmod",
"prereqs",
"prising",
"progeria",
"pudge",
"qipao",
"qipaos",
"quim",
"radicalist",
"reclench",
"repopulationist",
"retailored",
"retellings",
"ronin",
"sagbgone",
"sekhmet",
"sekhmeti",
"selfcest",
"shamefast",
"shibari",
"shota",
"shotas",
"slavegirl",
"slaveowner",
"slaveowners",
"slaveownership",
"sluttery",
"snythweave",
"sodomizer",
"sodomizers",
"splurt",
"spread-eagled",
"ssao",
"stims",
"stimulators",
"stolas",
"storyformat",
"strapon",
"stylelint",
"subjugationist",
"sugarcube",
"supremacism",
"swole",
"sybian",
"tabi",
"tase",
"tased",
"tases",
"tasing",
"tlatcani",
"tranny",
"trib",
"tribbing",
"triggerable",
"tweego",
"twincest",
"tête-à-tête",
"uglies",
"unblind",
"undeafen",
"undecillion",
"unexpandable",
"unfucked",
"unholstered",
"unimplanted",
"universidad",
"unmilked",
"unmocked",
"unmodded",
"unparted",
"unpunctuated",
"unsatisfyingly",
"upscaler",
"verticalize",
"vidscreens",
"vitruvian",
"wakizashi",
"wallscreen",
"wardeness",
"webgl",
"webm",
"webp",
"wesekh",
"wikifier",
"xochiquetzal",
"école"
]
}
/*! jQuery UI - v1.12.1 - 2017-05-29
* http://jqueryui.com
* Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=ui-darkness&cornerRadiusShadow=8px&offsetLeftShadow=-7px&offsetTopShadow=-7px&thicknessShadow=7px&opacityShadow=60&bgImgOpacityShadow=30&bgTextureShadow=flat&bgColorShadow=cccccc&opacityOverlay=80&bgImgOpacityOverlay=50&bgTextureOverlay=flat&bgColorOverlay=5c5c5c&iconColorError=a83300&fcError=111111&borderColorError=ffb73d&bgImgOpacityError=40&bgTextureError=glass&bgColorError=ffc73d&iconColorHighlight=4b8e0b&fcHighlight=2e7db2&borderColorHighlight=cccccc&bgImgOpacityHighlight=80&bgTextureHighlight=highlight_soft&bgColorHighlight=eeeeee&iconColorActive=222222&fcActive=ffffff&borderColorActive=ffaf0f&bgImgOpacityActive=30&bgTextureActive=inset_soft&bgColorActive=f58400&iconColorHover=ffffff&fcHover=ffffff&borderColorHover=59b4d4&bgImgOpacityHover=40&bgTextureHover=glass&bgColorHover=0078a3&iconColorDefault=cccccc&fcDefault=eeeeee&borderColorDefault=666666&bgImgOpacityDefault=20&bgTextureDefault=glass&bgColorDefault=555555&iconColorContent=cccccc&fcContent=ffffff&borderColorContent=666666&bgImgOpacityContent=25&bgTextureContent=inset_soft&bgColorContent=000000&iconColorHeader=ffffff&fcHeader=ffffff&borderColorHeader=333333&bgImgOpacityHeader=25&bgTextureHeader=gloss_wave&bgColorHeader=333333&cornerRadius=6px&fsDefault=1.1em&fwDefault=bold&ffDefault=Segoe%20UI%2CArial%2Csans-serif
* Copyright jQuery Foundation and other contributors; Licensed MIT */
.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;font-size:100%}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-button{padding:.4em 1em;display:inline-block;position:relative;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2em;box-sizing:border-box;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-button-icon-only{text-indent:0}.ui-button-icon-only .ui-icon{position:absolute;top:50%;left:50%;margin-top:-8px;margin-left:-8px}.ui-button.ui-icon-notext .ui-icon{padding:0;width:2.1em;height:2.1em;text-indent:-9999px;white-space:nowrap}input.ui-button.ui-icon-notext .ui-icon{width:auto;height:auto;text-indent:0;white-space:normal;padding:.4em 1em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-controlgroup{vertical-align:middle;display:inline-block}.ui-controlgroup > .ui-controlgroup-item{float:left;margin-left:0;margin-right:0}.ui-controlgroup > .ui-controlgroup-item:focus,.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus{z-index:9999}.ui-controlgroup-vertical > .ui-controlgroup-item{display:block;float:none;width:100%;margin-top:0;margin-bottom:0;text-align:left}.ui-controlgroup-vertical .ui-controlgroup-item{box-sizing:border-box}.ui-controlgroup .ui-controlgroup-label{padding:.4em 1em}.ui-controlgroup .ui-controlgroup-label span{font-size:80%}.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item{border-left:none}.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item{border-top:none}.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content{border-right:none}.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content{border-bottom:none}.ui-controlgroup-vertical .ui-spinner-input{width:75%;width:calc( 100% - 2.4em )}.ui-controlgroup-vertical .ui-spinner .ui-spinner-up{border-top-style:solid}.ui-checkboxradio-label .ui-icon-background{box-shadow:inset 1px 1px 1px #ccc;border-radius:.12em;border:none}.ui-checkboxradio-radio-label .ui-icon-background{width:16px;height:16px;border-radius:1em;overflow:visible;border:none}.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon{background-image:none;width:8px;height:8px;border-width:4px;border-style:solid}.ui-checkboxradio-disabled{pointer-events:none}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-n{height:2px;top:0}.ui-dialog .ui-resizable-e{width:2px;right:0}.ui-dialog .ui-resizable-s{height:2px;bottom:0}.ui-dialog .ui-resizable-w{width:2px;left:0}.ui-dialog .ui-resizable-se,.ui-dialog .ui-resizable-sw,.ui-dialog .ui-resizable-ne,.ui-dialog .ui-resizable-nw{width:7px;height:7px}.ui-dialog .ui-resizable-se{right:0;bottom:0}.ui-dialog .ui-resizable-sw{left:0;bottom:0}.ui-dialog .ui-resizable-ne{right:0;top:0}.ui-dialog .ui-resizable-nw{left:0;top:0}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-text{display:block;margin-right:20px;overflow:hidden;text-overflow:ellipsis}.ui-selectmenu-button.ui-button{text-align:left;white-space:nowrap;width:14em}.ui-selectmenu-icon.ui-icon{float:right;margin-top:0}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:.222em 0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:2em}.ui-spinner-button{width:1.6em;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top-style:none;border-bottom-style:none;border-right-style:none}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Segoe UI,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Segoe UI,Arial,sans-serif;font-size:1em}.ui-widget.ui-widget-content{border:1px solid #666}.ui-widget-content{border:1px solid #666;background:#000 url("images/ui-bg_inset-soft_25_000000_1x100.png") 50% bottom repeat-x;color:#fff}.ui-widget-content a{color:#fff}.ui-widget-header{border:1px solid #333;background:#333 url("images/ui-bg_gloss-wave_25_333333_500x100.png") 50% 50% repeat-x;color:#fff;font-weight:bold}.ui-widget-header a{color:#fff}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.ui-button,html .ui-button.ui-state-disabled:hover,html .ui-button.ui-state-disabled:active{border:1px solid #666;background:#555 url("images/ui-bg_glass_20_555555_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#eee}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited,a.ui-button,a:link.ui-button,a:visited.ui-button,.ui-button{color:#eee;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus,.ui-button:hover,.ui-button:focus{border:1px solid #59b4d4;background:#0078a3 url("images/ui-bg_glass_40_0078a3_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#fff}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited,a.ui-button:hover,a.ui-button:focus{color:#fff;text-decoration:none}.ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active,a.ui-button:active,.ui-button:active,.ui-button.ui-state-active:hover{border:1px solid #ffaf0f;background:#f58400 url("images/ui-bg_inset-soft_30_f58400_1x100.png") 50% 50% repeat-x;font-weight:bold;color:#fff}.ui-icon-background,.ui-state-active .ui-icon-background{border:#ffaf0f;background-color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #ccc;background:#eee url("images/ui-bg_highlight-soft_80_eeeeee_1x100.png") 50% top repeat-x;color:#2e7db2}.ui-state-checked{border:1px solid #ccc;background:#eee}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#2e7db2}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #ffb73d;background:#ffc73d url("images/ui-bg_glass_40_ffc73d_1x400.png") 50% 50% repeat-x;color:#111}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#111}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#111}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_cccccc_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon,.ui-button:hover .ui-icon,.ui-button:focus .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-active .ui-icon,.ui-button:active .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.ui-state-highlight .ui-icon,.ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_4b8e0b_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_a83300_256x240.png")}.ui-button .ui-icon{background-image:url("images/ui-icons_cccccc_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-caret-1-n{background-position:0 0}.ui-icon-caret-1-ne{background-position:-16px 0}.ui-icon-caret-1-e{background-position:-32px 0}.ui-icon-caret-1-se{background-position:-48px 0}.ui-icon-caret-1-s{background-position:-65px 0}.ui-icon-caret-1-sw{background-position:-80px 0}.ui-icon-caret-1-w{background-position:-96px 0}.ui-icon-caret-1-nw{background-position:-112px 0}.ui-icon-caret-2-n-s{background-position:-128px 0}.ui-icon-caret-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-65px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-65px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:1px -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:6px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:6px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:6px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:6px}.ui-widget-overlay{background:#5c5c5c;opacity:.8;filter:Alpha(Opacity=80)}.ui-widget-shadow{-webkit-box-shadow:-7px -7px 7px #ccc;box-shadow:-7px -7px 7px #ccc}
/*! <<checkvars>> macro for SugarCube 2.x */
#ui-dialog-body.checkvars{padding:1em}#ui-dialog-body.checkvars h1{font-size:1em;margin-top:0}#ui-dialog-body.checkvars table{border-collapse:collapse;border-spacing:0}#ui-dialog-body.checkvars thead tr{border-bottom:2px solid #444}#ui-dialog-body.checkvars tr:not(:first-child){border-top:1px solid #444}#ui-dialog-body.checkvars td,#ui-dialog-body.checkvars th{padding:.25em 1em}#ui-dialog-body.checkvars td:first-child,#ui-dialog-body.checkvars th:first-child{padding-left:.5em;border-right:1px solid #444}#ui-dialog-body.checkvars td:last-child,#ui-dialog-body.checkvars th:last-child{padding-right:.5em}#ui-dialog-body.checkvars th:first-child{text-align:center}#ui-dialog-body.checkvars td:first-child{font-weight:700;text-align:right}#ui-dialog-body.checkvars td{font-family:monospace,monospace;vertical-align:top;white-space:pre-wrap}#ui-dialog-body.checkvars .scroll-pad{margin:0;padding:0}
.tippy-touch{cursor:pointer!important}.tippy-popper{max-width:400px;-webkit-perspective:800px;perspective:800px;z-index:9999}.tippy-popper.html-template{max-width:96%;max-width:calc(100% - 20px)}.tippy-popper[x-placement^=top] [x-arrow]{position:absolute;width:0;height:0;border-top:7px solid #333;border-right:7px solid transparent;border-left:7px solid transparent;bottom:-7px}.tippy-popper[x-placement^=top] [x-arrow].arrow-small{border-top:5px solid #333;border-right:5px solid transparent;border-left:5px solid transparent;bottom:-5px}.tippy-popper[x-placement^=top] [x-arrow].arrow-big{border-top:9px solid #333;border-right:9px solid transparent;border-left:9px solid transparent;bottom:-9px}.tippy-popper[x-placement^=top] [x-circle]{-webkit-transform-origin:0 50%;transform-origin:0 50%}.tippy-popper[x-placement^=top] [x-circle].enter{opacity:1;-webkit-transform:scale(1) translate(-50%,-50%);transform:scale(1) translate(-50%,-50%)}.tippy-popper[x-placement^=top] [x-circle].leave{opacity:0;-webkit-transform:scale(.4) translate(-50%,-50%);transform:scale(.4) translate(-50%,-50%)}.tippy-popper[x-placement^=top] .tippy-tooltip.light-theme [x-circle]{background-color:#fff}.tippy-popper[x-placement^=top] .tippy-tooltip.light-theme [x-arrow]{border-top:7px solid #fff;border-right:7px solid transparent;border-left:7px solid transparent}.tippy-popper[x-placement^=top] .tippy-tooltip.light-theme [x-arrow].arrow-small{border-top:5px solid #fff;border-right:5px solid transparent;border-left:5px solid transparent}.tippy-popper[x-placement^=top] .tippy-tooltip.light-theme [x-arrow].arrow-big{border-top:9px solid #fff;border-right:9px solid transparent;border-left:9px solid transparent}.tippy-popper[x-placement^=top] .tippy-tooltip.transparent-theme [x-circle]{background-color:rgba(0,0,0,.7)}.tippy-popper[x-placement^=top] .tippy-tooltip.transparent-theme [x-arrow]{border-top:7px solid rgba(0,0,0,.7);border-right:7px solid transparent;border-left:7px solid transparent}.tippy-popper[x-placement^=top] .tippy-tooltip.transparent-theme [x-arrow].arrow-small{border-top:5px solid rgba(0,0,0,.7);border-right:5px solid transparent;border-left:5px solid transparent}.tippy-popper[x-placement^=top] .tippy-tooltip.transparent-theme [x-arrow].arrow-big{border-top:9px solid rgba(0,0,0,.7);border-right:9px solid transparent;border-left:9px solid transparent}.tippy-popper[x-placement^=top] [data-animation=perspective]{-webkit-transform-origin:bottom;transform-origin:bottom}.tippy-popper[x-placement^=top] [data-animation=perspective].enter{opacity:1;-webkit-transform:translateY(-10px) rotateX(0);transform:translateY(-10px) rotateX(0)}.tippy-popper[x-placement^=top] [data-animation=perspective].leave{opacity:0;-webkit-transform:translateY(0) rotateX(90deg);transform:translateY(0) rotateX(90deg)}.tippy-popper[x-placement^=top] [data-animation=fade].enter{opacity:1;-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=fade].leave{opacity:0;-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=shift].enter{opacity:1;-webkit-transform:translateY(-10px);transform:translateY(-10px)}.tippy-popper[x-placement^=top] [data-animation=shift].leave{opacity:0;-webkit-transform:translateY(0);transform:translateY(0)}.tippy-popper[x-placement^=top] [data-animation=scale].enter{opacity:1;-webkit-transform:translateY(-10px) scale(1);transform:translateY(-10px) scale(1)}.tippy-popper[x-placement^=top] [data-animation=scale].leave{opacity:0;-webkit-transform:translateY(0) scale(0);transform:translateY(0) scale(0)}.tippy-popper[x-placement^=bottom] [x-arrow]{position:absolute;width:0;height:0;border-bottom:7px solid #333;border-right:7px solid transparent;border-left:7px solid transparent;top:-7px}.tippy-popper[x-placement^=bottom] [x-arrow].arrow-small{border-bottom:5px solid #333;border-right:5px solid transparent;border-left:5px solid transparent;top:-5px}.tippy-popper[x-placement^=bottom] [x-arrow].arrow-big{border-bottom:9px solid #333;border-right:9px solid transparent;border-left:9px solid transparent;top:-9px}.tippy-popper[x-placement^=bottom] [x-circle]{-webkit-transform-origin:0 -50%;transform-origin:0 -50%}.tippy-popper[x-placement^=bottom] [x-circle].enter{opacity:1;-webkit-transform:scale(1) translate(-50%,-50%);transform:scale(1) translate(-50%,-50%)}.tippy-popper[x-placement^=bottom] [x-circle].leave{opacity:0;-webkit-transform:scale(.4) translate(-50%);transform:scale(.4) translate(-50%)}.tippy-popper[x-placement^=bottom] .tippy-tooltip.light-theme [x-circle]{background-color:#fff}.tippy-popper[x-placement^=bottom] .tippy-tooltip.light-theme [x-arrow]{border-bottom:7px solid #fff;border-right:7px solid transparent;border-left:7px solid transparent}.tippy-popper[x-placement^=bottom] .tippy-tooltip.light-theme [x-arrow].arrow-small{border-bottom:5px solid #fff;border-right:5px solid transparent;border-left:5px solid transparent}.tippy-popper[x-placement^=bottom] .tippy-tooltip.light-theme [x-arrow].arrow-big{border-bottom:9px solid #fff;border-right:9px solid transparent;border-left:9px solid transparent}.tippy-popper[x-placement^=bottom] .tippy-tooltip.transparent-theme [x-circle]{background-color:rgba(0,0,0,.7)}.tippy-popper[x-placement^=bottom] .tippy-tooltip.transparent-theme [x-arrow]{border-bottom:7px solid rgba(0,0,0,.7);border-right:7px solid transparent;border-left:7px solid transparent}.tippy-popper[x-placement^=bottom] .tippy-tooltip.transparent-theme [x-arrow].arrow-small{border-bottom:5px solid rgba(0,0,0,.7);border-right:5px solid transparent;border-left:5px solid transparent}.tippy-popper[x-placement^=bottom] .tippy-tooltip.transparent-theme [x-arrow].arrow-big{border-bottom:9px solid rgba(0,0,0,.7);border-right:9px solid transparent;border-left:9px solid transparent}.tippy-popper[x-placement^=bottom] [data-animation=perspective]{-webkit-transform-origin:top;transform-origin:top}.tippy-popper[x-placement^=bottom] [data-animation=perspective].enter{opacity:1;-webkit-transform:translateY(10px) rotateX(0);transform:translateY(10px) rotateX(0)}.tippy-popper[x-placement^=bottom] [data-animation=perspective].leave{opacity:0;-webkit-transform:translateY(0) rotateX(-90deg);transform:translateY(0) rotateX(-90deg)}.tippy-popper[x-placement^=bottom] [data-animation=fade].enter{opacity:1;-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=fade].leave{opacity:0;-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=shift].enter{opacity:1;-webkit-transform:translateY(10px);transform:translateY(10px)}.tippy-popper[x-placement^=bottom] [data-animation=shift].leave{opacity:0;-webkit-transform:translateY(0);transform:translateY(0)}.tippy-popper[x-placement^=bottom] [data-animation=scale].enter{opacity:1;-webkit-transform:translateY(10px) scale(1);transform:translateY(10px) scale(1)}.tippy-popper[x-placement^=bottom] [data-animation=scale].leave{opacity:0;-webkit-transform:translateY(0) scale(0);transform:translateY(0) scale(0)}.tippy-popper[x-placement^=left] [x-arrow]{position:absolute;width:0;height:0;border-left:7px solid #333;border-top:7px solid transparent;border-bottom:7px solid transparent;right:-7px;top:50%}.tippy-popper[x-placement^=left] [x-arrow].arrow-small{border-left:5px solid #333;border-top:5px solid transparent;border-bottom:5px solid transparent;right:-5px;top:50%}.tippy-popper[x-placement^=left] [x-arrow].arrow-big{border-left:9px solid #333;border-top:9px solid transparent;border-bottom:9px solid transparent;right:-9px;top:50%}.tippy-popper[x-placement^=left] [x-circle]{-webkit-transform-origin:50% 5%;transform-origin:50% 5%}.tippy-popper[x-placement^=left] [x-circle].enter{opacity:1;-webkit-transform:scale(1) translate(-50%,-50%);transform:scale(1) translate(-50%,-50%)}.tippy-popper[x-placement^=left] [x-circle].leave{opacity:0;-webkit-transform:scale(.4) translate(-50%,-33%);transform:scale(.4) translate(-50%,-33%)}.tippy-popper[x-placement^=left] .tippy-tooltip.light-theme [x-circle]{background-color:#fff}.tippy-popper[x-placement^=left] .tippy-tooltip.light-theme [x-arrow]{border-left:7px solid #fff;border-top:7px solid transparent;border-bottom:7px solid transparent}.tippy-popper[x-placement^=left] .tippy-tooltip.light-theme [x-arrow].arrow-small{border-left:5px solid #fff;border-top:5px solid transparent;border-bottom:5px solid transparent}.tippy-popper[x-placement^=left] .tippy-tooltip.light-theme [x-arrow].arrow-big{border-left:9px solid #fff;border-top:9px solid transparent;border-bottom:9px solid transparent}.tippy-popper[x-placement^=left] .tippy-tooltip.transparent-theme [x-circle]{background-color:rgba(0,0,0,.7)}.tippy-popper[x-placement^=left] .tippy-tooltip.transparent-theme [x-arrow]{border-left:7px solid rgba(0,0,0,.7);border-top:7px solid transparent;border-bottom:7px solid transparent}.tippy-popper[x-placement^=left] .tippy-tooltip.transparent-theme [x-arrow].arrow-small{border-left:5px solid rgba(0,0,0,.7);border-top:5px solid transparent;border-bottom:5px solid transparent}.tippy-popper[x-placement^=left] .tippy-tooltip.transparent-theme [x-arrow].arrow-big{border-left:9px solid rgba(0,0,0,.7);border-top:9px solid transparent;border-bottom:9px solid transparent}.tippy-popper[x-placement^=left] [data-animation=perspective]{-webkit-transform-origin:right;transform-origin:right}.tippy-popper[x-placement^=left] [data-animation=perspective].enter{opacity:1;-webkit-transform:translateX(-10px) rotateY(0);transform:translateX(-10px) rotateY(0)}.tippy-popper[x-placement^=left] [data-animation=perspective].leave{opacity:0;-webkit-transform:translateX(0) rotateY(-90deg);transform:translateX(0) rotateY(-90deg)}.tippy-popper[x-placement^=left] [data-animation=fade].enter{opacity:1;-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=fade].leave{opacity:0;-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=shift].enter{opacity:1;-webkit-transform:translateX(-10px);transform:translateX(-10px)}.tippy-popper[x-placement^=left] [data-animation=shift].leave{opacity:0;-webkit-transform:translateX(0);transform:translateX(0)}.tippy-popper[x-placement^=left] [data-animation=scale].enter{opacity:1;-webkit-transform:translateX(-10px) scale(1);transform:translateX(-10px) scale(1)}.tippy-popper[x-placement^=left] [data-animation=scale].leave{opacity:0;-webkit-transform:translateX(0) scale(0);transform:translateX(0) scale(0)}.tippy-popper[x-placement^=right] [x-arrow]{position:absolute;width:0;height:0;border-right:7px solid #333;border-top:7px solid transparent;border-bottom:7px solid transparent;left:-7px;top:50%}.tippy-popper[x-placement^=right] [x-arrow].arrow-small{border-right:5px solid #333;border-top:5px solid transparent;border-bottom:5px solid transparent;left:-5px;top:50%}.tippy-popper[x-placement^=right] [x-arrow].arrow-big{border-right:9px solid #333;border-top:9px solid transparent;border-bottom:9px solid transparent;left:-9px;top:50%}.tippy-popper[x-placement^=right] [x-circle]{-webkit-transform-origin:-50% 5%;transform-origin:-50% 5%}.tippy-popper[x-placement^=right] [x-circle].enter{opacity:1;-webkit-transform:scale(1) translate(-50%,-50%);transform:scale(1) translate(-50%,-50%)}.tippy-popper[x-placement^=right] [x-circle].leave{opacity:0;-webkit-transform:scale(.4) translate(-50%,-33%);transform:scale(.4) translate(-50%,-33%)}.tippy-popper[x-placement^=right] .tippy-tooltip.light-theme [x-circle]{background-color:#fff}.tippy-popper[x-placement^=right] .tippy-tooltip.light-theme [x-arrow]{border-right:7px solid #fff;border-top:7px solid transparent;border-bottom:7px solid transparent}.tippy-popper[x-placement^=right] .tippy-tooltip.light-theme [x-arrow].arrow-small{border-right:5px solid #fff;border-top:5px solid transparent;border-bottom:5px solid transparent}.tippy-popper[x-placement^=right] .tippy-tooltip.light-theme [x-arrow].arrow-big{border-right:9px solid #fff;border-top:9px solid transparent;border-bottom:9px solid transparent}.tippy-popper[x-placement^=right] .tippy-tooltip.transparent-theme [x-circle]{background-color:rgba(0,0,0,.7)}.tippy-popper[x-placement^=right] .tippy-tooltip.transparent-theme [x-arrow]{border-right:7px solid rgba(0,0,0,.7);border-top:7px solid transparent;border-bottom:7px solid transparent}.tippy-popper[x-placement^=right] .tippy-tooltip.transparent-theme [x-arrow].arrow-small{border-right:5px solid rgba(0,0,0,.7);border-top:5px solid transparent;border-bottom:5px solid transparent}.tippy-popper[x-placement^=right] .tippy-tooltip.transparent-theme [x-arrow].arrow-big{border-right:9px solid rgba(0,0,0,.7);border-top:9px solid transparent;border-bottom:9px solid transparent}.tippy-popper[x-placement^=right] [data-animation=perspective]{-webkit-transform-origin:left;transform-origin:left}.tippy-popper[x-placement^=right] [data-animation=perspective].enter{opacity:1;-webkit-transform:translateX(10px) rotateY(0);transform:translateX(10px) rotateY(0)}.tippy-popper[x-placement^=right] [data-animation=perspective].leave{opacity:0;-webkit-transform:translateX(0) rotateY(90deg);transform:translateX(0) rotateY(90deg)}.tippy-popper[x-placement^=right] [data-animation=fade].enter{opacity:1;-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=fade].leave{opacity:0;-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=shift].enter{opacity:1;-webkit-transform:translateX(10px);transform:translateX(10px)}.tippy-popper[x-placement^=right] [data-animation=shift].leave{opacity:0;-webkit-transform:translateX(0);transform:translateX(0)}.tippy-popper[x-placement^=right] [data-animation=scale].enter{opacity:1;-webkit-transform:translateX(10px) scale(1);transform:translateX(10px) scale(1)}.tippy-popper[x-placement^=right] [data-animation=scale].leave{opacity:0;-webkit-transform:translateX(0) scale(0);transform:translateX(0) scale(0)}.tippy-popper [x-circle]{background-color:#fff}.tippy-popper[data-animatefill]{background-color:transparent}.tippy-popper [x-arrow]{position:absolute;width:0;height:0}.tippy-popper .tippy-tooltip.transparent-theme{background-color:rgba(0,0,0,.8)}.tippy-popper .tippy-tooltip.transparent-theme[data-animatefill]{background-color:transparent}.tippy-popper .tippy-tooltip.light-theme{color:#203d5d;box-shadow:0 4px 20px 4px rgba(0,20,60,.1),0 4px 80px -8px rgba(0,20,60,.2);background-color:#fff}.tippy-popper .tippy-tooltip.light-theme[data-animatefill]{background-color:transparent}.tippy-tooltip{position:relative;color:#fff;border-radius:4px;font-size:.95rem;padding:.4rem .8rem;text-align:center;will-change:transform;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#333}.tippy-tooltip--small{padding:.25rem .5rem;font-size:.8rem}.tippy-tooltip--big{padding:.6rem 1.2rem;font-size:1.2rem}.tippy-tooltip[data-animatefill]{overflow:hidden;background-color:transparent}.tippy-tooltip[data-inertia]{-webkit-transition-timing-function:cubic-bezier(.53,1,.36,.85);transition-timing-function:cubic-bezier(.53,2,.36,.85)}.tippy-tooltip [x-circle]{position:absolute;will-change:transform;background-color:#333;border-radius:50%;width:120%;width:calc(100% + 2rem);-webkit-transition:all ease-out;transition:all ease-out;left:50%;z-index:-1;opacity:0;overflow:hidden}.tippy-tooltip [x-circle]:before{content:"";padding-top:100%;padding-top:calc(60% + 2rem);float:left}@media (max-width:500px){.tippy-popper{max-width:96%;max-width:calc(100% - 20px)}}
\ No newline at end of file
:root {
--button-color: #252525;
--button-border-color: #333333;
--button-selected-color: #050505;
--button-hover-color: #414141;
--button-disabled-color: #1a1a1a;
--link-color: #68D;
--link-hover-color: #8af;
--background-default: #111;
--background-light: #222;
}
/* Revert font to SC 2.36 */
html {
font: 16px/1 Helmet,Freesans,sans-serif;
}
body {
overflow-x: hidden;
}
/* clears SugarCube's default transition */
.passage {
transition: none;
-webkit-transition: none;
}
.passage-in {
opacity: 1 !important;
}
#passages {
/* max-width: 54em */
max-width: 100%;
}
/* makes HR colorflip compatible */
hr {
background:#ccc;
border:0;
}
/* fix dialog title centering */
#ui-dialog-title {
padding-left: 3.5em;
}
/* make buttons look nice */
.passage button {
background-color: var(--button-color);
border: solid 2px var(--button-border-color);
}
.passage button:hover {
background-color: var(--button-hover-color);
}
select {
padding-top: 0.4em;
padding-bottom: 0.4em;
background-color: #111;
}
/* change some SC2 styles */
/* make the sidebar more compact by reducing the space between major parts */
#ui-bar-body {
/* height: calc(100% - 2.5em); */
/* margin: 2.5em 0; */
height: calc(100% - 1.5em);
margin: 1.5em 0;
}
#ui-bar-body > :not(:first-child) {
/* margin-top: 2em; */
margin-top: 1.5em;
}
#story-author {
/* margin-top: 2em; */
margin-top: 0;
}
/* make cheat text boxes fit in sidebar */
#story-caption input {
min-width: 0;
width: calc(100% - 0.8em - 2px);
}
.building {
display: flex;
flex-direction: column;
width: 100%;
}
.building.basement {
border-top: solid 1px #333333;
margin-top: -1px;
background-image: repeating-linear-gradient(135deg, transparent, transparent 20px, #333333 20px, #333333 30px);
}
.building .row {
display: flex;
flex-direction: row;
width: 95%;
margin: 0 auto;
justify-content: center;
}
@media only screen and (min-width: 1600px) {
.building .row {
width: 70%;
}
}
.building .outerCell {
/* fill cell fully, part 1: trick to fill the full height even if content is smaller */
display: flex;
flex-direction: row;
}
.building .innerCell {
margin: 3px;
border: 5px solid;
padding: 2px;
text-align: center;
/* fill cell fully, part 2: full width */
width: 100%;
/* overwriting with the default background color to hide the basement indicator */
background-color: #111;
}
.building .decorative {
outline: white solid 5px;
outline-offset: -8px;
height: 2em;
}
/* introduction special formatting */
/* makes all links unusable */
.intro .building a {
color: white;
pointer-events: none;
cursor: default;
}
.intro .building .hotkey {
display: none;
}
/* penthouse formatting */
.building .gridWrapper {
display: grid;
}
.building .gridWrapper.grid1 {
grid-template-columns: 100%;
}
.building .gridWrapper.grid2 {
grid-template-columns: repeat(2, 50%);
}
.building .gridWrapper.grid3 {
grid-template-columns: repeat(3, 33.3%);
}
.building .gridWrapper div {
display: inline flow-root;
line-height: 1.1;
padding-bottom: 0.3em;
}
.building .collapsed {
display: inline flow-root;
margin: 0 0.2em;
}
/* border color for each cell */
.building .row .apartments {
border-color: limegreen;
}
.building .row .arcade {
border-color: deeppink;
}
.building .row .brothel {
border-color: violet;
}
.building .row .barracks {
border-color: olivedrab;
}
.building .row .club {
border-color: orchid;
}
.building .row .corporateMarket {
border-color: purple;
}
.building .row .dairy {
border-color: white;
}
.building .row .denseApartments {
border-color: seagreen;
}
.building .row .empty {
border-color: lightgray;
}
.building .row .farmyard {
border-color: brown;
}
.building .row .fsShops {
border-color: mediumpurple;
}
.building .row .manufacturing {
border-color: slategray;
}
.building .row .markets {
border-color: mediumorchid;
}
.building .row .nursery {
border-color: deepskyblue;
}
.building .row .luxuryApartments {
border-color: palegreen;
}
.building .row .pens {
border-color: goldenrod;
}
.building .row .penthouse {
border-color: teal;
}
.building .row .pit {
border-color: orangered;
}
.building .row .private {
border-color: red;
}
.building .row .shops {
border-color: thistle;
}
.building .row .sweatshops {
border-color: gray;
}
.building .row .transport-hub {
border-color: magenta;
}
.building .row .weaponsManufacturing {
border-color: springgreen;
}
#arcology-building-container {
margin-bottom: 2em;
}