Você pode usar a diferença de números de linha para definir os grupos:
select Shade, count(*) as amount
from (select t.*,
row_number() over (order by level) as seqnum,
row_number() over (partition by shade order by level) as seqnum_s
from t
) t
group by Shade, (seqnum - seqnum_s);
É um pouco difícil explicar por que isso funciona. Se você observar os resultados da subconsulta, fica óbvio porque a diferença entre os dois
row_number()
os valores identificam grupos sequenciais.