| <!DOCTYPE html> | 
 | <title>CSS Transitions Test: @starting-style inside size @container</title> | 
 | <link rel="help" href="https://drafts.csswg.org/css-transitions-2/#defining-before-change-style-the-starting-style-rule"> | 
 | <link rel="help" href="https://drafts.csswg.org/css-conditional-5/#animated-containers"> | 
 | <script src="/resources/testharness.js"></script> | 
 | <script src="/resources/testharnessreport.js"></script> | 
 | <script src="/css/css-transitions/support/helper.js"></script> | 
 | <body> | 
 | </body> | 
 | <style> | 
 |   #container { | 
 |     container-type: inline-size; | 
 |     width: 100px; | 
 |   } | 
 |   #target { | 
 |     transition-property: background-color; | 
 |     transition-duration: 100s; | 
 |     transition-timing-function: steps(2, start); | 
 |     background-color: lime; | 
 |     display: none; | 
 |   } | 
 |   @container (width > 300px) { | 
 |     @starting-style { | 
 |       #target { background-color: white; } | 
 |     } | 
 |   } | 
 |   @container ((width > 200px) and (width < 300px)) { | 
 |     #target { | 
 |       display: block; | 
 |     } | 
 |     @starting-style { | 
 |       #target { background-color: white; } | 
 |     } | 
 |   } | 
 |   @container (width < 200px) { | 
 |     @starting-style { | 
 |       #target { background-color: red; } | 
 |     } | 
 |   } | 
 | </style> | 
 | <script> | 
 |   function setup(test) { | 
 |     let container = document.createElement("div"); | 
 |     container.id = "container"; | 
 |     document.body.appendChild(container); | 
 |  | 
 |     let target = document.createElement("div"); | 
 |     target.id = "target"; | 
 |     container.appendChild(target); | 
 |  | 
 |     test.add_cleanup(() => { | 
 |       target.remove(); | 
 |       container.remove(); | 
 |     }); | 
 |     return [container, target]; | 
 |   } | 
 |  | 
 |   promise_test(async t => { | 
 |     let [container, target] = setup(t); | 
 |     await waitForAnimationFrames(2); | 
 |     assert_equals(getComputedStyle(target).backgroundColor, "rgb(0, 255, 0)", | 
 |                   "No transition while display:none"); | 
 |     container.style.width = "400px"; | 
 |     target.style.display = "block"; | 
 |     await waitForAnimationFrames(2); | 
 |     assert_equals(getComputedStyle(target).backgroundColor, "rgb(128, 255, 128)", | 
 |                   "@starting-style based on the size query evaluation from " + | 
 |                   "the same frame"); | 
 |   }, "Triggered transition from first style update based on up-to-date " + | 
 |      "container query"); | 
 |  | 
 |   promise_test(async t => { | 
 |     let [container, target] = setup(t); | 
 |     await waitForAnimationFrames(2); | 
 |     assert_equals(getComputedStyle(target).backgroundColor, "rgb(0, 255, 0)", | 
 |                   "No transition while display:none"); | 
 |     container.style.width = "250px"; | 
 |     await waitForAnimationFrames(2); | 
 |     assert_equals(getComputedStyle(target).backgroundColor, "rgb(128, 255, 128)", | 
 |                   "@starting-style based on the size query evaluation from " + | 
 |                   "the same frame"); | 
 |   }, "Triggered transition from the display change inside the up-to-date " + | 
 |      "container query"); | 
 | </script> |