lit#css TypeScript Examples

The following examples show how to use lit#css. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: DistanceGuide.ts    From figspec with MIT License 6 votes vote down vote up
styles = css`
  .distance-line {
    shape-rendering: geometricPrecision;
    fill: none;
    opacity: 0;
  }

  .distance-tooltip {
    opacity: 0;
  }

  .guide:hover ~ .distance-line,
  .guide:hover ~ .distance-tooltip {
    opacity: 1;
  }
`
Example #2
Source File: Footer.ts    From figspec with MIT License 6 votes vote down vote up
styles = css`
  .figma-footer {
    flex: 0;
    z-index: calc(var(--z-index) + 1);
    border-top: 1px solid #ccc;
    min-height: 48px;
    padding: 0 16px;
    text-decoration: none;
    display: flex;
    flex-direction: row;
    justify-content: start;
    align-items: center;
    background-color: #fff;
    overflow-x: auto;
    cursor: pointer;
    font-size: 12px;
    color: rgba(0, 0, 0, 0.8);
  }

  .figma-footer--icon {
    margin-right: 12px;
  }

  .figma-footer--title {
    font-weight: 600;
    margin-right: 4px;

    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  .figma-footer--timestamp {
    white-space: nowrap;
    overflow: hidden;
  }
`
Example #3
Source File: Node.ts    From figspec with MIT License 6 votes vote down vote up
styles = css`
  .guide {
    /*
     * SVGs cannot be pixel perfect, especially floating values.
     * Since many platform renders them visually incorrectly (probably they
     * are following the spec), it's safe to set overflow to visible.
     * Cropped borders are hard to visible and ugly.
     */
    overflow: visible;

    pointer-events: all;

    opacity: 0;
  }
  .guide:hover {
    opacity: 1;
  }
  .guide[data-selected] {
    opacity: 1;
    stroke: var(--guide-selected-color);
  }

  .tooltip {
    position: absolute;
    padding: 0.25em 0.5em;
    font-size: var(--guide-tooltip-font-size);

    color: var(--guide-selected-tooltip-fg);
    background-color: var(--guide-selected-tooltip-bg);
    border-radius: 2px;
    pointer-events: none;
    z-index: calc(var(--z-index) + 1);

    transform-origin: top center;
  }
`
Example #4
Source File: cesium-toolbar.ts    From ngm with BSD 3-Clause "New" or "Revised" License 6 votes vote down vote up
static styles = css`
    :host {
      position: absolute;
      background-color: #0000005c;
      color: white;
      margin-left: 5px;
      padding: 5px;
    }

    input[type=number] {
      width: 80px;
    }

    .divider {
      width: 100%;
      border: 1px solid #E0E3E6;
      margin: 5px 0;
    }
  `;
