Can't Figure Out How to Style a Custom Card

I’m building my first custom card and started with with example card from the custom card docs. I’m able to get my card to display a bunch of sensors, but I can’t figure out how to style the output. No matter what I’ve tried, I just get a list of the sensor data. Here’s the current card code:

class SimpleWeatherClock extends HTMLElement {
  // Whenever the state changes, a new `hass` object is set. Use this to
  // update your content.
  set hass(hass) {
    // Initialize the content if it's not there yet.
    if (!this.cDiv) {
      const style = document.createElement('style');
      style.innerText = `
        ha-card {
          display: flex;
          width: 100%;
          height: 100vh;
          border-width: 0px;
          padding: 0px;
          background-color: grey;
          justify-content: center;
        }
        
        .card-content {
          display: grid;
          grid-template-columns: 1fr 1fr 1fr;
          grid-template-rows: 1fr 1fr;
          gap: 0px 0px;
          grid-auto-flow: row;
          grid-template-areas:
            "clock clock clock"
            "info info info";
          width: 800px;
          height: 480px;
          background-color: #000000;
          font-family: 'IBM Plex Mono', serif;
        }
        
        .clock {
          grid-area: clock;
          justify-self: center;
          align-self: start;
          color: #dddddd;
          font-size: 260px;
          margin: -50px;
        }
        
        .info {
          display: grid;
          grid-template-columns: 1fr 1fr 1fr;
          grid-template-rows: 1fr 1fr;
          gap: 0px 0px;
          grid-auto-flow: row;
          grid-template-areas:
            "info-top info-top info-top"
            "info-bottom info-bottom info-bottom";
          grid-area: info;
          padding-left: 18px;
          padding-right: 18px;
          margin-top: -10px;
        }
        
        .info-top {
          display: grid;
          grid-template-columns: 1fr 1fr 1fr;
          grid-template-rows: 1fr;
          gap: 0px 0px;
          grid-auto-flow: row;
          grid-template-areas:
            "info-top-left info-top-center info-top-right";
          grid-area: info-top;
        }
        
        .info-top-left {
          grid-area: info-top-left;
          justify-self: start;
          align-self: end;
          color: #008001;
          font-size: 85px;
        }
        
        .info-top-center {
          grid-area: info-top-center;
          justify-self: center;
          align-self: end;
          color: #fe0000;
          font-size: 85px;
        }
        
        .info-top-right {
          grid-area: info-top-right;
          justify-self: end;
          align-self: end;
          color: #bdb76b;
          font-size: 85px;
        }
        
        .info-bottom {
          display: grid;
          grid-template-columns: 1fr 1fr 1fr;
          grid-template-rows: 1fr;
          gap: 0px 0px;
          grid-auto-flow: row;
          grid-template-areas:
            "info-bottom-left info-bottom-center info-bottom-right";
          grid-area: info-bottom;
          margin-top: -20px;
        }
        
        .info-bottom-left {
          grid-area: info-bottom-left;
          justify-self: start;
          align-self: start;
          color: #008001;
          font-size: 85px;
        }
        
        .info-bottom-center {
          grid-area: info-bottom-center;
          justify-self: center;
          align-self: start;
          color: #1f90ff;
          font-size: 85px;
        }
        
        .info-bottom-right {
          grid-area: info-bottom-right;
          justify-self: end;
          align-self: start;
          color: #bdb76b;
          font-size: 85px;
        }
        
        small {
          opacity: 0.7;
        }
        `;
      document.head.appendChild(style);
      this.innerHTML = `
        <ha-card>
          <div class="card-content">
            <div class="clock"></div>
            <div class="info">
              <div class="info-top">
                <div class="info-top-left"></div>
                <div class="info-top-center"></div>
                <div class="info-top-right"></div>
              </div>
              <div class="info-bottom">
                <div class="info-bottom-left"></div>
                <div class="info-bottom-center"></div>
                <div class="info-bottom-right"></div>
              </div>
            </div>
        </ha-card>
      `;
      this.cDiv = this.querySelector('.clock');
      this.tlDiv = this.querySelector('.info-top-left');
      this.tcDiv = this.querySelector('.info-top-center');
      this.trDiv = this.querySelector('.info-top-right');
      this.blDiv = this.querySelector('.info-bottom-left');
      this.bcDiv = this.querySelector('.info-bottom-center');
      this.brDiv = this.querySelector('.info-bottom-right');
    }

    const c = hass.states[this.config.clock];
    const tl = hass.states[this.config.topleft];
    const tc = hass.states[this.config.topcenter];
    const tr = hass.states[this.config.topright];
    const bl = hass.states[this.config.bottomleft];
    const bc = hass.states[this.config.bottomcenter];
    const br = hass.states[this.config.bottomright];
    
    this.cDiv.innerHTML = `${c.state}`;
    this.tlDiv.innerHTML = `${tl.state}`;
    this.tcDiv.innerHTML = `${tc.state}`;
    this.trDiv.innerHTML = `${tr.state}`;
    this.blDiv.innerHTML = `${bl.state}`;
    this.bcDiv.innerHTML = `${bc.state}`;
    this.brDiv.innerHTML = `${br.state}`;
  }

