
* {
    box-sizing: border-box;
  }

  /* App-level Discord-inspired dark theme. */
  
  body {
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', sans-serif;
    margin: 25px;
    background-color: #36393F;
    color: #DCDDDE;
  }
  
  main {
    display:block;
    height:175px;
  }
  
  header {
    border-bottom: 2px solid #5865F2;
  }
  
  h1 {
    font-weight: 600;
    color: #FFFFFF;
    font-size: 32px;
  }
  
  .bold {
    font-weight: 600;
  }
  
  p {
    max-width: 600px;
  }
  
  
  li {
    margin-bottom: 5px;
  }
  
  footer {
    padding-top: 25px;
    border-top: 1px solid #2C2F33;
  }
  
  footer a {
    float:left;
    margin:5px;
    color: #5865F2;
  }
  
  .pet-image {
    height:250px;
    border-radius: 8px;
    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);
  }

  /* Dashboard typography and value emphasis. */
  
  .dashboard div {
    display:block;
    padding: 8px 0;
    font-size: 16px;
  }
  
  .dashboard div strong {
    color: #FFFFFF;
  }

  .treat-reward {
    display: none;
    margin-top: 10px;
  }

  .treat-reward.visible {
    display: block;
    animation: reward-fade-in 0.35s ease-out;
  }

  .treat-image {
    width: 72px;
    height: 72px;
    object-fit: contain;
  }
  
  .pet-image-container {
    float:left;
    padding:10px;
  }
  
  .dashboard {
    float:left;
    padding:20px;
    background-color: #2C2F33;
    border-radius: 8px;
    box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);
  }
  
  .button-container {
    margin-top:20px;
    display: flex;
    gap: 10px;
    flex-wrap: wrap;
  }

  .call-audio-controls {
    margin-top: 14px;
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 14px;
  }

  .call-audio-controls input[type="range"] {
    width: 120px;
    accent-color: #5865F2;
  }

  .mute-toggle {
    display: inline-flex;
    align-items: center;
    gap: 6px;
  }

  /* Shared action button style and interaction states. */
  
  .button-container button {
    width: 100px;
    padding: 10px;
    text-align: center;
    font-size:15px;
    font-weight: 500;
    background-color: #5865F2;
    border: none;
    border-radius: 4px;
    cursor:pointer;
    color: #FFFFFF;
    transition: all 0.2s ease;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
  }

  .button-container button:hover {
    background-color: #4752C4;
    box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
    transform: translateY(-2px);
  }

  .button-container button:active {
    transform: translateY(0);
  }

  /* Per-action keyframe animations for Treat/Play/Exercise/Call. */

  @keyframes treat-bounce {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-8px); }
  }

  @keyframes play-spin {
    0% { transform: rotate(0deg) scale(1); }
    50% { transform: rotate(180deg) scale(1.05); }
    100% { transform: rotate(360deg) scale(1); }
  }

  @keyframes exercise-pulse {
    0%, 100% { transform: scale(1); }
    50% { transform: scale(1.15); }
  }

  @keyframes call-slide {
    0%, 100% { transform: translateX(0); }
    25% { transform: translateX(-6px); }
    75% { transform: translateX(6px); }
  }

  @keyframes reward-fade-in {
    0% { opacity: 0; transform: translateY(4px); }
    100% { opacity: 1; transform: translateY(0); }
  }

  /* Classes toggled from JavaScript to trigger button animations. */

  .treat-button.animating {
    animation: treat-bounce 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
  }

  .play-button.animating {
    animation: play-spin 0.6s cubic-bezier(0.34, 1.56, 0.64, 1);
  }

  .exercise-button.animating {
    animation: exercise-pulse 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
  }

  .call-button.animating {
    animation: call-slide 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
  }