diff --git a/api/assets/custom.css b/api/assets/custom.css index d66e1a49e..2d8adc3e5 100644 --- a/api/assets/custom.css +++ b/api/assets/custom.css @@ -7,15 +7,20 @@ } /* Override Tailwind */ +h1 { + font-weight: bold; +} + +h2 { + font-weight: bold; +} + p:not(.box, .boxrun, .boxread), ul, ol { padding-bottom: 0; } -a:hover { - box-shadow: none; -} a:hover.tsd-kind-project { color: var(--color-ts-project); } @@ -111,7 +116,9 @@ pre[class*="lang"] code { /* Override Typedoc style.css */ body { - font-size: 0.875rem; + font-family: Inter var, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, + "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, + "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; } .container-main { @@ -327,11 +334,12 @@ h1 code.tsd-tag:first-of-type { } /* Add extra custom styling */ -#topnavList > ul { - margin: 0; +#topnavList a { + color: inherit; + font-weight: inherit; } -.topnav-link:hover { +#navTop a:hover { text-decoration: none; } @@ -438,11 +446,11 @@ ul.tsd-descriptions.active > .tsd-description.current { } .tsd-page-navigation { - margin-bottom: 0.5rem; + margin-bottom: 1rem; } .tsd-navigation.settings { - margin-bottom: 0.5rem; + margin-bottom: 1rem; } .tsd-accordion-summary > h3, @@ -454,7 +462,7 @@ ul.tsd-descriptions.active > .tsd-description.current { .tsd-theme-toggle { display: flex; align-items: center; - padding: 0.25rem 0 0 2rem; + padding: 0; } .tsd-theme-toggle > h4 { @@ -473,18 +481,14 @@ ul.tsd-descriptions.active > .tsd-description.current { } .tsd-subicon { - width: 12px; - height: 12px; - min-width: 12px; - min-height: 12px; + width: 10px; + height: 10px; + min-width: 10px; + min-height: 10px; position: absolute; left: 13px; } -.tsd-subicon-text { - fill: var(--color-text); -} - .tsd-subicon.static { top: 1px; } diff --git a/api/assets/navigation.js b/api/assets/navigation.js index 50795dba5..2f7cb146e 100644 --- a/api/assets/navigation.js +++ b/api/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,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" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,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" \ No newline at end of file diff --git a/api/symbols/AriaCommandHandler.html b/api/symbols/AriaCommandHandler.html new file mode 100644 index 000000000..461874c58 --- /dev/null +++ b/api/symbols/AriaCommandHandler.html @@ -0,0 +1,147 @@ +AriaCommandHandler | GoJS API

Class AriaCommandHandler

GoJS® Diagramming Components
version 3.0.0-b1
by Northwoods Software®

This is an extension and not part of the main GoJS library. Note that the API for this class may change at any time. If you intend to use an extension in production, you should copy the code to your own source directory. See the Extensions intro page for more information.

Hierarchy

This custom CommandHandler is an example of how screen reader accessibility can be added to diagrams with an aria-live DIV.

+

This CommandHandler adds more key commands for a user:

+
    +
  • Arrow keys: Change selection to a new node, if possible, based on direction. This is added to an internal navigation history.
  • +
  • b: Give a description of which nodes are adjacent to the currently selected node
  • +
  • x: Go backwards in the navigation history
  • +
  • c: Go forwards in the navigation history
  • +
+

This custom CommandHandler is meant as a starting point to create a more individualized CommandHandler for your unique use case. +Certain data and attributes of nodes that are different between diagrams may be important to the accessibility interpretation. +When describing a Part, this example calls getPartText, which uses the Part.text if it is specified, otherwise the Part.key. +You'll want to modify this to suit your needs.

+

If you want to experiment with this extension, try the Accessibility sample.

+
Index

Accessors

Methods

Constructors

Methods

  • Clears the text on the aria region and sets it to the passed message.

    +

    Parameters

    • message: string

      the string to read

      +

    Returns void

  • Checks for a node in each direction and build a message to be called based on +if there is and which nodes are around the currently selected one

    +

    Returns void

  • This implements custom behaviors for arrow key keyboard events. +to affect the behavior when the user types an arrow key.

    +

    Returns void

  • Given a Part, return the text that the aria label should read +By default this uses Part.text, unless it is empty, then it uses Part.key +This can be overridden to return arbitrary text based on Part data, etc.

    +

    Parameters

    Returns string

Properties

\ No newline at end of file diff --git a/api/symbols/AvoidsLinksRouter.html b/api/symbols/AvoidsLinksRouter.html new file mode 100644 index 000000000..5c33176ad --- /dev/null +++ b/api/symbols/AvoidsLinksRouter.html @@ -0,0 +1,87 @@ +AvoidsLinksRouter | GoJS API

Class AvoidsLinksRouter

GoJS® Diagramming Components
version 3.0.0-b1
by Northwoods Software®

This is an extension and not part of the main GoJS library. Note that the API for this class may change at any time. If you intend to use an extension in production, you should copy the code to your own source directory. See the Extensions intro page for more information.

Hierarchy

A way of reducing the number of cases where link segments of orthogonal links overlap.

+

Typical setup:

+
  myDiagram.routers.add(new AvoidsLinksRouter());
+
+

If you want to experiment with this extension, try the AvoidsLinksRouter sample.

+
Index

Constructors

Accessors

  • Gets or sets whether the AvoidsLinksRouter should reduce spacing between separated Links to avoid overlap +with nearby Nodes. If avoidsNodes is false, all separated links will have a distance of exactly linkSpacing, +even if this causes them to cross over a nearby Node.

    +

    The default value is true.

    +
  • Gets or sets the number of times the AvoidsLinksRouter will run iteratively. +In the vast majority of cases, one iteration should be enough and this parameter should not need to be modified. +Multiple iterations may be useful when numerous links coincide, particularly when they are close to Nodes with avoidsNodes set to true.

    +

    The default value is 1.

    +
  • Gets or sets the desired distance between Links that are separated by AvoidsLinksRouter. +If avoidsNodes is true, this value is the maximum allowed distance between such links, +but the distance could be smaller to avoid overlapping Nodes.

    +

    The default value is 4.

    +

Methods

  • Only route once, at the top level

    +

    Parameters

    Returns boolean

  • Parameters

    • a: number
    • b: number

    Returns boolean

  • Because of canRoute, the first argument here is always a Diagram.

    +

    Parameters

    Returns void

\ No newline at end of file diff --git a/api/symbols/Router.html b/api/symbols/Router.html new file mode 100644 index 000000000..d861be223 --- /dev/null +++ b/api/symbols/Router.html @@ -0,0 +1,115 @@ +Router | GoJS API

Class RouterAbstract

GoJS® Diagramming Components
version 3.0.0-b1
by Northwoods Software®

Hierarchy

A Router is a class that is responsible for the paths of a collection of Links.

+

Some routers modify the Link.points of some Links in ways that the default +routing provided by Link.computePoints cannot, because the latter method +only considers the properties of the Link and its connected ports -- not other Nodes or Links.

+

Some routers modify other aspects of Links.

+

The most commonly used Router is the +<a href="../../extensions/AvoidsLinksRouter.js>AvoidsLinksRouter extension +in the extensions or extensionsJSM directories.

+

The Router class is abstract and does not really provide any functionality of its own. +You can install a Router subclass by constructing and initializing it and then inserting +it into the Diagram.routers list.

+
myDiagram.routers.add(new AvoidsLinksRouter());
+
+

A Router that has been installed will automatically operate on the Links of Groups or +the top-level Links of the Diagram.

+

You can disable a Router by setting its isEnabled property to false, +or by overriding canRoute to decide when it should operate.

+

Your subclass of Router should override routeLinks method in order +to examine the Links implicitly given to the method.

+
since

3.0

+
Index

Constructors

  • Don't construct this directly -- this is an abstract class.

    +

    Parameters

    • Optional init: Partial<Router>

    Returns Router

Accessors

  • Gets or sets the Diagram this router is associated with. +Routers cannot be shared.

    +
  • Gets or sets whether this router is enabled.

    +
  • Gets or sets whether this router runs during real-time operations, such as dragging or resizing. +The default is true.

    +
  • Gets or sets the name of this router.

    +

Methods

  • Determine for the given collection if this router can route.

    +

    Adding a Router to the Diagram will cause the Diagram to call canRoute for every group recursively, +and finally for the Diagram itself.

    +

    By default this just returns the value of isEnabled. +If true, routeLinks will be called on each collection.

    +

    An override of this method should return false if isEnabled is false.

    +

    This method is only called by the Diagram. If using a Router without adding it to a Diagram, this method will never be called.

    +

    Parameters

    Returns boolean

  • If this router has been added to a diagram, calling this method will ensure the Diagram re-runs all routing.

    +

    The router should call this method when setting properties that might require the router to re-run when values change.

    +

    Returns void

  • Route the links for a given collection (Group or Diagram). By default this is called +in a depth-first manner on every Group in the Diagram, and then the Diagram itself. +If a layout occurred for a Group or a Diagram, this is called immediately afterwards +if canRoute returns true.

    +

    It is common to route all links in each Group's Group.memberParts, +and then all top-level links in the Diagram.links collection. +(All Links that have Part.containingGroup === null)

    +

    The first argument is a Set of Links that the Diagram has collected which it considers invalid. +Typically, these are the only links that need routing. Since routeLinks is called with each Group +and then the Diagram, you should check the Part.containingGroup on each Link to ensure it matches:

    +
     public routeLinks(links: GSet<Link>, coll?: Diagram | Group): void {
    const container = coll instanceof Diagram ? null : coll;
    const it = links.iterator;
    while (it.next()) {
    const link = it.value;
    // Only operate on links that are in the corresponding collection, if one is given
    if (coll && link.containingGroup !== container) continue;
    . . . +
    +

    This method should not check the canRoute predicate.

    +

    Parameters

    • links: Set<Link>

      The set of links that were recently recomputed, which may need routing.

      +
    • Optional coll: Diagram | Group

      A Diagram or Group on which the Router will operate. +When calling a router manually, this does not need to be specified.

      +

    Returns void

\ No newline at end of file diff --git a/api/symbols/Theme.html b/api/symbols/Theme.html new file mode 100644 index 000000000..d3f6e9b04 --- /dev/null +++ b/api/symbols/Theme.html @@ -0,0 +1,93 @@ +Theme | GoJS API

Interface Theme

GoJS® Diagramming Components
version 3.0.0-b1
by Northwoods Software®

An interface describing a theme.

+

The various optional properties this interface provides are the default +object names used to lookup some binding target properties. For example, +Panel.padding is looked up in the margins object and +Shape.strokeWidth and GraphObject.opacity are looked up in the numbers object.

+

While the indexer can be used for other arbitrary objects, we suggest using the optional named properties +here for their respective purposes.

+
since

3.0

+

Indexable

[index: string]: ThemeValues<any> | undefined

The string index, allowing for any other ThemeValues object

+
Index

Properties

The arrowheads used for Link shapes. +Values should correspond with valid arrowhead names for Shape.fromArrow and Shape.toArrow.

+

Built-in themes provide a toArrow value for the default link template.

+

The colors used by the theme. +See ThemeColors.

+

The fonts used by the theme.

+

Built-in themes provide values for normal and bold fonts.

+

The Margins used by the theme.

+

Built-in themes provide a group value for the default Group template's Placeholder.padding.

+

The numbers used by the theme, most commonly specifying stroke widths.

+

Built-in themes provide values for group and selection stroke widths.

+

The Points used by the theme.

+

The Rects used by the theme.

+

The Sizes used by the theme.

+

The Spots used by the theme.

+

A map of GraphObject target properties to Theme objects. +This determines where a lookup will occur for a given property. +For example, one might map Shape.fill to the colors object via "fill" -> "colors".

+

If not defined, or a target property is missing, some sensible defaults are provided.

+
\ No newline at end of file diff --git a/api/symbols/ThemeBinding.html b/api/symbols/ThemeBinding.html new file mode 100644 index 000000000..3978efb1e --- /dev/null +++ b/api/symbols/ThemeBinding.html @@ -0,0 +1,141 @@ +ThemeBinding | GoJS API

Class ThemeBinding

GoJS® Diagramming Components
version 3.0.0-b1
by Northwoods Software®

Hierarchy

A ThemeBinding describes how to automatically set a property on a GraphObject +to a value of a property in a Theme. +The target property name and the data source property name must be strings. +All name matching is case-sensitive.

+

Register theme bindings by calling GraphObject.theme +or another method whose name starts with "theme".

+

For example, your theme might be like:

+
{ colors: { primary: 'red' } }
+
+

Your simple node template might be like:

+
  myDiagram.nodeTemplate =
new go.Node("Auto").add(
new go.Shape().theme("fill" , "primary"),
new go.TextBlock("Hello", { font: "bold 11pt sans-serif" })
); +
+

The theme binding causes the Shape.fill property of +the Shape to be set to the value of the theme's "primary" property. +If the value of the "primary" property of a particular theme object is undefined, +the binding is not evaluated: the target property is not set. +If there is an error with the theme binding, you may see a message in the console log. +For this reason you may want to explicitly set the initial value for a property +when defining the GraphObject, since that value will remain as the default value +if the ThemeBinding is not evaluated.

+

Just like Bindings, it's possible to use different source objects. +The typical source is the Theme itself, but one can also use a property of a data object in the model. +another GraphObject in the same Part, or the shared JavaScript object that is the value of Model.modelData. +The values from these other sources are then used to perform the property lookup in the Theme object. +To use these other sources, one can call GraphObject.themeData, +GraphObject.themeObject, or GraphObject.themeModel. +Or modify the Binding by calling ofData, Binding.ofObject, or Binding.ofModel.

+

Note that ThemeBindings are always OneWay.

+

Existing bindings become read-only, and no new bindings may be added, +when a template (a Part) is copied. +Bindings will be shared by all copies of the template's GraphObjects.

+

For more information about bindings see Binding documentation. +For more information on theming, see the Theming intro page.

+
since

3.0

+
Index

Constructors

Accessors

Methods

Constructors

  • The constructor creates a Theme binding, where the source value is looked up by the ThemeManager..

    +

    Parameters

    • Optional targetprop: string

      A string naming the target property on the target object. + This should not be the empty string.

      +
    • Optional sourceprop: string

      A string naming the source property, which could be on the Theme, data object, GraphObject, or shared model data object. + If this argument is not supplied, the source property is assumed to be the same as the target property.

      +
    • Optional themeSource: string

      The source object on the Theme to find the value for the source property name. + If this argument is null or not supplied, the empty string is used.

      +
    • Optional conv: ((val: any, targetObj: any) => any)

      A side-effect-free function converting the source property value to lookup in the Theme. + If the function is null or not supplied, no conversion takes place.

      +
        • (val: any, targetObj: any): any
        • Parameters

          • val: any
          • targetObj: any

          Returns any

    • Optional themeConverter: ((val: any, targetObj: any) => any)

      An optional side-effect-free function converting the theme value to the value to set the target property. + If the function is null or not supplied, no conversion takes place.

      +
        • (val: any, targetObj: any): any
        • Parameters

          • val: any
          • targetObj: any

          Returns any

    Returns ThemeBinding

Accessors

  • Gets or sets a converter function to apply to the theme property value +in order to produce the value to set to the target property. +The default value is null -- no conversion takes place. +Otherwise the value should be a function that takes one or two arguments and returns the desired value.

    +

    Conversion functions must not have any side-effects.

    +

    The function is passed the value from the theme +(the first argument) and the target GraphObject (the second argument). +The targetProperty is set to the function's return value.

    +
    since

    3.0

    +
  • Gets or sets the source object on a Theme for a lookup.

    +

    This can be used to refine where in the Theme to look, sometimes useful to avoid the need for a conversion function.

    +
    {
    colors: {
    sex: {
    M: 'blue',
    F: 'pink'
    }
    }
    }
    ...
    myDiagram.nodeTemplate =
    new go.Node("Auto").add(
    new go.Shape().themeData("fill", "sex", "sex"), // lookup the "sex" data value in the "sex" Theme object
    ...
    ) +
    +
    defaultValue

    '' -- the theme will be be searched without any additional object constraint

    +

Methods

  • Modify this ThemeBinding so that the source is a data object.

    +

    Note that one can also call ofObject or ofModel as ThemeBinding is +a subclass of Binding.

    +

    Returns Binding

    this ThemeBinding with a data object source.

    +
    see +
\ No newline at end of file diff --git a/api/symbols/ThemeColors.html b/api/symbols/ThemeColors.html new file mode 100644 index 000000000..24355b677 --- /dev/null +++ b/api/symbols/ThemeColors.html @@ -0,0 +1,96 @@ +ThemeColors | GoJS API

Interface ThemeColors

GoJS® Diagramming Components
version 3.0.0-b1
by Northwoods Software®

An interface describing an object with string or number keys and BrushLike values.

+

The optional properties on this interface outline various values used by default templates.

+

Setting these values allows for some customization of built in templates without providing new +definitions. For example, one could use the default link template and customize the color:

+
myDiagram.themeManager.set('', {
colors: { link: 'turquoise' }
}); +
+

Or change the color of the selection adornment without providing custom selectionAdornmentTemplates:

+
myDiagram.themeManager.set('', {
colors: { selection: 'pink' }
}); +
+
since

3.0

+

Indexable

[index: string]: BrushLike | BrushLike[] | ThemeColors | undefined

The index property, allowing for any other color or group of colors to be defined.

+
Index

Properties

The fill color of the various default tool handles, such as ResizingTool.handle.

+

The stroke color of the various default tool handles, such as ResizingTool.handle.

+

The stroke color of the built in "Comment" node template and link template.

+

The background color of the diagram's div, if using ThemeManager.changesDivBackground.

+

The stroke color of the default DragSelectingTool.box.

+

The stroke color of major gridlines in the default Diagram.grid.

+

The stroke color of minor gridlines in the default Diagram.grid.

+

The fill color of the built in group shape.

+

The stroke/fill color the built in link template and link label.

+

The stroke color of the built in group shape.

+

The stroke color of the default Overview.box.

+

The stroke color of the default selection adornment.

+

The stroke color of the default LinkingBaseTool.temporaryLink.

+

The text color of the built in node, group, and item template.

+
\ No newline at end of file diff --git a/api/symbols/ThemeManager.html b/api/symbols/ThemeManager.html new file mode 100644 index 000000000..08d273b9a --- /dev/null +++ b/api/symbols/ThemeManager.html @@ -0,0 +1,145 @@ +ThemeManager | GoJS API

Class ThemeManager

GoJS® Diagramming Components
version 3.0.0-b1
by Northwoods Software®

This class is responsible for managing a Diagram's theming (or multiple Diagrams, if shared).

+

Read more about theming at Theming.

+

Your templates can make use of the values held by the current Theme by calling +GraphObject.theme or GraphObject.themeData or GraphObject.themeModel methods, +or by adding a ThemeBinding to a GraphObject when using GraphObject.make. +All theme bindings are OneWay only -- from source data to target GraphObject property.

+

Use GraphObject.theme to look up a value directly from the current Theme. +Use GraphObject.themeData to look up a value in the current Theme based on the value +of a data property. +Use GraphObject.themeModel to look up a value in the current Theme based on the value +of a data property on the Model.modelData shared object.

+

For example:

+
myDiagram.nodeTemplate =
new go.Node('Auto').add(
new go.Shape('RoundedRectangle', { strokeWidth: 2 })
.theme('fill', 'primary') // Shape.fill is set to the current theme's colors.primary
.theme('stroke', 'border'), // Shape.stroke is set to the current theme's colors.border
new go.TextBlock({ margin: 8 })
.bind('text', 'key')
.theme('stroke', 'text') // stroke color is a dark or light gray
); +
+

See Themes for the definitions of the two predefined Themes that are normally used.

+

There are additional theming resources defined in +Themes.js +in the extensions or extensionsJSM directories.

+
since

3.0

+
Index

Constructors

Accessors

  • Gets or sets whether this ThemeManager changes the div background color when currentTheme changes.

    +

    If true, the background color will be set to the CSS color string denoted by the div property +of the Theme.colors object.

    +
    defaultValue

    false

    +
  • Gets or sets the current theme for this ThemeManager.

    +

    A value of system will rely on the browser's preferred color scheme, +using light or dark themes.

    +
    defaultValue

    light

    +
  • Gets or sets the default theme for this ThemeManager.

    +

    This property determines which theme is used as a fallback if a lookup +doesn't find a value in the current theme.

    +
    defaultValue

    light

    +
  • Gets or sets the map of theme names -> Themes for this ThemeManager.

    +

Methods

  • Finds the Theme with the specified name, or if the name is system, the preferred light or dark theme.

    +

    Parameters

    • themeName: string

      the theme name to get from themeMap

      +

    Returns Theme

    a Theme, or undefined if the Theme was not found

    +
  • Finds a value in this ThemeManager's themes.

    +

    By default, this first looks in the currentTheme, then the defaultTheme. +Because findTheme is called, this method also handles currentTheme being system.

    +

    The default implementation is:

    +
    return this.getValue(this.findTheme(this.currentTheme), prop, source, tprop) || this.getValue(this.findTheme(this.defaultTheme), prop, source, tprop);
    +
    +

    This method may be overridden to search Themes in different orders. +Please read the Introduction page on Extensions for how to override methods and how to call this base method.

    +

    Parameters

    • prop: string | number | string[]

      a property to search for in the Theme, + also accepting '.'-separated paths, an array of strings representing a path, or an index to an array element

      +
    • Optional source: string | string[]

      where to perform the lookup within the Theme object

      +
    • Optional tprop: string

      an optional target property name, used if a full path is not provided, + which can determine the property on the Theme object to search via Theme.targetPropertyMap

      +

    Returns any

    the value found, or undefined if not found

    +
  • Gets a value from the given Theme.

    +

    Parameters

    • theme: Theme

      the Theme to search

      +
    • prop: string | number | string[]

      a property to search for in the Theme, + also accepting '.'-separated paths, an array of strings representing a path, or an index to an array element

      +
    • Optional source: string | string[]

      where to perform the lookup within the Theme object

      +
    • Optional tprop: string

      an optional target property name, used if a full path is not provided, + which can determine the property on the Theme object to search via Theme.targetPropertyMap

      +

    Returns any

    the value in the given Theme, or undefined if not found

    +
  • Set a particular theme and update all associated theme bindings. +Note that this will modify the named Theme object via a merge if it exists.

    +

    If passed system, this method will create/update the preferredColorScheme theme.

    +

    Parameters

    • themeName: string

      which theme to change, or the empty string to update the default theme

      +
    • props: Partial<Theme>

      a partial Theme object to merge into the given theme or add as a new theme

      +

    Returns ThemeManager

    this

    +
\ No newline at end of file diff --git a/api/symbols/ThemeValues.html b/api/symbols/ThemeValues.html new file mode 100644 index 000000000..bca00cf3b --- /dev/null +++ b/api/symbols/ThemeValues.html @@ -0,0 +1,57 @@ +ThemeValues | GoJS API

Interface ThemeValues<T>

GoJS® Diagramming Components
version 3.0.0-b1
by Northwoods Software®

An interface describing an object with string or number keys and values of a given type.

+
since

3.0

+

Type Parameters

  • T

Indexable

[index: string]: T
\ No newline at end of file diff --git a/api/symbols/Themes.html b/api/symbols/Themes.html new file mode 100644 index 000000000..814defd3f --- /dev/null +++ b/api/symbols/Themes.html @@ -0,0 +1,73 @@ +Themes | GoJS API

Class Themes

GoJS® Diagramming Components
version 3.0.0-b1
by Northwoods Software®

This static class specifies the built in themes.

+

Light and Dark are the default light and dark themes +initialized by the ThemeManager. Note that these themes are complete, +so if you update values in the light theme, you'll also need to update the dark theme since +the values exist in both and won't use a default fallback.

+
since

3.0

+
Index

Properties

Properties

The default dark theme used by ThemeManager. +The name of this theme is "dark".

+

Defined as the following:

+
{
colors: {
text: '#f5f5f5', // Neutral 100
comment: '#facc15', // Yellow 400
link: '#f5f5f5', // Neutral 100
group: '#a3a3a388', // Neutral 400, partially transparent
outline: '#a3a3a3', // Neutral 400
selection: '#38bdf8', // Sky 400
div: '#171717', // Neutral 900
gridMinor: '#262626', // Neutral 800
gridMajor: '#404040', // Neutral 700
overviewBox: '#e879f9', // Fuschia 400
tempLink: '#60a5fa', // Blue 400
tempPort: '#e879f9', // Fuschia 400
adornmentFill: '#38bdf8', // Sky 400
adornmentStroke: '#2563eb', // Blue 600
dragSelect: '#e879f9' // Fuschia 400
},
fonts: {
normal: '10pt sans-serif',
bold: 'bold 12pt sans-serif'
},
numbers: {
group: 1, // group strokeWidth
selection: 3 // selection strokeWidth
},
margins: {
group: new Margin(5) // group padding
},
arrowheads: {
toArrow: 'Standard'
}
} +
+

The default light theme used by ThemeManager. +The name of this theme is "light".

+

Defined as the following:

+
{
colors: {
text: '#0a0a0a', // Neutral 950
comment: '#ca8a04', // Yellow 600
link: '#0a0a0a', // Neutral 950
group: '#a3a3a344', // Neutral 400, partially transparent
outline: '#a3a3a3', // Neutral 400
selection: '#0ea5e9', // Sky 500
div: '#fff',
gridMinor: '#e5e5e5', // Neutral 200
gridMajor: '#a3a3a3', // Neutral 400
overviewBox: '#c026d3', // Fuschia 600
tempLink: '#2563eb', // Blue 600
tempPort: '#c026d3', // Fuschia 600
adornmentFill: '#0ea5e9', // Sky 500
adornmentStroke: '#1e40af', // Blue 800
dragSelect: '#c026d3' // Fuschia 600
},
fonts: {
normal: '10pt sans-serif',
bold: 'bold 12pt sans-serif'
},
numbers: {
group: 1, // group strokeWidth
selection: 3 // selection strokeWidth
},
margins: {
group: new Margin(5) // group padding
},
arrowheads: {
toArrow: 'Standard'
}
} +
+
\ No newline at end of file diff --git a/assets/css/style.css b/assets/css/style.css index 7df8f8053..170f10084 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -1 +1 @@ -/*! tailwindcss v3.1.8 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}html{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}body{font-size:.875rem;letter-spacing:0;line-height:1.25rem;line-height:1.5}img{aspect-ratio:attr(width) /attr(height)}.box{margin:1rem;padding:1rem}.bg-danger{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.bg-info{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.diagramStyling{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}h1{font-size:2.25rem;line-height:2.5rem;line-height:1}h1,h2{font-weight:700;margin-bottom:.75rem;margin-top:.75rem}h2{font-size:1.875rem;line-height:2.25rem;line-height:1}h3{font-size:1.5rem;line-height:2rem;line-height:1}h3,h4{font-weight:600;margin-bottom:.75rem;margin-top:.75rem}h4{font-size:1.25rem;line-height:1.75rem;line-height:1}a{color:rgb(3 102 214/var(--tw-text-opacity));text-decoration-line:none;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}a,a:hover{--tw-text-opacity:1}a:hover{box-shadow:inset 0 -1px 0 0 #fff,inset 0 -2px 0 0 rgba(31,73,99,.45);color:rgb(31 73 99/var(--tw-text-opacity))}.\!button a,.button a,.sidebar-nav a,.topnav-link a{--tw-text-opacity:1;color:rgb(98 127 145/var(--tw-text-opacity))}.button a:hover,.sidebar-nav a:hover,.topnav-link a:hover{box-shadow:inherit}.\!button a:hover,.sidebar-nav a:hover,.topnav-link a:hover{box-shadow:inherit!important}footer a{box-shadow:inset 0 -1px 0 0 hsla(0,0%,100%,.35),inset 0 -2px 0 0 rgba(31,73,99,.45)}footer a,footer a:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}ol,p,ul{padding-bottom:.75rem}ol,ul{list-style-position:inside;list-style-type:disc;padding-left:1rem;padding-right:1rem}input,textarea{padding:.5rem}input,select,textarea{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity));border-radius:.125rem;border-width:1px}pre{background:#272822;border-radius:.3em;color:#fff;margin:.5em 0;overflow:auto;padding:1em}code[class*=lang],pre[class*=lang],pre[class*=lang] code{background:#272822;color:#d4d4d4;direction:ltr;font-family:Menlo,Monaco,Consolas,Andale Mono,Ubuntu Mono,Courier New,monospace;font-size:13px;-webkit-hyphens:none;hyphens:none;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;text-align:left;text-shadow:none;white-space:pre;word-break:normal;word-spacing:normal}code{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity));border-radius:.125rem}canvas:focus{outline:2px solid transparent;outline-offset:2px}.\!button,.button,[type=button],button{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);background-color:rgb(31 73 99/var(--tw-bg-opacity));border-radius:.25rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(255 255 255/var(--tw-text-opacity));display:inline-block;margin:.25rem;padding:.25rem .5rem}.\!button:hover,.button:hover,button:hover{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);background-color:rgb(98 127 145/var(--tw-bg-opacity));box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(255 255 255/var(--tw-text-opacity));transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.bigger{font-weight:700;margin-bottom:.5rem;margin-top:.5rem;padding:1rem}.sidebar-nav>a{border-radius:.5rem;display:block;font-weight:600;padding:.25rem 1rem}.sidebar-nav>a:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(31 73 99/var(--tw-bg-opacity));color:rgb(243 244 246/var(--tw-text-opacity))}.topnav-link{--tw-text-opacity:1;border-radius:.5rem;color:rgb(255 255 255/var(--tw-text-opacity));padding:.5rem}.topnav-link:hover{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;background-color:rgb(98 127 145/var(--tw-bg-opacity));box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(255 255 255/var(--tw-text-opacity))}.feature-grid div{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity));border-top-width:1px;margin-top:2rem;padding-top:2rem}.feature-grid:nth-child(n)>:first-child,.feature-grid:nth-child(n)>:nth-child(2){border-top-width:0;margin-top:0;padding-top:0}@media (min-width:1024px){.feature-grid:nth-child(n)>:nth-child(3){border-top-width:0;margin-top:0;padding-top:0}}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{bottom:0;left:0;right:0;top:0}.top-0{top:0}.z-30{z-index:30}.z-20{z-index:20}.z-50{z-index:50}.row-span-2{grid-row:span 2/span 2}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-bottom:0;margin-top:0}.my-4{margin-bottom:1rem;margin-top:1rem}.my-6{margin-bottom:1.5rem;margin-top:1.5rem}.my-3{margin-bottom:.75rem;margin-top:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.my-1{margin-bottom:.25rem;margin-top:.25rem}.mt-0{margin-top:0}.mb-8{margin-bottom:2rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mt-6{margin-top:1.5rem}.mt-4{margin-top:1rem}.mt-1{margin-top:.25rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-6{height:1.5rem}.h-full{height:100%}.min-h-screen{min-height:100vh}.w-full{width:100%}.w-6{width:1.5rem}.w-auto{width:auto}.w-4\/5{width:80%}.w-14{width:3.5rem}.w-16{width:4rem}.w-5\/6{width:83.333333%}.w-64{width:16rem}.max-w-screen-lg{max-width:1024px}.max-w-5xl{max-width:64rem}.max-w-screen-xl{max-width:1280px}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.flex-grow,.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.resize{resize:both}.list-none{list-style-type:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-y-10{row-gap:2.5rem}.gap-x-12{-moz-column-gap:3rem;column-gap:3rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.break-words{overflow-wrap:break-word}.rounded-xl{border-radius:.75rem}.rounded-lg{border-radius:.5rem}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.bg-nwoods-primary{--tw-bg-opacity:1;background-color:rgb(31 73 99/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-nwoods-secondary{--tw-bg-opacity:1;background-color:rgb(98 127 145/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.p-1{padding:.25rem}.p-0{padding:0}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-2{padding:.5rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.px-0{padding-left:0;padding-right:0}.py-0{padding-bottom:0;padding-top:0}.px-2{padding-left:.5rem;padding-right:.5rem}.px-12{padding-left:3rem;padding-right:3rem}.px-8{padding-left:2rem;padding-right:2rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.pb-0{padding-bottom:0}.pt-4{padding-top:1rem}.pb-16{padding-bottom:4rem}.pb-6{padding-bottom:1.5rem}.pb-8{padding-bottom:2rem}.pb-4{padding-bottom:1rem}.text-center{text-align:center}.text-xs{font-size:.75rem;line-height:1rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-5xl{font-size:3rem;line-height:1}.font-bold{font-weight:700}.font-semibold{font-weight:600}.font-medium{font-weight:500}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.italic{font-style:italic}.leading-none{line-height:1}.leading-tight{line-height:1.25}.leading-normal{line-height:1.5}.tracking-wide{letter-spacing:.025em}.tracking-normal{letter-spacing:0}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.text-nwoods-secondary{--tw-text-opacity:1;color:rgb(98 127 145/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.opacity-50{opacity:.5}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.hover\:bg-nwoods-secondary:hover{--tw-bg-opacity:1;background-color:rgb(98 127 145/var(--tw-bg-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.hover\:no-underline:hover{text-decoration-line:none}.hover\:shadow-none:hover{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:drop-shadow-md:hover{--tw-drop-shadow:drop-shadow(0 4px 3px rgba(0,0,0,.07)) drop-shadow(0 2px 2px rgba(0,0,0,.06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.group:hover .group-hover\:opacity-75{opacity:.75}@media (min-width:640px){.sm\:block{display:block}.sm\:hidden{display:none}.sm\:w-1\/2{width:50%}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:p-0{padding:0}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width:768px){.md\:mb-6{margin-bottom:1.5rem}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:min-h-screen{min-height:100vh}.md\:w-2\/5{width:40%}.md\:w-3\/5{width:60%}.md\:w-full{width:100%}.md\:w-48{width:12rem}.md\:w-40{width:10rem}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.md\:overflow-y-auto{overflow-y:auto}.md\:p-8{padding:2rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:px-0{padding-left:0;padding-right:0}.md\:pl-4{padding-left:1rem}.md\:pb-0{padding-bottom:0}.md\:text-left{text-align:left}}@media (min-width:1024px){.lg\:mr-0{margin-right:0}.lg\:ml-4{margin-left:1rem}.lg\:h-80{height:20rem}.lg\:h-full{height:100%}.lg\:w-48{width:12rem}.lg\:w-full{width:100%}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:px-0{padding-left:0;padding-right:0}.lg\:text-4xl{font-size:2.25rem;line-height:2.5rem}}@media (min-width:1280px){.xl\:max-w-screen-xl{max-width:1280px}.xl\:gap-x-8{-moz-column-gap:2rem;column-gap:2rem}} \ No newline at end of file +/*! tailwindcss v3.1.8 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}html{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}body{font-size:.875rem;letter-spacing:0;line-height:1.25rem;line-height:1.5}img{aspect-ratio:attr(width) /attr(height)}.box{margin:1rem;padding:1rem}.bg-danger{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.bg-info{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.diagramStyling{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}h1{font-size:2.25rem;line-height:2.5rem;line-height:1}h1,h2{font-weight:700;margin-bottom:.75rem;margin-top:.75rem}h2{font-size:1.875rem;line-height:2.25rem;line-height:1}h3{font-size:1.5rem;line-height:2rem;line-height:1}h3,h4{font-weight:600;margin-bottom:.75rem;margin-top:.75rem}h4{font-size:1.25rem;line-height:1.75rem;line-height:1}a{color:rgb(3 102 214/var(--tw-text-opacity));text-decoration-line:none;transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}a,a:hover{--tw-text-opacity:1}a:hover{box-shadow:inset 0 -1px 0 0 #fff,inset 0 -2px 0 0 rgba(31,73,99,.45);color:rgb(31 73 99/var(--tw-text-opacity))}.\!button a,.button a,.sidebar-nav a,.topnav-link a{--tw-text-opacity:1;color:rgb(98 127 145/var(--tw-text-opacity))}.button a:hover,.sidebar-nav a:hover,.topnav-link a:hover{box-shadow:inherit}.\!button a:hover,.sidebar-nav a:hover,.topnav-link a:hover{box-shadow:inherit!important}footer a{box-shadow:inset 0 -1px 0 0 hsla(0,0%,100%,.35),inset 0 -2px 0 0 rgba(31,73,99,.45)}footer a,footer a:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}ol,p,ul{padding-bottom:.75rem}ol,ul{list-style-position:inside;list-style-type:disc;padding-left:1rem;padding-right:1rem}input,textarea{padding:.5rem}input,select,textarea{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity));border-radius:.125rem;border-width:1px}pre{background:#272822;border-radius:.3em;color:#fff;margin:.5em 0;overflow:auto;padding:1em}code[class*=lang],pre[class*=lang],pre[class*=lang] code{background:#272822;color:#d4d4d4;direction:ltr;font-family:Menlo,Monaco,Consolas,Andale Mono,Ubuntu Mono,Courier New,monospace;font-size:13px;-webkit-hyphens:none;hyphens:none;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;text-align:left;text-shadow:none;white-space:pre;word-break:normal;word-spacing:normal}code{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity));border-radius:.125rem}canvas:focus{outline:2px solid transparent;outline-offset:2px}.\!button,.button,[type=button],button{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);background-color:rgb(31 73 99/var(--tw-bg-opacity));border-radius:.25rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(255 255 255/var(--tw-text-opacity));display:inline-block;margin:.25rem;padding:.25rem .5rem}.\!button:hover,.button:hover,button:hover{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);background-color:rgb(98 127 145/var(--tw-bg-opacity));box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(255 255 255/var(--tw-text-opacity));transition-duration:.2s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.bigger{font-weight:700;margin-bottom:.5rem;margin-top:.5rem;padding:1rem}.sidebar-nav>a{border-radius:.5rem;display:block;font-weight:600;padding:.25rem 1rem}.sidebar-nav>a:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(31 73 99/var(--tw-bg-opacity));color:rgb(243 244 246/var(--tw-text-opacity))}.topnav-link{--tw-text-opacity:1;border-radius:.5rem;color:rgb(255 255 255/var(--tw-text-opacity));padding:.5rem}.topnav-link:hover{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;background-color:rgb(98 127 145/var(--tw-bg-opacity));box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(255 255 255/var(--tw-text-opacity))}.feature-grid div{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity));border-top-width:1px;margin-top:2rem;padding-top:2rem}.feature-grid:nth-child(n)>:first-child,.feature-grid:nth-child(n)>:nth-child(2){border-top-width:0;margin-top:0;padding-top:0}@media (min-width:1024px){.feature-grid:nth-child(n)>:nth-child(3){border-top-width:0;margin-top:0;padding-top:0}}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{bottom:0;left:0;right:0;top:0}.top-0{top:0}.right-0{right:0}.z-30{z-index:30}.z-20{z-index:20}.z-50{z-index:50}.row-span-2{grid-row:span 2/span 2}.m-0{margin:0}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-bottom:0;margin-top:0}.my-4{margin-bottom:1rem;margin-top:1rem}.my-6{margin-bottom:1.5rem;margin-top:1.5rem}.my-3{margin-bottom:.75rem;margin-top:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.my-1{margin-bottom:.25rem;margin-top:.25rem}.mt-0{margin-top:0}.mb-8{margin-bottom:2rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mt-6{margin-top:1.5rem}.mt-4{margin-top:1rem}.mt-1{margin-top:.25rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.table-cell{display:table-cell}.grid{display:grid}.contents{display:contents}.hidden{display:none}.h-6{height:1.5rem}.h-\[var\(--topnav-h\)\]{height:var(--topnav-h)}.h-\[calc\(var\(--topnav-h\)_-_1px\)\]{height:calc(var(--topnav-h) - 1px)}.h-7{height:1.75rem}.h-full{height:100%}.h-1{height:.25rem}.min-h-screen{min-height:100vh}.w-full{width:100%}.w-6{width:1.5rem}.w-auto{width:auto}.w-4\/5{width:80%}.w-14{width:3.5rem}.w-16{width:4rem}.w-5\/6{width:83.333333%}.w-64{width:16rem}.w-7{width:1.75rem}.max-w-screen-lg{max-width:1024px}.max-w-5xl{max-width:64rem}.max-w-screen-xl{max-width:1280px}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.flex-grow,.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.rotate-1{--tw-rotate:1deg}.rotate-1,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.resize{resize:both}.list-none{list-style-type:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-y-10{row-gap:2.5rem}.gap-x-12{-moz-column-gap:3rem;column-gap:3rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.break-words{overflow-wrap:break-word}.rounded-xl{border-radius:.75rem}.rounded-lg{border-radius:.5rem}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-gray-600{--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.bg-nwoods-primary{--tw-bg-opacity:1;background-color:rgb(31 73 99/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-nwoods-secondary{--tw-bg-opacity:1;background-color:rgb(98 127 145/var(--tw-bg-opacity))}.bg-inherit{background-color:inherit}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.object-cover{-o-object-fit:cover;object-fit:cover}.object-center{-o-object-position:center;object-position:center}.p-1{padding:.25rem}.p-0{padding:0}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-2{padding:.5rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.px-0{padding-left:0;padding-right:0}.py-0{padding-bottom:0;padding-top:0}.px-2{padding-left:.5rem;padding-right:.5rem}.px-12{padding-left:3rem;padding-right:3rem}.px-8{padding-left:2rem;padding-right:2rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.pb-0{padding-bottom:0}.pt-4{padding-top:1rem}.pb-16{padding-bottom:4rem}.pb-6{padding-bottom:1.5rem}.pb-8{padding-bottom:2rem}.pl-12{padding-left:3rem}.pb-4{padding-bottom:1rem}.text-center{text-align:center}.text-xs{font-size:.75rem;line-height:1rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-5xl{font-size:3rem;line-height:1}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.font-medium{font-weight:500}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.italic{font-style:italic}.leading-none{line-height:1}.leading-tight{line-height:1.25}.leading-normal{line-height:1.5}.\!leading-\[calc\(var\(--topnav-h\)_-_1px\)\]{line-height:calc(var(--topnav-h) - 1px)!important}.tracking-wide{letter-spacing:.025em}.tracking-normal{letter-spacing:0}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.text-nwoods-secondary{--tw-text-opacity:1;color:rgb(98 127 145/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.opacity-50{opacity:.5}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.ring{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.hover\:bg-nwoods-secondary:hover{--tw-bg-opacity:1;background-color:rgb(98 127 145/var(--tw-bg-opacity))}.hover\:\!bg-inherit:hover{background-color:inherit!important}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.hover\:no-underline:hover{text-decoration-line:none}.hover\:shadow-none:hover{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:\!shadow-none:hover{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.hover\:drop-shadow-md:hover{--tw-drop-shadow:drop-shadow(0 4px 3px rgba(0,0,0,.07)) drop-shadow(0 2px 2px rgba(0,0,0,.06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.group:hover .group-hover\:opacity-75{opacity:.75}@media (min-width:640px){.sm\:block{display:block}.sm\:hidden{display:none}.sm\:w-1\/2{width:50%}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:p-0{padding:0}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media (min-width:768px){.md\:mb-6{margin-bottom:1.5rem}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:min-h-screen{min-height:100vh}.md\:w-2\/5{width:40%}.md\:w-3\/5{width:60%}.md\:w-full{width:100%}.md\:w-48{width:12rem}.md\:w-40{width:10rem}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.md\:space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.md\:overflow-y-auto{overflow-y:auto}.md\:border-0{border-width:0}.md\:bg-inherit{background-color:inherit}.md\:p-0{padding:0}.md\:p-8{padding:2rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:px-0{padding-left:0;padding-right:0}.md\:pl-4{padding-left:1rem}.md\:pb-0{padding-bottom:0}.md\:text-left{text-align:left}.md\:shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}}@media (min-width:1024px){.lg\:mr-0{margin-right:0}.lg\:ml-4{margin-left:1rem}.lg\:h-80{height:20rem}.lg\:h-full{height:100%}.lg\:w-48{width:12rem}.lg\:w-full{width:100%}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:px-0{padding-left:0;padding-right:0}.lg\:text-4xl{font-size:2.25rem;line-height:2.5rem}.lg\:text-5xl{font-size:3rem;line-height:1}}@media (min-width:1280px){.xl\:max-w-screen-xl{max-width:1280px}.xl\:gap-x-8{-moz-column-gap:2rem;column-gap:2rem}} \ No newline at end of file diff --git a/changelog.html b/changelog.html index 9f090ae67..703730aef 100644 --- a/changelog.html +++ b/changelog.html @@ -129,6 +129,12 @@

General New Features in GoJS 2.3


+

Changes for 2.3.14

+ +

Changes for 2.3.13