  // The user supplied configuration. Throw an exception and Home Assistant
  // will render an error card.
  setConfig(config) {
    if (!config.clock) {
      throw new Error('Please define clock entity');
    }
    if (!config.topleft) {
      throw new Error('Please define top left entity');
    }
    if (!config.topcenter) {
      throw new Error('Please define top center entity');
    }
    if (!config.topright) {
      throw new Error('Please define top right entity');
    }
    if (!config.bottomleft) {
      throw new Error('Please define bottom left entity');
    }
    if (!config.bottomcenter) {
      throw new Error('Please define bottom center entity');
    }
    if (!config.bottomright) {
      throw new Error('Please define bottom right entity');
    }
    this.config = config;
  }

  // The height of your card. Home Assistant uses this to automatically
  // distribute all cards over the available columns.
  getCardSize() {
    return 1;
  }
}

customElements.define('simple-weather-clock', SimpleWeatherClock);

Just in case anyone ever stumbles on this hoping for an answer, I figured out a way to do it.

class SimpleWeatherClock extends HTMLElement {
  set hass(hass) {
    if (!this.cDiv) {
      const styles = `
        <style>
        ha-card {
          display: flex;
          height: 100vh;
          border-width: 0px;
          border-radius: 0px;
          padding: 0px;
          background-color: ${this.config.background};
          justify-content: center;
        }
        
        .card-content {
          width: ${this.config.displaywidth};
          height: ${this.config.displayheight};
          background-color: ${this.config.background};
          font-family: ${this.config.font}, serif;
          font-weight: ${this.config.fontweight};
          display: grid;
          grid-template-columns: 1fr 1fr 1fr;
          grid-template-rows: 1fr 1fr;
          gap: 0px 0px;
          grid-auto-flow: row;
          grid-template-areas:
            "clock clock clock"
            "info info info";
        }
        .info-display {
        }

        .clock {
          grid-area: clock;
          justify-self: center;
          align-self: baseline;
          color: ${this.config.clockcolor};
          font-size: ${this.config.clockfontsize};
          height: 160px;
          padding-top: ${100 + this.config.clockadjust}px;
        }
        
        .info {
          display: grid;
          grid-template-columns: 1fr 1fr 1fr;
          grid-template-rows: 1fr 1fr;
          gap: 0px 0px;
          grid-auto-flow: row;
          grid-template-areas:
            "info-top info-top info-top"
            "info-bottom info-bottom info-bottom";
          grid-area: info;
          padding-left: 15px;
          padding-right: 15px;
          margin-top: ${0 - this.config.infoadjust}px;
        }
        
        .info-top {
          display: grid;
          grid-template-columns: 1fr 1fr 1fr;
          grid-template-rows: 1fr;
          gap: 0px 0px;
          grid-auto-flow: row;
          grid-template-areas:
            "info-top-left info-top-center info-top-right";
          grid-area: info-top;
        }
        
        .info-top-left {
          grid-area: info-top-left;
          justify-self: start;
          align-self: start;
          color: ${this.config.topleftcolor};
          font-size: ${this.config.infofontsize};
          padding-top: 30px;
          height: 55px;
        }
        
        .info-top-center {
          grid-area: info-top-center;
          justify-self: center;
          align-self: start;
          color: ${this.config.topcentercolor};
          font-size: ${this.config.infofontsize};
          padding-top: 30px;
          height: 55px;
        }
        
        .info-top-right {
          grid-area: info-top-right;
          justify-self: end;
          align-self: start;
          color: ${this.config.toprightcolor};
          font-size: ${this.config.infofontsize};
          padding-top: 30px;
          height: 55px;
        }
        
        .info-bottom {
          display: grid;
          grid-template-columns: 1fr 1fr 1fr;
          grid-template-rows: 1fr;
          gap: 0px 0px;
          grid-auto-flow: row;
          grid-template-areas:
            "info-bottom-left info-bottom-center info-bottom-right";
          grid-area: info-bottom;
          margin-top: ${-20 - this.config.infobottomadjust}px;
        }
        
        .info-bottom-left {
          grid-area: info-bottom-left;
          justify-self: start;
          align-self: start;
          color: ${this.config.bottomleftcolor};
          font-size: ${this.config.infofontsize};
          padding-top: 30px;
          height: 55px;
        }
        
        .info-bottom-center {
          grid-area: info-bottom-center;
          justify-self: center;
          align-self: start;
          color: ${this.config.bottomcentercolor};
          font-size: ${this.config.infofontsize};
          padding-top: 30px;
          height: 55px;
        }
        
        .info-bottom-right {
          grid-area: info-bottom-right;
          justify-self: end;
          align-self: start;
          color: ${this.config.bottomrightcolor};
          font-size: ${this.config.infofontsize};
          padding-top: 30px;
          height: 55px;
        }
        
        small {
          opacity: ${this.config.opacity};
        }
        </style>
        `;
      this.innerHTML = `
         ${styles}
        <ha-card>
          <div class="card-content">
            <div class="clock"></div>
            <div class="info">
              <div class="info-top">
                <div class="info-top-left"></div>
                <div class="info-top-center"></div>
                <div class="info-top-right"></div>
              </div>
              <div class="info-bottom">
                <div class="info-bottom-left"></div>
                <div class="info-bottom-center"></div>
                <div class="info-bottom-right"></div>
              </div>
            </div>
        </ha-card>
      `;
      this.cDiv = this.querySelector('.clock');
      this.tlDiv = this.querySelector('.info-top-left');
      this.tcDiv = this.querySelector('.info-top-center');
      this.trDiv = this.querySelector('.info-top-right');
      this.blDiv = this.querySelector('.info-bottom-left');
      this.bcDiv = this.querySelector('.info-bottom-center');
      this.brDiv = this.querySelector('.info-bottom-right');
    }

    const c = hass.states[this.config.clock].state;
    const tl = this.setStateText(this.config.topleft, hass)
    const tc = this.setStateText(this.config.topcenter, hass);
    const tr = this.setStateText(this.config.topright, hass);
    const bl = this.setStateText(this.config.bottomleft, hass);
    const bc = this.setStateText(this.config.bottomcenter, hass);
    const br = this.setStateText(this.config.bottomright, hass);
    
    this.cDiv.innerHTML = `${c}`;
    this.tlDiv.innerHTML = `${tl}`;
    this.tcDiv.innerHTML = `${tc}`;
    this.trDiv.innerHTML = `${tr}`;
    this.blDiv.innerHTML = `${bl}`;
    this.bcDiv.innerHTML = `${bc}`;
    this.brDiv.innerHTML = `${br}`;
  }
  