Example #5
Source File: ErrorMessage.ts    From figspec with MIT License 5 votes vote down vote up
styles = css`
  .error-background {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;

    background: var(--error-bg);
    color: var(--error-fg);
  }

  .error-container {
    max-width: 800px;
    margin: auto;
    padding: 1em;
  }

  .error-badge {
    display: inline-block;
    font-size: 0.8em;
    padding: 0.2em 0.5em;
    margin-inline-end: 0.5em;

    background: var(--error-color);
    border-radius: 2px;
    color: var(--error-bg);
    text-transform: uppercase;
  }

  .error-title {
    display: block;
    font-size: 1.2em;

    font-weight: bold;
    text-transform: capitalize;
  }

  .error-description {
    display: block;
    margin-block-start: 1em;
  }
`
Example #6
Source File: style.ts    From compass-card with MIT License 5 votes vote down vote up
style: CSSResult = css`
  :host ::slotted(.card-content:not(:first-child)),
  slot:not(:first-child)::slotted(.card-content) {
    padding-top: 0px;
    margin-top: -8px;
  }
  :host ::slotted(.card-content) {
    padding: 16px;
  }
  ha-card {
    flex-direction: column;
    flex: 1;
    position: relative;
    overflow: hidden;
  }
  .header {
    display: flex;
    justify-content: space-between;
    padding: 8px 16px 0px;
  }
  .header > .name {
    line-height: 40px;
    font-weight: 500;
    font-size: 16px;
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;
  }
  .icon {
    margin-top: 8px;
    float: right;
  }
  .compass {
    display: block;
    width: 100%;
    height: 152px;
    max-width: 152px;
    margin: 10px auto;
  }
  .content {
    height: 162px;
    position: relative;
    width: 100%;
    font-weight: normal;
    line-height: 28px;
  }
  .value-sensors {
    text-overflow: ellipsis;
    white-space: nowrap;
    position: absolute;
    text-align: center;
    top: 62px;
    left: 50%;
    transform: translateX(-50%);
  }
  .indicator-sensors {
    line-height: 18px;
    font-weight: 500;
    font-size: 16px;
    white-space: nowrap;
    text-overflow: ellipsis;
    text-align: center;
    overflow: hidden;
    position: absolute;
    top: 32px;
    left: 50%;
    transform: translateX(-50%);
  }
  .value-sensors .measurement {
    font-size: 18px;
  }
  .value-sensors .value {
    font-size: 28px;
  }
`
Example #7
Source File: style-editor.ts    From atomic-calendar-revive with MIT License 5 votes vote down vote up
style = css`
	.option {
		padding: 4px 0px;
		cursor: pointer;
	}
	.row {
		display: flex;
		margin-bottom: -14px;
		pointer-events: none;
	}
	.title {
		padding-left: 16px;
		margin-top: -6px;
		pointer-events: none;
	}
	.secondary {
		padding-left: 40px;
		color: var(--secondary-text-color);
		pointer-events: none;
	}
	.values {
		padding-left: 16px;
		background: var(--secondary-background-color);
	}
	ha-switch {
		padding-bottom: 8px;
		padding-top: 16px;
	}
	.mdc-label {
		margin-left: 12px;
		vertical-align: text-bottom;
	}
	.side-by-side {
		display: flex;
	}
	.side-by-side > * {
		flex: 1;
		padding-right: 4px;
	}
	.origin-calendar {
        width: 50%;
        margin-left: 35px;
    }
`
Example #8
Source File: styles.ts    From power-distribution-card with MIT License 4 votes vote down vote up
styles = css`
  * {
    box-sizing: border-box;
  }

  p {
    margin: 4px 0 4px 0;

    text-align: center;
  }

  .card-content {
    display: grid;
    overflow: auto;

    grid-template-columns: 1.5fr 1fr 1.5fr;
    column-gap: 10px;
  }

  #center-panel {
    display: flex;

    height: 100%;

    align-items: center;
    justify-content: center;
    grid-column: 2;
    flex-wrap: wrap;
  }

  #center-panel > div {
    display: flex;
    overflow: hidden;

    width: 100%;
    height: 100%;
    max-height: 200px;

    flex-basis: 50%;
    flex-flow: column;
  }

  #center-panel > div > p {
    flex: 0 1 auto;
  }

  .bar-wrapper {
    position: relative;

    width: 50%;
    height: 80%;
    margin: auto;

    flex: 1 1 auto;

    background-color: rgba(114, 114, 114, 0.2);
  }

  bar {
    position: absolute;
    right: 0;
    bottom: 0;
    left: 0;
    background-color: var(--secondary-text-color);
  }

  item {
    display: block;
    overflow: hidden;

    margin-bottom: 10px;

    cursor: pointer;
  }

  .buy-sell {
    height: 28px;
    display: flex;
    flex-direction: column;
    font-size: 11px;
    line-height: 14px;
    text-align: center;
  }

  .grid-buy {
    color: red;
  }

  .grid-sell {
    color: green;
  }

  .placeholder {
    height: 62px;
  }

  #right-panel > item > value {
    float: left;
  }

  #right-panel > item > badge {
    float: right;
  }

  badge {
    float: left;

    width: 50%;
    padding: 4px;

    border: 1px solid;
    border-color: var(--disabled-text-color);
    border-radius: 1em;

    position: relative;
  }

  icon > ha-icon {
    display: block;

    width: 24px;
    margin: 0 auto;

    color: var(--paper-item-icon-color);
  }

  .secondary {
    position: absolute;
    top: 4px;
    right: 8%;
    font-size: 80%;
  }

  value {
    float: right;
  }

  value > p {
    height: 1em;
  }

  table {
    width: 100%;
  }

  /**************
  ARROW ANIMATION
  **************/

  .blank {
    width: 54px;
    height: 4px;
    margin: 8px auto 8px auto;
    opacity: 0.2;
    background-color: var(--secondary-text-color);
  }

  .arrow-color {
    fill: var(--secondary-text-color);
    fill-opacity: 0.8;
  }

  #a-flash {
    animation: flash 3s infinite steps(1);
    fill: var(--secondary-text-color);
    fill-opacity: 0.2;
  }

  @keyframes flash {
    0%,
    66% {
      fill-opacity: 0.2;
      fill: var(--secondary-text-color);
    }
    33% {
      fill-opacity: 0.8;
      fill: var(--secondary-text-color);
    }
  }

  #a-slide-right {
    animation: slide-right 3s linear infinite both;
  }
  @keyframes slide-right {
    0% {
      -webkit-transform: translateX(0);
      transform: translateX(0);
    }
    100% {
      -webkit-transform: translateX(48px);
      transform: translateX(48px);
    }
  }
  #a-slide-left {
    animation: slide-left 3s linear infinite both;
  }
  @keyframes slide-left {
    0% {
      -webkit-transform: translateX(48px);
      transform: translateX(48px);
    }
    100% {
      -webkit-transform: translateX(0px);
      transform: translateX(0px);
    }
  }
`
Example #9
Source File: InspectorView.ts    From figspec with MIT License 4 votes vote down vote up
styles = css`
  .inspector-view {
    height: 100%;
    width: 300px;
    position: absolute;
    right: 0;
    background: white;
    border-left: 1px solid #ccc;
    overflow-y: auto;
    z-index: calc(var(--z-index) + 2);
  }

  .inspector-view h4 {
    font-size: 16px;
    margin: 0;
  }

  .style-section {
    margin-bottom: 12px;
  }

  .title-section {
    display: flex;
    align-items: center;
  }

  .code-section {
    padding: 8px;
    background: #f3f3f3;
    font-family: monospace;
  }

  .title-section svg {
    cursor: pointer;
    margin-left: auto;
  }

  .inspector-section {
    padding: 16px;
    border-bottom: 1px solid #eee;
  }

  .properties-overview {
    font-family: monospace;
    color: #518785;
  }

  .properties-overview p span {
    color: #121212;
  }

  .inspector-property {
    display: flex;
    align-items: center;
    margin-bottom: 0;
  }

  .inspector-property span {
    color: #b3b3b3;
    margin-right: 4px;
  }

  .inspector-property svg {
    margin-right: 8px;
  }

  .css-property {
    margin: 8px;
    transition: background-color ease-in-out 100ms;
  }

  .css-property:hover {
    cursor: pointer;
    background-color: #e8e8e8;
  }

  .css-value {
    color: #518785;
    margin-left: 4px;
  }

  .color-preview {
    display: inline-block;
    width: 12px;
    height: 12px;
    border: 1px solid #ccc;
    margin-left: 4px;
    vertical-align: middle;
  }

  .selectable-content {
    cursor: text;
    user-select: text;
  }
`
Example #10
Source File: ViewerMixin.ts    From figspec with MIT License 4 votes vote down vote up
ViewerMixin = <T extends Constructor<LitElement>>(
  superClass: T
): T & Constructor<IViewer & INodeSelectable & Positioned> => {
  class Viewer extends NodeSelectableMixin(PositionedMixin(superClass)) {
    @property({
      type: Number,
      attribute: "zoom-margin",
    })
    zoomMargin: number = 50;

    @property({
      type: String,
      attribute: "link",
    })
    link: string = "";

    static get styles() {
      // @ts-ignore
      const styles = super.styles;

      return extendStyles(styles, [
        css`
          :host {
            --default-error-bg: #fff;
            --default-error-fg: #333;

            --bg: var(--figspec-viewer-bg, #e5e5e5);
            --z-index: var(--figspec-viewer-z-index, 0);
            --error-bg: var(--figspec-viewer-error-bg, var(--default-error-bg));
            --error-fg: var(--figspec-viewer-error-fg, var(--default-error-fg));
            --error-color: var(--figspec-viewer-error-color, tomato);

            --guide-thickness: var(--figspec-viewer-guide-thickness, 1.5px);
            --guide-color: var(--figspec-viewer-guide-color, tomato);
            --guide-selected-color: var(
              --figspec-viewer-guide-selected-color,
              dodgerblue
            );
            --guide-tooltip-fg: var(--figspec-viewer-guide-tooltip-fg, white);
            --guide-selected-tooltip-fg: var(
              --figspec-viewer-guide-selected-tooltip-fg,
              white
            );
            --guide-tooltip-bg: var(
              --figspec-viewer-guide-tooltip-bg,
              var(--guide-color)
            );
            --guide-selected-tooltip-bg: var(
              --figspec-viewer-guide-selected-tooltip-bg,
              var(--guide-selected-color)
            );
            --guide-tooltip-font-size: var(
              --figspec-viewer-guide-tooltip-font-size,
              12px
            );

            position: relative;
            display: block;

            background-color: var(--bg);
            user-select: none;
            overflow: hidden;
            z-index: var(--z-index);
          }

          @media (prefers-color-scheme: dark) {
            :host {
              --default-error-bg: #222;
              --default-error-fg: #fff;
            }
          }

          .spec-canvas-wrapper {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            display: flex;
            flex-direction: column-reverse;
          }

          .canvas {
            position: absolute;
            top: 50%;
            left: 50%;
            flex: 1;
          }

          .rendered-image {
            position: absolute;
            top: 0;
            left: 0;
          }

          .guides {
            position: absolute;

            overflow: visible;
            stroke: var(--guide-color);
            fill: var(--guide-color);
            pointer-events: none;
            z-index: calc(var(--z-index) + 2);
          }
        `,
        Node.styles,
        ErrorMessage.styles,
        DistanceGuide.styles,
        InspectorView.styles,
        FigmaFooter.styles,
      ]);
    }

    get __images(): Record<string, string> {
      return {};
    }

    // Cached values
    #canvasSize?: Figma.Rect;
    #effectMargins?: Record<string, Margin>;
    #flattenedNodes?: readonly SizedNode[];

    constructor(...args: any[]) {
      super(...args);
    }

    deselectNode() {
      this.selectedNode = null;
    }

    get error(): string | Error | null | TemplateResult | undefined {
      if (!this.#canvasSize || !this.#flattenedNodes) {
        return ErrorMessage.ErrorMessage({
          title: "Error",
          children:
            "Please call `__updateTree/1` method with a valid parameter.",
        });
      }

      return null;
    }

    render() {
      if (this.error) {
        if (this.error instanceof Error) {
          return ErrorMessage.ErrorMessage({
            title: this.error.name || "Error",
            children: this.error.message,
          });
        }

        if (typeof this.error === "string") {
          return ErrorMessage.ErrorMessage({
            title: "Error",
            children: this.error,
          });
        }

        return this.error;
      }

      const canvasSize = this.#canvasSize!;

      const reverseScale = 1 / this.scale;

      const guideThickness = `calc(var(--guide-thickness) * ${reverseScale})`;

      const computedGuideThickness = parseFloat(
        getComputedStyle(this).getPropertyValue("--guide-thickness")
      );

      const computedGuideTooltipFontSize = parseFloat(
        getComputedStyle(this).getPropertyValue("--guide-tooltip-font-size")
      );

      return html`
        <div class="spec-canvas-wrapper" @click=${this.deselectNode}>
          <div
            class="canvas"
            style="
          width: ${canvasSize.width}px;
          height: ${canvasSize.height}px;

          transform: translate(-50%, -50%) ${this.canvasTransform.join(" ")}
        "
          >
            ${Object.entries(this.__images).map(([nodeId, uri]) => {
              const node = this.#getNodeById(nodeId);

              if (
                !node ||
                !("absoluteBoundingBox" in node) ||
                !this.#effectMargins?.[node.id]
              ) {
                return null;
              }

              const margin = this.#effectMargins[node.id];

              return html`
                <img class="rendered-image" src="${uri}"
                style=${styleMap({
                  top: `${node.absoluteBoundingBox.y - canvasSize.y}px`,
                  left: `${node.absoluteBoundingBox.x - canvasSize.x}px`,
                  marginTop: `${-margin.top}px`,
                  marginLeft: `${-margin.left}px`,
                  width:
                    node.absoluteBoundingBox.width +
                    margin.left +
                    margin.right +
                    "px",
                  height:
                    node.absoluteBoundingBox.height +
                    margin.top +
                    margin.bottom +
                    "px",
                })}"
                " />
              `;
            })}
            ${this.selectedNode &&
            Node.Tooltip({
              nodeSize: this.selectedNode.absoluteBoundingBox,
              offsetX: -canvasSize.x,
              offsetY: -canvasSize.y,
              reverseScale,
            })}
            ${svg`
            <svg
              class="guides"
              viewBox="0 0 5 5"
              width="5"
              height="5"
              style=${styleMap({
                left: `${-canvasSize.x}px`,
                top: `${-canvasSize.y}px`,
                strokeWidth: guideThickness,
              })}
            >
              ${
                this.selectedNode &&
                Node.Outline({
                  node: this.selectedNode,
                  selected: true,
                  computedThickness: computedGuideThickness * reverseScale,
                })
              }

              ${this.#flattenedNodes!.map((node) => {
                if (node.id === this.selectedNode?.id) {
                  return null;
                }

                return svg`
                  <g>
                    ${Node.Outline({
                      node,
                      computedThickness: computedGuideThickness * reverseScale,
                      onClick: this.#handleNodeClick(node),
                    })}
                    ${
                      this.selectedNode &&
                      DistanceGuide.Guides({
                        node,
                        distanceTo: this.selectedNode,
                        reverseScale,
                        fontSize: computedGuideTooltipFontSize,
                      })
                    }
                  </g>
                `;
              })}
            </svg>
          `}
          </div>
          ${InspectorView.View({
            node: this.selectedNode as FigmaNode,
            onClose: this.deselectNode,
          })}
          ${FigmaFooter.Footer(this.getMetadata())}
        </div>
      `;
    }

    // implemented in FileViewer/FrameViewer
    getMetadata() {
      return undefined;
    }

    connectedCallback() {
      super.connectedCallback();

      this.resetZoom();
    }

    updated(changedProperties: Parameters<LitElement["updated"]>[0]) {
      super.updated(changedProperties);
    }

    __updateTree(node: Figma.Node) {
      if (
        !(
          node.type === "CANVAS" ||
          node.type === "FRAME" ||
          node.type === "COMPONENT" ||
          //@ts-ignore NOTE: figma-js does not implement COMPONENT_SET type (yet?)
          node.type === "COMPONENT_SET"
        )
      ) {
        throw new Error(
          "Cannot update node tree: Top level node MUST be one of CANVAS, FRAME, COMPONENT, or COMPONENT_SET"
        );
      }

      this.#canvasSize =
        node.type === "CANVAS" ? getCanvasSize(node) : node.absoluteBoundingBox;

      this.#flattenedNodes = flattenNode(node);

      // Since above properties aren't "attribute", their changes does not
      // trigger an update. We need to manually request an update.
      this.requestUpdate();
    }

    __updateEffectMargins() {
      if (!this.__images) {
        return;
      }

      const containers = Object.keys(this.__images)
        .map(this.#getNodeById)
        .filter((n): n is NonNullable<typeof n> => !!n);

      this.#effectMargins = containers.reduce<Record<string, Margin>>(
        (margin, node) => {
          if (!("absoluteBoundingBox" in node)) {
            return margin;
          }

          return {
            ...margin,
            [node.id]: getEffectMargin(node, flattenNode(node)),
          };
        },
        {}
      );

      this.requestUpdate();
    }

    resetZoom() {
      if (this.#canvasSize) {
        // Set initial zoom level based on element size
        const { width, height } = this.#canvasSize;
        const {
          width: elementWidth,
          height: elementHeight,
        } = this.getBoundingClientRect();

        const wDiff = elementWidth / (width + this.zoomMargin * 2);
        const hDiff = elementHeight / (height + this.zoomMargin * 2);

        this.scale = Math.min(wDiff, hDiff, 1);
      }
    }

    #handleNodeClick = (node: SizedNode) => (ev: MouseEvent) => {
      ev.preventDefault();
      ev.stopPropagation();

      this.selectedNode = node;
    };

    #getNodeById = (id: string): Figma.Node | null => {
      return this.#flattenedNodes?.find((n) => n.id === id) ?? null;
    };
  }

  return Viewer;
}
Example #11
Source File: style.ts    From atomic-calendar-revive with MIT License 4 votes vote down vote up
styles: CSSResultGroup = css`
		.cal-card {
			cursor: default;
			padding: 16px;
			height: var(--card-height);
			overflow: auto;
		}


		.header {
			display: flex;
			flex-direction: row;
			justify-content: space-between;
			vertical-align: middle;
			align-items: center;
			margin: 0 8px 0 2px;
		}

		.headerName {
			font-family: var(--paper-font-headline_-_font-family);
			-webkit-font-smoothing: var(--paper-font-headline_-_-webkit-font-smoothing);
			font-size: var(--paper-font-headline_-_font-size);
			font-weight: var(--paper-font-headline_-_font-weight);
			letter-spacing: var(--paper-font-headline_-_letter-spacing);
			line-height: var(--paper-font-headline_-_line-height);
			text-rendering: var(--paper-font-common-expensive-kerning_-_text-rendering);
			opacity: var(--dark-primary-opacity);
			padding: 4px 8px 12px 0px;
			float: left;
		}

		.headerDate {
			font-size: var(--paper-font-headline_-_font-size);
			font-size: 1.3rem;
			font-weight: 400;
			color: var(--primary-text-color);
			padding: 4px 8px 12px 0px;
			line-height: var(--paper-font-headline_-_line-height);
			float: right;
		}

		table {
			color: black;
			margin-left: 0px;
			margin-right: 0px;
			border-spacing: 10px 5px;
			border-collapse: collapse;
		}

		td {
			padding: 4px 0 4px 0;
		}

		.daywrap {
			padding: 2px 0 4px 0;
			border-top: 1px solid;
		}

		tr {
			width: 100%;
		}

		.event-left {
			padding: 4px 10px 3px 8px;
			text-align: center;
			vertical-align: top;
		}

		.event-leftCurrentDay {
			width: 40px;
		}

		.week-number{
			color: var(--primary-color);
			-webkit-border-radius: 5px;
			border-radius: 5px;
			border: 2px solid;
			padding: 0 4px;
			margin: 5px 0;
			line-height: 16px;
			width: 100%;
			text-align: center;
		}

		.daywrap > td {
			padding-top: 8px;
		}

		.event-right {
			display: flex;
			justify-content: space-between;
			padding: 0px 5px 0 5px;
		}

		.event-description {
			display: flex;
			justify-content: space-between;
			padding: 0px 5px 0 5px;
			color: var(--description-color);
			font-size: var(--description-size);
			overflow-wrap: anywhere;
			user-select: text;
		}
		.hidden-events {
			color: var(--primary-text-color);
		}

		.hoursHTML {
			color: var(--time-color);
			font-size: var(--time-size) !important;
			float: left;
		}

		.relativeTime {
			color: var(--time-color);
			font-size: var(--time-size) !important;
			float: right;
			padding-left: 5px;
		}

		.event-main {
			flex-direction: row nowrap;
			display: inline-block;
			vertical-align: top;
		}

		.event-title {
			font-size: var(--event-title-size);
			user-select: text;
		}

		.event-titleRunning {
			font-size: var(--event-title-size);
		}

		.event-location {
			text-align: right;
			display: inline-block;
			vertical-align: top;
			user-select: text;
			overflow-wrap: anywhere;
		}

		.event-location-icon {
			--mdc-icon-size: 15px;
			color: var(--location-icon-color);
			height: 15px;
			width: 15px;
			margin-top: -2px;
		}

		.location-link {
			text-decoration: none;
			color: var(--accent-color);
			font-size: var(--location-link-size);
			user-select: text;
		}

		.event-circle {
			width: 10px;
			height: 10px;
			margin-left: -2px;
		}

		hr.event {
			color: var(--event-bar-color);
			margin: -8px 0px 2px 0px;
			border-width: 1px 0 0 0;
		}

		.event-cal-name {
		}
		.event-cal-name-icon {
			--mdc-icon-size: 15px;
		}

		.eventBar {
			margin-top: -10px;
			margin-bottom: 0px;
		}

		progress {
			border-radius: 2px;
			width: 100%;
			height: 3px;
			box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.2);
		}
		progress::-webkit-progress-bar {
			background-color: var(--progress-bar-bg);
			border-radius: 2px;
		}
		progress::-webkit-progress-value{
			background-color: var(--progress-bar);
			border-radius: 2px;
		}

		ha-button-toggle-group {
			color: var(--primary-color);
		}

		.calTitleContainer {
			padding: 0px 8px 8px 8px;
		}

		.calIconSelector {
			--mdc-icon-button-size: var(--button-toggle-size, 48px);
			--mdc-icon-size: var(--button-toggle-icon-size, 24px);
			border-radius: 4px 4px 4px 4px;
			border: 1px solid var(--primary-color);
			float: right;
			display: inline-flex;
			text-align: center;
		}
		.calDateSelector {
			--mdc-icon-button-size: var(--button-toggle-size, 48px);
			--mdc-icon-size: var(--button-toggle-icon-size, 24px);
			display: inline-flex;
			text-align: center;
		}
		div.calIconSelector ha-icon-button,
		div.calDateSelector ha-icon-button {
			color: var(--primary-color);
		}
		div.calDateSelector .prev {
			border: 1px solid var(--primary-color);
			border-radius: 3px 0px 0px 3px;
		}
		div.calDateSelector .date {
			border: 1px solid var(--primary-color);
			border-radius: 0px 0px 0px 0px;
			padding: 4px 2px 2px 4px;
		}
		div.calDateSelector .next {
			border: 1px solid var(--primary-color);
			border-radius: 0px 4px 4px 0px;
		}

		ha-icon-button {
			--mdc-icon-size: 20px;
			--mdc-icon-button-size: 25px;

		}

		table.cal {
			margin-left: 0px;
			margin-right: 0px;
			border-spacing: 10px 5px;
			border-collapse: collapse;
			width: 100%;
			table-layout: fixed;
		}

		thead th.cal {
			color: var(--secondary-text-color);
			border: 1px solid --cal-border-color;
			font-size: 11px;
			font-weight: 400;
			text-transform: uppercase;
		}

		td.cal {
			padding: 5px 5px 5px 5px;
			border: 1px solid var(--cal-grid-color);
			text-align: center;
			vertical-align: middle;
			width: 100%;
			color: var(--cal-day-color);
		}

		.calDay {
			height: 38px;
			font-size: 95%;
			max-width: 38px;
			margin: auto;
		}

		.calDay.currentDay {
			height: 20px;
			background-color: var(--primary-color);
			border-radius: 50%;
			display: inline-block;
			text-align: center;
			white-space: nowrap;
			width: max-content;
			min-width: 20px;
			line-height: 140%;
			color: var(--text-primary-color) !important;
		}

		tr.cal {
			width: 100%;
		}

		.calTableContainer {
			width: 100%;
		}

		.summary-div {
			font-size: 90%;
		}

		.summary-event-div {
			padding-top: 3px;
		}

		.bullet-event-div-accepted {
			-webkit-border-radius: 8px;
			border-radius: 8px;
			border: 4px solid;
			height: 0;
			width: 0;
			display: inline-block;
			vertical-align: middle;
		}

		.bullet-event-div-declined {
			-webkit-border-radius: 8px;
			border-radius: 8px;
			border: 1px solid;
			height: 6px;
			width: 6px;
			display: inline-block;
			vertical-align: middle;
		}

		.bullet-event-span {
			overflow: hidden;
			white-space: nowrap;
			display: inline-block;
			vertical-align: middle;
			margin: 0 5px;
			text-decoration: none !important;
		}

		.summary-fullday-div-accepted {
			-webkit-border-radius: 5px;
			border-radius: 5px;
			border: 2px solid;
			border-left: 7px solid;
			padding: 0 4px;
			margin: 5px 0;
			line-height: 16px;
		}

		.summary-fullday-div-declined {
			-webkit-border-radius: 5px;
			border-radius: 5px;
			border: 1px solid;
			padding: 0 4px;
			margin: 5px 0;
			height: 18px;
			line-height: 16px;
		}

		.calDescription {
			display: flex;
			justify-content: space-between;
			padding: 0px 5px 0 5px;
			color: var(--description-color);
			font-size: var(--description-size);
		}

		.calMain {
			flex-direction: row nowrap;
			display: inline-block;
			vertical-align: top;
		}

		.calIcon {
			--mdc-icon-size: 10px;
			width: 10px;
			height: 10px;
			padding-top: 0px;
			margin-top: -10px;
			margin-right: -1px;
			margin-left: -1px;
		}

		.eventIcon {
			--mdc-icon-size: 15px !important;
			padding-top: 0px;
			margin-top: -10px;
			margin-right: -1px;
			margin-left: -1px;
		}

		.loader {
			border: 4px solid #f3f3f3;
			border-top: 4px solid grey;
			border-radius: 50%;
			width: 14px;
			height: 14px;
			animation: spin 2s linear infinite;
			float: left;
		}

		@keyframes spin {
			0% {
				transform: rotate(0deg);
			}
			100% {
				transform: rotate(360deg);
			}
		}
`