  setStateText(entity, hass) {
    if (!entity) {
      return ``
    }
    const pe = hass.states[entity]
    const es = parseFloat(pe.state).toFixed(0);
    const m = pe.attributes.unit_of_measurement || "";
    return `${es}<small>${m}</small>`
  }

  setConfig(config) {
    if (!config.clock) {
      throw new Error('Please define clock entity');
    }
    const dcfs = 260;
    const difs = 85;

    const cardConfig = Object.assign({}, config);
    if (!cardConfig.background) cardConfig.background = "#000000";
    if (!cardConfig.font) cardConfig.font = "IBM Plex Mono";
    if (!cardConfig.fontweight) cardConfig.fontweight = 700;
    if (!cardConfig.opacity) cardConfig.opacity = 0.7;
    if (!cardConfig.clockcolor) cardConfig.clockcolor = "#dddddd";
    if (!cardConfig.topleftcolor) cardConfig.topleftcolor = "#008001";
    if (!cardConfig.topcentercolor) cardConfig.topcentercolor = "#fe0000";
    if (!cardConfig.toprightcolor) cardConfig.toprightcolor = "#bdb76b";
    if (!cardConfig.bottomleftcolor) cardConfig.bottomleftcolor = "#008001";
    if (!cardConfig.bottomcentercolor) cardConfig.bottomcentercolor = "#1f90ff";
    if (!cardConfig.bottomrightcolor) cardConfig.bottomrightcolor = "#bdb76b";
    if (!cardConfig.displaywidth) cardConfig.displaywidth = "800px";
    if (!cardConfig.displayheight) cardConfig.displayheight = "480px";
    if (!cardConfig.clockfontsize) {
      cardConfig.clockfontsize = dcfs + "px";
      cardConfig.clockadjust = 0;
    } else {
      cardConfig.clockadjust = Math.round((Number(cardConfig.clockfontsize.slice(0,-2)) - dcfs)/3.0)
    }
    if (!cardConfig.infofontsize) {
      cardConfig.infofontsize = difs + "px";
      cardConfig.infoadjust = 0;
      cardConfig.infobottomadjust = 0;
    } else {
      cardConfig.infoadjust = Math.round((Number(cardConfig.infofontsize.slice(0,-2)) - difs)/2.0);
      cardConfig.infobottomadjust = Number(cardConfig.infofontsize.slice(0,-2)) - difs;
    }

    this.config = cardConfig;
    

  }

  getCardSize() {
    return 1;
  }
}

customElements.define('simple-weather-clock', SimpleWeatherClock);